source: trunk/qt/prefs.h @ 13724

Last change on this file since 13724 was 13724, checked in by jordan, 9 years ago

(trunk, qt) #5060 'start minimized to tray option' -- added.

  • 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 13724 2012-12-30 22:51:55Z 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            START_MINIMIZED,
47            SHOW_DESKTOP_NOTIFICATION,
48            ASKQUIT,
49            SORT_MODE,
50            SORT_REVERSED,
51            COMPACT_VIEW,
52            FILTERBAR,
53            STATUSBAR,
54            STATUSBAR_STATS,
55            SHOW_TRACKER_SCRAPES,
56            SHOW_BACKUP_TRACKERS,
57            TOOLBAR,
58            BLOCKLIST_DATE,
59            BLOCKLIST_UPDATES_ENABLED,
60            MAIN_WINDOW_LAYOUT_ORDER,
61            MAIN_WINDOW_HEIGHT,
62            MAIN_WINDOW_WIDTH,
63            MAIN_WINDOW_X,
64            MAIN_WINDOW_Y,
65            FILTER_MODE,
66            FILTER_TRACKERS,
67            FILTER_TEXT,
68            SESSION_IS_REMOTE,
69            SESSION_REMOTE_HOST,
70            SESSION_REMOTE_PORT,
71            SESSION_REMOTE_AUTH,
72            SESSION_REMOTE_USERNAME,
73            SESSION_REMOTE_PASSWORD,
74            USER_HAS_GIVEN_INFORMED_CONSENT,
75
76            /* core prefs */
77            FIRST_CORE_PREF,
78            ALT_SPEED_LIMIT_UP = FIRST_CORE_PREF,
79            ALT_SPEED_LIMIT_DOWN,
80            ALT_SPEED_LIMIT_ENABLED,
81            ALT_SPEED_LIMIT_TIME_BEGIN,
82            ALT_SPEED_LIMIT_TIME_END,
83            ALT_SPEED_LIMIT_TIME_ENABLED,
84            ALT_SPEED_LIMIT_TIME_DAY,
85            BLOCKLIST_ENABLED,
86            BLOCKLIST_URL,
87            DSPEED,
88            DSPEED_ENABLED,
89            DOWNLOAD_DIR,
90            DOWNLOAD_QUEUE_ENABLED,
91            DOWNLOAD_QUEUE_SIZE,
92            ENCRYPTION,
93            IDLE_LIMIT,
94            IDLE_LIMIT_ENABLED,
95            INCOMPLETE_DIR,
96            INCOMPLETE_DIR_ENABLED,
97            MSGLEVEL,
98            PEER_LIMIT_GLOBAL,
99            PEER_LIMIT_TORRENT,
100            PEER_PORT,
101            PEER_PORT_RANDOM_ON_START,
102            PEER_PORT_RANDOM_LOW,
103            PEER_PORT_RANDOM_HIGH,
104            QUEUE_STALLED_MINUTES,
105            SCRIPT_TORRENT_DONE_ENABLED,
106            SCRIPT_TORRENT_DONE_FILENAME,
107            SOCKET_TOS,
108            START,
109            TRASH_ORIGINAL,
110            PEX_ENABLED,
111            DHT_ENABLED,
112            UTP_ENABLED,
113            LPD_ENABLED,
114            PORT_FORWARDING,
115            PREALLOCATION,
116            RATIO,
117            RATIO_ENABLED,
118            RENAME_PARTIAL_FILES,
119            RPC_AUTH_REQUIRED,
120            RPC_ENABLED,
121            RPC_PASSWORD,
122            RPC_PORT,
123            RPC_USERNAME,
124            RPC_WHITELIST_ENABLED,
125            RPC_WHITELIST,
126            USPEED_ENABLED,
127            USPEED,
128            UPLOAD_SLOTS_PER_TORRENT,
129            LAST_CORE_PREF = UPLOAD_SLOTS_PER_TORRENT,
130
131            PREFS_COUNT
132        };
133
134    private:
135
136        struct PrefItem {
137            int id;
138            tr_quark key;
139            int type;
140        };
141
142        static PrefItem myItems[];
143
144    private:
145        QSet<int> myTemporaryPrefs;
146        QString myConfigDir;
147        mutable QVariant myValues[PREFS_COUNT];
148        void initDefaults( struct tr_variant* );
149
150    public:
151        bool isCore( int key ) const { return FIRST_CORE_PREF<=key && key<=LAST_CORE_PREF; }
152        bool isClient( int key ) const { return !isCore( key ); }
153        const char * keyStr( int i ) const { return tr_quark_get_string(myItems[i].key,NULL); }
154        tr_quark getKey (int i) const { return myItems[i].key; }
155        int type( int i ) const { return myItems[i].type; }
156        const QVariant& variant( int i ) const { return myValues[i]; }
157
158        Prefs( const char * configDir );
159        ~Prefs( );
160
161        int getInt( int key ) const;
162        bool getBool( int key) const;
163        QString getString( int key ) const;
164        double getDouble( int key) const;
165        QDateTime getDateTime( int key ) const;
166
167        template<typename T> T get( int key ) const {
168            return myValues[key].value<T>();
169        }
170
171        void set( int key, char * value ) { set( key, QString::fromUtf8(value) ); }
172        void set( int key, const char * value ) { set( key, QString::fromUtf8(value) ); }
173
174        template<typename T> void set( int key, const T& value ) {
175            QVariant& v( myValues[key] );
176            const QVariant tmp = QVariant::fromValue(value);
177            if( v.isNull() || (v!=tmp) ) {
178                v = tmp;
179                emit changed( key );
180            }
181        }
182
183        void toggleBool( int key );
184
185     signals:
186        void changed( int key );
187};
188
189#endif
Note: See TracBrowser for help on using the repository browser.