linuxdcpp-team team mailing list archive
-
linuxdcpp-team team
-
Mailing list archive
-
Message #02196
[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 >ype, 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 >ype)
{
// 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;
}