From: mishas Date: Tue, 13 Mar 2007 08:13:52 +0000 (+0000) Subject: implement launcher-items as an ordered dictionary of some sort X-Git-Url: http://vcs.maemo.org/git/?a=commitdiff_plain;h=0167448ac2c8b2d008a2b379eab91dcd7760ddfa;p=simple-launcher implement launcher-items as an ordered dictionary of some sort git-svn-id: file:///svnroot/simple-launcher/trunk@74 3ba93dab-e023-0410-b42a-de7732cf370a --- diff --git a/launcher-item.h b/launcher-item.h index 39cc896..5a60611 100644 --- a/launcher-item.h +++ b/launcher-item.h @@ -19,6 +19,7 @@ #define __LAUNCHER_ITEM_H__ #include +#include #include #include @@ -60,7 +61,44 @@ private: static GtkIconTheme *ourTheme; }; -typedef std::vector > LauncherItems; +typedef struct { + typedef std::vector Names; + typedef std::map Items; + + Names myNames; + Items myItems; + + size_t size() { return myNames.size(); } + + LauncherItem *operator[](int index) { + return myItems[myNames[index]]; + } + + std::string& name(int index) { + return myNames[index]; + } + + void add(std::string& name, LauncherItem *item) { + myNames.push_back(name); + myItems[name] = item; + } + + void swap(size_t i1, size_t i2) { + std::swap(myNames[i1], myNames[i2]); + } + + void clear() { + for (Items::iterator it = myItems.begin(); it != myItems.end(); ++it) { + if (it->second != NULL) { + delete it->second; + it->second = NULL; + } + } + + myNames.resize(0); + myItems.clear(); + } +} LauncherItems; #endif diff --git a/simple-launcher.cc b/simple-launcher.cc index a3fd111..134664f 100644 --- a/simple-launcher.cc +++ b/simple-launcher.cc @@ -138,14 +138,7 @@ bool SimpleLauncherApplet::doInit(void *state_data, int *state_size) { } SimpleLauncherApplet::~SimpleLauncherApplet() { - for (LauncherItems::iterator it = myItems.begin(); it != myItems.end(); ++it) { - if (it->second != NULL) { - delete it->second; - it->second = NULL; - } - } - - myItems.resize(0); + myItems.clear(); if (myWidget != NULL) { gtk_widget_destroy(myWidget); @@ -179,8 +172,8 @@ void SimpleLauncherApplet::saveConfig() { std::ofstream config(configFileName); if (config) { - for (LauncherItems::const_iterator it = myItems.begin(); it != myItems.end(); ++it) { - config << it->first << ',' << it->second->isEnabled() << std::endl; + for (size_t i = 0 ; i < myItems.size() ; ++i) { + config << myItems.name(i) << ',' << myItems[i]->isEnabled() << std::endl; } } } @@ -190,7 +183,6 @@ bool SimpleLauncherApplet::initWidget() { if (myWidget != NULL) { gtk_frame_set_shadow_type(GTK_FRAME(myWidget), GTK_SHADOW_ETCHED_IN); - gtk_widget_set_size_request(myWidget, button_no*(SL_APPLET_ICON_SIZE+SL_APPLET_CANVAS_SIZE), SL_APPLET_ICON_SIZE+SL_APPLET_CANVAS_SIZE); updateWidget(); } @@ -209,19 +201,24 @@ void SimpleLauncherApplet::updateWidget() { int button_no = 0; GtkToolbar *toolbar = GTK_TOOLBAR(gtk_toolbar_new()); - for (LauncherItems::const_iterator it = myItems.begin(); it != myItems.end(); ++it) { - GtkToolItem *button = gtk_tool_button_new(gtk_image_new_from_pixbuf(it->second->getIcon(SL_APPLET_ICON_SIZE)), NULL); + for (size_t i = 0 ; i < myItems.size() ; ++i) { + LauncherItem *item = myItems[i]; - gtk_object_set_user_data(GTK_OBJECT(button), it->second); - g_signal_connect(button, "clicked", G_CALLBACK(_button_clicked), this); + if (item != NULL && item->isEnabled()) { + GtkToolItem *button = gtk_tool_button_new(gtk_image_new_from_pixbuf(item->getIcon(SL_APPLET_ICON_SIZE)), NULL); - gtk_toolbar_insert(toolbar, button, -1); + gtk_object_set_user_data(GTK_OBJECT(button), item); + g_signal_connect(button, "clicked", G_CALLBACK(_button_clicked), this); - ++button_no; + gtk_toolbar_insert(toolbar, button, -1); + + ++button_no; + } } if (button_no) { gtk_container_add(GTK_CONTAINER(myWidget), GTK_WIDGET(toolbar)); + gtk_widget_set_size_request(myWidget, button_no*(SL_APPLET_ICON_SIZE+SL_APPLET_CANVAS_SIZE), SL_APPLET_ICON_SIZE+SL_APPLET_CANVAS_SIZE); } else { gtk_widget_destroy(GTK_WIDGET(toolbar)); } diff --git a/sla-list.cc b/sla-list.cc index 419be6d..21ab177 100644 --- a/sla-list.cc +++ b/sla-list.cc @@ -97,11 +97,12 @@ SLAList::SLAList(int icon_size, LauncherItems& items): myWidget(NULL), myStore(N gtk_widget_show_all(myWidget); - for (LauncherItems::const_iterator item = myItems.begin(); item != myItems.end(); ++item) { + for (LauncherItems::Names::const_iterator it = myItems.myNames.begin(); it != myItems.myNames.end(); ++it) { + LauncherItem *item = myItems.myItems[*it]; GtkTreeIter iter; gtk_list_store_append(myStore, &iter); - gtk_list_store_set(myStore, &iter, 0, item->second->getIcon(icon_size), 1, item-myItems.begin(), -1); + gtk_list_store_set(myStore, &iter, 0, item->getIcon(icon_size), 1, it-myItems.myNames.begin(), -1); } } @@ -133,14 +134,16 @@ void SLAList::renderText(GtkTreeViewColumn *, GtkCellRenderer *cell, GtkTreeMode int index; gtk_tree_model_get(GTK_TREE_MODEL(myStore), iter, 1, &index, -1); + + LauncherItem *item = myItems[index]; #if 1 if (gtk_tree_selection_iter_is_selected(mySelection, iter)) { - gchar *text = g_markup_printf_escaped("%s\n%s", myItems[index].second->getName().c_str(), myItems[index].second->getComment().c_str()); + gchar *text = g_markup_printf_escaped("%s\n%s", item->getName().c_str(), item->getComment().c_str()); g_object_set(cell, "markup", text, NULL); g_free(text); } else { #endif - g_object_set(cell, "text", myItems[index].second->getName().c_str(), NULL); + g_object_set(cell, "text", item->getName().c_str(), NULL); #if 1 } #endif @@ -151,7 +154,7 @@ void SLAList::renderBool(GtkTreeViewColumn *, GtkCellRenderer *cell, GtkTreeMode gtk_tree_model_get(GTK_TREE_MODEL(myStore), iter, 1, &index, -1); - g_object_set(cell, "active", myItems[index].second->isEnabled(), NULL); + g_object_set(cell, "active", myItems[index]->isEnabled(), NULL); } void SLAList::toggleBool(GtkCellRendererToggle *renderer, const gchar *spath) { @@ -161,7 +164,7 @@ void SLAList::toggleBool(GtkCellRendererToggle *renderer, const gchar *spath) { int index; gtk_tree_model_get(GTK_TREE_MODEL(myStore), &iter, 1, &index, -1); - myItems[index].second->toggle(); + myItems[index]->toggle(); } } @@ -210,7 +213,7 @@ void SLAList::swap(GtkTreeIter& a, GtkTreeIter& b) { gtk_tree_model_get(GTK_TREE_MODEL(myStore), &a, 1, &i1, -1); gtk_tree_model_get(GTK_TREE_MODEL(myStore), &b, 1, &i2, -1); - std::swap(myItems[i1], myItems[i2]); + myItems.swap(i1, i2); gtk_list_store_set(myStore, &a, 1, i2, -1); gtk_list_store_set(myStore, &b, 1, i1, -1);