2 # include "elementary_config.h"
4 #include <Elementary.h>
9 #define PROPS_VIEW_COL 2
11 static Evas_Object *table = NULL;
12 static Elm_App_Client *app_selected = NULL;
13 static Eina_List *apps_list = NULL;
15 static void _app_view_clicked(void *data, Evas_Object *obj, void *event_info);
16 static void _apps_list_update(void);
18 static void _btn_close_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
20 Elm_App_Client_View *view = data;
21 eo_do(view, elm_app_client_view_close(NULL, NULL));
24 static void _btn_pause_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
26 Elm_App_Client_View *view = data;
27 eo_do(view, elm_app_client_view_pause(NULL, NULL));
30 static void _btn_resume_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
32 Elm_App_Client_View *view = data;
33 eo_do(view, elm_app_client_view_resume(NULL, NULL));
37 _app_view_prop_changed_cb(void *data EINA_UNUSED, Eo *obj, const Eo_Event_Description *desc EINA_UNUSED, void *event_info EINA_UNUSED)
39 Elm_App_View_State state = ELM_APP_VIEW_STATE_UNKNOWN;
41 eo_do(obj, state = elm_app_client_view_state_get());
43 if (state == ELM_APP_VIEW_STATE_CLOSED)
45 Evas_Object *props = elm_table_child_get(table, PROPS_VIEW_COL, 0);
46 elm_table_unpack(table, props);
47 evas_object_del(props);
50 _app_view_clicked(obj, NULL, NULL);
56 _app_view_clicked(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
58 Elm_App_Client_View *view = data;
59 Evas_Object *view_props, *close_btn, *resume_btn, *pause_btn;
60 const char *title = NULL, *icon = NULL;
61 int new_events = 0, window = 0;
62 unsigned short progress = 0;
63 Elm_App_View_State state = ELM_APP_VIEW_STATE_UNKNOWN;
66 view_props = elm_table_child_get(table, PROPS_VIEW_COL, 0);
69 Elm_App_Client_View *old_view;
71 old_view = evas_object_data_del(view_props, "view");
73 eo_event_callback_del(ELM_APP_CLIENT_VIEW_EVENT_PROPERTY_CHANGED,
74 _app_view_prop_changed_cb, table));
75 elm_list_clear(view_props);
79 view_props = elm_list_add(table);
80 evas_object_size_hint_align_set(view_props, EVAS_HINT_FILL,
82 evas_object_show(view_props);
83 elm_table_pack(table, view_props, PROPS_VIEW_COL, 0, 1, 1);
86 evas_object_data_set(view_props, "view", view);
88 eo_do(view, title = elm_app_client_view_title_get(),
89 icon = elm_app_client_view_icon_get(),
90 progress = elm_app_client_view_progress_get(),
91 new_events = elm_app_client_view_new_events_get(),
92 window = elm_app_client_view_window_get(),
93 eo_event_callback_add(ELM_APP_CLIENT_VIEW_EVENT_PROPERTY_CHANGED,
94 _app_view_prop_changed_cb, table));
96 snprintf(buffer, sizeof(buffer), "Title=%s", title);
97 elm_list_item_append(view_props, buffer, NULL, NULL, NULL, NULL);
99 snprintf(buffer, sizeof(buffer), "Icon=%s", icon);
100 elm_list_item_append(view_props, buffer, NULL, NULL, NULL, NULL);
102 snprintf(buffer, sizeof(buffer), "Progress=%d", progress);
103 elm_list_item_append(view_props, buffer, NULL, NULL, NULL, NULL);
105 snprintf(buffer, sizeof(buffer), "New events=%d", new_events);
106 elm_list_item_append(view_props, buffer, NULL, NULL, NULL, NULL);
108 snprintf(buffer, sizeof(buffer), "WindowID=%d", window);
109 elm_list_item_append(view_props, buffer, NULL, NULL, NULL, NULL);
111 eo_do(view, state = elm_app_client_view_state_get());
112 if (state == ELM_APP_VIEW_STATE_LIVE)
113 snprintf(buffer, sizeof(buffer), "State=alive");
114 else if (state == ELM_APP_VIEW_STATE_PAUSED)
115 snprintf(buffer, sizeof(buffer), "State=paused");
116 else if (state == ELM_APP_VIEW_STATE_CLOSED)
117 snprintf(buffer, sizeof(buffer), "State=closed");
118 else if (state == ELM_APP_VIEW_STATE_SHALLOW)
119 snprintf(buffer, sizeof(buffer), "State=shallow");
121 snprintf(buffer, sizeof(buffer), "State=unknown");
122 elm_list_item_append(view_props, buffer, NULL, NULL, NULL, NULL);
124 close_btn = elm_button_add(view_props);
125 elm_object_text_set(close_btn, "Close view");
126 evas_object_smart_callback_add(close_btn, "clicked", _btn_close_cb, view);
127 elm_list_item_append(view_props, NULL, close_btn, NULL, NULL, NULL);
129 pause_btn = elm_button_add(view_props);
130 elm_object_text_set(pause_btn, "Pause view");
131 evas_object_smart_callback_add(pause_btn, "clicked", _btn_pause_cb, view);
132 elm_list_item_append(view_props, NULL, pause_btn, NULL, NULL, NULL );
134 resume_btn = elm_button_add(view_props);
135 elm_object_text_set(resume_btn, "Resume view");
136 evas_object_smart_callback_add(resume_btn, "clicked", _btn_resume_cb, view);
137 elm_list_item_append(view_props, NULL, resume_btn, NULL, NULL, NULL );
139 elm_list_go(view_props);
143 _popup_close_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
145 evas_object_del(data);
148 static void app_client_view_open_cb(void *data EINA_UNUSED, Elm_App_Client_View *view, const char *error, const char *error_message)
150 Evas_Object *popup, *btn_ok;
153 popup = elm_popup_add(table);
157 _app_view_clicked(view, NULL, NULL);
161 snprintf(buf, sizeof(buf), "Some error happen opening view: %s %s", error, error_message);
162 elm_object_part_text_set(popup, "default", buf);
164 btn_ok = elm_button_add(popup);
165 elm_object_text_set(btn_ok, "Ok");
166 elm_object_part_content_set(popup, "button1", btn_ok);
167 evas_object_smart_callback_add(btn_ok, "clicked", _popup_close_cb, popup);
169 elm_popup_orient_set(popup, ELM_POPUP_ORIENT_TOP);
170 evas_object_show(popup);
173 static void _popup_btn_open_view_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
175 Evas_Object *popup = data;
176 Eina_Value *args = NULL;//TODO fill with args of popup
177 Elm_App_Client *app = evas_object_data_get(popup, "app");
179 eo_do(app, elm_app_client_view_open(args, app_client_view_open_cb, NULL));
181 evas_object_del(popup);
185 _app_view_open(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
187 Elm_App_Client *app = data;
188 Evas_Object *popup, *btn_open, *btn_cancel, *args_box;
190 popup = elm_popup_add(table);
191 elm_object_part_text_set(popup, "title,text", "Open a view");
193 btn_open = elm_button_add(popup);
194 elm_object_text_set(btn_open, "Open");
195 elm_object_part_content_set(popup, "button1", btn_open);
196 evas_object_smart_callback_add(btn_open, "clicked", _popup_btn_open_view_cb, popup);
197 evas_object_show(btn_open);
199 btn_cancel = elm_button_add(popup);
200 elm_object_text_set(btn_cancel, "Cancel");
201 elm_object_part_content_set(popup, "button2", btn_cancel);
202 evas_object_smart_callback_add(btn_cancel, "clicked", _popup_close_cb, popup);
203 evas_object_show(btn_cancel);
205 args_box = elm_box_add(popup);
206 elm_object_part_content_set(popup, "default", args_box);
207 elm_object_part_text_set(popup, "default", "TODO: add some entrys to add some parameters to view.");
209 evas_object_data_set(popup, "app", app);
210 elm_popup_orient_set(popup, ELM_POPUP_ORIENT_TOP);
211 evas_object_show(popup);
214 static void _app_close_all_views_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
216 Elm_App_Client *app = data;
217 eo_do(app, elm_app_client_view_all_close());
221 _app_terminate_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
223 Elm_App_Client *app = data;
224 eo_do(app, elm_app_client_terminate());
228 _app_clicked(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
230 Evas_Object *views, *btn_close_all, *btn_terminate, *btn_open_view;
231 Eina_Iterator *views_iter = NULL;
232 Elm_App_Client_View *client_view;
233 Elm_App_Client *app = data;
237 views = elm_table_child_get(table, VIEWS_COL, 0);
240 views = elm_list_add(table);
241 evas_object_size_hint_align_set(views, EVAS_HINT_FILL, EVAS_HINT_FILL);
242 evas_object_show(views);
243 elm_table_pack(table, views, VIEWS_COL, 0, 1, 1);
246 elm_list_clear(views);
248 btn_open_view = elm_button_add(views);
249 elm_object_text_set(btn_open_view, "Open a view");
250 evas_object_smart_callback_add(btn_open_view, "clicked", _app_view_open, app);
251 elm_list_item_append(views, NULL, btn_open_view, NULL, NULL, NULL);
253 eo_do(app, views_iter = elm_app_client_views_get());
254 EINA_ITERATOR_FOREACH(views_iter, client_view)
256 const char *path = NULL;
258 eo_do(client_view, path = elm_app_client_view_path_get());
259 elm_list_item_append(views, path, NULL, NULL, _app_view_clicked, client_view);
261 eina_iterator_free(views_iter);
263 btn_close_all = elm_button_add(views);
264 elm_object_text_set(btn_close_all, "Close all views");
265 evas_object_smart_callback_add(btn_close_all, "clicked", _app_close_all_views_cb, app);
266 elm_list_item_append(views, NULL, btn_close_all, NULL, NULL, NULL);
268 btn_terminate = elm_button_add(views);
269 elm_object_text_set(btn_terminate, "Terminate application");
270 evas_object_smart_callback_add(btn_terminate, "clicked", _app_terminate_cb, app);
271 elm_list_item_append(views, NULL, btn_terminate, NULL, NULL, NULL);
277 _view_list_update_cb(void *data EINA_UNUSED, Eo *obj, const Eo_Event_Description *desc EINA_UNUSED, void *event_info EINA_UNUSED)
279 if (app_selected == obj)
280 _app_clicked(obj, NULL, NULL);
285 _win_del(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED)
288 EINA_LIST_FREE(apps_list, app)
293 _app_open(const char *package)
298 EINA_LIST_FOREACH(apps_list, l, app)
300 const char *app_package = NULL;
302 eo_do(app, app_package = elm_app_client_package_get());
303 if (!strcmp(package, app_package))
307 app = eo_add(ELM_APP_CLIENT_CLASS, NULL,
308 elm_app_client_constructor(package));
310 eo_event_callback_add(ELM_APP_CLIENT_EVENT_VIEW_LIST_LOADED,
311 _view_list_update_cb, table),
312 eo_event_callback_add(ELM_APP_CLIENT_EVENT_VIEW_CREATED,
313 _view_list_update_cb, table),
314 eo_event_callback_add(ELM_APP_CLIENT_EVENT_VIEW_DELETED,
315 _view_list_update_cb, table));
316 apps_list = eina_list_append(apps_list, app);
320 _btn_app_open_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
322 Evas_Object *entry = data;
323 const char *pkg = elm_object_text_get(entry);
333 _open_custom_app_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info)
335 elm_list_item_selected_set(event_info, EINA_FALSE);
336 elm_object_focus_set(data, EINA_TRUE);
340 _apps_list_update(void)
342 Evas_Object *entry, *btn_open, *apps;
346 apps = elm_table_child_get(table, APPS_COL, 0);
347 elm_list_clear(apps);
349 EINA_LIST_FOREACH(apps_list, l, app)
351 const char *app_package = NULL;
352 eo_do(app, app_package = elm_app_client_package_get());
353 elm_list_item_append(apps, app_package, NULL, NULL, _app_clicked, app);
356 entry = elm_entry_add(apps);
357 elm_entry_single_line_set(entry, EINA_TRUE);
358 evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, 0.0);
359 evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, 0.5);
361 btn_open = elm_button_add(apps);
362 elm_object_text_set(btn_open, "Open");
363 evas_object_smart_callback_add(btn_open, "clicked", _btn_app_open_cb, entry);
364 elm_list_item_append(apps, NULL, entry, btn_open, _open_custom_app_cb, entry);
370 test_task_switcher(void *data EINA_UNUSED,
371 Evas_Object *obj EINA_UNUSED,
372 void *event_info EINA_UNUSED)
374 Evas_Object *win, *apps;
378 printf("Task switcher already open.\n");
382 win = elm_win_util_standard_add("task switcher", "Task switcher");
383 elm_win_autodel_set(win, EINA_TRUE);
385 evas_object_smart_callback_add(win, "delete,request", _win_del, NULL);
387 table = elm_table_add(win);
388 elm_win_resize_object_add(win, table);
389 elm_table_padding_set(table, 0, 0);
390 elm_table_homogeneous_set(table, EINA_TRUE);
391 evas_object_size_hint_weight_set(table, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
392 evas_object_size_hint_align_set(table, EVAS_HINT_FILL, EVAS_HINT_FILL);
394 _app_open("org.enlightenment.message");
395 _app_open("org.enlightenment.phone");
397 apps = elm_list_add(table);
398 evas_object_size_hint_align_set(apps, EVAS_HINT_FILL, EVAS_HINT_FILL);
399 evas_object_show(apps);
400 elm_table_pack(table, apps, APPS_COL, 0, 1, 1);
403 evas_object_show(table);
404 evas_object_resize(win, 1024, 768);
405 evas_object_show(win);