From 7b462f7c571b5909ad2fd0ab941bd17c7bb8e0d8 Mon Sep 17 00:00:00 2001 From: Nicolas Aguirre Date: Thu, 6 Oct 2011 05:54:34 +0000 Subject: [PATCH] PROTO/equate: Cleanup code, and add bracket support. SVN revision: 63874 --- data/Makefile.am | 8 +- data/equate.desktop | 11 ++ data/equate.edc | 24 ++-- data/equate.png | Bin 0 -> 23817 bytes src/Equate.h | 68 +++++----- src/Makefile.am | 8 +- src/calc.h | 1 + src/calc_parse.c | 1 + src/edje.c | 299 -------------------------------------------- src/gui.c | 43 ------- src/gui.h | 12 -- src/main.c | 234 ++++++++++++++++++++++++++++++++-- 12 files changed, 290 insertions(+), 419 deletions(-) create mode 100644 data/equate.desktop create mode 100644 data/equate.png delete mode 100644 src/edje.c delete mode 100644 src/gui.c delete mode 100644 src/gui.h diff --git a/data/Makefile.am b/data/Makefile.am index 93fffbd..a821443 100644 --- a/data/Makefile.am +++ b/data/Makefile.am @@ -18,7 +18,13 @@ all: $(EDCS) .edc.edj: $(EDJE_CC) $(EDJE_FLAGS) $< $@ -EXTRA_DIST = $(EDCS) +desktopdir = $(datadir)/applications +desktop_DATA = equate.desktop + +icondir = $(datadir)/icons +icon_DATA = equate.png + +EXTRA_DIST = $(EDCS) equate.png equate.desktop clean-local: rm -f $(EDJS) diff --git a/data/equate.desktop b/data/equate.desktop new file mode 100644 index 0000000..1115a94 --- /dev/null +++ b/data/equate.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Type=Application +Name=Equate +GenericName=Calculator +Comment=EFL Calculator +Icon=equate +TryExec=equate +Exec=equate +Terminal=false +Categories=X-ENLIGHTENMENT;Utility; +StartupWMClass=equate diff --git a/data/equate.edc b/data/equate.edc index 3be7973..52955ad 100644 --- a/data/equate.edc +++ b/data/equate.edc @@ -52,7 +52,7 @@ group { name: "button/"pname; \ /* color3: 0 0 0 30; */ \ text { \ font: "Sans"; \ - size: 20; \ + size: 25; \ min: 1 1; \ align: 0.5 0.5; \ text_class: "button"; \ @@ -166,20 +166,20 @@ collections { BUTTON("four", "4", "NUM_4"); BUTTON("five", "5", "NUM_5"); BUTTON("six", "6", "NUM_6"); - //BUTTON("nine", "9", "OP_DIV"); + BUTTON("obrak", "(", "OP_OBRAK"); + BUTTON("one", "1", "NUM_1"); BUTTON("two", "2", "NUM_2"); BUTTON("three", "3", "NUM_3"); - BUTTON("equal", "=", "OP_EQU"); + BUTTON("cbrak", ")", "OP_CBRAK"); BUTTON("zero", "0", "NUM_0"); BUTTON("point", ".", "OP_DEC"); - + BUTTON("equal", "=", "OP_EQU"); group { name: "Main"; - min: 200 296; - max: 200 296; + parts { part { name: "bg"; @@ -217,7 +217,7 @@ collections { { text: ""; font: "Sans"; - size: 25; + size: 30; //fit: 0 0; min: 1 1; align: 1.0 0.5; @@ -230,7 +230,7 @@ collections { type : TABLE; description { state : "default" 0.0; - fixed: 1 1; + fixed: 0 1; rel1.to: "EquateAnswer"; rel1.relative: 0 1; table { @@ -253,14 +253,16 @@ collections { BUTTON_TABLE_ITEM("button/four", 0, 2, 1, 1); BUTTON_TABLE_ITEM("button/five", 1, 2, 1, 1); BUTTON_TABLE_ITEM("button/six", 2, 2, 1, 1); - BUTTON_TABLE_ITEM("button/equal", 3, 2, 1, 3); + BUTTON_TABLE_ITEM("button/obrak", 3, 2, 1, 1); BUTTON_TABLE_ITEM("button/one", 0, 3, 1, 1); BUTTON_TABLE_ITEM("button/two", 1, 3, 1, 1); BUTTON_TABLE_ITEM("button/three", 2, 3, 1, 1); + BUTTON_TABLE_ITEM("button/cbrak", 3, 3, 1, 1); - BUTTON_TABLE_ITEM("button/zero", 0, 4, 2, 1); - BUTTON_TABLE_ITEM("button/point", 2, 4, 1, 1); + BUTTON_TABLE_ITEM("button/zero", 0, 4, 1, 1); + BUTTON_TABLE_ITEM("button/point", 1, 4, 1, 1); + BUTTON_TABLE_ITEM("button/equal", 2, 4, 2, 1); } } } diff --git a/data/equate.png b/data/equate.png new file mode 100644 index 0000000000000000000000000000000000000000..32022cf272a65a4b5a37409225036ee806e2e7b0 GIT binary patch literal 23817 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 a00RIu;d&6q9FFGz0000 -#include -#include -#include -#include -#include -#include -#include - #include "config.h" +#include "calc.h" #define BUFLEN 100 -/* structures */ -typedef struct -{ - Ecore_Evas *ee; - Evas_Object *edje; -} Gui; +#define EQ_EXIT 1 +#define OP_CLR 2 +#define OP_DIV 3 +#define OP_MUT 4 +#define OP_ADD 5 +#define OP_SUB 6 +#define OP_EQU 7 +#define OP_DEC 8 +#define OP_SIN 9 +#define OP_COS 10 +#define OP_TAN 11 +#define OP_ROOT 12 +#define OP_POW 13 +#define OP_LOG 14 +#define OP_LN 15 +#define OP_EXP 16 +#define OP_OBRAK 17 +#define OP_CBRAK 18 -typedef enum -{ - DEFAULT, - BASIC, - SCI, - EDJE -} Mode; +#define NUM_0 20 +#define NUM_1 21 +#define NUM_2 22 +#define NUM_3 23 +#define NUM_4 24 +#define NUM_5 25 +#define NUM_6 26 +#define NUM_7 27 +#define NUM_8 28 +#define NUM_9 29 +#define NUM_PI 30 -typedef struct -{ - Mode mode; - char *theme; -} Conf; - -typedef struct -{ - Gui gui; - Conf conf; -} Equate; - -void equate_init(Equate * equate); -void equate_quit(); - -#include "gui.h" diff --git a/src/Makefile.am b/src/Makefile.am index 59b6204..e982af9 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -5,19 +5,17 @@ AM_CPPFLAGS = \ -I. \ -I$(top_srcdir)/lib \ -I$(top_builddir)/lib \ --DPACKAGE_PKGDATA_DIR=\"$(pkgdatadir)\" \ +-DPACKAGE_DATA_DIR=\"$(pkgdatadir)\" \ +-DPACKAGE_BIN_DIR=\"$(pkgbindir)\" \ @EQUATE_CFLAGS@ bin_PROGRAMS = equate equate_SOURCES = \ -gui.c \ calc_parse.c \ -edje.c \ main.c \ Equate.h \ -calc.h \ -gui.h +calc.h equate_LDADD = @EQUATE_LIBS@ diff --git a/src/calc.h b/src/calc.h index 9e49c08..cd8e190 100644 --- a/src/calc.h +++ b/src/calc.h @@ -5,6 +5,7 @@ void equate_clear(void); int equate_append(char *str); double equate_eval(void); +const char *equate_string_get(void); /* Fonctions type. */ typedef double (*func_t) (double); diff --git a/src/calc_parse.c b/src/calc_parse.c index faae4a5..88cf797 100644 --- a/src/calc_parse.c +++ b/src/calc_parse.c @@ -75,6 +75,7 @@ #line 1 "calc.y" #include /* For math functions, cos(), sin(), etc. */ +#include "calc.h" #include "Equate.h" #define YYERROR_VERBOSE diff --git a/src/edje.c b/src/edje.c deleted file mode 100644 index 7d8e6cb..0000000 --- a/src/edje.c +++ /dev/null @@ -1,299 +0,0 @@ -#include "Equate.h" - -/** - * Edjification by atmos and digitalfallout - * edje_signals.[ch] handle the edje part of equate. Translate signals - * our edje emits into the backend. All the operators, functions, and - * input values must have a #define'd numeric constant so it can be - * evaluated in _equate_interp. - * - * Jan 10 DigitalFallout - * Added theme path detection - * - */ - -#define EQ_EXIT 1 -#define OP_CLR 2 -#define OP_DIV 3 -#define OP_MUT 4 -#define OP_ADD 5 -#define OP_SUB 6 -#define OP_EQU 7 -#define OP_DEC 8 -#define OP_SIN 9 -#define OP_COS 10 -#define OP_TAN 11 -#define OP_ROOT 12 -#define OP_POW 13 -#define OP_LOG 14 -#define OP_LN 15 -#define OP_EXP 16 - -#define NUM_0 20 -#define NUM_1 21 -#define NUM_2 22 -#define NUM_3 23 -#define NUM_4 24 -#define NUM_5 25 -#define NUM_6 26 -#define NUM_7 27 -#define NUM_8 28 -#define NUM_9 29 -#define NUM_PI 30 - -/** - * defined in calc.tab.c - */ -extern void equate_clear(void); -extern double equate_eval(void); -extern int equate_append(char *str); -extern const char *equate_string_get(void); - -Evas_Object *equate_edje_root; -Ecore_Evas *equate_edje_window; -int equate_edje_inited; - -static void -_no_filter_cb(void *data, Evas_Object * o, const char *emission, const - char *source) -{ - - //printf("emission: %s\t source: %s\n", emission, source); - -} - -/** - * Interpret all of our different signals, and do things ! - */ -static void -_equate_interp(void *data, Evas_Object * o, const char *emission, const - char *source) -{ - int val = 0; - - if (data) - { - double result; - char buf[BUFLEN]; - - val = (int) data; - switch (val) - { - case EQ_EXIT: - ecore_main_loop_quit(); - break; - case OP_CLR: - equate_clear(); - break; - case OP_DIV: - equate_append("/"); - break; - case OP_MUT: - equate_append("*"); - break; - case OP_ADD: - equate_append("+"); - break; - case OP_SUB: - equate_append("-"); - break; - case OP_EQU: - snprintf(buf, BUFLEN, "%.10g", equate_eval()); - edje_object_part_text_set(o, "EquateAnswer", buf); - return; - break; - case OP_DEC: - equate_append("."); - break; - case OP_SIN: - equate_append("sin"); - break; - case OP_COS: - equate_append("cos"); - break; - case OP_TAN: - equate_append("tan"); - break; - case OP_ROOT: - equate_append("sqrt"); - break; - case OP_POW: - equate_append("^"); - break; - case OP_LOG: - equate_append("log"); - break; - case OP_LN: - equate_append("ln"); - break; - case OP_EXP: - equate_append("exp"); - break; - case NUM_0: - equate_append("0"); - break; - case NUM_1: - equate_append("1"); - break; - case NUM_2: - equate_append("2"); - break; - case NUM_3: - equate_append("3"); - break; - case NUM_4: - equate_append("4"); - break; - case NUM_5: - equate_append("5"); - break; - case NUM_6: - equate_append("6"); - break; - case NUM_7: - equate_append("7"); - break; - case NUM_8: - equate_append("8"); - break; - case NUM_9: - equate_append("9"); - break; - default: - E(1, "Unknown edje signal operator %d", val); - break; - /* etc */ - } - edje_object_part_text_set(o, "EquateAnswer", equate_string_get()); - - } -} - -/* equate_edje_callback_define - setup the edje signal interceptions - * @o - the object we're assigning these callbacks to - */ -void -equate_edje_callback_define(Evas_Object * o) -{ - - edje_object_signal_callback_add(o, - "*", "*", _no_filter_cb, - NULL); - - /** Equate Application Callbacks **/ - /* EQ_EXIT - Quit Equate */ - edje_object_signal_callback_add(o, - "EQ_EXIT", "*", _equate_interp, - (void *) EQ_EXIT); - - /** Equate Operation Callbacks **/ - /* OP_CLR - Clear Display */ - edje_object_signal_callback_add(o, - "OP_CLR", "*", _equate_interp, - (void *) OP_CLR); - - /* OP_DIV - Division Operator */ - edje_object_signal_callback_add(o, - "OP_DIV", "*", _equate_interp, - (void *) OP_DIV); - - /* OP_MUT - Mutplication Operator */ - edje_object_signal_callback_add(o, - "OP_MUT", "*", _equate_interp, - (void *) OP_MUT); - - /* OP_ADD - Addition Operator */ - edje_object_signal_callback_add(o, - "OP_ADD", "*", _equate_interp, - (void *) OP_ADD); - - /* OP_SUB - Subtraction Operator */ - edje_object_signal_callback_add(o, - "OP_SUB", "*", _equate_interp, - (void *) OP_SUB); - - /* OP_EQU - Equals Operator */ - edje_object_signal_callback_add(o, - "OP_EQU", "*", _equate_interp, - (void *) OP_EQU); - - /* OP_DEC - Decimal Operator */ - edje_object_signal_callback_add(o, - "OP_DEC", "*", _equate_interp, - (void *) OP_DEC); - /* OP_SIN - Sin of x in degrees */ - edje_object_signal_callback_add(o, - "OP_SIN", "*", _equate_interp, - (void *) OP_SIN); - /* OP_COS - Cos of x in degree */ - edje_object_signal_callback_add(o, - "OP_COS", "*", _equate_interp, - (void *) OP_COS); - /* OP_TAN - Tan of x in degrees */ - edje_object_signal_callback_add(o, - "OP_TAN", "*", _equate_interp, - (void *) OP_TAN); - /* OP_ROOT - The square root of x */ - edje_object_signal_callback_add(o, - "OP_ROOT", "*", _equate_interp, - (void *) OP_ROOT); - /* OP_POW - Raise x to the y power */ - edje_object_signal_callback_add(o, - "OP_POW", "*", _equate_interp, - (void *) OP_POW); - /* OP_LOG - Logarithm */ - edje_object_signal_callback_add(o, - "OP_LOG", "*", _equate_interp, - (void *) OP_LOG); - /* OP_LN - the natural logarithm */ - edje_object_signal_callback_add(o, - "OP_LN", "*", _equate_interp, (void *) OP_LN); - /* OP_EXP - e to the x */ - edje_object_signal_callback_add(o, - "OP_EXP", "*", _equate_interp, - (void *) OP_EXP); - - /** Equate Number Callbacks **/ - /* NUM_0 - Zero */ - edje_object_signal_callback_add(o, - "NUM_0", "*", _equate_interp, (void *) NUM_0); - - /* NUM_1 - One */ - edje_object_signal_callback_add(o, - "NUM_1", "*", _equate_interp, (void *) NUM_1); - - /* NUM_2 - Two */ - edje_object_signal_callback_add(o, - "NUM_2", "*", _equate_interp, (void *) NUM_2); - - /* NUM_3 - Three */ - edje_object_signal_callback_add(o, - "NUM_3", "*", _equate_interp, (void *) NUM_3); - - /* NUM_4 - Four */ - edje_object_signal_callback_add(o, - "NUM_4", "*", _equate_interp, (void *) NUM_4); - - /* NUM_5 - Five */ - edje_object_signal_callback_add(o, - "NUM_5", "*", _equate_interp, (void *) NUM_5); - - /* NUM_6 - Six */ - edje_object_signal_callback_add(o, - "NUM_6", "*", _equate_interp, (void *) NUM_6); - - /* NUM_7 - Seven */ - edje_object_signal_callback_add(o, - "NUM_7", "*", _equate_interp, (void *) NUM_7); - - /* NUM_8 - Eight */ - edje_object_signal_callback_add(o, - "NUM_8", "*", _equate_interp, (void *) NUM_8); - - /* NUM_9 - Nine */ - edje_object_signal_callback_add(o, - "NUM_9", "*", _equate_interp, (void *) NUM_9); - /* NUM_PI - 3.14159 */ - edje_object_signal_callback_add(o, "NUM_PI", "*", _equate_interp, - (void *) NUM_PI); -} diff --git a/src/gui.c b/src/gui.c deleted file mode 100644 index 8a703bb..0000000 --- a/src/gui.c +++ /dev/null @@ -1,43 +0,0 @@ -#include "Equate.h" - -int inited = 0; - -Evas_Object *win; -Evas_Object *ly; - -void -equate_init_gui(Equate * equate, int argc, char **argv) -{ - char buf[1024]; - char *pkgdatadir; - - if (inited == 1) - return; - if (equate) - { - win = elm_win_add(NULL, "equate", ELM_WIN_BASIC); - elm_win_title_set(win, "Equate"); - elm_win_autodel_set(win, EINA_TRUE); - elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED); - - - ly = elm_layout_add(win); - pkgdatadir = getenv("EQUATE_PKGDATA_DIR"); - if (!pkgdatadir) - pkgdatadir = PACKAGE_PKGDATA_DIR; - snprintf(buf, sizeof(buf), "%s/themes/equate.edj", pkgdatadir); - elm_layout_file_set(ly, buf, "Main"); - evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(ly, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_win_resize_object_add(win, ly); - evas_object_show(ly); - - evas_object_show(win); - evas_object_resize(win, 200, 296); - - equate_edje_callback_define(elm_layout_edje_get(ly)); - - inited = 1; - } -} - diff --git a/src/gui.h b/src/gui.h deleted file mode 100644 index 8f98334..0000000 --- a/src/gui.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef _EQUATE_GUI_H -#define _EQUATE_GUI_H - -/* needed 'cos generated h files suck */ -double yyresult(void); - -void update_display(char *text); - -void equate_gui_init(Equate * equate, int argc, char **arvg); -void equate_gui_quit(void); -void equate_gui_update(Equate * equate); -#endif diff --git a/src/main.c b/src/main.c index cee7e8d..df6d177 100644 --- a/src/main.c +++ b/src/main.c @@ -1,22 +1,236 @@ +#include +#ifndef ELM_LIB_QUICKLAUNCH + #include "Equate.h" +#include "calc.h" -Equate equate; +static Evas_Object *win; +static Evas_Object *ly; -int -main(int argc, char *argv[], char *env[]) +static void +_signal_cb(void *data, Evas_Object * o, const char *emission, const + char *source) { - int nextarg = 1, parse_ret, found; - char *arg; + int val = 0; - elm_init(argc, argv); + if (data) + { + double result; + char buf[BUFLEN]; + + val = (int) data; + switch (val) + { + case EQ_EXIT: + elm_exit(); + break; + case OP_CLR: + equate_clear(); + break; + case OP_DIV: + equate_append("/"); + break; + case OP_MUT: + equate_append("*"); + break; + case OP_ADD: + equate_append("+"); + break; + case OP_SUB: + equate_append("-"); + break; + case OP_EQU: + snprintf(buf, BUFLEN, "%.10g", equate_eval()); + edje_object_part_text_set(o, "EquateAnswer", buf); + return; + break; + case OP_DEC: + equate_append("."); + break; + case OP_OBRAK: + equate_append("("); + break; + case OP_CBRAK: + equate_append(")"); + break; + case OP_SIN: + equate_append("sin"); + break; + case OP_COS: + equate_append("cos"); + break; + case OP_TAN: + equate_append("tan"); + break; + case OP_ROOT: + equate_append("sqrt"); + break; + case OP_POW: + equate_append("^"); + break; + case OP_LOG: + equate_append("log"); + break; + case OP_LN: + equate_append("ln"); + break; + case OP_EXP: + equate_append("exp"); + break; + case NUM_0: + equate_append("0"); + break; + case NUM_1: + equate_append("1"); + break; + case NUM_2: + equate_append("2"); + break; + case NUM_3: + equate_append("3"); + break; + case NUM_4: + equate_append("4"); + break; + case NUM_5: + equate_append("5"); + break; + case NUM_6: + equate_append("6"); + break; + case NUM_7: + equate_append("7"); + break; + case NUM_8: + equate_append("8"); + break; + case NUM_9: + equate_append("9"); + break; + default: + E(1, "Unknown edje signal operator %d", val); + break; + /* etc */ + } + edje_object_part_text_set(o, "EquateAnswer", equate_string_get()); + + } +} + + +static void +_edje_callbacks_define(Evas_Object * o) +{ + /** Equate Application Callbacks **/ + /* EQ_EXIT - Quit Equate */ + edje_object_signal_callback_add(o, "EQ_EXIT", "*", _signal_cb, + (void *) EQ_EXIT); + /** Equate Operation Callbacks **/ + /* OP_CLR - Clear Display */ + edje_object_signal_callback_add(o, "OP_CLR", "*", _signal_cb, + (void *) OP_CLR); + /* OP_DIV - Division Operator */ + edje_object_signal_callback_add(o, "OP_DIV", "*", _signal_cb, + (void *) OP_DIV); + /* OP_MUT - Mutplication Operator */ + edje_object_signal_callback_add(o, "OP_MUT", "*", _signal_cb, + (void *) OP_MUT); + /* OP_ADD - Addition Operator */ + edje_object_signal_callback_add(o, "OP_ADD", "*", _signal_cb, + (void *) OP_ADD); + /* OP_SUB - Subtraction Operator */ + edje_object_signal_callback_add(o, "OP_SUB", "*", _signal_cb, + (void *) OP_SUB); + /* OP_EQU - Equals Operator */ + edje_object_signal_callback_add(o, "OP_EQU", "*", _signal_cb, + (void *) OP_EQU); + /* OP_DEC - Decimal Operator */ + edje_object_signal_callback_add(o, "OP_DEC", "*", _signal_cb, + (void *) OP_DEC); + /* OP_SIN - Sin of x in degrees */ + edje_object_signal_callback_add(o, "OP_SIN", "*", _signal_cb, + (void *) OP_SIN); + /* OP_COS - Cos of x in degree */ + edje_object_signal_callback_add(o, "OP_COS", "*", _signal_cb, + (void *) OP_COS); + /* OP_TAN - Tan of x in degrees */ + edje_object_signal_callback_add(o, "OP_TAN", "*", _signal_cb, + (void *) OP_TAN); + /* OP_ROOT - The square root of x */ + edje_object_signal_callback_add(o, "OP_ROOT", "*", _signal_cb, + (void *) OP_ROOT); + /* OP_POW - Raise x to the y power */ + edje_object_signal_callback_add(o, "OP_POW", "*", _signal_cb, + (void *) OP_POW); + /* OP_LOG - Logarithm */ + edje_object_signal_callback_add(o, "OP_LOG", "*", _signal_cb, + (void *) OP_LOG); + /* OP_LN - the natural logarithm */ + edje_object_signal_callback_add(o, "OP_LN", "*", _signal_cb, (void *) OP_LN); + /* OP_EXP - e to the x */ + edje_object_signal_callback_add(o, "OP_EXP", "*", _signal_cb, + (void *) OP_EXP); + /* OP_OBRAK - open bracket */ + edje_object_signal_callback_add(o, "OP_OBRAK", "*", _signal_cb, + (void *) OP_OBRAK); + /* OP_CBRAK - close bracket */ + edje_object_signal_callback_add(o, "OP_CBRAK", "*", _signal_cb, + (void *) OP_CBRAK); + + /** Equate Number Callbacks **/ + edje_object_signal_callback_add(o, "NUM_0", "*", _signal_cb, (void *) NUM_0); + edje_object_signal_callback_add(o, "NUM_1", "*", _signal_cb, (void *) NUM_1); + edje_object_signal_callback_add(o, "NUM_2", "*", _signal_cb, (void *) NUM_2); + edje_object_signal_callback_add(o, "NUM_3", "*", _signal_cb, (void *) NUM_3); + edje_object_signal_callback_add(o, "NUM_4", "*", _signal_cb, (void *) NUM_4); + edje_object_signal_callback_add(o, "NUM_5", "*", _signal_cb, (void *) NUM_5); + edje_object_signal_callback_add(o, "NUM_6", "*", _signal_cb, (void *) NUM_6); + edje_object_signal_callback_add(o, "NUM_7", "*", _signal_cb, (void *) NUM_7); + edje_object_signal_callback_add(o, "NUM_8", "*", _signal_cb, (void *) NUM_8); + edje_object_signal_callback_add(o, "NUM_9", "*", _signal_cb, (void *) NUM_9); + /* NUM_PI - 3.14159 */ + edje_object_signal_callback_add(o, "NUM_PI", "*", _signal_cb, (void *) NUM_PI); +} + +static void +_create_gui(void) +{ + char buf[1024]; + + win = elm_win_add(NULL, "equate", ELM_WIN_BASIC); + elm_win_title_set(win, "Equate"); + elm_win_autodel_set(win, EINA_TRUE); + elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED); + + ly = elm_layout_add(win); + snprintf(buf, sizeof(buf), "%s/themes/equate.edj", elm_app_data_dir_get()); + elm_layout_file_set(ly, buf, "Main"); + evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ly, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_win_resize_object_add(win, ly); + evas_object_show(ly); + + evas_object_show(win); + evas_object_resize(win, 240, 320); + + _edje_callbacks_define(elm_layout_edje_get(ly)); +} + +EAPI_MAIN int +elm_main(int argc, char **argv) +{ + + elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED); + elm_app_compile_bin_dir_set(PACKAGE_BIN_DIR); + elm_app_compile_data_dir_set(PACKAGE_DATA_DIR); + elm_app_info_set(elm_main, "equate", "images/equate.png"); - equate.conf.mode = EDJE; math_init(); - equate_init_gui(&equate, argc, argv); - + _create_gui(); elm_run(); - elm_shutdown(); return 0; } +#endif +ELM_MAIN()