source: trunk/qt/Prefs.h @ 14537

Last change on this file since 14537 was 14537, checked in by mikedld, 6 years ago

Use PascalCase? for Qt client filenames

Split FileTree?.{h,cc} and FilterBar?.{h,cc} files so that each class
is in its own file.

This breaks translations (some classes got renamed => context changed),
to be fixed by next commit (along with Tx sync).

  • Property svn:keywords set to Date Rev Author Id
File size: 4.2 KB
Line 
1/*
2 * This file Copyright (C) 2009-2015 Mnemosyne LLC
3 *
4 * It may be used under the GNU GPL versions 2 or 3
5 * or any future license endorsed by Mnemosyne LLC.
6 *
7 * $Id: Prefs.h 14537 2015-06-10 21:27:11Z mikedld $
8 */
9
10#ifndef QTR_PREFS_H
11#define QTR_PREFS_H
12
13#include <QDateTime>
14#include <QObject>
15#include <QSet>
16#include <QString>
17#include <QVariant>
18
19#include <libtransmission/quark.h>
20
21#include "Filters.h"
22
23extern "C"
24{
25  struct tr_variant;
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      START_MINIMIZED,
44      SHOW_NOTIFICATION_ON_ADD,
45      SHOW_NOTIFICATION_ON_COMPLETE,
46      ASKQUIT,
47      SORT_MODE,
48      SORT_REVERSED,
49      COMPACT_VIEW,
50      FILTERBAR,
51      STATUSBAR,
52      STATUSBAR_STATS,
53      SHOW_TRACKER_SCRAPES,
54      SHOW_BACKUP_TRACKERS,
55      TOOLBAR,
56      BLOCKLIST_DATE,
57      BLOCKLIST_UPDATES_ENABLED,
58      MAIN_WINDOW_LAYOUT_ORDER,
59      MAIN_WINDOW_HEIGHT,
60      MAIN_WINDOW_WIDTH,
61      MAIN_WINDOW_X,
62      MAIN_WINDOW_Y,
63      FILTER_MODE,
64      FILTER_TRACKERS,
65      FILTER_TEXT,
66      SESSION_IS_REMOTE,
67      SESSION_REMOTE_HOST,
68      SESSION_REMOTE_PORT,
69      SESSION_REMOTE_AUTH,
70      SESSION_REMOTE_USERNAME,
71      SESSION_REMOTE_PASSWORD,
72      COMPLETE_SOUND_COMMAND,
73      COMPLETE_SOUND_ENABLED,
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    {
138      int id;
139      tr_quark key;
140      int type;
141    };
142
143    static PrefItem myItems[];
144
145  private:
146    QSet<int> myTemporaryPrefs;
147    QString const myConfigDir;
148    mutable QVariant myValues[PREFS_COUNT];
149    void initDefaults (tr_variant *);
150
151    void set (int key, const char * value);
152
153  public:
154    bool isCore (int key) const { return FIRST_CORE_PREF<=key && key<=LAST_CORE_PREF; }
155    bool isClient (int key) const { return !isCore (key); }
156    const char * keyStr (int i) const { return tr_quark_get_string (myItems[i].key,NULL); }
157    tr_quark getKey  (int i) const { return myItems[i].key; }
158    int type (int i) const { return myItems[i].type; }
159    const QVariant& variant (int i) const { return myValues[i]; }
160
161    Prefs (const QString& configDir);
162    ~Prefs ();
163
164    int getInt (int key) const;
165    bool getBool (int key) const;
166    QString getString (int key) const;
167    double getDouble (int key) const;
168    QDateTime getDateTime (int key) const;
169
170    template<typename T> T get (int key) const { return myValues[key].value<T>(); }
171
172    template<typename T> void set (int key, const T& value)
173    {
174      QVariant& v (myValues[key]);
175      const QVariant tmp = QVariant::fromValue (value);
176      if (v.isNull() || (v!=tmp))
177        {
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 // QTR_PREFS_H
Note: See TracBrowser for help on using the repository browser.