2011-10-05 22:54:34 -07:00
|
|
|
#include <Elementary.h>
|
|
|
|
#ifndef ELM_LIB_QUICKLAUNCH
|
|
|
|
|
2011-10-04 15:04:37 -07:00
|
|
|
#include "Equate.h"
|
2011-10-05 22:54:34 -07:00
|
|
|
#include "calc.h"
|
2011-10-04 15:04:37 -07:00
|
|
|
|
2011-10-05 22:54:34 -07:00
|
|
|
static Evas_Object *win;
|
2016-01-06 12:28:55 -08:00
|
|
|
static Evas_Object *readout;
|
2011-10-05 23:21:39 -07:00
|
|
|
|
|
|
|
static const struct
|
|
|
|
{
|
2011-10-05 23:24:09 -07:00
|
|
|
const char *keyname;
|
|
|
|
int op;
|
2011-10-05 23:21:39 -07:00
|
|
|
} _keymap[] = {
|
2011-10-05 23:24:09 -07:00
|
|
|
{"KP_0", NUM_0},
|
|
|
|
{"0", NUM_0},
|
|
|
|
{"KP_1", NUM_1},
|
|
|
|
{"1", NUM_1},
|
|
|
|
{"KP_2", NUM_2},
|
|
|
|
{"2", NUM_2},
|
|
|
|
{"KP_3", NUM_3},
|
|
|
|
{"3", NUM_3},
|
|
|
|
{"KP_4", NUM_4},
|
|
|
|
{"4", NUM_4},
|
|
|
|
{"KP_5", NUM_5},
|
|
|
|
{"5", NUM_5},
|
|
|
|
{"KP_6", NUM_6},
|
|
|
|
{"6", NUM_6},
|
|
|
|
{"KP_7", NUM_7},
|
|
|
|
{"7", NUM_7},
|
|
|
|
{"KP_8", NUM_8},
|
|
|
|
{"8", NUM_8},
|
|
|
|
{"KP_9", NUM_9},
|
|
|
|
{"9", NUM_9},
|
|
|
|
{"KP_Divide", OP_DIV},
|
|
|
|
{"KP_Multiply", OP_MUT},
|
|
|
|
{"KP_Subtract", OP_SUB},
|
|
|
|
{"KP_Add", OP_ADD},
|
|
|
|
{"plus", OP_ADD},
|
|
|
|
{"minus", OP_SUB},
|
|
|
|
{"asterisk", OP_MUT},
|
|
|
|
{"slash", OP_DIV},
|
|
|
|
{"KP_Enter", OP_EQU},
|
|
|
|
{"Return", OP_EQU},
|
2014-11-09 10:57:36 -08:00
|
|
|
{"equal", OP_EQU},
|
2011-10-05 23:24:09 -07:00
|
|
|
{"BackSpace", OP_CLR},
|
2014-11-09 10:57:36 -08:00
|
|
|
{"Escape", OP_CLR},
|
2011-10-05 23:24:09 -07:00
|
|
|
{"period", OP_DEC},
|
2014-02-27 15:04:38 -08:00
|
|
|
{"KP_Decimal", OP_DEC},
|
2011-10-05 23:24:09 -07:00
|
|
|
{"comma", OP_DEC},
|
2014-11-09 10:49:17 -08:00
|
|
|
{"parenleft", OP_OBRAK},
|
|
|
|
{"parenright", OP_CBRAK},
|
2011-10-05 23:24:09 -07:00
|
|
|
NULL
|
2011-10-05 23:21:39 -07:00
|
|
|
};
|
|
|
|
|
|
|
|
|
2011-10-05 22:54:34 -07:00
|
|
|
static void
|
2016-01-06 12:28:55 -08:00
|
|
|
_button_cb(void *data, Evas_Object * o EINA_UNUSED,
|
|
|
|
void *event_info EINA_UNUSED)
|
2011-10-04 15:04:37 -07:00
|
|
|
{
|
2011-10-05 22:54:34 -07:00
|
|
|
int val = 0;
|
2011-10-04 15:04:37 -07:00
|
|
|
|
2011-10-05 22:54:34 -07:00
|
|
|
if (data)
|
|
|
|
{
|
|
|
|
double result;
|
|
|
|
char buf[BUFLEN];
|
2011-10-04 15:04:37 -07:00
|
|
|
|
2016-01-07 20:18:11 -08:00
|
|
|
val = (int)(uintptr_t)data;
|
2011-10-05 22:54:34 -07:00
|
|
|
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());
|
2016-01-06 12:28:55 -08:00
|
|
|
elm_object_text_set(readout, buf);
|
2011-10-05 22:54:34 -07:00
|
|
|
return;
|
|
|
|
break;
|
|
|
|
case OP_DEC:
|
|
|
|
equate_append(".");
|
|
|
|
break;
|
2011-10-05 23:24:09 -07:00
|
|
|
case OP_OBRAK:
|
2011-10-05 22:54:34 -07:00
|
|
|
equate_append("(");
|
|
|
|
break;
|
2011-10-05 23:24:09 -07:00
|
|
|
case OP_CBRAK:
|
2011-10-05 22:54:34 -07:00
|
|
|
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 */
|
|
|
|
}
|
2016-01-06 12:28:55 -08:00
|
|
|
elm_object_text_set(readout, equate_string_get());
|
2011-10-04 15:04:37 -07:00
|
|
|
|
2011-10-05 22:54:34 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-01-06 12:28:55 -08:00
|
|
|
static void
|
|
|
|
_create_button(Evas_Object *table, const char *text, int op, int x, int y,
|
|
|
|
int w)
|
|
|
|
{
|
|
|
|
Evas_Object *button;
|
|
|
|
|
|
|
|
button = elm_button_add(table);
|
|
|
|
evas_object_size_hint_weight_set(button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
|
|
|
evas_object_size_hint_align_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
|
|
|
elm_object_text_set(button, text);
|
2016-01-07 20:18:11 -08:00
|
|
|
evas_object_smart_callback_add(button, "clicked", _button_cb, (void *)(uintptr_t)op);
|
2016-01-06 12:28:55 -08:00
|
|
|
|
|
|
|
elm_table_pack(table, button, x, y, w, 1);
|
|
|
|
evas_object_show(button);
|
|
|
|
}
|
2011-10-05 22:54:34 -07:00
|
|
|
|
|
|
|
static void
|
2016-01-06 12:28:55 -08:00
|
|
|
_create_buttons(Evas_Object *o)
|
2011-10-05 22:54:34 -07:00
|
|
|
{
|
2016-01-06 12:28:55 -08:00
|
|
|
/** Equate Operations **/
|
2011-10-05 22:54:34 -07:00
|
|
|
/* OP_CLR - Clear Display */
|
2016-01-06 12:28:55 -08:00
|
|
|
_create_button(o, "C", OP_CLR, 3, 2, 1);
|
2011-10-05 22:54:34 -07:00
|
|
|
/* OP_DIV - Division Operator */
|
2016-01-06 12:28:55 -08:00
|
|
|
_create_button(o, "/", OP_DIV, 3, 1, 1);
|
2011-10-05 22:54:34 -07:00
|
|
|
/* OP_MUT - Mutplication Operator */
|
2016-01-06 12:28:55 -08:00
|
|
|
_create_button(o, "*", OP_MUT, 2, 1, 1);
|
2011-10-05 22:54:34 -07:00
|
|
|
/* OP_ADD - Addition Operator */
|
2016-01-06 12:28:55 -08:00
|
|
|
_create_button(o, "+", OP_ADD, 0, 1, 1);
|
2011-10-05 22:54:34 -07:00
|
|
|
/* OP_SUB - Subtraction Operator */
|
2016-01-06 12:28:55 -08:00
|
|
|
_create_button(o, "-", OP_SUB, 1, 1, 1);
|
2011-10-05 22:54:34 -07:00
|
|
|
/* OP_EQU - Equals Operator */
|
2016-01-06 12:28:55 -08:00
|
|
|
_create_button(o, "=", OP_EQU, 2, 5, 2);
|
|
|
|
|
2011-10-05 22:54:34 -07:00
|
|
|
/* OP_DEC - Decimal Operator */
|
2016-01-06 12:28:55 -08:00
|
|
|
_create_button(o, ".", OP_DEC, 1, 5, 1);
|
2011-10-05 22:54:34 -07:00
|
|
|
/* OP_SIN - Sin of x in degrees */
|
2016-01-06 12:28:55 -08:00
|
|
|
// edje_object_signal_callback_add(o, "OP_SIN", "*", _signal_cb,
|
|
|
|
// (void *) OP_SIN);
|
2011-10-05 22:54:34 -07:00
|
|
|
/* OP_COS - Cos of x in degree */
|
2016-01-06 12:28:55 -08:00
|
|
|
// edje_object_signal_callback_add(o, "OP_COS", "*", _signal_cb,
|
|
|
|
// (void *) OP_COS);
|
2011-10-05 22:54:34 -07:00
|
|
|
/* OP_TAN - Tan of x in degrees */
|
2016-01-06 12:28:55 -08:00
|
|
|
// edje_object_signal_callback_add(o, "OP_TAN", "*", _signal_cb,
|
|
|
|
// (void *) OP_TAN);
|
2011-10-05 22:54:34 -07:00
|
|
|
/* OP_ROOT - The square root of x */
|
2016-01-06 12:28:55 -08:00
|
|
|
// edje_object_signal_callback_add(o, "OP_ROOT", "*", _signal_cb,
|
|
|
|
// (void *) OP_ROOT);
|
2011-10-05 22:54:34 -07:00
|
|
|
/* OP_POW - Raise x to the y power */
|
2016-01-06 12:28:55 -08:00
|
|
|
// edje_object_signal_callback_add(o, "OP_POW", "*", _signal_cb,
|
|
|
|
// (void *) OP_POW);
|
2011-10-05 22:54:34 -07:00
|
|
|
/* OP_LOG - Logarithm */
|
2016-01-06 12:28:55 -08:00
|
|
|
// edje_object_signal_callback_add(o, "OP_LOG", "*", _signal_cb,
|
|
|
|
// (void *) OP_LOG);
|
2011-10-05 22:54:34 -07:00
|
|
|
/* OP_LN - the natural logarithm */
|
2016-01-06 12:28:55 -08:00
|
|
|
// edje_object_signal_callback_add(o, "OP_LN", "*", _signal_cb, (void *) OP_LN);
|
2011-10-05 22:54:34 -07:00
|
|
|
/* OP_EXP - e to the x */
|
2016-01-06 12:28:55 -08:00
|
|
|
// edje_object_signal_callback_add(o, "OP_EXP", "*", _signal_cb,
|
|
|
|
// (void *) OP_EXP);
|
2011-10-05 22:54:34 -07:00
|
|
|
/* OP_OBRAK - open bracket */
|
2016-01-06 12:28:55 -08:00
|
|
|
_create_button(o, "(", OP_OBRAK, 3, 3, 1);
|
2011-10-05 22:54:34 -07:00
|
|
|
/* OP_CBRAK - close bracket */
|
2016-01-06 12:28:55 -08:00
|
|
|
_create_button(o, ")", OP_CBRAK, 3, 4, 1);
|
2011-10-05 22:54:34 -07:00
|
|
|
|
2016-01-06 12:28:55 -08:00
|
|
|
/** Equate Numbers **/
|
|
|
|
_create_button(o, "7", NUM_7, 0, 2, 1);
|
|
|
|
_create_button(o, "8", NUM_8, 1, 2, 1);
|
|
|
|
_create_button(o, "9", NUM_9, 2, 2, 1);
|
|
|
|
_create_button(o, "4", NUM_4, 0, 3, 1);
|
|
|
|
_create_button(o, "5", NUM_5, 1, 3, 1);
|
|
|
|
_create_button(o, "6", NUM_6, 2, 3, 1);
|
|
|
|
_create_button(o, "1", NUM_1, 0, 4, 1);
|
|
|
|
_create_button(o, "2", NUM_2, 1, 4, 1);
|
|
|
|
_create_button(o, "3", NUM_3, 2, 4, 1);
|
|
|
|
_create_button(o, "0", NUM_0, 0, 5, 1);
|
2011-10-05 22:54:34 -07:00
|
|
|
/* NUM_PI - 3.14159 */
|
2016-01-06 12:28:55 -08:00
|
|
|
// edje_object_signal_callback_add(o, "NUM_PI", "*", _signal_cb, (void *) NUM_PI);
|
2011-10-05 22:54:34 -07:00
|
|
|
}
|
|
|
|
|
2011-10-05 23:21:39 -07:00
|
|
|
static Eina_Bool
|
|
|
|
_key_down_cb(void *data, int type, void *event)
|
|
|
|
{
|
2011-10-05 23:24:09 -07:00
|
|
|
Ecore_Event_Key *ev = event;
|
|
|
|
int i;
|
2011-10-05 23:21:39 -07:00
|
|
|
|
2011-10-05 23:24:09 -07:00
|
|
|
for (i = 0; _keymap[i].keyname; i++)
|
|
|
|
{
|
2011-10-05 23:21:39 -07:00
|
|
|
if (!strcmp(_keymap[i].keyname, ev->key))
|
2011-10-05 23:24:09 -07:00
|
|
|
{
|
2016-01-07 20:18:11 -08:00
|
|
|
_button_cb((void*)(uintptr_t)_keymap[i].op, NULL, NULL);
|
2011-10-05 23:24:09 -07:00
|
|
|
}
|
|
|
|
}
|
2011-10-05 23:21:39 -07:00
|
|
|
|
2016-01-06 12:28:55 -08:00
|
|
|
return EINA_TRUE;
|
2011-10-05 23:21:39 -07:00
|
|
|
}
|
|
|
|
|
2011-10-05 22:54:34 -07:00
|
|
|
static void
|
|
|
|
_create_gui(void)
|
|
|
|
{
|
2016-01-06 12:28:55 -08:00
|
|
|
Evas_Object *table;
|
2011-10-04 15:04:37 -07:00
|
|
|
|
2011-10-05 22:54:34 -07:00
|
|
|
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);
|
|
|
|
|
2016-01-06 12:28:55 -08:00
|
|
|
table = elm_table_add(win);
|
|
|
|
elm_table_homogeneous_set(table, EINA_TRUE);
|
|
|
|
evas_object_size_hint_weight_set(table, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
|
|
|
evas_object_size_hint_align_set(table, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
|
|
|
elm_win_resize_object_add(win, table);
|
|
|
|
evas_object_show(table);
|
2011-10-05 22:54:34 -07:00
|
|
|
|
2011-10-05 23:24:09 -07:00
|
|
|
ecore_event_handler_add (ECORE_EVENT_KEY_DOWN, _key_down_cb, NULL);
|
2011-10-05 23:21:39 -07:00
|
|
|
|
2011-10-05 22:54:34 -07:00
|
|
|
evas_object_show(win);
|
|
|
|
evas_object_resize(win, 240, 320);
|
|
|
|
|
2016-01-06 12:28:55 -08:00
|
|
|
readout = elm_label_add(table);
|
|
|
|
evas_object_size_hint_weight_set(readout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
|
|
|
evas_object_size_hint_align_set(readout, 1.0, EVAS_HINT_FILL);
|
|
|
|
elm_table_pack(table, readout, 0, 0, 4, 1);
|
|
|
|
evas_object_show(readout);
|
|
|
|
|
|
|
|
_create_buttons(table);
|
2011-10-05 22:54:34 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
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");
|
|
|
|
|
|
|
|
math_init();
|
|
|
|
_create_gui();
|
|
|
|
elm_run();
|
2011-10-04 15:04:37 -07:00
|
|
|
elm_shutdown();
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
2011-10-05 22:54:34 -07:00
|
|
|
#endif
|
|
|
|
ELM_MAIN()
|