source: trunk/qt/prefs.h @ 9237

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

(trunk, gtk, qt) #2478: popup dialog for first-time users

  • Property svn:keywords set to Date Rev Author Id
File size: 4.6 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: prefs.h 9237 2009-10-02 22:53:19Z charles $
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 "filters.h"
22
23extern "C"
24{
25    struct tr_benc;
26}
27
28class Prefs: public QObject
29{
30        Q_OBJECT;
31
32    public:
33
34        enum
35        {
36            /* client prefs */
37            OPTIONS_PROMPT,
38            OPEN_DIALOG_FOLDER,
39            INHIBIT_HIBERNATION,
40            DIR_WATCH,
41            DIR_WATCH_ENABLED,
42            SHOW_TRAY_ICON,
43            SHOW_DESKTOP_NOTIFICATION,
44            START,
45            TRASH_ORIGINAL,
46            ASKQUIT,
47            SORT_MODE,
48            SORT_REVERSED,
49            MINIMAL_VIEW,
50            FILTERBAR,
51            STATUSBAR,
52            STATUSBAR_STATS,
53            TOOLBAR,
54            BLOCKLIST_DATE,
55            BLOCKLIST_UPDATES_ENABLED,
56            MAIN_WINDOW_LAYOUT_ORDER,
57            MAIN_WINDOW_HEIGHT,
58            MAIN_WINDOW_WIDTH,
59            MAIN_WINDOW_X,
60            MAIN_WINDOW_Y,
61            FILTER_MODE,
62            SESSION_IS_REMOTE,
63            SESSION_REMOTE_HOST,
64            SESSION_REMOTE_PORT,
65            SESSION_REMOTE_AUTH,
66            SESSION_REMOTE_USERNAME,
67            SESSION_REMOTE_PASSWORD,
68            USER_HAS_GIVEN_INFORMED_CONSENT,
69
70            /* core prefs */
71            FIRST_CORE_PREF,
72            ALT_SPEED_LIMIT_UP = FIRST_CORE_PREF,
73            ALT_SPEED_LIMIT_DOWN,
74            ALT_SPEED_LIMIT_ENABLED,
75            ALT_SPEED_LIMIT_TIME_BEGIN,
76            ALT_SPEED_LIMIT_TIME_END,
77            ALT_SPEED_LIMIT_TIME_ENABLED,
78            ALT_SPEED_LIMIT_TIME_DAY,
79            BLOCKLIST_ENABLED,
80            DSPEED,
81            DSPEED_ENABLED,
82            DOWNLOAD_DIR,
83            ENCRYPTION,
84            LAZY_BITFIELD,
85            MSGLEVEL,
86            OPEN_FILE_LIMIT,
87            PEER_LIMIT_GLOBAL,
88            PEER_LIMIT_TORRENT,
89            PEER_PORT,
90            PEER_PORT_RANDOM_ON_START,
91            PEER_PORT_RANDOM_LOW,
92            PEER_PORT_RANDOM_HIGH,
93            SOCKET_TOS,
94            PEX_ENABLED,
95            DHT_ENABLED,
96            PORT_FORWARDING,
97            PROXY_AUTH_ENABLED,
98            PREALLOCATION,
99            PROXY_ENABLED,
100            PROXY_PASSWORD,
101            PROXY_PORT,
102            PROXY,
103            PROXY_TYPE,
104            PROXY_USERNAME,
105            RATIO,
106            RATIO_ENABLED,
107            RPC_AUTH_REQUIRED,
108            RPC_ENABLED,
109            RPC_PASSWORD,
110            RPC_PORT,
111            RPC_USERNAME,
112            RPC_WHITELIST_ENABLED,
113            RPC_WHITELIST,
114            USPEED_ENABLED,
115            USPEED,
116            UPLOAD_SLOTS_PER_TORRENT,
117            LAST_CORE_PREF = UPLOAD_SLOTS_PER_TORRENT,
118
119            PREFS_COUNT
120        };
121
122    private:
123
124        struct PrefItem {
125            int id;
126            const char * key;
127            int type;
128        };
129
130        static PrefItem myItems[];
131
132    private:
133        QString myConfigDir;
134        QVariant myValues[PREFS_COUNT];
135        void initDefaults( struct tr_benc* );
136
137    public:
138        bool isCore( int key ) const { return FIRST_CORE_PREF<=key && key<=LAST_CORE_PREF; }
139        bool isClient( int key ) const { return !isCore( key ); }
140        const char * keyStr( int i ) const { return myItems[i].key; }
141        int type( int i ) const { return myItems[i].type; }
142        const QVariant& variant( int i ) const { return myValues[i]; }
143
144        Prefs( const char * configDir );
145        ~Prefs( );
146
147        int getInt( int key ) const;
148        bool getBool( int key) const;
149        QString getString( int key ) const;
150        double getDouble( int key) const;
151        QDateTime getDateTime( int key ) const;
152
153        template<typename T> T get( int key ) const {
154            return myValues[key].value<T>();
155        }
156
157        void set( int key, char * value ) { set( key, QString::fromUtf8(value) ); }
158        void set( int key, const char * value ) { set( key, QString::fromUtf8(value) ); }
159
160        template<typename T> void set( int key, const T& value ) {
161            QVariant& v( myValues[key] );
162            const QVariant tmp = QVariant::fromValue(value);
163            if( v.isNull() || (v!=tmp) ) {
164                v = tmp;
165                emit changed( key );
166            }
167        }
168
169        void toggleBool( int key );
170
171     signals:
172        void changed( int key );
173};
174
175#endif
Note: See TracBrowser for help on using the repository browser.