// This file is a part of Simple Launcher
//
-// Copyright (C) 2006, Mikhail Sobolev
+// Copyright (C) 2006, 2007, Mikhail Sobolev
//
// Simple Launcher is free software; you can redistribute it and/or modify it
// under the terms of the GNU General Public License version 2 as published by
#include "sla-list.h"
+enum {
+ SLA_STORE_COLUMN_ICON = 0,
+ SLA_STORE_COLUMN_INDEX,
+ SLA_STORE_COLUMN_LAST
+};
+
static GtkWidget *gtk_button_new_stock_image_only(const gchar *stock_id) {
GtkWidget *button = gtk_button_new();
GtkWidget *image = gtk_image_new_from_stock(stock_id, GTK_ICON_SIZE_BUTTON);
return button;
}
-SLAList::SLAList(int icon_size, LauncherItems& items): myWidget(NULL), myStore(NULL), myView(NULL), mySelection(NULL), myItems(items) {
+SettingsPageWithItems::SettingsPageWithItems(int icon_size, LauncherItems& items): myWidget(NULL), myStore(NULL), myView(NULL), mySelection(NULL), myLastSelection(NULL), myItems(items) {
GtkTreeViewColumn *column;
GtkCellRenderer *renderer;
mySelection = gtk_tree_view_get_selection(myView);
gtk_tree_selection_set_mode(mySelection, GTK_SELECTION_SINGLE);
+ g_signal_connect(G_OBJECT(mySelection), "changed", G_CALLBACK(_selectionChanged), this);
+
renderer = gtk_cell_renderer_pixbuf_new();
g_object_set(renderer, "yalign", 0.0, NULL);
gtk_cell_renderer_set_fixed_size(renderer, icon_size+4, -1);
renderer = gtk_cell_renderer_text_new();
g_object_set(renderer, "yalign", 0.0, NULL);
column = gtk_tree_view_column_new();
- gtk_tree_view_column_pack_start(column, renderer, TRUE);
- gtk_tree_view_column_set_cell_data_func(column, renderer, _renderText, this, NULL);
gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
gtk_tree_view_column_set_expand(column, TRUE);
+ gtk_tree_view_column_pack_start(column, renderer, TRUE);
+ gtk_tree_view_column_set_cell_data_func(column, renderer, _renderText, this, NULL);
gtk_tree_view_insert_column(myView, column, -1);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(swindow), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
gtk_container_add(GTK_CONTAINER(swindow), GTK_WIDGET(myView));
- gtk_widget_set_size_request(swindow, 500, 300);
-
GtkWidget *move_up = gtk_button_new_stock_image_only(GTK_STOCK_GO_UP),
*move_down = gtk_button_new_stock_image_only(GTK_STOCK_GO_DOWN);
GtkTable *table = GTK_TABLE(gtk_table_new(4, 1, FALSE));
g_signal_connect(move_down, "clicked", G_CALLBACK(_moveDown), this);
myWidget = gtk_hbox_new(FALSE, 0);
- gtk_box_pack_start(GTK_BOX(myWidget), swindow, FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(myWidget), swindow, TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(myWidget), GTK_WIDGET(table), FALSE, FALSE, 0);
gtk_widget_show_all(myWidget);
GtkTreeIter iter;
gtk_list_store_append(myStore, &iter);
- gtk_list_store_set(myStore, &iter, 0, item->getIcon(icon_size), 1, it-myItems.myNames.begin(), -1);
+ {
+ GdkPixbuf *icon = item->getIcon(icon_size);
+ gtk_list_store_set(myStore, &iter, SLA_STORE_COLUMN_ICON, icon, SLA_STORE_COLUMN_INDEX, it-myItems.myNames.begin(), -1);
+ g_object_unref(G_OBJECT(icon));
+ }
}
}
-SLAList::~SLAList() {
+SettingsPageWithItems::~SettingsPageWithItems() {
// FIXME: do something! :)
}
-void SLAList::_renderText(GtkTreeViewColumn *column, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, gpointer self) {
- ((SLAList *)self)->renderText(column, cell, model, iter);
+void SettingsPageWithItems::_selectionChanged(GtkTreeSelection *selection, void *self) {
+ ((SettingsPageWithItems *)self)->selectionChanged(selection);
+}
+
+void SettingsPageWithItems::selectionChanged(GtkTreeSelection *) {
+ if (myLastSelection != NULL) {
+ kickIt(myLastSelection);
+ gtk_tree_iter_free(myLastSelection);
+ myLastSelection = NULL;
+ }
+
+ GtkTreeIter iter;
+ GtkTreeModel *dummy;
+
+ if (gtk_tree_selection_get_selected(mySelection, &dummy, &iter)) {
+ kickIt(&iter);
+ myLastSelection = gtk_tree_iter_copy(&iter);
+ }
+}
+
+void SettingsPageWithItems::kickIt(GtkTreeIter *iter) {
+ GtkTreePath *path = gtk_tree_model_get_path(GTK_TREE_MODEL(myStore), iter);
+
+ if (path != NULL) {
+ g_signal_emit_by_name(myStore, "row-changed", path, iter);
+ gtk_tree_path_free(path);
+ }
}
-void SLAList::_renderBool(GtkTreeViewColumn *column, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, gpointer self) {
- ((SLAList *)self)->renderBool(column, cell, model, iter);
+void SettingsPageWithItems::_renderText(GtkTreeViewColumn *column, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, gpointer self) {
+ ((SettingsPageWithItems *)self)->renderText(column, cell, model, iter);
}
-void SLAList::_toggleBool(GtkCellRendererToggle *renderer, const gchar *path, void *self) {
- ((SLAList *)self)->toggleBool(renderer, path);
+void SettingsPageWithItems::_renderBool(GtkTreeViewColumn *column, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, gpointer self) {
+ ((SettingsPageWithItems *)self)->renderBool(column, cell, model, iter);
}
-void SLAList::_moveUp(GtkButton *button, void *self) {
- ((SLAList *)self)->moveUp(button);
+void SettingsPageWithItems::_toggleBool(GtkCellRendererToggle *renderer, const gchar *path, void *self) {
+ ((SettingsPageWithItems *)self)->toggleBool(renderer, path);
}
-void SLAList::_moveDown(GtkButton *button, void *self) {
- ((SLAList *)self)->moveDown(button);
+void SettingsPageWithItems::_moveUp(GtkButton *button, void *self) {
+ ((SettingsPageWithItems *)self)->moveUp(button);
}
-void SLAList::renderText(GtkTreeViewColumn *, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter) {
+void SettingsPageWithItems::_moveDown(GtkButton *button, void *self) {
+ ((SettingsPageWithItems *)self)->moveDown(button);
+}
+
+void SettingsPageWithItems::renderText(GtkTreeViewColumn *, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter) {
int index;
- gtk_tree_model_get(GTK_TREE_MODEL(myStore), iter, 1, &index, -1);
+ gtk_tree_model_get(GTK_TREE_MODEL(myStore), iter, SLA_STORE_COLUMN_INDEX, &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>", 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", item->getName().c_str(), NULL);
-#if 1
}
-#endif
}
-void SLAList::renderBool(GtkTreeViewColumn *, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter) {
+void SettingsPageWithItems::renderBool(GtkTreeViewColumn *, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter) {
int index;
- gtk_tree_model_get(GTK_TREE_MODEL(myStore), iter, 1, &index, -1);
+ gtk_tree_model_get(GTK_TREE_MODEL(myStore), iter, SLA_STORE_COLUMN_INDEX, &index, -1);
g_object_set(cell, "active", myItems[index]->isEnabled(), NULL);
}
-void SLAList::toggleBool(GtkCellRendererToggle *renderer, const gchar *spath) {
+void SettingsPageWithItems::toggleBool(GtkCellRendererToggle *renderer, const gchar *spath) {
GtkTreeIter iter;
if (gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(myStore), &iter, spath)) {
int index;
- gtk_tree_model_get(GTK_TREE_MODEL(myStore), &iter, 1, &index, -1);
+ gtk_tree_model_get(GTK_TREE_MODEL(myStore), &iter, SLA_STORE_COLUMN_INDEX, &index, -1);
myItems[index]->toggle();
}
}
-void SLAList::moveUp(GtkButton *) {
+void SettingsPageWithItems::moveUp(GtkButton *) {
GtkTreeModel *dummy;
GtkTreeIter current;
}
}
-void SLAList::moveDown(GtkButton *) {
+void SettingsPageWithItems::moveDown(GtkButton *) {
GtkTreeModel *dummy;
GtkTreeIter current;
}
}
-void SLAList::swap(GtkTreeIter& a, GtkTreeIter& b) {
+void SettingsPageWithItems::swap(GtkTreeIter& a, GtkTreeIter& b) {
int i1, i2;
- gtk_tree_model_get(GTK_TREE_MODEL(myStore), &a, 1, &i1, -1);
- gtk_tree_model_get(GTK_TREE_MODEL(myStore), &b, 1, &i2, -1);
+ gtk_tree_model_get(GTK_TREE_MODEL(myStore), &a, SLA_STORE_COLUMN_INDEX, &i1, -1);
+ gtk_tree_model_get(GTK_TREE_MODEL(myStore), &b, SLA_STORE_COLUMN_INDEX, &i2, -1);
myItems.swap(i1, i2);
- gtk_list_store_set(myStore, &a, 1, i2, -1);
- gtk_list_store_set(myStore, &b, 1, i1, -1);
+ gtk_list_store_set(myStore, &a, SLA_STORE_COLUMN_INDEX, i2, -1);
+ gtk_list_store_set(myStore, &b, SLA_STORE_COLUMN_INDEX, i1, -1);
gtk_list_store_swap(myStore, &a, &b);
}