equate/src/edje.c

300 lines
8.9 KiB
C

#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);
}