diff options
Diffstat (limited to 'src/extantz/woMan.c')
-rw-r--r-- | src/extantz/woMan.c | 300 |
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 | |||
4 | Eina_Hash *grids; | ||
5 | Eina_Hash *viewers; | ||
6 | |||
7 | static 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 | |||
15 | static 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 | |||
24 | static 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 | |||
34 | static Elm_Genlist_Item_Class *grid_gic = NULL; | ||
35 | static Elm_Genlist_Item_Class *account_gic = NULL; | ||
36 | static 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"; | ||
40 | static const char *img3 = "rock_01.jpg"; | ||
41 | |||
42 | |||
43 | |||
44 | static 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 | |||
53 | static void _promote(void *data, Evas_Object *obj , void *event_info ) | ||
54 | { | ||
55 | elm_naviframe_item_promote(data); | ||
56 | } | ||
57 | |||
58 | static 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 | |||
79 | static 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 | |||
91 | static 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 | |||
103 | static 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 | |||
115 | static 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 | |||
127 | static 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 | |||
140 | static 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 | |||
154 | void 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 | } | ||