<< Prefs :: SHOW_TRAY_ICON
<< Prefs :: SORT_REVERSED
<< Prefs :: SORT_MODE
+ << Prefs :: FILTER_MODE
<< Prefs :: FILTERBAR
<< Prefs :: STATUSBAR
<< Prefs :: STATUSBAR_STATS
void
TrMainWindow :: setShowMode( TorrentFilter :: ShowMode mode )
{
- ui.filterAll->setChecked( mode == TorrentFilter::SHOW_ALL );
- ui.filterActive->setChecked( mode == TorrentFilter::SHOW_ACTIVE );
- ui.filterDownloading->setChecked( mode == TorrentFilter::SHOW_DOWNLOADING );
- ui.filterSeeding->setChecked( mode == TorrentFilter::SHOW_SEEDING );
- ui.filterPaused->setChecked( mode == TorrentFilter::SHOW_PAUSED );
+ ui.filterAll->setChecked ( mode == TorrentFilter :: SHOW_ALL );
+ ui.filterActive->setChecked ( mode == TorrentFilter :: SHOW_ACTIVE );
+ ui.filterDownloading->setChecked ( mode == TorrentFilter :: SHOW_DOWNLOADING );
+ ui.filterSeeding->setChecked ( mode == TorrentFilter :: SHOW_SEEDING );
+ ui.filterPaused->setChecked ( mode == TorrentFilter :: SHOW_PAUSED );
myFilterModel.setShowMode( mode );
}
TrMainWindow :: refreshPref( int key )
{
bool b;
+ int i;
QString str;
switch( key )
break;
case Prefs::SORT_MODE:
- str = myPrefs.getString( key );
- ui.action_SortByActivity->setChecked ( str == "sort-by-activity" );
- ui.action_SortByAge->setChecked ( str == "sort-by-age" );
- ui.action_SortByETA->setChecked ( str == "sort-by-eta" );
- ui.action_SortByName->setChecked ( str == "sort-by-name" );
- ui.action_SortByProgress->setChecked ( str == "sort-by-progress" );
- ui.action_SortByRatio->setChecked ( str == "sort-by-ratio" );
- ui.action_SortBySize->setChecked ( str == "sort-by-size" );
- ui.action_SortByState->setChecked ( str == "sort-by-state" );
- ui.action_SortByTracker->setChecked ( str == "sort-by-tracker" );
+ i = myFilterModel.getSortModeFromName( myPrefs.getString( key ) );
+ ui.action_SortByActivity->setChecked ( i == TorrentFilter::SORT_BY_ACTIVITY );
+ ui.action_SortByAge->setChecked ( i == TorrentFilter::SORT_BY_AGE );
+ ui.action_SortByETA->setChecked ( i == TorrentFilter::SORT_BY_ETA );
+ ui.action_SortByName->setChecked ( i == TorrentFilter::SORT_BY_NAME );
+ ui.action_SortByProgress->setChecked ( i == TorrentFilter::SORT_BY_PROGRESS );
+ ui.action_SortByRatio->setChecked ( i == TorrentFilter::SORT_BY_RATIO );
+ ui.action_SortBySize->setChecked ( i == TorrentFilter::SORT_BY_SIZE );
+ ui.action_SortByState->setChecked ( i == TorrentFilter::SORT_BY_STATE );
+ ui.action_SortByTracker->setChecked ( i == TorrentFilter::SORT_BY_TRACKER );
+ break;
+
+ case Prefs::FILTER_MODE:
+ i = myFilterModel.getShowModeFromName( myPrefs.getString( key ) );
+ ui.filterAll->setChecked ( i == TorrentFilter::SHOW_ALL );
+ ui.filterActive->setChecked ( i == TorrentFilter::SHOW_ACTIVE );
+ ui.filterDownloading->setChecked ( i == TorrentFilter::SHOW_DOWNLOADING );
+ ui.filterSeeding->setChecked ( i == TorrentFilter::SHOW_SEEDING );
+ ui.filterPaused->setChecked ( i == TorrentFilter::SHOW_PAUSED );
break;
+
case Prefs::FILTERBAR:
b = myPrefs.getBool( key );
ui.filterbar->setVisible( b );
case Prefs :: BLOCKLIST_ENABLED: {
const bool enabled = myPrefs.getBool( key );
- std::cerr << " setting " << myBlockWidgets.size() << " block widgets to " << enabled << std::endl;
foreach( QWidget * w, myBlockWidgets ) w->setEnabled( enabled );
break;
}
{ MAIN_WINDOW_WIDTH, "main-window-width", QVariant::Int },
{ MAIN_WINDOW_X, "main-window-x", QVariant::Int },
{ MAIN_WINDOW_Y, "main-window-y", QVariant::Int },
+ { FILTER_MODE, "filter-mode", QVariant::String },
/* libtransmission settings */
{ ALT_SPEED_LIMIT_UP, TR_PREFS_KEY_ALT_SPEED_UP, QVariant::Int },
tr_bencDictAddInt( d, keyStr(MAIN_WINDOW_WIDTH), 300 );
tr_bencDictAddInt( d, keyStr(MAIN_WINDOW_X), 50 );
tr_bencDictAddInt( d, keyStr(MAIN_WINDOW_Y), 50 );
+ tr_bencDictAddStr( d, keyStr(FILTER_MODE), "all" );
tr_bencDictAddStr( d, keyStr(MAIN_WINDOW_LAYOUT_ORDER), "menu,toolbar,filter,list,statusbar" );
tr_bencDictAddStr( d, keyStr(DOWNLOAD_DIR), tr_getDefaultDownloadDir( ) );
tr_bencDictAddInt( d, keyStr(ASKQUIT), true );
MAIN_WINDOW_WIDTH,
MAIN_WINDOW_X,
MAIN_WINDOW_Y,
+ FILTER_MODE,
/* core prefs */
FIRST_CORE_PREF,
TorrentFilter :: TorrentFilter( Prefs& prefs ):
myPrefs( prefs ),
- myShowMode( SHOW_ALL ),
+ myShowMode( getShowModeFromName( prefs.getString( Prefs::FILTER_MODE ) ) ),
myTextMode( FILTER_BY_NAME ),
- mySortMode( SORT_BY_ID ),
- myIsAscending( FALSE )
+ mySortMode( getSortModeFromName( prefs.getString( Prefs::SORT_MODE ) ) ),
+ myIsAscending( prefs.getBool( Prefs::SORT_REVERSED ) )
{
}
{
if( myShowMode != showMode )
{
+ myPrefs.set( Prefs :: FILTER_MODE, getShowName( showMode ) );
myShowMode = ShowMode( showMode );
invalidateFilter( );
}
****
***/
-const char*
-TorrentFilter :: getSortKey( int modeIn )
+namespace
{
- switch( modeIn < 0 ? getSortMode( ) : SortMode( modeIn ) )
+ struct NameAndNum
+ {
+ const char * name;
+ int num;
+ };
+
+ const struct NameAndNum showModes[] = {
+ { "show-all", TorrentFilter::SHOW_ALL },
+ { "show-active", TorrentFilter::SHOW_ACTIVE },
+ { "show-downloading", TorrentFilter::SHOW_DOWNLOADING },
+ { "show-seeding", TorrentFilter::SHOW_SEEDING },
+ { "show-paused", TorrentFilter::SHOW_PAUSED }
+ };
+
+ const int showModeCount = sizeof(showModes) / sizeof(showModes[0]);
+
+ const struct NameAndNum sortModes[] = {
+ { "sort-by-name", TorrentFilter::SORT_BY_NAME },
+ { "sort-by-activity", TorrentFilter::SORT_BY_ACTIVITY },
+ { "sort-by-age", TorrentFilter::SORT_BY_AGE },
+ { "sort-by-eta", TorrentFilter::SORT_BY_ETA },
+ { "sort-by-progress", TorrentFilter::SORT_BY_PROGRESS },
+ { "sort-by-ratio", TorrentFilter::SORT_BY_RATIO },
+ { "sort-by-size", TorrentFilter::SORT_BY_SIZE },
+ { "sort-by-state", TorrentFilter::SORT_BY_STATE },
+ { "sort-by-tracker", TorrentFilter::SORT_BY_TRACKER }
+ };
+
+ const int sortModeCount = sizeof(sortModes) / sizeof(sortModes[0]);
+
+ int getNum( const struct NameAndNum * rows, int numRows, const QString& name )
{
- case SORT_BY_ACTIVITY: return "sort-by-activity";
- case SORT_BY_AGE: return "sort-by-age";
- case SORT_BY_ETA: return "sort-by-eta";
- case SORT_BY_PROGRESS: return "sort-by-progress";
- case SORT_BY_RATIO: return "sort-by-ratio";
- case SORT_BY_SIZE: return "sort-by-size";
- case SORT_BY_STATE: return "sort-by-state";
- case SORT_BY_TRACKER: return "sort-by-tracker";
- default: return "sort-by-name";
+ for( int i=0; i<numRows; ++i )
+ if( name == rows[i].name )
+ return rows[i].num;
+ return rows[0].num; // fallback value
}
+
+ const char* getName( const struct NameAndNum * rows, int numRows, int num )
+ {
+ for( int i=0; i<numRows; ++i )
+ if( num == rows[i].num )
+ return rows[i].name;
+ return rows[0].name; // fallback value
+ }
+}
+
+TorrentFilter :: ShowMode
+TorrentFilter :: getShowModeFromName( const QString& key ) const
+{
+ return ShowMode( getNum( showModes, showModeCount, key ) );
+}
+
+const char*
+TorrentFilter :: getShowName( int mode ) const
+{
+ if( mode < 0 ) mode = getShowMode( );
+ return getName( showModes, showModeCount, mode );
+}
+
+TorrentFilter :: SortMode
+TorrentFilter :: getSortModeFromName( const QString& key ) const
+{
+ return SortMode( getNum( sortModes, sortModeCount, key ) );
+}
+
+const char*
+TorrentFilter :: getSortName( int mode ) const
+{
+ if( mode < 0 ) mode = getSortMode( );
+ return getName( sortModes, sortModeCount, mode );
}
+/***
+****
+***/
+
void
TorrentFilter :: resort( )
{
{
if( mySortMode != sortMode )
{
- myPrefs.set( Prefs :: SORT_MODE, getSortKey( sortMode ) );
+ myPrefs.set( Prefs :: SORT_MODE, getSortName( sortMode ) );
mySortMode = SortMode( sortMode );
setDynamicSortFilter ( true );
resort( );
#include <QSortFilterProxyModel>
struct Prefs;
+struct QString;
class TorrentFilter: public QSortFilterProxyModel
{
public:
enum ShowMode { SHOW_ALL, SHOW_ACTIVE, SHOW_DOWNLOADING, SHOW_SEEDING, SHOW_PAUSED };
ShowMode getShowMode( ) const { return myShowMode; }
+ ShowMode getShowModeFromName( const QString& name ) const;
+ const char * getShowName( int mode=-1 ) const;
enum TextMode { FILTER_BY_NAME, FILTER_BY_FILES, FILTER_BY_TRACKER };
TextMode getTextMode( ) const { return myTextMode; }
enum SortMode{ SORT_BY_ACTIVITY, SORT_BY_AGE, SORT_BY_ETA, SORT_BY_NAME,
SORT_BY_PROGRESS, SORT_BY_RATIO, SORT_BY_SIZE,
SORT_BY_STATE, SORT_BY_TRACKER, SORT_BY_ID };
- const char * getSortKey( int mode=-1 );
SortMode getSortMode( ) const { return mySortMode; }
+ SortMode getSortModeFromName( const QString& name) const;
+ const char * getSortName( int mode=-1 ) const;
bool isAscending( ) const { return myIsAscending; }