source: trunk/qt/prefs.h @ 13683

Last change on this file since 13683 was 13683, checked in by jordan, 10 years ago

(trunk, libT) first drop of the tr_quark patch.

  • Property svn:keywords set to Date Rev Author Id
File size: 5.0 KB
Line 
1/*
2 * This file Copyright (C) Mnemosyne LLC
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2
6 * as published by the Free Software Foundation.
7 *
8 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
9 *
10 * $Id: prefs.h 13683 2012-12-22 20:35:19Z jordan $
11 */
12
13#ifndef QTR_PREFS_H
14#define QTR_PREFS_H
15
16#include <QDateTime>
17#include <QObject>
18#include <QSet>
19#include <QString>
20#include <QVariant>
21
22#include "filters.h"
23
24#include <libtransmission/quark.h>
25
26extern "C"
27{
28    struct tr_variant;
29}
30
31class Prefs: public QObject
32{
33        Q_OBJECT;
34
35    public:
36
37        enum
38        {
39            /* client prefs */
40            OPTIONS_PROMPT,
41            OPEN_DIALOG_FOLDER,
42            INHIBIT_HIBERNATION,
43            DIR_WATCH,
44            DIR_WATCH_ENABLED,
45            SHOW_TRAY_ICON,
46            SHOW_DESKTOP_NOTIFICATION,
47            ASKQUIT,
48            SORT_MODE,
49            SORT_REVERSED,
50            COMPACT_VIEW,
51            FILTERBAR,
52            STATUSBAR,
53            STATUSBAR_STATS,
54            SHOW_TRACKER_SCRAPES,
55            SHOW_BACKUP_TRACKERS,
56            TOOLBAR,
57            BLOCKLIST_DATE,
58            BLOCKLIST_UPDATES_ENABLED,
59            MAIN_WINDOW_LAYOUT_ORDER,
60            MAIN_WINDOW_HEIGHT,
61            MAIN_WINDOW_WIDTH,
62            MAIN_WINDOW_X,
63            MAIN_WINDOW_Y,
64            FILTER_MODE,
65            FILTER_TRACKERS,
66            FILTER_TEXT,
67            SESSION_IS_REMOTE,
68            SESSION_REMOTE_HOST,
69            SESSION_REMOTE_PORT,
70            SESSION_REMOTE_AUTH,
71            SESSION_REMOTE_USERNAME,
72            SESSION_REMOTE_PASSWORD,
73            USER_HAS_GIVEN_INFORMED_CONSENT,
74
75            /* core prefs */
76            FIRST_CORE_PREF,
77            ALT_SPEED_LIMIT_UP = FIRST_CORE_PREF,
78            ALT_SPEED_LIMIT_DOWN,
79            ALT_SPEED_LIMIT_ENABLED,
80            ALT_SPEED_LIMIT_TIME_BEGIN,
81            ALT_SPEED_LIMIT_TIME_END,
82            ALT_SPEED_LIMIT_TIME_ENABLED,
83            ALT_SPEED_LIMIT_TIME_DAY,
84            BLOCKLIST_ENABLED,
85            BLOCKLIST_URL,
86            DSPEED,
87            DSPEED_ENABLED,
88            DOWNLOAD_DIR,
89            DOWNLOAD_QUEUE_ENABLED,
90            DOWNLOAD_QUEUE_SIZE,
91            ENCRYPTION,
92            IDLE_LIMIT,
93            IDLE_LIMIT_ENABLED,
94            INCOMPLETE_DIR,
95            INCOMPLETE_DIR_ENABLED,
96            MSGLEVEL,
97            PEER_LIMIT_GLOBAL,
98            PEER_LIMIT_TORRENT,
99            PEER_PORT,
100            PEER_PORT_RANDOM_ON_START,
101            PEER_PORT_RANDOM_LOW,
102            PEER_PORT_RANDOM_HIGH,
103            QUEUE_STALLED_MINUTES,
104            SCRIPT_TORRENT_DONE_ENABLED,
105            SCRIPT_TORRENT_DONE_FILENAME,
106            SOCKET_TOS,
107            START,
108            TRASH_ORIGINAL,
109            PEX_ENABLED,
110            DHT_ENABLED,
111            UTP_ENABLED,
112            LPD_ENABLED,
113            PORT_FORWARDING,
114            PREALLOCATION,
115            RATIO,
116            RATIO_ENABLED,
117            RENAME_PARTIAL_FILES,
118            RPC_AUTH_REQUIRED,
119            RPC_ENABLED,
120            RPC_PASSWORD,
121            RPC_PORT,
122            RPC_USERNAME,
123            RPC_WHITELIST_ENABLED,
124            RPC_WHITELIST,
125            USPEED_ENABLED,
126            USPEED,
127            UPLOAD_SLOTS_PER_TORRENT,
128            LAST_CORE_PREF = UPLOAD_SLOTS_PER_TORRENT,
129
130            PREFS_COUNT
131        };
132
133    private:
134
135        struct PrefItem {
136            int id;
137            tr_quark key;
138            int type;
139        };
140
141        static PrefItem myItems[];
142
143    private:
144        QSet<int> myTemporaryPrefs;
145        QString myConfigDir;
146        mutable QVariant myValues[PREFS_COUNT];
147        void initDefaults( struct tr_variant* );
148
149    public:
150        bool isCore( int key ) const { return FIRST_CORE_PREF<=key && key<=LAST_CORE_PREF; }
151        bool isClient( int key ) const { return !isCore( key ); }
152        const char * keyStr( int i ) const { return tr_quark_get_string(myItems[i].key,NULL); }
153        tr_quark getKey (int i) const { return myItems[i].key; }
154        int type( int i ) const { return myItems[i].type; }
155        const QVariant& variant( int i ) const { return myValues[i]; }
156
157        Prefs( const char * configDir );
158        ~Prefs( );
159
160        int getInt( int key ) const;
161        bool getBool( int key) const;
162        QString getString( int key ) const;
163        double getDouble( int key) const;
164        QDateTime getDateTime( int key ) const;
165
166        template<typename T> T get( int key ) const {
167            return myValues[key].value<T>();
168        }
169
170        void set( int key, char * value ) { set( key, QString::fromUtf8(value) ); }
171        void set( int key, const char * value ) { set( key, QString::fromUtf8(value) ); }
172
173        template<typename T> void set( int key, const T& value ) {
174            QVariant& v( myValues[key] );
175            const QVariant tmp = QVariant::fromValue(value);
176            if( v.isNull() || (v!=tmp) ) {
177                v = tmp;
178                emit changed( key );
179            }
180        }
181
182        void toggleBool( int key );
183
184     signals:
185        void changed( int key );
186};
187
188#endif
Note: See TracBrowser for help on using the repository browser.