source: trunk/qt/prefs.h @ 8216

Last change on this file since 8216 was 8216, checked in by charles, 13 years ago

(qt) better integration of sort & filter modes into the preferences mechanism

File size: 4.4 KB
Line 
1/*
2 * This file Copyright (C) 2009 Charles Kerr <charles@transmissionbt.com>
3 *
4 * This file is licensed by the GPL version 2.  Works owned by the
5 * Transmission project are granted a special exemption to clause 2(b)
6 * so that the bulk of its code can remain under the MIT license.
7 * This exemption does not extend to derived works not owned by
8 * the Transmission project.
9 *
10 * $Id:$
11 */
12
13#ifndef QTR_PREFS_H
14#define QTR_PREFS_H
15
16#include <QDateTime>
17#include <QObject>
18#include <QString>
19#include <QVariant>
20
21#include <libtransmission/transmission.h>
22#include <libtransmission/bencode.h>
23
24#include "filters.h"
25
26class Prefs: public QObject
27{
28        Q_OBJECT;
29
30    public:
31
32        enum
33        {
34            /* client prefs */
35            OPTIONS_PROMPT,
36            OPEN_DIALOG_FOLDER,
37            INHIBIT_HIBERNATION,
38            DIR_WATCH,
39            DIR_WATCH_ENABLED,
40            SHOW_TRAY_ICON,
41            SHOW_DESKTOP_NOTIFICATION,
42            START,
43            TRASH_ORIGINAL,
44            ASKQUIT,
45            SORT_MODE,
46            SORT_REVERSED,
47            MINIMAL_VIEW,
48            FILTERBAR,
49            STATUSBAR,
50            STATUSBAR_STATS,
51            TOOLBAR,
52            BLOCKLIST_DATE,
53            BLOCKLIST_UPDATES_ENABLED,
54            MAIN_WINDOW_LAYOUT_ORDER,
55            MAIN_WINDOW_HEIGHT,
56            MAIN_WINDOW_WIDTH,
57            MAIN_WINDOW_X,
58            MAIN_WINDOW_Y,
59            FILTER_MODE,
60
61            /* core prefs */
62            FIRST_CORE_PREF,
63            ALT_SPEED_LIMIT_UP = FIRST_CORE_PREF,
64            ALT_SPEED_LIMIT_DOWN,
65            ALT_SPEED_LIMIT_ENABLED,
66            ALT_SPEED_LIMIT_TIME_BEGIN,
67            ALT_SPEED_LIMIT_TIME_END,
68            ALT_SPEED_LIMIT_TIME_ENABLED,
69            ALT_SPEED_LIMIT_TIME_DAY,
70            BLOCKLIST_ENABLED,
71            DSPEED,
72            DSPEED_ENABLED,
73            DOWNLOAD_DIR,
74            ENCRYPTION,
75            LAZY_BITFIELD,
76            MSGLEVEL,
77            OPEN_FILE_LIMIT,
78            PEER_LIMIT_GLOBAL,
79            PEER_LIMIT_TORRENT,
80            PEER_PORT,
81            PEER_PORT_RANDOM_ON_START,
82            PEER_PORT_RANDOM_LOW,
83            PEER_PORT_RANDOM_HIGH,
84            SOCKET_TOS,
85            PEX_ENABLED,
86            PORT_FORWARDING,
87            PROXY_AUTH_ENABLED,
88            PREALLOCATION,
89            PROXY_ENABLED,
90            PROXY_PASSWORD,
91            PROXY_PORT,
92            PROXY,
93            PROXY_TYPE,
94            PROXY_USERNAME,
95            RATIO,
96            RATIO_ENABLED,
97            RPC_AUTH_REQUIRED,
98            RPC_ENABLED,
99            RPC_PASSWORD,
100            RPC_PORT,
101            RPC_USERNAME,
102            RPC_WHITELIST_ENABLED,
103            RPC_WHITELIST,
104            SEED_RATIO_LIMIT,
105            SEED_RATIO_LIMITED,
106            USPEED_ENABLED,
107            USPEED,
108            UPLOAD_SLOTS_PER_TORRENT,
109            LAST_CORE_PREF = UPLOAD_SLOTS_PER_TORRENT,
110
111            PREFS_COUNT
112        };
113
114    private:
115
116        struct PrefItem {
117            int id;
118            const char * key;
119            int type;
120        };
121
122        static PrefItem myItems[];
123
124    private:
125        QString myConfigDir;
126        QVariant myValues[PREFS_COUNT];
127        void initDefaults( tr_benc* );
128
129    public:
130        bool isCore( int key ) const { return FIRST_CORE_PREF<=key && key<=LAST_CORE_PREF; }
131        bool isClient( int key ) const { return !isCore( key ); }
132        const char * keyStr( int i ) const { return myItems[i].key; }
133        int type( int i ) const { return myItems[i].type; }
134        const QVariant& variant( int i ) const { return myValues[i]; }
135
136        Prefs( const char * configDir );
137        ~Prefs( );
138
139        int getInt( int key ) const;
140        bool getBool( int key) const;
141        QString getString( int key ) const;
142        double getDouble( int key) const;
143        QDateTime getDateTime( int key ) const;
144
145        template<typename T> T get( int key ) const {
146            return myValues[key].value<T>();
147        }
148
149        void set( int key, char * value ) { set( key, QString::fromUtf8(value) ); }
150        void set( int key, const char * value ) { set( key, QString::fromUtf8(value) ); }
151
152        template<typename T> void set( int key, const T& value ) {
153            QVariant& v( myValues[key] );
154            const QVariant tmp = QVariant::fromValue(value);
155            if( v.isNull() || (v!=tmp) ) {
156                v = tmp;
157                emit changed( key );
158            }
159        }
160
161        void toggleBool( int key );
162
163     signals:
164        void changed( int key );
165};
166
167#endif
Note: See TracBrowser for help on using the repository browser.