aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/extantz/woMan.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/extantz/woMan.c')
-rw-r--r--src/extantz/woMan.c300
1 files changed, 300 insertions, 0 deletions
diff --git a/src/extantz/woMan.c b/src/extantz/woMan.c
new file mode 100644
index 0000000..6eac003
--- /dev/null
+++ b/src/extantz/woMan.c
@@ -0,0 +1,300 @@
1#include "extantz.h"
2
3
4Eina_Hash *grids;
5Eina_Hash *viewers;
6
7static char *gridTest[][3] =
8{
9 {"3rd Rock Grid", "http://grid.3rdrockgrid.com:8002/", "http://grid.3rdrockgrid.com/3rg_login"},
10 {"Infinite Grid", "http://grid.infinitegrid.org:8002/", "http://www.infinitegrid.org/loginscreen.php"},
11 {"Second Life Grid", "https://login.agni.lindenlab.com/cgi-bin/login.cgi", "http://secondlife.com/"},
12 {NULL, NULL, NULL}
13};
14
15static char *accountTest[][3] =
16{
17 {"3rd Rock Grid", "onefang rejected", "password"},
18 {"Infinite Grid", "infinite onefang", "MyB1GSecrit"},
19 {"Infinite Grid", "onefang rejected", "MySecrit"},
20 {NULL, NULL, NULL}
21};
22
23
24static char *viewerTest[][3] =
25{
26 {"Imprudence", "1.4.0 beta 3", ""},
27 {"Kokua", "3.4.4.25633", ""},
28 {"meta-impy", "1.4.0 beta 1.5", ""},
29 {"SL", "v3", ""},
30 {NULL, NULL, NULL}
31};
32
33
34static Elm_Genlist_Item_Class *grid_gic = NULL;
35static Elm_Genlist_Item_Class *account_gic = NULL;
36static Elm_Genlist_Item_Class *viewer_gic = NULL;
37
38//static const char *img1 = PACKAGE_DATA_DIR "plant_01.jpg";
39//static const char *img2 = PACKAGE_DATA_DIR "sky_01.jpg";
40static const char *img3 = "rock_01.jpg";
41
42
43
44static Evas_Object *_content_image_new(Evas_Object *parent, const char *img)
45{
46 Evas_Object *ic;
47
48 ic = elm_icon_add(parent);
49 elm_image_file_set(ic, img, NULL);
50 return ic;
51}
52
53static void _promote(void *data, Evas_Object *obj , void *event_info )
54{
55 elm_naviframe_item_promote(data);
56}
57
58static char *_grid_label_get(void *data, Evas_Object *obj, const char *part)
59{
60 ezGrid *thisGrid = data;
61 char buf[256];
62
63 if (!strcmp(part, "elm.text"))
64 {
65 int count = eina_clist_count(&(thisGrid->accounts));
66
67 if (0 == count)
68 snprintf(buf, sizeof(buf), "%s (no accounts)", thisGrid->name);
69 else if (1 == count)
70 snprintf(buf, sizeof(buf), "%s (%d account)", thisGrid->name, count);
71 else
72 snprintf(buf, sizeof(buf), "%s (%d accounts)", thisGrid->name, count);
73 }
74 else
75 snprintf(buf, sizeof(buf), "%s", thisGrid->loginURI);
76 return strdup(buf);
77}
78
79static Evas_Object *_grid_content_get(void *data, Evas_Object *obj, const char *part)
80{
81 ezGrid *thisGrid = data;
82 Evas_Object *ic = elm_icon_add(obj);
83
84 if (!strcmp(part, "elm.swallow.icon"))
85 elm_icon_standard_set(ic, thisGrid->icon);
86
87 evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
88 return ic;
89}
90
91static char * _account_label_get(void *data, Evas_Object *obj, const char *part)
92{
93 ezAccount *thisAccount = data;
94 char buf[256];
95
96 buf[0] = '\0';
97 if (!strcmp(part, "elm.text"))
98 snprintf(buf, sizeof(buf), "%s", thisAccount->name);
99
100 return strdup(buf);
101}
102
103static Evas_Object *_account_content_get(void *data, Evas_Object *obj, const char *part)
104{
105 ezAccount *thisAccount = data;
106 Evas_Object *ic = elm_icon_add(obj);
107
108 if (!strcmp(part, "elm.swallow.icon"))
109 elm_icon_standard_set(ic, thisAccount->icon);
110
111 evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
112 return ic;
113}
114
115static char *_viewer_label_get(void *data, Evas_Object *obj, const char *part)
116{
117 ezViewer *thisViewer = data;
118 char buf[256];
119
120 if (!strcmp(part, "elm.text"))
121 snprintf(buf, sizeof(buf), "%s", thisViewer->name);
122 else
123 snprintf(buf, sizeof(buf), "%s", thisViewer->version);
124 return strdup(buf);
125}
126
127static Evas_Object *_viewer_content_get(void *data, Evas_Object *obj, const char *part)
128{
129 ezViewer *thisViewer = data;
130 Evas_Object *ic = elm_icon_add(obj);
131
132 if (!strcmp(part, "elm.swallow.icon"))
133 elm_icon_standard_set(ic, thisViewer->icon);
134
135 evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
136 return ic;
137}
138
139
140static void _grid_sel_cb(void *data, Evas_Object *obj, void *event_info)
141{
142 ezGrid *thisGrid = data;
143 GLData *gld = thisGrid->gld;
144 char buf[PATH_MAX];
145
146// sprintf(buf, "dillo -f -g '%dx%d+%d+%d' %s &", gld->win_w - (gld->win_w / 5), gld->win_h - 30, gld->win_w / 5, gld->win_y, thisGrid->splashPage);
147 sprintf(buf, "uzbl -g '%dx%d+%d+%d' -u %s &", gld->win_w - (gld->win_w / 5), gld->win_h - 30, gld->win_w / 5, gld->win_y, thisGrid->splashPage);
148 printf("%s ### genlist obj [%p], item pointer [%p]\n", buf, obj, event_info);
149// comment this out for now, busy dealing with input stuff, don't want to trigger this multiple times.
150// system(buf);
151}
152
153
154void woMan_add(GLData *gld)
155{
156// Evas_Object *win, *bg, *bx, *ic, *bb, *av, *en, *bt, *nf, *tab, *tb, *gridList, *viewerList, *menu;
157 Evas_Object *win, *bx, *bt, *nf, *tab, *tb, *gridList, *viewerList, *menu;
158 Elm_Object_Item *tb_it, *menu_it, *tab_it;
159 char buf[PATH_MAX];
160 int i;
161
162 win = fang_win_add(gld);
163
164 bx = elm_box_add(win);
165 elm_win_resize_object_add(win, bx);
166 evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
167 evas_object_size_hint_align_set(bx, EVAS_HINT_FILL, EVAS_HINT_FILL);
168
169 // A tab thingy.
170 tb = elm_toolbar_add(win);
171 evas_object_size_hint_weight_set(tb, EVAS_HINT_EXPAND, 0.0);
172 evas_object_size_hint_align_set(tb, EVAS_HINT_FILL, EVAS_HINT_FILL);
173 elm_toolbar_shrink_mode_set(tb, ELM_TOOLBAR_SHRINK_SCROLL);
174
175 // Menu.
176 tb_it = elm_toolbar_item_append(tb, NULL, "Menu", NULL, NULL);
177 elm_toolbar_item_menu_set(tb_it, EINA_TRUE);
178 // Priority is for when toolbar items are set to hide or menu when there are too many of them. They get hidden or put on the menu based on priority.
179 elm_toolbar_item_priority_set(tb_it, 9999);
180 elm_toolbar_menu_parent_set(tb, win);
181 menu = elm_toolbar_item_menu_get(tb_it);
182
183 menu_it = elm_menu_item_add(menu, NULL, NULL, "edit", NULL, NULL);
184 elm_menu_item_add(menu, menu_it, NULL, "preferences", NULL, NULL);
185 menu_it = elm_menu_item_add(menu, NULL, NULL, "help", NULL, NULL);
186 elm_menu_item_add(menu, menu_it, NULL, "about woMan", NULL, NULL);
187 elm_menu_item_separator_add(menu, NULL);
188 menu_it = elm_menu_item_add(menu, NULL, NULL, "advanced", NULL, NULL);
189 elm_menu_item_add(menu, menu_it, NULL, "debug settings", NULL, NULL);
190
191 // The toolbar needs to be packed into the box AFTER the menus are added.
192 elm_box_pack_end(bx, tb);
193 evas_object_show(tb);
194
195 gridList = elm_genlist_add(win);
196 grids = eina_hash_stringshared_new(free);
197
198 grid_gic = elm_genlist_item_class_new();
199 grid_gic->item_style = "double_label";
200 grid_gic->func.text_get = _grid_label_get;
201 grid_gic->func.content_get = _grid_content_get;
202 grid_gic->func.state_get = NULL;
203 grid_gic->func.del = NULL;
204 for (i = 0; NULL != gridTest[i][0]; i++)
205 {
206 ezGrid *thisGrid = calloc(1, sizeof(ezGrid));
207
208 if (thisGrid)
209 {
210 eina_clist_init(&(thisGrid->accounts));
211 eina_clist_init(&(thisGrid->landmarks));
212 thisGrid->name = gridTest[i][0];
213 thisGrid->loginURI = gridTest[i][1];
214 thisGrid->splashPage = gridTest[i][2];
215 thisGrid->icon = "folder";
216 thisGrid->gld = gld;
217 thisGrid->item = elm_genlist_item_append(gridList, grid_gic, thisGrid, NULL, ELM_GENLIST_ITEM_TREE, _grid_sel_cb, thisGrid);
218 eina_hash_add(grids, thisGrid->name, thisGrid);
219 }
220 }
221
222 account_gic = elm_genlist_item_class_new();
223 account_gic->item_style = "default";
224 account_gic->func.text_get = _account_label_get;
225 account_gic->func.content_get = _account_content_get;
226 account_gic->func.state_get = NULL;
227 account_gic->func.del = NULL;
228 for (i = 0; NULL != accountTest[i][0]; i++)
229 {
230 ezAccount *thisAccount = calloc(1, sizeof(ezAccount));
231 ezGrid *grid = eina_hash_find(grids, accountTest[i][0]);
232
233 if (thisAccount && grid)
234 {
235 thisAccount->name = accountTest[i][1];
236 thisAccount->password = accountTest[i][2];
237 thisAccount->icon = "file";
238 elm_genlist_item_append(gridList, account_gic, thisAccount, grid->item, ELM_GENLIST_ITEM_NONE, NULL, NULL);
239 eina_clist_add_tail(&(grid->accounts), &(thisAccount->grid));
240 }
241 }
242
243 // Viewers stuff
244 viewerList = elm_genlist_add(win);
245 viewer_gic = elm_genlist_item_class_new();
246 viewer_gic->item_style = "double_label";
247 viewer_gic->func.text_get = _viewer_label_get;
248 viewer_gic->func.content_get = _viewer_content_get;
249 viewer_gic->func.state_get = NULL;
250 viewer_gic->func.del = NULL;
251 for (i = 0; NULL != viewerTest[i][0]; i++)
252 {
253 ezViewer *thisViewer = calloc(1, sizeof(ezViewer));
254
255 if (thisViewer)
256 {
257 thisViewer->name = viewerTest[i][0];
258 thisViewer->version = viewerTest[i][1];
259 thisViewer->path = viewerTest[i][2];
260 thisViewer->icon = "file";
261 thisViewer->item = elm_genlist_item_append(viewerList, viewer_gic, thisViewer, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
262 }
263 }
264
265 // Toolbar pages
266 nf = elm_naviframe_add(win);
267 evas_object_size_hint_weight_set(nf, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
268 evas_object_size_hint_align_set(nf, EVAS_HINT_FILL, EVAS_HINT_FILL);
269 evas_object_show(nf);
270
271 sprintf(buf, "%s/%s", elm_app_data_dir_get(), img3);
272 tab = viewerList; tab_it = elm_naviframe_item_push(nf, NULL, NULL, NULL, tab, NULL); elm_naviframe_item_title_enabled_set(tab_it, EINA_FALSE, EINA_TRUE); elm_toolbar_item_append(tb, NULL, "Viewers", _promote, tab_it);
273 tab = _content_image_new(win, strdup(buf)); tab_it = elm_naviframe_item_push(nf, NULL, NULL, NULL, tab, NULL); elm_naviframe_item_title_enabled_set(tab_it, EINA_FALSE, EINA_TRUE); elm_toolbar_item_append(tb, NULL, "Landmarks", _promote, tab_it);
274 tab = gridList; tab_it = elm_naviframe_item_push(nf, NULL, NULL, NULL, tab, NULL); elm_naviframe_item_title_enabled_set(tab_it, EINA_FALSE, EINA_TRUE); elm_toolbar_item_append(tb, NULL, "Grids", _promote, tab_it);
275 elm_box_pack_end(bx, nf);
276
277#if USE_EO
278 // Not ready for prime time yet, or I'm missing a step. Causes it to hang after closing the window.
279 // Slightly better now, it bitches instead of hanging.
280 bt = eo_add(ELM_OBJ_BUTTON_CLASS, win);
281 elm_object_text_set(bt, "Login"); // No eo interface for this that I can find.
282 eo_do(bt,
283// evas_obj_text_set("Login"),
284 evas_obj_size_hint_align_set(EVAS_HINT_FILL, EVAS_HINT_FILL),
285 evas_obj_size_hint_weight_set(EVAS_HINT_EXPAND, 0.0),
286 evas_obj_visibility_set(EINA_TRUE)
287 );
288#else
289 bt = elm_button_add(win);
290 elm_object_text_set(bt, "Login");
291 evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
292 evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
293 evas_object_show(bt);
294#endif
295// evas_object_smart_callback_add(bt, "clicked", NULL, NULL);
296 elm_box_pack_end(bx, bt);
297 evas_object_show(bx);
298
299 fang_win_complete(gld, win, 30, 30, gld->win_w / 3, gld->win_h / 3);
300}