summaryrefslogtreecommitdiff
path: root/src/examples/filemvc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/examples/filemvc.c')
-rw-r--r--src/examples/filemvc.c211
1 files changed, 211 insertions, 0 deletions
diff --git a/src/examples/filemvc.c b/src/examples/filemvc.c
new file mode 100644
index 000000000..9334b499d
--- /dev/null
+++ b/src/examples/filemvc.c
@@ -0,0 +1,211 @@
+//#ifdef HAVE_CONFIG_H
+# include "../../elementary_config.h"
+//#endif
+
+#include <Elementary.h>
+#include <Efl.h>
+#include <Eio.h>
+#include <eio_model.eo.h>
+#include <stdio.h>
+#include <Eio.h>
+#include <elm_view_form.h>
+
+#define EFL_MODEL_TEST_FILENAME_PATH "/tmp"
+
+struct _Efl_Model_Test_Filemvc_Data
+{
+ Eo *fileview;
+ Eo *treeview;
+ Eo *formview;
+ Eo *treemodel;
+ Evas_Object *thumb;
+ char imagedefault_path[256];
+};
+typedef struct _Efl_Model_Test_Filemvc_Data Efl_Model_Test_Filemvc_Data;
+
+static void
+_cleanup_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ Efl_Model_Test_Filemvc_Data *priv = (Efl_Model_Test_Filemvc_Data *)data;
+ eo_unref(priv->fileview);
+ eo_unref(priv->treeview);
+ eo_unref(priv->formview);
+ eo_unref(priv->treemodel);
+}
+
+static Eina_Bool
+_filter_cb(void *data EINA_UNUSED, Eio_File *handler EINA_UNUSED, const Eina_File_Direct_Info *info)
+{
+ if (info->type == EINA_FILE_DIR && info->path[info->name_start] != '.') return EINA_TRUE;
+
+ return EINA_FALSE;
+}
+
+static Eina_Bool
+_list_selected_cb(void *data EINA_UNUSED, Eo *obj EINA_UNUSED, const Eo_Event_Description *desc EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ Efl_Model_Test_Filemvc_Data *priv = data;
+ Eo *child = event_info;
+ ethumb_client_file_free(elm_thumb_ethumb_client_get());
+
+ printf("LIST selected model\n");
+ eo_do(priv->formview, elm_view_form_model_set(child));
+ return EINA_TRUE;
+}
+
+static Eina_Bool
+_tree_selected_cb(void *data, Eo *obj EINA_UNUSED, const Eo_Event_Description *desc EINA_UNUSED, void *event_info)
+{
+ printf("TREE selected model\n");
+ Efl_Model_Test_Filemvc_Data *priv = data;
+ Eo *child = event_info;
+ const Eina_Value *vpath;
+ Eo *model;
+ char *path;
+
+ eo_do(child, efl_model_property_get("path", &vpath));
+ eina_value_get(vpath, &path);
+ model = eo_add(EIO_MODEL_CLASS, NULL, eio_model_path_set(path));
+ eo_do(model, efl_model_load());
+ eo_do(priv->fileview, elm_view_list_model_set(model));
+// eo_unref(model);
+ return EINA_TRUE;
+}
+
+static void
+_widget_init(Evas_Object *widget)
+{
+ evas_object_size_hint_weight_set(widget, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(widget, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_show(widget);
+}
+
+Evas_Object *
+_label_init(Evas_Object *win, Evas_Object *box, const char *text)
+{
+ Evas_Object *widget = elm_label_add(win);
+ elm_label_line_wrap_set(widget, ELM_WRAP_CHAR);
+ elm_object_text_set(widget, text);
+ elm_box_pack_end(box, widget);
+ evas_object_size_hint_weight_set(widget, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_size_hint_align_set(widget, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_show(widget);
+
+ return widget;
+}
+
+
+static void
+_thumb_error_cb(void *data, Evas_Object *o EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ Efl_Model_Test_Filemvc_Data *priv = data;
+ printf("thumbnail generation error.\n");
+ elm_thumb_file_set(priv->thumb, priv->imagedefault_path, NULL);
+ elm_thumb_reload(priv->thumb);
+}
+
+EAPI_MAIN int
+elm_main(int argc, char **argv)
+{
+ Efl_Model_Test_Filemvc_Data priv;
+ Evas_Object *win, *panes, *bxr, *genlist, *vpanes;
+ Evas_Object *entry;
+ char *dirname;
+
+ memset(&priv, 0, sizeof(Efl_Model_Test_Filemvc_Data));
+ elm_app_info_set(elm_main, "elementary", "images/logo.png");
+ sprintf(priv.imagedefault_path, "%s/images/logo.png", elm_app_data_dir_get());
+
+ //win
+ win = elm_win_util_standard_add("viewlist", "Viewlist");
+ elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
+ elm_win_autodel_set(win, EINA_TRUE);
+
+ panes = elm_panes_add(win);
+// elm_box_horizontal_set(box, EINA_TRUE);
+ evas_object_size_hint_weight_set(panes, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_win_resize_object_add(win, panes);
+
+ ecore_init();
+ eio_init();
+
+ if(argv[1] != NULL) dirname = argv[1];
+ else dirname = EFL_MODEL_TEST_FILENAME_PATH;
+
+ //treemodel
+ priv.treemodel = eo_add(EIO_MODEL_CLASS, NULL, eio_model_path_set(dirname));
+ eo_do(priv.treemodel, eio_model_children_filter_set(_filter_cb, NULL));
+ eo_do(priv.treemodel, efl_model_load());
+
+ //treeview
+ genlist = elm_genlist_add(win);
+ priv.treeview = eo_add(ELM_VIEW_LIST_CLASS, NULL, elm_view_list_genlist_set(genlist, ELM_GENLIST_ITEM_TREE, NULL));
+ eo_do(priv.treeview, elm_view_list_property_connect("filename", "elm.text"),
+ elm_view_list_property_connect("icon", "elm.swallow.icon"),
+ elm_view_list_model_set(priv.treemodel));
+ _widget_init(genlist);
+ elm_object_part_content_set(panes, "left", genlist);
+ eo_do(panes, elm_obj_panes_content_left_size_set(0.3));
+
+ vpanes = elm_panes_add(win);
+ _widget_init(vpanes);
+ elm_object_part_content_set(panes, "right", vpanes);
+ eo_do(priv.treeview, eo_event_callback_add(ELM_VIEW_LIST_EVENT_MODEL_SELECTED, _tree_selected_cb, &priv));
+ //listview
+ genlist = elm_genlist_add(win);
+ priv.fileview = eo_add(ELM_VIEW_LIST_CLASS, NULL, elm_view_list_genlist_set(genlist, ELM_GENLIST_ITEM_NONE, "double_label"));
+ eo_do(priv.fileview, elm_view_list_property_connect("filename", "elm.text"),
+ elm_view_list_property_connect("size", "elm.text.sub"));
+
+ evas_object_event_callback_add(win, EVAS_CALLBACK_DEL, _cleanup_cb, &priv);
+ _widget_init(genlist);
+ elm_object_part_content_set(vpanes, "left", genlist);
+
+ eo_do(priv.fileview, eo_event_callback_add(ELM_VIEW_LIST_EVENT_MODEL_SELECTED, _list_selected_cb, &priv));
+
+ //formview
+ bxr = elm_box_add(win);
+ _widget_init(bxr);
+ elm_object_part_content_set(vpanes, "right", bxr);
+ priv.formview = eo_add(ELM_VIEW_FORM_CLASS, NULL);
+
+ /*Label widget */
+ eo_do(priv.formview, elm_view_form_widget_add("filename", _label_init(win, bxr, "File Name")));
+
+ _label_init(win, bxr, "Size:");
+ eo_do(priv.formview, elm_view_form_widget_add("size", _label_init(win, bxr, "")));
+
+ _label_init(win, bxr, "Modified:");
+ eo_do(priv.formview, elm_view_form_widget_add("mtime", _label_init(win, bxr, "")));
+
+ /* Entry widget */
+ entry = elm_entry_add(win);
+ elm_entry_single_line_set(entry, EINA_TRUE);
+ evas_object_size_hint_weight_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ elm_box_pack_end(bxr, entry);
+ evas_object_show(entry);
+ eo_do(priv.formview, elm_view_form_widget_add("path", entry));
+
+ /* Thumb widget */
+ elm_need_ethumb();
+ priv.thumb = elm_thumb_add(win);
+ _widget_init(priv.thumb);
+ elm_box_pack_end(bxr, priv.thumb);
+ elm_thumb_editable_set(priv.thumb, EINA_FALSE);
+ eo_do(priv.formview, elm_view_form_widget_add("path", priv.thumb));
+ evas_object_smart_callback_add(priv.thumb, "generate,error", _thumb_error_cb, &priv);
+ evas_object_smart_callback_add(priv.thumb, "load,error", _thumb_error_cb, &priv);
+
+ //showall
+ evas_object_resize(win, 800, 400);
+ evas_object_show(panes);
+ evas_object_show(win);
+
+ elm_run();
+ elm_shutdown();
+ ecore_shutdown();
+
+ return 0;
+}
+ELM_MAIN()
+