#define __LAUNCHER_ITEM_H__
#include <vector>
+#include <map>
#include <string>
#include <gdk-pixbuf/gdk-pixbuf.h>
static GtkIconTheme *ourTheme;
};
-typedef std::vector<std::pair<std::string, LauncherItem *> > LauncherItems;
+typedef struct {
+ typedef std::vector<std::string> Names;
+ typedef std::map<std::string, LauncherItem *> 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
}
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);
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;
}
}
}
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();
}
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));
}
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);
}
}
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<small>%s</small>", myItems[index].second->getName().c_str(), myItems[index].second->getComment().c_str());
+ gchar *text = g_markup_printf_escaped("%s\n<small>%s</small>", 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
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) {
int index;
gtk_tree_model_get(GTK_TREE_MODEL(myStore), &iter, 1, &index, -1);
- myItems[index].second->toggle();
+ myItems[index]->toggle();
}
}
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);