(gtk) remember between sessions which column is used for sorting in the main window's torrent list

This commit is contained in:
Charles Kerr 2007-10-17 18:31:12 +00:00
parent 3210f92085
commit 31646bcfb9
6 changed files with 55 additions and 1 deletions

View File

@ -650,6 +650,7 @@ initializeFromPrefs( struct cbdata * cbdata )
PREF_KEY_NAT,
PREF_KEY_PEX,
PREF_KEY_SYSTRAY,
PREF_KEY_SORT_COLUMN,
PREF_KEY_ENCRYPTED_ONLY
};
@ -711,6 +712,10 @@ prefschanged( TrCore * core UNUSED, const char * key, gpointer data )
cbdata->icon = NULL;
}
}
else if( !strcmp( key, PREF_KEY_SORT_COLUMN ) )
{
tr_core_set_sort_column_from_prefs( cbdata->core );
}
else if( !strcmp( key, PREF_KEY_PEX ) )
{
gboolean enabled = pref_flag_get( key );

View File

@ -236,6 +236,48 @@ compareProgress( GtkTreeModel * model,
return 0;
}
#define STR_REVERSE "reverse-"
#define STR_PROGRESS "progress"
#define STR_NAME "name"
static void
onSortColumnChanged( GtkTreeSortable * sortable, gpointer unused UNUSED )
{
int column;
GtkSortType order;
if( gtk_tree_sortable_get_sort_column_id( sortable, &column, &order ) )
{
GString * gstr = g_string_new( NULL );
switch( column ) {
case MC_PROG_D: g_string_assign( gstr, STR_PROGRESS ); break;
default: g_string_assign( gstr, STR_NAME ); break;
}
if( order == GTK_SORT_DESCENDING )
g_string_prepend( gstr, STR_REVERSE );
pref_string_set( PREF_KEY_SORT_COLUMN, gstr->str );
g_string_free( gstr, TRUE );
}
}
void
tr_core_set_sort_column_from_prefs( TrCore * core )
{
char * val = pref_string_get( PREF_KEY_SORT_COLUMN );
char * freeme = val;
gint column;
GtkSortType order = GTK_SORT_ASCENDING;
if( g_str_has_prefix( val, STR_REVERSE ) ) {
order = GTK_SORT_DESCENDING;
val += strlen( STR_REVERSE );
}
if( !strcmp( val, STR_PROGRESS ) )
column = MC_PROG_D;
else /* default */
column = MC_NAME;
gtk_tree_sortable_set_sort_column_id ( GTK_TREE_SORTABLE( core->model ), column, order );
g_free( freeme );
}
static void
tr_core_init( GTypeInstance * instance, gpointer g_class SHUTUP )
{
@ -265,6 +307,7 @@ tr_core_init( GTypeInstance * instance, gpointer g_class SHUTUP )
/* create the model used to store torrent data */
g_assert( ALEN( types ) == MC_ROW_COUNT );
store = gtk_list_store_newv( MC_ROW_COUNT, types );
g_signal_connect( store, "sort-column-changed", G_CALLBACK(onSortColumnChanged), NULL );
gtk_tree_sortable_set_sort_func( GTK_TREE_SORTABLE(store),
MC_PROG_D,

View File

@ -180,6 +180,9 @@ tr_core_set_pref_bool( TrCore * self, const char * key, gboolean val );
void
tr_core_set_pref_int( TrCore * self, const char * key, int val );
void
tr_core_set_sort_column_from_prefs( TrCore * core );
/* column names for the model used to store torrent information */
/* keep this in sync with the type array in tr_core_init() in tr_core.c */
enum {

View File

@ -47,6 +47,8 @@ tr_prefs_init_global( void )
pref_int_set_default ( PREF_KEY_MSGLEVEL, TR_MSG_INF );
pref_string_set_default ( PREF_KEY_SORT_COLUMN, "name" );
pref_save( NULL );
}

View File

@ -35,6 +35,7 @@ GtkWidget * tr_prefs_dialog_new( GObject * core, GtkWindow * parent );
#define PREF_KEY_ASKQUIT "prompt-before-exit"
#define PREF_KEY_ENCRYPTED_ONLY "encrypted-connections-only"
#define PREF_KEY_MSGLEVEL "debug-message-level"
#define PREF_KEY_SORT_COLUMN "sort-column"
void tr_prefs_init_global( void );

View File

@ -173,7 +173,7 @@ makeview( PrivateData * p )
GtkCellRenderer * namerend, * progrend;
char * str;
view = gtk_tree_view_new();
view = gtk_tree_view_new();
p->selection = gtk_tree_view_get_selection( GTK_TREE_VIEW(view) );
namerend = gtk_cell_renderer_text_new();