linuxdcpp-team team mailing list archive
-
linuxdcpp-team team
-
Mailing list archive
-
Message #02159
[Branch ~linuxdcpp-team/linuxdcpp/linuxdcpp-i18n] Rev 393: Column menu no longer depends upon column title
------------------------------------------------------------
revno: 393
committer: Steven Sheehy <steven.sheehy@xxxxxxxxx>
branch nick: linuxdcpp-i18n
timestamp: Sun 2010-10-17 21:06:51 -0500
message:
Column menu no longer depends upon column title
modified:
linux/treeview.cc
linux/treeview.hh
--
lp:~linuxdcpp-team/linuxdcpp/linuxdcpp-i18n
https://code.launchpad.net/~linuxdcpp-team/linuxdcpp/linuxdcpp-i18n
Your team LinuxDC++ Team is subscribed to branch lp:~linuxdcpp-team/linuxdcpp/linuxdcpp-i18n.
To unsubscribe from this branch go to https://code.launchpad.net/~linuxdcpp-team/linuxdcpp/linuxdcpp-i18n/+edit-subscription
=== modified file 'linux/treeview.cc'
--- linux/treeview.cc 2010-01-01 00:57:24 +0000
+++ linux/treeview.cc 2010-10-18 02:06:51 +0000
@@ -123,11 +123,6 @@
Column& col = columns[iter->second];
addColumn_gui(col);
- colMenuItems[col.title] = gtk_check_menu_item_new_with_label(col.title.c_str());
- gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(colMenuItems[col.title]), col.visible);
- g_signal_connect(colMenuItems[col.title], "activate", G_CALLBACK(toggleColumnVisibility), (gpointer)this);
- gtk_menu_shell_append(GTK_MENU_SHELL(menu), colMenuItems[col.title]);
-
if (!col.visible)
visibleColumns--;
}
@@ -322,6 +317,20 @@
* @todo: Replace when GTK adds a way to add a signal to the entire header (remove visibleColumns var, too).
*/
g_signal_connect(col->button, "button-release-event", G_CALLBACK(popupMenu_gui), (gpointer)this);
+
+ addCheckMenuItem(col);
+}
+
+void TreeView::addCheckMenuItem(GtkTreeViewColumn *col)
+{
+ bool visible = gtk_tree_view_column_get_visible(col);
+ const gchar *title = gtk_tree_view_column_get_title(col);
+
+ GtkWidget *menuItem = gtk_check_menu_item_new_with_label(title);
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuItem), visible);
+ g_object_set_data(G_OBJECT(menuItem), "column", (gpointer)col);
+ g_signal_connect(menuItem, "activate", G_CALLBACK(toggleColumnVisibility), (gpointer)this);
+ gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuItem);
}
void TreeView::setSortColumn_gui(const string &column, const string &sortColumn)
@@ -362,33 +371,19 @@
void TreeView::toggleColumnVisibility(GtkMenuItem *item, gpointer data)
{
TreeView *tv = (TreeView*)data;
- GtkTreeViewColumn *column = NULL;
- gboolean visible;
- SortedColIter iter;
- string title = string(gtk_label_get_text(GTK_LABEL(gtk_bin_get_child(GTK_BIN(item)))));
-
- // Function col(title) doesn't work here, so we have to find column manually.
- for (iter = tv->sortedColumns.begin(); iter != tv->sortedColumns.end(); iter++)
- {
- column = gtk_tree_view_get_column(tv->view, iter->first);
- if (string(gtk_tree_view_column_get_title(column)) == title)
- break;
- }
-
- if (!column)
- return;
-
- visible = !gtk_tree_view_column_get_visible(column);
+ gpointer column_data = g_object_get_data(G_OBJECT(item), "column");
+ GtkTreeViewColumn *column = GTK_TREE_VIEW_COLUMN(column_data);
+ gboolean visible = !gtk_tree_view_column_get_visible(column);
// Can't let number of visible columns fall below 1, otherwise there's no way to unhide columns.
if (!visible && tv->visibleColumns <= 1)
{
- gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(tv->colMenuItems[title]), true);
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), true);
return;
}
gtk_tree_view_column_set_visible(column, visible);
- gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(tv->colMenuItems[title]), visible);
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), visible);
if (visible)
{
=== modified file 'linux/treeview.hh'
--- linux/treeview.hh 2010-01-01 00:57:24 +0000
+++ linux/treeview.hh 2010-10-18 02:06:51 +0000
@@ -101,6 +101,7 @@
};
void addColumn_gui(Column& column);
+ void addCheckMenuItem(GtkTreeViewColumn *col);
void restoreSettings();
static gboolean popupMenu_gui(GtkWidget *widget, GdkEventButton *event, gpointer data);
static void toggleColumnVisibility(GtkMenuItem *item, gpointer data);
@@ -115,7 +116,6 @@
int visibleColumns;
GtkMenu *menu;
GType *gtypes;
- std::map<std::string, GtkWidget*> colMenuItems;
typedef std::map<std::string, Column> ColMap;
typedef std::map<int, std::string> SortedColMap;