#include "launchable-item.h"
-LaunchableItem::LaunchableItem(LauncherItem *item, bool enabled): myItem(item), myEnabled(enabled) {
-}
-
-LaunchableItem::~LaunchableItem() {
- if (myItem != 0) {
- delete myItem;
- }
-}
-
bool LaunchableItem::activate(osso_context_t *context) {
- return osso_application_top(context, myItem->getService().c_str(), 0) == OSSO_OK;
+ return osso_application_top(context, getService().c_str(), 0) == OSSO_OK;
}
// vim:ts=2:sw=2:et
#ifndef __LAUNCHABLE_ITEM_H__
#define __LAUNCHABLE_ITEM_H__
-#include <vector>
-#include <string>
-
#include <libosso.h>
#include "launcher-item.h"
-// TODO: or better use inheritance?
-class LaunchableItem {
+class LaunchableItem : public LauncherItem {
public:
- LaunchableItem(LauncherItem *, bool);
- ~LaunchableItem();
-
- GdkPixbuf *getIcon(int icon_size) const { return myItem->getIcon(icon_size); }
-
- const std::string& getName() const { return myItem->getName(); }
- const std::string& getComment() const { return myItem->getComment(); }
- const std::string& getService() const { return myItem->getService(); }
-
- bool isEnabled(void) const { return myEnabled; }
-
- void enable() { myEnabled = true; }
- void disable() { myEnabled = false; }
- void toggle() { myEnabled = !myEnabled; }
-
bool activate(osso_context_t *);
-
-private:
- LauncherItem *myItem;
- bool myEnabled;
};
-typedef std::vector<std::pair<std::string, LaunchableItem *> > LaunchableItems;
-
#endif
// vim:ts=2:sw=2:et
#ifndef __LAUNCHER_ITEM_H__
#define __LAUNCHER_ITEM_H__
+#include <vector>
#include <string>
#include <gdk-pixbuf/gdk-pixbuf.h>
#include <gtk/gtkicontheme.h>
-#include <libosso.h>
-
class LauncherItem {
public:
LauncherItem();
- ~LauncherItem();
+ virtual ~LauncherItem();
bool load(const std::string&);
const std::string& getName() const { return myName; }
const std::string& getComment() const { return myComment; }
const std::string& getService() const { return myService; }
+
+ bool isEnabled(void) const { return myEnabled; }
+
+ void enable() { myEnabled = true; }
+ void disable() { myEnabled = false; }
+ void toggle() { myEnabled = !myEnabled; }
+
private:
std::string myName, myComment, myIcon, myService;
+ bool myEnabled;
static GtkIconTheme *ourTheme;
};
+typedef std::vector<std::pair<std::string, LauncherItem *> > LauncherItems;
+
#endif
// vim:ts=2:sw=2:et
GtkWidget *myWidget;
GtkWindow *myParent;
- LaunchableItems myItems;
+ LauncherItems myItems;
static char *ourFiles[];
};
}
for (int i = 0 ; ourFiles[i] != 0 ; ++i) {
- LauncherItem *item = new LauncherItem();
+ LaunchableItem *item = new LaunchableItem();
if (item->load(ourFiles[i])) {
- myItems.push_back(std::pair<std::string, LaunchableItem *>(ourFiles[i], new LaunchableItem(item, true)));
+ myItems.push_back(std::pair<std::string, LauncherItem *>(ourFiles[i], item));
} else {
delete item;
}
}
SimpleLauncherApplet::~SimpleLauncherApplet() {
- for (LaunchableItems::iterator it = myItems.begin(); it != myItems.end(); ++it) {
+ for (LauncherItems::iterator it = myItems.begin(); it != myItems.end(); ++it) {
if (it->second != 0) {
delete it->second;
it->second = 0;
GtkToolbar *toolbar = GTK_TOOLBAR(gtk_toolbar_new());
- for (LaunchableItems::const_iterator it = myItems.begin(); it != myItems.end(); ++it) {
+ 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)), 0);
gtk_object_set_user_data(GTK_OBJECT(button), it->second);
#include "sla-list.h"
-SLAList::SLAList(int icon_size, LaunchableItems& items): myWidget(0), myStore(0), myView(0), mySelection(0), myItems(items) {
+SLAList::SLAList(int icon_size, LauncherItems& items): myWidget(0), myStore(0), myView(0), mySelection(0), myItems(items) {
GtkTreeViewColumn *column;
GtkCellRenderer *renderer;
gtk_widget_show_all(myWidget);
- for (LaunchableItems::const_iterator item = myItems.begin(); item != myItems.end(); ++item) {
+ for (LauncherItems::const_iterator item = myItems.begin(); item != myItems.end(); ++item) {
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);
}
int index;
gtk_tree_model_get(GTK_TREE_MODEL(myStore), iter, 1, &index, -1);
-
+#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());
g_object_set(cell, "markup", text, 0);
g_free(text);
} else {
+#endif
g_object_set(cell, "text", myItems[index].second->getName().c_str(), 0);
+#if 1
}
+#endif
}
void SLAList::renderBool(GtkTreeViewColumn *, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter) {
}
void SLAList::toggleBool(GtkCellRendererToggle *renderer, const gchar *spath) {
- GtkTreePath *path = gtk_tree_path_new_from_string(spath);
+ GtkTreeIter iter;
- if (path != 0) {
- GtkTreeIter iter;
+ if (gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(myStore), &iter, spath)) {
+ int index;
- if (gtk_tree_model_get_iter(GTK_TREE_MODEL(myStore), &iter, path)) {
- int index;
-
- gtk_tree_model_get(GTK_TREE_MODEL(myStore), &iter, 1, &index, -1);
- myItems[index].second->toggle();
- }
+ gtk_tree_model_get(GTK_TREE_MODEL(myStore), &iter, 1, &index, -1);
+ myItems[index].second->toggle();
}
}
#include <gtk/gtkbutton.h>
#include <gtk/gtkcellrenderertoggle.h>
-#include "launchable-item.h"
+#include "launcher-item.h"
class SLAList {
public:
- SLAList(int, LaunchableItems&);
+ SLAList(int, LauncherItems&);
~SLAList();
GtkWidget *getWidget() { return myWidget; }
GtkTreeView *myView;
GtkTreeSelection *mySelection;
- LaunchableItems& myItems;
+ LauncherItems& myItems;
};
#endif
DIR *handle = opendir(appdir.c_str());
if (handle != 0) {
- std::map<std::string, LauncherItem *> apps;
-
- SLAList sla_list(26);
+ LauncherItems apps;
struct dirent *entry;
if (item->load(appdir + "/" + entry->d_name)) {
std::cout << "Loaded " << entry->d_name << std::endl;
-
- apps[entry->d_name] = item;
-
- sla_list.addItem(entry->d_name, item->getIcon(26), item->getName().c_str(), false);
} else {
std::cout << "Failed to load " << entry->d_name << std::endl;
-
- delete item;
}
+
+ apps.push_back(std::pair<std::string, LauncherItem *>(entry->d_name, item));
}
if (!apps.empty()) {
- GtkDialog *dialog = GTK_DIALOG(gtk_dialog_new_with_buttons("My dialog", 0, (GtkDialogFlags)(GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT), GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, 0));
+ SLAList sla_list(26, apps);
+
+ GtkDialog *dialog = GTK_DIALOG(gtk_dialog_new_with_buttons("Launcher settings", 0, (GtkDialogFlags)(GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT), GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, 0));
gtk_container_add(GTK_CONTAINER(dialog->vbox), sla_list.getWidget());
if (gtk_dialog_run(dialog) == GTK_RESPONSE_ACCEPT) {
- // print sla_list.items()
- std::vector<std::pair<std::string, bool> > items;
-
- sla_list.collectItems(items);
-
- for (std::vector<std::pair<std::string, bool> >::const_iterator it = items.begin(); it != items.end(); ++it) {
- std::cout << it->first << (it->second ? " active" : " passive") << std::endl;
+ for (LauncherItems::const_iterator it = apps.begin(); it != apps.end(); ++it) {
+ std::cout << it->first << (it->second->isEnabled() ? " active" : " passive") << std::endl;
}
}