← Back to team overview

linuxdcpp-team team mailing list archive

[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;