From d6104c410dfa3607ab044e16faa80e8be8bda979 Mon Sep 17 00:00:00 2001
From: David Walter Seikel
Date: Mon, 14 Jan 2013 04:11:14 +1000
Subject: Add viewers list.

---
 ClientHamr/extantz/extantz.c | 101 +++++++++++++++++++++++++++++++++----------
 ClientHamr/extantz/extantz.h |   1 +
 2 files changed, 80 insertions(+), 22 deletions(-)

diff --git a/ClientHamr/extantz/extantz.c b/ClientHamr/extantz/extantz.c
index f0fd4c6..a776b9d 100644
--- a/ClientHamr/extantz/extantz.c
+++ b/ClientHamr/extantz/extantz.c
@@ -23,8 +23,19 @@ static char *accountTest[][3] =
 };
 
 
+static char *viewerTest[][3] =
+{
+    {"Imprudence",	"1.4.0 beta 3", ""},
+    {"Kokua",		"3.4.4.25633", ""},
+    {"meta-impy",	"1.4.0 beta 1.5", ""},
+    {"SL",		"v3", ""},
+    {NULL, NULL, NULL}
+};
+
+
 static Elm_Genlist_Item_Class *grid_gic = NULL;
 static Elm_Genlist_Item_Class *account_gic = NULL;
+static Elm_Genlist_Item_Class *viewer_gic = NULL;
 
 static int x, y, w, h;
 
@@ -695,6 +706,31 @@ static Evas_Object *_account_content_get(void *data, Evas_Object *obj, const cha
     return ic;
 }
 
+static char *_viewer_label_get(void *data, Evas_Object *obj, const char *part)
+{
+    ezViewer *thisViewer = data;
+    char buf[256];
+
+    if (!strcmp(part, "elm.text"))
+	snprintf(buf, sizeof(buf), "%s", thisViewer->name);
+    else
+	snprintf(buf, sizeof(buf), "%s", thisViewer->version);
+    return strdup(buf);
+}
+
+static Evas_Object *_viewer_content_get(void *data, Evas_Object *obj, const char *part)
+{
+    ezViewer *thisViewer = data;
+    Evas_Object *ic = elm_icon_add(obj);
+
+    if (!strcmp(part, "elm.swallow.icon"))
+	elm_icon_standard_set(ic, thisViewer->icon);
+
+    evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+    return ic;
+}
+
+
 static void _grid_sel_cb(void *data, Evas_Object *obj, void *event_info)
 {
     ezGrid *thisGrid = data;
@@ -708,7 +744,7 @@ static void _grid_sel_cb(void *data, Evas_Object *obj, void *event_info)
 
 EAPI_MAIN int elm_main(int argc, char **argv)
 {
-    Evas_Object *bg, *tb, *bt, *menu, *nf, *tab, *list;
+    Evas_Object *bg, *tb, *bt, *menu, *nf, *tab, *gridList, *viewerList;
     Elm_Object_Item *tb_it, *menu_it, *tab_it;
     EPhysics_Body *boundary;
     EPhysics_World *world;
@@ -789,10 +825,9 @@ EAPI_MAIN int elm_main(int argc, char **argv)
     elm_menu_item_add(menu, NULL, NULL, "quit", _on_done, gld->win);
     elm_toolbar_menu_parent_set(tb, gld->win);
 
-    nf = elm_naviframe_add(gld->win);
-    evas_object_size_hint_weight_set(nf, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-    evas_object_size_hint_align_set(nf, EVAS_HINT_FILL, EVAS_HINT_FILL);
-    evas_object_show(nf);
+    // Grids stuff
+    gridList = elm_genlist_add(gld->win);
+    grids = eina_hash_stringshared_new(free);
 
     grid_gic = elm_genlist_item_class_new();
     grid_gic->item_style = "double_label";
@@ -800,21 +835,6 @@ EAPI_MAIN int elm_main(int argc, char **argv)
     grid_gic->func.content_get = _grid_content_get;
     grid_gic->func.state_get = NULL;
     grid_gic->func.del = NULL;
-
-    account_gic = elm_genlist_item_class_new();
-    account_gic->item_style = "default";
-    account_gic->func.text_get = _account_label_get;
-    account_gic->func.content_get = _account_content_get;
-    account_gic->func.state_get = NULL;
-    account_gic->func.del = NULL;
-
-    list = elm_genlist_add(gld->win);
-    tab = _content_image_new(gld->win, img1);	tab_it = elm_naviframe_item_push(nf, NULL, NULL, NULL, tab, NULL);	elm_naviframe_item_title_visible_set(tab_it, EINA_FALSE);	elm_toolbar_item_append(tb, NULL, "Accounts", _promote, tab_it);
-    tab = _content_image_new(gld->win, img2);	tab_it = elm_naviframe_item_push(nf, NULL, NULL, NULL, tab, NULL);	elm_naviframe_item_title_visible_set(tab_it, EINA_FALSE);	elm_toolbar_item_append(tb, NULL, "Viewers", _promote, tab_it);
-    tab = _content_image_new(gld->win, img3);	tab_it = elm_naviframe_item_push(nf, NULL, NULL, NULL, tab, NULL);	elm_naviframe_item_title_visible_set(tab_it, EINA_FALSE);	elm_toolbar_item_append(tb, NULL, "Landmarks", _promote, tab_it);
-    tab = list;					tab_it = elm_naviframe_item_push(nf, NULL, NULL, NULL, tab, NULL);	elm_naviframe_item_title_visible_set(tab_it, EINA_FALSE);	elm_toolbar_item_append(tb, NULL, "Grids", _promote, tab_it);
-
-    grids = eina_hash_stringshared_new(free);
     for (i = 0; NULL != gridTest[i][0]; i++)
     {
 	ezGrid *thisGrid = calloc(1, sizeof(ezGrid));
@@ -827,11 +847,17 @@ EAPI_MAIN int elm_main(int argc, char **argv)
 	    thisGrid->loginURI		= gridTest[i][1];
 	    thisGrid->splashPage 	= gridTest[i][2];
 	    thisGrid->icon		= "folder";
-	    thisGrid->item = elm_genlist_item_append(list, grid_gic, thisGrid, NULL, ELM_GENLIST_ITEM_TREE, _grid_sel_cb, thisGrid);
+	    thisGrid->item = elm_genlist_item_append(gridList, grid_gic, thisGrid, NULL, ELM_GENLIST_ITEM_TREE, _grid_sel_cb, thisGrid);
 	    eina_hash_add(grids, thisGrid->name, thisGrid);
 	}
     }
 
+    account_gic = elm_genlist_item_class_new();
+    account_gic->item_style = "default";
+    account_gic->func.text_get = _account_label_get;
+    account_gic->func.content_get = _account_content_get;
+    account_gic->func.state_get = NULL;
+    account_gic->func.del = NULL;
     for (i = 0; NULL != accountTest[i][0]; i++)
     {
 	ezAccount *thisAccount = calloc(1, sizeof(ezAccount));
@@ -842,11 +868,42 @@ EAPI_MAIN int elm_main(int argc, char **argv)
 	    thisAccount->name		= accountTest[i][1];
 	    thisAccount->password 	= accountTest[i][2];
 	    thisAccount->icon		= "file";
-	    elm_genlist_item_append(list, account_gic, thisAccount, grid->item, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+	    elm_genlist_item_append(gridList, account_gic, thisAccount, grid->item, ELM_GENLIST_ITEM_NONE, NULL, NULL);
 	    eina_clist_add_tail(&(grid->accounts), &(thisAccount->grid));
 	}
     }
 
+    // Viewers stuff
+    viewerList = elm_genlist_add(gld->win);
+    viewer_gic = elm_genlist_item_class_new();
+    viewer_gic->item_style = "double_label";
+    viewer_gic->func.text_get = _viewer_label_get;
+    viewer_gic->func.content_get = _viewer_content_get;
+    viewer_gic->func.state_get = NULL;
+    viewer_gic->func.del = NULL;
+    for (i = 0; NULL != viewerTest[i][0]; i++)
+    {
+	ezViewer *thisViewer = calloc(1, sizeof(ezViewer));
+	
+	if (thisViewer)
+	{
+	    thisViewer->name		= viewerTest[i][0];
+	    thisViewer->version		= viewerTest[i][1];
+	    thisViewer->path		= viewerTest[i][2];
+	    thisViewer->icon		= "file";
+	    thisViewer->item = elm_genlist_item_append(viewerList, viewer_gic, thisViewer, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+	}
+    }
+
+    // Toolbar pages
+    nf = elm_naviframe_add(gld->win);
+    evas_object_size_hint_weight_set(nf, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+    evas_object_size_hint_align_set(nf, EVAS_HINT_FILL, EVAS_HINT_FILL);
+    evas_object_show(nf);
+    tab = viewerList;				tab_it = elm_naviframe_item_push(nf, NULL, NULL, NULL, tab, NULL);	elm_naviframe_item_title_visible_set(tab_it, EINA_FALSE);	elm_toolbar_item_append(tb, NULL, "Viewers", _promote, tab_it);
+    tab = _content_image_new(gld->win, img3);	tab_it = elm_naviframe_item_push(nf, NULL, NULL, NULL, tab, NULL);	elm_naviframe_item_title_visible_set(tab_it, EINA_FALSE);	elm_toolbar_item_append(tb, NULL, "Landmarks", _promote, tab_it);
+    tab = gridList;				tab_it = elm_naviframe_item_push(nf, NULL, NULL, NULL, tab, NULL);	elm_naviframe_item_title_visible_set(tab_it, EINA_FALSE);	elm_toolbar_item_append(tb, NULL, "Grids", _promote, tab_it);
+
     bt = elm_button_add(gld->win);
     elm_object_text_set(bt, "Login");
     evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
diff --git a/ClientHamr/extantz/extantz.h b/ClientHamr/extantz/extantz.h
index fdcb6b5..c234e81 100644
--- a/ClientHamr/extantz/extantz.h
+++ b/ClientHamr/extantz/extantz.h
@@ -48,6 +48,7 @@ typedef struct
     char	*icon;
     uint16_t	tag;		// The UUID of the texture used in the avatar bake hack.
     uint8_t	r, g, b;	// Colour used for the in world tag.
+    Elm_Object_Item *item;
 } ezViewer;
 
 typedef struct
-- 
cgit v1.1