(gtk) add sort-by-ratio

This commit is contained in:
Charles Kerr 2007-12-19 07:03:28 +00:00
parent 471c81e07e
commit 9ed991657e
4 changed files with 43 additions and 31 deletions

View File

@ -61,8 +61,9 @@ static GtkRadioActionEntry sort_radio_entries[] =
{ "sort-by-date-added", NULL, N_("Sort by _Date Added"), NULL, NULL, 1 },
{ "sort-by-name", NULL, N_("Sort by _Name"), NULL, NULL, 2 },
{ "sort-by-progress", NULL, N_("Sort by _Progress"), NULL, NULL, 3 },
{ "sort-by-state", NULL, N_("Sort by _State"), NULL, NULL, 4 },
{ "sort-by-tracker", NULL, N_("Sort by _Tracker"), NULL, NULL, 5 }
{ "sort-by-ratio", NULL, N_("Sort by _Ratio"), NULL, NULL, 4 },
{ "sort-by-state", NULL, N_("Sort by _State"), NULL, NULL, 5 },
{ "sort-by-tracker", NULL, N_("Sort by _Tracker"), NULL, NULL, 6 }
};
static void

View File

@ -1028,6 +1028,7 @@ doAction ( const char * action_name, gpointer user_data )
|| !strcmp( action_name, "sort-by-date-added" )
|| !strcmp( action_name, "sort-by-name" )
|| !strcmp( action_name, "sort-by-progress" )
|| !strcmp( action_name, "sort-by-ratio" )
|| !strcmp( action_name, "sort-by-state" )
|| !strcmp( action_name, "sort-by-tracker" ) )
{

View File

@ -229,18 +229,35 @@ compareByProgress( GtkTreeModel * model,
GtkTreeIter * b,
gpointer user_data UNUSED )
{
TrTorrent *ta, *tb;
tr_torrent *ta, *tb;
const tr_stat *sa, *sb;
int ret;
gtk_tree_model_get( model, a, MC_TORRENT, &ta, -1 );
gtk_tree_model_get( model, b, MC_TORRENT, &tb, -1 );
sa = tr_torrent_stat( ta );
sb = tr_torrent_stat( tb );
gtk_tree_model_get( model, a, MC_TORRENT_RAW, &ta, -1 );
gtk_tree_model_get( model, b, MC_TORRENT_RAW, &tb, -1 );
sa = tr_torrentStat( ta );
sb = tr_torrentStat( tb );
if( sa->percentDone < sb->percentDone ) ret = -1;
else if( sa->percentDone > sb->percentDone ) ret = 1;
else ret = 0;
g_object_unref( G_OBJECT( tb ) );
g_object_unref( G_OBJECT( ta ) );
return ret;
}
static int
compareByRatio( GtkTreeModel * model,
GtkTreeIter * a,
GtkTreeIter * b,
gpointer user_data UNUSED )
{
tr_torrent *ta, *tb;
const tr_stat *sa, *sb;
int ret;
gtk_tree_model_get( model, a, MC_TORRENT_RAW, &ta, -1 );
gtk_tree_model_get( model, b, MC_TORRENT_RAW, &tb, -1 );
sa = tr_torrentStat( ta );
sb = tr_torrentStat( tb );
if( sa->ratio < sb->ratio ) ret = -1;
else if( sa->ratio > sb->ratio ) ret = 1;
else ret = 0;
return ret;
}
@ -250,17 +267,10 @@ compareByState( GtkTreeModel * model,
GtkTreeIter * b,
gpointer user_data UNUSED )
{
TrTorrent *ta, *tb;
const tr_stat *sa, *sb;
int ret;
gtk_tree_model_get( model, a, MC_TORRENT, &ta, -1 );
gtk_tree_model_get( model, b, MC_TORRENT, &tb, -1 );
sa = tr_torrent_stat( ta );
sb = tr_torrent_stat( tb );
ret = sa->status - sb->status;
g_object_unref( G_OBJECT( ta ) );
g_object_unref( G_OBJECT( tb ) );
return ret;
tr_torrent *ta, *tb;
gtk_tree_model_get( model, a, MC_TORRENT_RAW, &ta, -1 );
gtk_tree_model_get( model, b, MC_TORRENT_RAW, &tb, -1 );
return tr_torrentStat(ta)->status - tr_torrentStat(tb)->status;
}
static int
@ -269,17 +279,11 @@ compareByTracker( GtkTreeModel * model,
GtkTreeIter * b,
gpointer user_data UNUSED )
{
TrTorrent *ta, *tb;
const tr_info *ia, *ib;
int ret;
gtk_tree_model_get( model, a, MC_TORRENT, &ta, -1 );
gtk_tree_model_get( model, b, MC_TORRENT, &tb, -1 );
ia = tr_torrent_info( ta );
ib = tr_torrent_info( tb );
ret = strcmp( ia->primaryAddress, ib->primaryAddress );
g_object_unref( G_OBJECT( ta ) );
g_object_unref( G_OBJECT( tb ) );
return ret;
const tr_torrent *ta, *tb;
gtk_tree_model_get( model, a, MC_TORRENT_RAW, &ta, -1 );
gtk_tree_model_get( model, b, MC_TORRENT_RAW, &tb, -1 );
return strcmp( tr_torrentInfo(ta)->primaryAddress,
tr_torrentInfo(tb)->primaryAddress );
}
/***
@ -309,6 +313,11 @@ setSort( TrCore * core, const char * mode, gboolean isReversed )
type = isReversed ? GTK_SORT_ASCENDING : GTK_SORT_DESCENDING;
gtk_tree_sortable_set_sort_func( sortable, col, compareByProgress, NULL, NULL );
}
else if( !strcmp( mode, "sort-by-ratio" ) )
{
type = isReversed ? GTK_SORT_ASCENDING : GTK_SORT_DESCENDING;
gtk_tree_sortable_set_sort_func( sortable, col, compareByRatio, NULL, NULL );
}
else if( !strcmp( mode, "sort-by-state" ) )
{
type = isReversed ? GTK_SORT_ASCENDING : GTK_SORT_DESCENDING;

View File

@ -22,6 +22,7 @@ const char * fallback_ui_file =
" <menuitem action='sort-by-activity'/>\n"
" <menuitem action='sort-by-name'/>\n"
" <menuitem action='sort-by-progress'/>\n"
" <menuitem action='sort-by-ratio'/>\n"
" <menuitem action='sort-by-state'/>\n"
" <menuitem action='sort-by-tracker'/>\n"
" <menuitem action='reverse-sort-order'/>\n"