← Back to team overview

linuxdcpp-team team mailing list archive

[Branch ~linuxdcpp-team/linuxdcpp/linuxdcpp-i18n] Rev 394: Save tree view column settings no longer depends on column title

 

------------------------------------------------------------
revno: 394
committer: Steven Sheehy <steven.sheehy@xxxxxxxxx>
branch nick: linuxdcpp-i18n
timestamp: Thu 2010-10-21 22:36:33 -0500
message:
  Save tree view column settings no longer depends on 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-10-18 02:06:51 +0000
+++ linux/treeview.cc	2010-10-22 03:36:33 +0000
@@ -23,6 +23,8 @@
 #include "settingsmanager.hh"
 #include "WulforUtil.hh"
 
+#include <sstream>
+
 using namespace std;
 
 TreeView::TreeView()
@@ -71,7 +73,7 @@
 		m = gtk_tree_view_get_model(view);
 	string value;
 	gchar* temp;
-	dcassert(gtk_tree_model_get_column_type(m, col(column)) == G_TYPE_STRING);
+	g_assert(gtk_tree_model_get_column_type(m, col(column)) == G_TYPE_STRING);
 	gtk_tree_model_get(m, i, col(column), &temp, -1);
 
 	if (temp != NULL)
@@ -86,10 +88,10 @@
 void TreeView::insertColumn(const string &title, const GType &gtype, const columnType type, const int width, const string &linkedCol)
 {
 	// All insertColumn's have to be called before any insertHiddenColumn's.
-	dcassert(hiddenColumns.size() == 0);
+	g_assert(hiddenColumns.size() == 0);
 
 	// Title must be unique.
-	dcassert(!title.empty() && columns.find(title) == columns.end());
+	g_assert(!title.empty() && columns.find(title) == columns.end());
 
 	columns[title] = Column(title, count, gtype, type, width, linkedCol);
 	sortedColumns[count] = title;
@@ -99,9 +101,9 @@
 void TreeView::insertHiddenColumn(const string &title, const GType &gtype)
 {
 	// Title must be unique.
-	dcassert(!title.empty());
-	dcassert(hiddenColumns.find(title) == hiddenColumns.end());
-	dcassert(columns.find(title) == columns.end());
+	g_assert(!title.empty());
+	g_assert(hiddenColumns.find(title) == hiddenColumns.end());
+	g_assert(columns.find(title) == columns.end());
 
 	hiddenColumns[title] = Column(title, count, gtype);
 	sortedHiddenColumns[count] = title;
@@ -110,7 +112,7 @@
 
 void TreeView::finalize()
 {
-	dcassert(count > 0);
+	g_assert(count > 0);
 
 	menu = GTK_MENU(gtk_menu_new());
 	visibleColumns = columns.size();
@@ -311,6 +313,7 @@
 	gtk_tree_view_column_set_visible(col, column.visible);
 
 	gtk_tree_view_insert_column(view, col, column.pos);
+	g_object_set_data(G_OBJECT(col), "column", (gpointer)&column);
 
 	/*
 	 * Breaks GTK+ API, but is the only way to attach a signal to a gtktreeview column header. See GTK bug #141937.
@@ -328,7 +331,7 @@
 
 	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_object_set_data(G_OBJECT(menuItem), "gtktreeviewcolumn", (gpointer)col);
 	g_signal_connect(menuItem, "activate", G_CALLBACK(toggleColumnVisibility), (gpointer)this);
 	gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuItem);
 }
@@ -341,8 +344,8 @@
 
 int TreeView::col(const string &title)
 {
-	dcassert(!title.empty());
-	dcassert(columns.find(title) != columns.end() || hiddenColumns.find(title) != hiddenColumns.end());
+	g_assert(!title.empty());
+	g_assert(columns.find(title) != columns.end() || hiddenColumns.find(title) != hiddenColumns.end());
 	int retval = -1;
 
 	if (columns.find(title) != columns.end())
@@ -350,7 +353,7 @@
 	else
 		retval = hiddenColumns[title].id;
 
-	dcassert(retval >= 0 && (retval < count));
+	g_assert(retval >= 0 && (retval < count));
 	return retval;
 }
 
@@ -371,7 +374,7 @@
 void TreeView::toggleColumnVisibility(GtkMenuItem *item, gpointer data)
 {
 	TreeView *tv = (TreeView*)data;
-	gpointer column_data = g_object_get_data(G_OBJECT(item), "column");
+	gpointer column_data = g_object_get_data(G_OBJECT(item), "gtktreeviewcolumn");
 	GtkTreeViewColumn *column = GTK_TREE_VIEW_COLUMN(column_data);
 	gboolean visible = !gtk_tree_view_column_get_visible(column);
 
@@ -427,41 +430,44 @@
 
 void TreeView::saveSettings()
 {
-	string columnOrder, columnWidth, columnVisibility, title;
-	GtkTreeViewColumn *col;
-	gint width;
-
-	dcassert(columns.size() > 0);
+	const string delimiter = ",";
+	stringstream columnOrder;
+	stringstream columnWidth;
+	stringstream columnVisibility;
 
 	for (size_t i = 0; i < columns.size(); i++)
 	{
-		col = gtk_tree_view_get_column(view, i);
+		GtkTreeViewColumn *col = gtk_tree_view_get_column(view, i);
 		if (col == NULL)
 			continue;
 
-		title = string(gtk_tree_view_column_get_title(col));
-		width = gtk_tree_view_column_get_width(col);
+		Column *column = (Column*)g_object_get_data(G_OBJECT(col), "column");
 
 		// A col was moved to the right of the padding col
-		if (title.empty())
+		if (column == NULL)
 			return;
 
-		columnOrder += dcpp::Util::toString(columns[title].id) + ",";
-		if (width >= 20)
-			columnWidth += dcpp::Util::toString(width) + ",";
-		else
-			columnWidth += dcpp::Util::toString(columns[title].width) + ",";
-		columnVisibility += dcpp::Util::toString(gtk_tree_view_column_get_visible(col)) + ",";
+		gint width = gtk_tree_view_column_get_width(col);
+		width = width >= 20 ? width : column->width;
+		gboolean visible = gtk_tree_view_column_get_visible(col);
+
+		columnOrder << column->id;
+		columnWidth << width;
+		columnVisibility << visible;
+
+		// Add delimiter except for the last iteration
+		if (i < columns.size() - 1)
+		{
+			columnOrder << delimiter;
+			columnWidth << delimiter;
+			columnVisibility << delimiter;
+		}
 	}
 
-	if (columnOrder.size() > 0)
+	if (!columnOrder.str().empty())
 	{
-		columnOrder.erase(columnOrder.size() - 1, 1);
-		columnWidth.erase(columnWidth.size() - 1, 1);
-		columnVisibility.erase(columnVisibility.size() - 1, 1);
-
-		WSET(name + "-order", columnOrder);
-		WSET(name + "-width", columnWidth);
-		WSET(name + "-visibility", columnVisibility);
+		WSET(name + "-order", columnOrder.str());
+		WSET(name + "-width", columnWidth.str());
+		WSET(name + "-visibility", columnVisibility.str());
 	}
 }

=== modified file 'linux/treeview.hh'
--- linux/treeview.hh	2010-10-18 02:06:51 +0000
+++ linux/treeview.hh	2010-10-22 03:36:33 +0000
@@ -23,7 +23,6 @@
 #define WULFOR_TREE_VIEW_HH
 
 #include <gtk/gtk.h>
-#include <cassert>
 #include <map>
 #include <string>
 
@@ -67,7 +66,7 @@
 			if (m == NULL)
 				m = gtk_tree_view_get_model(view);
 			T value;
-			assert(gtk_tree_model_get_column_type(m, col(column)) != G_TYPE_STRING);
+			g_assert(gtk_tree_model_get_column_type(m, col(column)) != G_TYPE_STRING);
 			gtk_tree_model_get(m, i, col(column), &value, -1);
 			return value;
 		}