summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorOlliver Schinagl <o.schinagl@ultimaker.com>2015-03-30 20:57:50 (GMT)
committerOlliver Schinagl <o.schinagl@ultimaker.com>2015-04-28 05:07:13 (GMT)
commit955a281630ec2b3dd75cb708d69f788afca6a049 (patch)
tree14e2a2e01fef11ec7de073bc436a9835203417ec /src
parenta5e343f0c73452f032142baf42a41ae50c8b9fb3 (diff)
downloadeulogium-955a281630ec2b3dd75cb708d69f788afca6a049.zip
eulogium-955a281630ec2b3dd75cb708d69f788afca6a049.tar.gz
eulogium-955a281630ec2b3dd75cb708d69f788afca6a049.tar.bz2
some cleanups and fix naviframe, yay
Diffstat (limited to 'src')
-rw-r--r--src/eulogium.c389
-rw-r--r--src/eulogium.h38
2 files changed, 284 insertions, 143 deletions
diff --git a/src/eulogium.c b/src/eulogium.c
index 6d18a59..c168f9f 100644
--- a/src/eulogium.c
+++ b/src/eulogium.c
@@ -13,48 +13,50 @@
#include "gettext.h"
+#include "eulogium.h"
+
#define COPYRIGHT "Copyright © 2015 Olliver Schinagl <o.schinagl@ultimaker.com> and various contributors (see AUTHORS)."
-#define EULOGIUM_ICON_DIR_SMALL "images/icon_dir_small.png"
+void eulogium_button_cb_set(struct button_def *button, struct button_cb *cb)
+{
+ if (cb && button)
+ button->cb = *cb;
+}
-struct eulogium_data {
- Evas_Object *window;
- Evas_Object *content_next;
- Evas_Object *content_cur;
- Evas_Object *content_prev;
- Evas_Object *flip;
-};
+void eulogium_button_cb_data_set(struct button_def *button, void *data)
+{
+ if (data && button)
+ button->cb.data = data;
+}
-struct button_cb {
- void (*func)(void *data, Evas_Object *obj, void *event_info);
- void *data;
- const char *info;
-};
+void eulogium_button_data_set(struct button_def *button, void *data)
+{
+ if (data && button)
+ button->data = data;
+}
-struct button_def {
- const char *text;
- struct button_cb cb;
- void *data;
-};
+void eulogium_filepath_set(struct eulogium_data *eulogium, char *filepath)
+{
+ if (filepath && eulogium)
+ eulogium->filepath = filepath;
+}
-/* test function to map try to mouse button th emit a click event */
-static void _cb_eulogium_input_button(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
+/* test function to map try to mouse button to emit a click event */
+static void _cb_eulogium_input_button(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
{
-// Evas_Event_Mouse_Down *ev = event_info;
- struct eulogium_data *eulogium = data;
+ Evas_Event_Mouse_Down *ev = event_info;
+// struct eulogium_data *eulogium = data;
- elm_flip_interaction_set(eulogium->flip, ELM_FLIP_INTERACTION_ROTATE);
- elm_flip_go(eulogium->flip, ELM_FLIP_ROTATE_Y_CENTER_AXIS);
-// printf("Button: %d\n", ev->button);
-// if (ev->button == 2) {
+ printf("Button: %d\n", ev->button);
+ if (ev->button == 2) {
// /* Broken */
// focused = elm_object_focused_object_get((Evas_Object *)data);
// elm_object_signal_emit(focused, "mouse,down,1", "event"); /* TODO does not work */
// printf("Object: 0x%p\n", focused);
-// } else {
+ } else {
// /* TODO: remove if we know the button event from the rotary encoder */
// printf("Button: %d\n", ev->button);
-// }
+ }
}
/* Function to make the Z-axis of any wheel focus the next/previous focusable widget */
@@ -86,64 +88,127 @@ static void _cb_eulogium_exit(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUS
elm_exit();
}
-/* Buttons */
-static struct button_def but_print = {
- .text = "PRINT",
- .cb = {
- .func = &_cb_eulogium_button,
- .data = NULL,
- .info = "print button pressed",
- },
- .data = NULL,
-};
+Evas_Object *eulogium_print_progress(struct eulogium_data *eulogium)
+{
+ Evas_Object *table;
+ Evas_Object *object;
-static struct button_def but_material = {
- .text = "MATERIAL",
- .cb = {
- .func = &_cb_eulogium_button,
- .data = NULL,
- .info = "matterial button pressed",
- },
- .data = NULL,
-};
+ table = elm_table_add(eulogium->layout);
+ elm_table_homogeneous_set(table, EINA_FALSE);
-static struct button_def but_maintanance = {
- .text = "MAINTANANCE",
- .cb = {
- .func = &_cb_eulogium_button,
- .data = NULL,
- .info = "maintanance button pressed",
- },
- .data = NULL,
+ object = elm_label_add(table);
+ elm_object_text_set(object, "Print time remaining \%d hours.");
+ evas_object_show(object);
+ elm_table_pack(table, object, 0, 0, 3, 1);
+
+ object = elm_label_add(table);
+ elm_object_text_set(object, "Random info.");
+ evas_object_show(object);
+ elm_table_pack(table, object, 0, 1, 3, 1);
+
+ object = elm_label_add(table);
+ elm_object_text_set(object, "File: \%s.");
+ evas_object_show(object);
+ elm_table_pack(table, object, 0, 2, 3, 1);
+
+ object = elm_progressbar_add(table);
+ evas_object_show(object);
+ elm_table_pack(table, object, 0, 3, 3, 1);
+
+#if 0 /* FIXME use themed seperator */
+ object = elm_separator_add(eulogium->layout);
+ elm_separator_horizontal_set(object, EINA_TRUE);
+ evas_object_show(object);
+ elm_table_pack(table, object, 0, 4, 3, 1);
+#else
+ object = evas_object_rectangle_add(evas_object_evas_get(eulogium->layout));
+ evas_object_color_set(object, 0x33, 0x99, 0xff, 0xff);
+ evas_object_size_hint_min_set(object, 0, 1);
+ evas_object_size_hint_weight_set(object, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(object, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_show(object);
+ elm_table_pack(table, object, 0, 4, 3, 1);
+#endif
+
+ object = elm_button_add(table);
+ elm_object_text_set(object, "TUNE");
+ evas_object_size_hint_weight_set(object, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(object, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_show(object);
+ elm_table_pack(table, object, 0, 5, 1, 1);
+
+#if 0 /* FIXME use themed seperator */
+ object = elm_separator_add(eulogium->layout);
+ elm_separator_horizontal_set(object, EINA_TRUE);
+ evas_object_show(object);
+ elm_table_pack(table, object, 1, 5, 1, 1);
+#else
+ object = evas_object_rectangle_add(evas_object_evas_get(eulogium->layout));
+ evas_object_color_set(object, 0x33, 0x99, 0xff, 0xff);
+ evas_object_size_hint_min_set(object, 1, 0);
+ evas_object_size_hint_weight_set(object, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(object, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_show(object);
+ elm_table_pack(table, object, 1, 5, 1, 1);
+#endif
+
+ object = elm_button_add(table);
+ elm_object_text_set(object, "PAUSE");
+ evas_object_size_hint_weight_set(object, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(object, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_show(object);
+ elm_table_pack(table, object, 2, 5, 1, 1);
+
+ return table;
+}
+
+/* Uglyness due to a 'shortcomming' of elm_list sorted insert using 1 data var for both funcs */
+struct _filelist_sort {
+ struct eulogium_data *eulogium;
+ char *filepath;
};
-static void _cb_run_chosen_file(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+static void _cb_select_file(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
+ char *filepath = ((struct _filelist_sort *)data)->filepath;
+ struct eulogium_data *eulogium = ((struct _filelist_sort *)data)->eulogium;
+ Evas_Object *content;
+
+ eulogium->filepath = filepath; /* TODO: can we set this higher up the chain? not likely. */
+ if (ecore_file_is_dir(filepath)) {
+ content = eulogium_print_menu(eulogium); /* TODO: maybe path as parameter was not bad */
+ } else {
+ content = eulogium_print_progress(eulogium);
+ }
+ elm_naviframe_item_simple_push(eulogium->layout, content);
}
-static int _cb_dirfile_sort(const void *data1,const void *data2)
+static int _cb_dirfile_sort(const void *data1, const void *data2)
{
- const char *file1 = elm_object_item_data_get(data1);
- const char *file2 = elm_object_item_data_get(data2);
- if (!file1)
+ const char *filepath1 = ((struct _filelist_sort *)elm_object_item_data_get(data1))->filepath;
+ const char *filepath2 = ((struct _filelist_sort *)elm_object_item_data_get(data2))->filepath;
+
+ if (!filepath1)
return 1;
- if (!file2)
+ if (!filepath2)
return -1;
- if (ecore_file_is_dir(file1) != (ecore_file_is_dir(file2))) {
- return (ecore_file_is_dir(file1) ? -1 : 1);
+ if (ecore_file_is_dir(filepath1) != (ecore_file_is_dir(filepath2))) {
+ return (ecore_file_is_dir(filepath1) ? -1 : 1);
}
- return strcoll(file1, file2);
+ return strcoll(filepath1, filepath2);
}
static void _cb_populate_filelist(const char *name, const char *path, void *data)
{
- Evas_Object *list = (Evas_Object *)data;
+ struct eulogium_data *eulogium = data;
+ Evas_Object *list = (Evas_Object *)eulogium->data;
Evas_Object *icon;
Elm_Object_Item *list_item;
char *filepath;
uint_fast32_t dir_len;
uint_fast8_t hidden_visible = 1;
+ struct _filelist_sort *filelist_sort;
if (hidden_visible && (name[0] == '.'))
return;
@@ -159,51 +224,60 @@ static void _cb_populate_filelist(const char *name, const char *path, void *data
elm_icon_standard_set(icon, "file");
elm_image_resizable_set(icon, EINA_FALSE, EINA_FALSE);
- list_item = elm_list_item_sorted_insert(list, name, icon, NULL, _cb_run_chosen_file, filepath, _cb_dirfile_sort);
- elm_list_item_show(list_item);
+ filelist_sort = malloc(sizeof(struct _filelist_sort));
+ filelist_sort->eulogium = eulogium;
+ filelist_sort->filepath = filepath;
+ list_item = elm_list_item_sorted_insert(list, name, icon, NULL, _cb_select_file, filelist_sort, _cb_dirfile_sort);
+// free(filepath); & filelist_sort /* TODO is this required?, yes! /
+ elm_list_item_show(list_item); /* TODO: seems not needed? */
}
-static void _cb_filelist_bottom(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+#if 0
+static void _cb_filelist_bottom(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
{
Evas_Object *list = data;
elm_list_item_bring_in(elm_list_first_item_get(list));
}
-static void _cb_filelist_top(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+static void _cb_filelist_top(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
{
Evas_Object *list = data;
elm_list_item_bring_in(elm_list_last_item_get(list));
}
+#endif
-static void _cb_filelist_bringin(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
+static void _cb_content_prev_set(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
{
- Evas_Object *list = event_info;
+ struct eulogium_data *eulogium = data;
- printf("pow\n");
+ elm_naviframe_item_pop(eulogium->layout);
}
-static Evas_Object *eulogium_print_menu(Evas_Object *window, const char *path)
+Evas_Object *eulogium_print_menu(struct eulogium_data *eulogium)
{
Evas_Object *box;
Evas_Object *list;
Evas_Object *icon;
- box = elm_box_add(window);
- list = elm_list_add(window);
+ box = elm_table_add(eulogium->layout);
+ list = elm_list_add(box);
evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(list, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_list_multi_select_set(list, EINA_FALSE);
elm_scroller_bounce_set(list, EINA_FALSE, EINA_FALSE);
elm_list_mode_set(list, ELM_LIST_COMPRESS);
- elm_box_pack_end(box, list);
+ elm_table_pack(box, list, 0, 0, 1, 1);
- eina_file_dir_list(path, EINA_FALSE, _cb_populate_filelist, list);
+ eulogium->data = (void *)list;
+ eina_file_dir_list(eulogium->filepath, EINA_FALSE, _cb_populate_filelist, eulogium);
+ eulogium->data = NULL;
icon = elm_icon_add(list);
elm_icon_standard_set(icon, "home");
- elm_list_item_insert_before(list, elm_list_first_item_get(list), "RETURN", icon, NULL, NULL, NULL);
+ elm_list_item_prepend(list, "RETURN", icon, NULL, _cb_content_prev_set, eulogium); /* XXX TODO: when we pop the filelist from the stack, who calls elm_list_free();? */
+
elm_list_go(list);
// evas_object_smart_callback_add(list, "edge,bottom", _cb_filelist_bottom, list);
// evas_object_smart_callback_add(list, "edge,top", _cb_filelist_top, list);
@@ -211,32 +285,32 @@ static Evas_Object *eulogium_print_menu(Evas_Object *window, const char *path)
// evas_object_smart_callback_add(list, "longpressed", _cb_filelist_filedetails, NULL); /* TODO, use inwin */
evas_object_show(list);
+ evas_object_show(box);
return box;
};
-static Evas_Object *eulogium_tripple_button_menu(Evas_Object *window,
- struct button_def *left, struct button_def *right EINA_UNUSED, struct button_def *bottom EINA_UNUSED)
+Evas_Object *eulogium_tripple_button_menu(struct eulogium_data *eulogium,
+ const struct button_def *left, const struct button_def *right, const struct button_def *bottom)
{
Evas_Object *table;
Evas_Object *object;
- table = elm_table_add(window);
+ table = elm_table_add(eulogium->layout);
elm_table_homogeneous_set(table, EINA_FALSE);
- evas_object_show(table);
- object = elm_button_add(window);
+ object = elm_button_add(table);
elm_object_text_set(object, left->text);
- evas_object_smart_callback_add(object, "clicked", left->cb.func, left);
+ evas_object_smart_callback_add(object, "clicked", left->cb.func, left->cb.data);
evas_object_show(object);
elm_table_pack(table, object, 0, 0, 1, 1);
#if 0 /* FIXME use themed seperator */
- object = elm_separator_add(window);
+ object = elm_separator_add(table);
elm_separator_horizontal_set(object, EINA_TRUE);
evas_object_show(object);
elm_table_pack(table, object, 1, 0, 1, 1);
#else
- object = evas_object_rectangle_add(evas_object_evas_get(window));
+ object = evas_object_rectangle_add(table);
evas_object_color_set(object, 0x33, 0x99, 0xff, 0xff);
evas_object_size_hint_min_set(object, 1, 0);
evas_object_size_hint_weight_set(object, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
@@ -245,19 +319,19 @@ static Evas_Object *eulogium_tripple_button_menu(Evas_Object *window,
elm_table_pack(table, object, 1, 0, 1, 1);
#endif
- object = elm_button_add(window);
+ object = elm_button_add(table);
elm_object_text_set(object, right->text);
- evas_object_smart_callback_add(object, "clicked", right->cb.func, right);
+ evas_object_smart_callback_add(object, "clicked", right->cb.func, right->cb.data);
evas_object_show(object);
elm_table_pack(table, object, 2, 0, 1, 1);
#if 0 /* FIXME use themed seperator */
- object = elm_separator_add(window);
+ object = elm_separator_add(table);
elm_separator_horizontal_set(object, EINA_TRUE);
evas_object_show(object);
elm_table_pack(table, object, 0, 1, 3, 1);
#else
- object = evas_object_rectangle_add(evas_object_evas_get(window));
+ object = evas_object_rectangle_add(table);
evas_object_color_set(object, 0x33, 0x99, 0xff, 0xff);
evas_object_size_hint_min_set(object, 0, 1);
evas_object_size_hint_weight_set(object, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
@@ -266,60 +340,88 @@ static Evas_Object *eulogium_tripple_button_menu(Evas_Object *window,
elm_table_pack(table, object, 0, 1, 3, 1);
#endif
- object = elm_button_add(window);
+ object = elm_button_add(table);
elm_object_text_set(object, bottom->text);
- evas_object_smart_callback_add(object, "clicked", bottom->cb.func, bottom);
+ evas_object_smart_callback_add(object, "clicked", bottom->cb.func, bottom->cb.data);
evas_object_show(object);
elm_table_pack(table, object, 0, 2, 3, 1);
+ evas_object_show(table);
return table;
}
-static Evas_Object *eulogium_menu(struct eulogium_data *eulogium)
+static void _cb_button_main_print(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
{
- Evas_Object *rect, *rect2;
- Evas_Object *flip = eulogium->flip;
+ struct eulogium_data *eulogium = data;
+ Evas_Object *content;
- eulogium->flip = elm_flip_add(eulogium->window);
- if (!flip)
- return NULL;
+ /* TODO: add intermediate window to list drive/youmagine */
+ content = eulogium_print_menu(eulogium);
+ elm_naviframe_item_simple_push(eulogium->layout, content);
+}
+
+/* Buttons */
+static struct button_def but_main_print = {
+ .text = "PRINT",
+ .cb = {
+ .func = &_cb_button_main_print,
+ .data = NULL,
+ .info = "print button pressed",
+ },
+ .data = NULL,
+};
- rect = evas_object_rectangle_add(evas_object_evas_get(eulogium->window));
- evas_object_color_set(rect, 0, 0, 255, 255);
- evas_object_show(rect);
+static struct button_def but_main_material = {
+ .text = "MATERIAL",
+ .cb = {
+ .func = &_cb_eulogium_button,
+ .data = NULL,
+ .info = "matterial button pressed",
+ },
+ .data = NULL,
+};
- rect2 = evas_object_rectangle_add(evas_object_evas_get(eulogium->window));
- evas_object_color_set(rect2, 0, 255, 0, 255);
- evas_object_show(rect2);
+static struct button_def but_main_maintanance = {
+ .text = "MAINTANANCE",
+ .cb = {
+ .func = &_cb_eulogium_button,
+ .data = NULL,
+ .info = "maintanance button pressed",
+ },
+ .data = NULL,
+};
- elm_object_part_content_set(eulogium->flip, "front", rect);
- elm_object_part_content_set(eulogium->flip, "back", rect2);
- evas_object_show(flip);
+Evas_Object *eulogium_main_menu(Evas_Object *window, struct eulogium_data *eulogium)
+{
+ Evas_Object *content;
- elm_flip_interaction_set(flip, ELM_FLIP_INTERACTION_PAGE);
- elm_flip_interaction_direction_enabled_set(flip, ELM_FLIP_DIRECTION_UP, EINA_TRUE);
- elm_flip_interaction_direction_enabled_set(flip, ELM_FLIP_DIRECTION_DOWN, EINA_TRUE);
- elm_flip_interaction_direction_enabled_set(flip, ELM_FLIP_DIRECTION_LEFT, EINA_TRUE);
- elm_flip_interaction_direction_enabled_set(flip, ELM_FLIP_DIRECTION_RIGHT, EINA_TRUE);
- elm_flip_interaction_direction_hitsize_set(flip, ELM_FLIP_DIRECTION_UP, 1);
- elm_flip_interaction_direction_hitsize_set(flip, ELM_FLIP_DIRECTION_DOWN, 1);
- elm_flip_interaction_direction_hitsize_set(flip, ELM_FLIP_DIRECTION_LEFT, 1);
- elm_flip_interaction_direction_hitsize_set(flip, ELM_FLIP_DIRECTION_RIGHT, 1);
+ eulogium->layout = elm_naviframe_add(window);
+ if (!eulogium->layout)
+ return NULL;
+ //elm_naviframe_item_title_enabled_set(eulogium->layout, EINA_FALSE, EINA_TRUE);
+// elm_naviframe_item_title_visible_set(eulogium->layout, EINA_FALSE);
- eulogium->content_cur = eulogium_print_menu(eulogium->window, "/home/oliver");
- eulogium->content_next = eulogium_tripple_button_menu(eulogium->window, &but_print, &but_material, &but_maintanance);
+ content = eulogium_tripple_button_menu(eulogium, &but_main_print, &but_main_material, &but_main_maintanance);
+ if (!content)
+ return NULL;
+ elm_naviframe_item_simple_push(eulogium->layout, content);
- elm_object_part_content_set(eulogium->flip, "back", eulogium->content_cur);
- elm_object_part_content_set(eulogium->flip, "front", eulogium->content_next);
+ return eulogium->layout;
+}
- return eulogium->flip;
+static void eulogium_setup(struct eulogium_data *eulogium)
+{
+ eulogium->filepath = "/home/oliver"; /* TODO: this is just a quick hack until we get media insert detect */
+ eulogium_button_cb_data_set(&but_main_print, eulogium);
+ eulogium_button_cb_data_set(&but_main_material, eulogium);
+ eulogium_button_cb_data_set(&but_main_maintanance, eulogium);
}
EAPI_MAIN int elm_main(int argc, char **argv)
{
Eina_Bool quit_option = EINA_FALSE;
static const Ecore_Getopt optdesc = {
- "eulogium",
+ PACKAGE_NAME,
"%prog [options]",
PACKAGE_VERSION,
COPYRIGHT,
@@ -343,8 +445,8 @@ EAPI_MAIN int elm_main(int argc, char **argv)
};
int args;
struct eulogium_data eulogium;
- Evas_Object *object;
- Evas_Object *splash_window;
+ Evas_Object *window, *object;
+// Evas_Object *splash_window;
// Eina_List *engines, *l;
args = ecore_getopt_parse(&optdesc, values, argc, argv);
@@ -371,6 +473,7 @@ EAPI_MAIN int elm_main(int argc, char **argv)
#if (ELM_VERSION_MAJOR > 1) || (ELM_VERSION_MINOR >= 10)
elm_config_accel_preference_set("accel");
#endif
+
#if 0 /* TODO make icon */
icon = evas_object_image_add(evas_object_evas_get(win));
snprintf(buf, sizeof(buf), "%s/images/rage.png", elm_app_data_dir_get());
@@ -380,51 +483,51 @@ EAPI_MAIN int elm_main(int argc, char **argv)
elm_config_focus_highlight_enabled_set(EINA_TRUE);
elm_config_focus_highlight_animate_set(EINA_TRUE);
- eulogium.window = elm_win_add(NULL, PACKAGE_NAME, ELM_WIN_BASIC);
- if (!eulogium.window)
+ window = elm_win_add(NULL, PACKAGE_NAME, ELM_WIN_BASIC);
+ if (!window)
return EXIT_FAILURE;
- elm_win_title_set(eulogium.window, PACKAGE_NAME);
- evas_object_resize(eulogium.window, 128, 64);
- evas_object_repeat_events_set(eulogium.window, EINA_TRUE);
- elm_win_autodel_set(eulogium.window, EINA_TRUE);
- evas_object_smart_callback_add(eulogium.window, "delete,request", _cb_eulogium_exit, NULL);
- evas_object_event_callback_add(eulogium.window, EVAS_CALLBACK_RESIZE, _cb_eulogium_resize, NULL);
-
- object = elm_bg_add(eulogium.window);
+ elm_win_title_set(window, PACKAGE_NAME);
+ evas_object_resize(window, 128, 64);
+ evas_object_repeat_events_set(window, EINA_TRUE);
+ elm_win_autodel_set(window, EINA_TRUE);
+ evas_object_smart_callback_add(window, "delete,request", _cb_eulogium_exit, NULL);
+ evas_object_event_callback_add(window, EVAS_CALLBACK_RESIZE, _cb_eulogium_resize, NULL);
+
+ object = elm_bg_add(window);
if (!object)
return EXIT_FAILURE;
elm_bg_color_set(object, 0, 0, 0);
evas_object_size_hint_weight_set(object, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(object, EVAS_HINT_FILL, EVAS_HINT_FILL);
- elm_win_resize_object_add(eulogium.window, object);
+ elm_win_resize_object_add(window, object);
evas_object_show(object);
-
- object = eulogium_menu(&eulogium);
+ eulogium_setup(&eulogium);
+ object = eulogium_main_menu(window, &eulogium);
if (!object)
return EXIT_FAILURE;
evas_object_size_hint_weight_set(object, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(object, EVAS_HINT_FILL, EVAS_HINT_FILL);
- elm_win_resize_object_add(eulogium.window, object);
+ elm_win_resize_object_add(window, object);
evas_object_show(object);
#if 0 /* Ideally we want to add the callbacks to the window. This currently does not work */
- evas_object_event_callback_add(eulogium.window, EVAS_CALLBACK_MOUSE_WHEEL, _cb_eulogium_input_wheel, NULL);
+ evas_object_event_callback_add(window, EVAS_CALLBACK_MOUSE_WHEEL, _cb_eulogium_input_wheel, NULL);
#else /* HACK: draw a transparent rectangle over the entire window and capture events we are interested in */
- object = evas_object_rectangle_add(evas_object_evas_get(eulogium.window));
+ object = evas_object_rectangle_add(evas_object_evas_get(window));
if (!object)
return EXIT_FAILURE;
evas_object_size_hint_weight_set(object, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_color_set(object, 0, 0, 0, 0);
evas_object_repeat_events_set(object, EINA_TRUE);
evas_object_event_callback_add(object, EVAS_CALLBACK_MOUSE_DOWN, _cb_eulogium_input_button, &eulogium);
- evas_object_event_callback_add(object, EVAS_CALLBACK_MOUSE_WHEEL, _cb_eulogium_input_wheel, eulogium.window);
+ evas_object_event_callback_add(object, EVAS_CALLBACK_MOUSE_WHEEL, _cb_eulogium_input_wheel, window);
/* TODO: don't these two input events repeat/fall through, everything else, may/should. */
evas_object_show(object);
- elm_win_resize_object_add(eulogium.window, object);
+ elm_win_resize_object_add(window, object);
#endif
- evas_object_show(eulogium.window);
+ evas_object_show(window);
elm_run();
diff --git a/src/eulogium.h b/src/eulogium.h
new file mode 100644
index 0000000..2158aa6
--- /dev/null
+++ b/src/eulogium.h
@@ -0,0 +1,38 @@
+/* TODO COPYRIGHT */
+
+#ifndef _EULOGIUM_H
+#define _EULOGIUM_H
+
+struct eulogium_data {
+ Evas_Object *layout;
+ Evas_Object *content_prev;
+ Evas_Object *content_cur;
+ char *filepath;
+ void *data;
+};
+
+
+struct button_cb {
+ void (*func)(void *data, Evas_Object *object, void *event_info);
+ void *data;
+ const char *info;
+};
+
+struct button_def {
+ const char *text;
+ struct button_cb cb;
+ void *data;
+};
+
+void eulogium_filepath_set(struct eulogium_data *eulogium, char *filepath);
+
+void eulogium_button_cb_set(struct button_def *button, struct button_cb *cb);
+void eulogium_button_cb_data_set(struct button_def *button, void *data);
+void eulogium_button_data_set(struct button_def *button, void *data);
+
+Evas_Object *eulogium_main_menu(Evas_Object *window, struct eulogium_data *eulogium);
+Evas_Object *eulogium_tripple_button_menu(struct eulogium_data *eulogium, const struct button_def *left, const struct button_def *right, const struct button_def *bottom);
+Evas_Object *eulogium_print_menu(struct eulogium_data *eulogium);
+Evas_Object *eulogium_print_progress(struct eulogium_data *eulogium);
+
+#endif /* _EULOGIUM_H */