Import 0.4.3 version in mainstream branch
[keepassx] / src / KpxConfig.h
1 /***************************************************************************
2  *   Copyright (C) 2005-2007 by Tarek Saidi                                *
3  *   tarek.saidi@arcor.de                                                  *
4  *                                                                         *
5  *   Copyright (C) 2007 by Constantin "Dinosaur" Makshin                   *
6  *   dinosaur-rus@users.sourceforge.net                                    *
7  *                                                                         *
8  *   This program is free software; you can redistribute it and/or modify  *
9  *   it under the terms of the GNU General Public License as published by  *
10  *   the Free Software Foundation; version 2 of the License.               *
11  *                                                                         *
12  *   This program is distributed in the hope that it will be useful,       *
13  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
14  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
15  *   GNU General Public License for more details.                          *
16  *                                                                         *
17  *   You should have received a copy of the GNU General Public License     *
18  *   along with this program; if not, write to the                         *
19  *   Free Software Foundation, Inc.,                                       *
20  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
21  ***************************************************************************/
22
23 #ifndef _KPXCONFIG_H_
24 #define _KPXCONFIG_H_
25
26 #include "lib/AutoType.h"
27
28 #if defined(Q_WS_MAC)
29 #       define DEFAULT_MOUNT_DIR "/Volumes/"
30 #elif defined(Q_WS_X11)
31 #       define DEFAULT_MOUNT_DIR "/media/"
32 #elif defined(Q_WS_WIN)
33 #       define DEFAULT_MOUNT_DIR "/"
34 #else
35 #       define DEFAULT_MOUNT_DIR QString()
36 #endif
37
38 class KpxConfig{
39 public:
40         friend class KpxBookmarks;
41         
42         enum IntegrPluginType{NoIntegr,KDE,Gnome};
43         enum GrpTreeState{DoNothing,RestoreLast,ExpandAll};
44
45         KpxConfig(const QString& filePath);
46
47         bool alternatingRowColors(){return settings.value("Options/AlternatingRowColors",true).toBool();}
48         QColor bannerColor1(){return stringToColor(settings.value("Options/BannerColor1","0,85,127").toString());}
49         QColor bannerColor2(){return stringToColor(settings.value("Options/BannerColor2","0,117,175").toString());}
50         QColor bannerTextColor(){return stringToColor(settings.value("Options/BannerTextColor","222,222,222").toString());}
51         int clipboardTimeOut(){return settings.value("Options/ClipboardTimeOut",20).toInt();}
52         QBitArray columns(){return stringToBitArray(settings.value("UI/Columns","11111000000").toString(),11);}
53         QList<int> columnOrder(){return stringToIntArray(settings.value("UI/ColumnOrder","1,2,3,4,5,6,7,8,9,10,11").toString(),11);}
54         QList<int> columnSizes(){return stringToIntArray(settings.value("UI/ColumnSizes","15,10,10,10,10,10,10,10,10,10,10").toString(),11);}
55         int columnSort(){return settings.value("UI/ColumnSort",0).toInt();}
56         Qt::SortOrder columnSortOrder(){return static_cast<Qt::SortOrder>(settings.value("UI/ColumnSortOrder",Qt::AscendingOrder).toInt());}
57         QBitArray searchColumns(){return stringToBitArray(settings.value("UI/SearchColumns","11110000001").toString(),11);}
58         QList<int> searchColumnOrder(){return stringToIntArray(settings.value("UI/SearchColumnOrder","2,3,4,5,6,7,8,9,10,11,1").toString(),11);}
59         QList<int> searchColumnSizes(){return stringToIntArray(settings.value("UI/SearchColumnSizes","15,10,10,10,10,10,10,10,10,10,10").toString(),11);}
60         int searchColumnSort(){return settings.value("UI/SearchColumnSort",0).toInt();}
61         Qt::SortOrder searchColumnSortOrder(){return static_cast<Qt::SortOrder>(settings.value("UI/SearchColumnSortOrder",Qt::AscendingOrder).toInt());}
62         QStringList fileDlgHistory(unsigned index){return settings.value(QString("FileDlgHistory/ENTRY%1").arg(index)).toStringList();}
63         GrpTreeState groupTreeState(){return stringToGrpTreeState(settings.value("Options/GroupTreeState").toString());}
64         bool hidePasswords(){return settings.value("UI/HidePasswords",true).toBool();}
65         bool hideUsernames(){return settings.value("UI/HideUsernames",true).toBool();}
66         QByteArray hSplitterPos(){return settings.value("UI/HSplitterPos").toByteArray();}
67         bool alwaysOnTop(){return settings.value("UI/AlwaysOnTop",false).toBool();}
68         IntegrPluginType integrPlugin(){return stringToIntegrPluginType(settings.value("Options/IntegrPlugin").toString());}
69         QString lastFile(){return settings.value("Options/LastFile").toString();}
70         QString lastKeyLocation(){return settings.value("Options/LastKeyLocation").toString();}
71         tKeyType lastKeyType(){return stringToKeyType(settings.value("Options/LastKeyType").toString());}
72         QByteArray mainWindowGeometry();
73         bool minimizeToTray(){return settings.value("Options/MinimizeToTray",false).toBool();}  
74         bool minimizeTray(){return settings.value("Options/MinimizeTray",false).toBool();}
75         bool startMinimized(){return settings.value("Options/StartMinimized",false).toBool();}
76         bool startLocked(){return settings.value("Options/StartLocked",false).toBool();}
77         QString mountDir(){return settings.value("Options/MountDir",DEFAULT_MOUNT_DIR).toString();}
78         bool openLastFile(){return settings.value("Options/OpenLastFile",true).toBool();}
79         bool autoSave(){return settings.value("Options/AutoSave",false).toBool();}
80         bool autoSaveChange(){return settings.value("Options/AutoSaveChange",false).toBool();}
81         bool backup(){return settings.value("Options/Backup",true).toBool();}
82         bool backupDelete(){return settings.value("Options/BackupDelete",false).toBool();}
83         int backupDeleteAfter(){return settings.value("Options/BackupDeleteAfter",14).toInt();}
84         int pwGenCategory(){return settings.value("Options/PwGenCategory",0).toInt();}
85         QString pwGenCharList(){return settings.value("Options/PwGenCharList").toString();}
86         bool pwGenExcludeLookAlike(){return settings.value("Options/PwGenExcludeLookAlike").toBool();}
87         bool pwGenEveryGroup(){return settings.value("Options/PwGenEveryGroup").toBool();}
88         int pwGenLength(){return settings.value("Options/PwGenLength",25).toInt();}
89         QBitArray pwGenOptions(){return stringToBitArray(settings.value("Options/PwGenOptions","11111000011110").toString(),14);}
90         bool rememberLastKey(){return settings.value("Options/RememberLastKey",true).toBool();}
91         bool saveFileDlgHistory(){return settings.value("Options/SaveFileDlgHistory",true).toBool();}
92         bool saveRelativePaths(){return settings.value("Options/SaveRelativePaths",true).toBool();}
93         QBitArray searchOptions(){return stringToBitArray(settings.value("Options/SearchOptions","001101111").toString(),9);}
94         bool showEntryDetails(){return settings.value("UI/ShowEntryDetails",true).toBool();}
95         bool showPasswords(){return settings.value("Options/ShowPasswords",false).toBool();}
96         bool showPasswordsPasswordDlg(){return settings.value("Options/ShowPasswordsPasswordDlg",false).toBool();}
97         bool lockOnMinimize(){return settings.value("Options/LockOnMinimize",false).toBool();}
98         bool lockOnInactivity(){return settings.value("Options/LockOnInactivity",false).toBool();}
99         int lockAfterSec(){return settings.value("Options/LockAfterSec",30).toInt();}
100         bool showStatusbar(){return settings.value("UI/ShowStatusbar",true).toBool();}
101         bool showSysTrayIcon(){return settings.value("Options/ShowSysTrayIcon",false).toBool();}
102         bool showToolbar(){return settings.value("UI/ShowToolbar",true).toBool();}
103         int toolbarIconSize(){return settings.value("UI/ToolbarIconSize",16).toInt();}
104         QString urlCmd(){return settings.value("Options/UrlCmd").toString();}
105         bool urlCmdDef(){return settings.value("Options/UrlCmdDef",true).toBool();}
106         QByteArray vSplitterPos(){return settings.value("UI/VSplitterPos").toByteArray();}
107         bool askBeforeDelete(){return settings.value("Options/AskBeforeDelete",true).toBool();}
108 #ifdef AUTOTYPE
109         int autoTypePreGap(){return settings.value("Options/AutoTypePreGap",500).toInt();}
110         int autoTypeKeyStrokeDelay(){return settings.value("Options/AutoTypeKeyStrokeDelay",5).toInt();}
111 #endif
112 #ifdef GLOBAL_AUTOTYPE
113         Shortcut globalShortcut();
114         bool entryTitlesMatch(){return settings.value("Options/EntryTitlesMatch",true).toBool();}
115 #endif
116         //bool featureBookmarks(){return settings.value("Features/Bookmarks",true).toBool();}
117         bool featureBookmarks(){return true;}
118         QString language(){return settings.value("Options/Language","auto").toString();}
119         
120         void setAlternatingRowColors(bool value){settings.setValue("Options/AlternatingRowColors",value);}
121         void setBannerColor1(const QColor& value){settings.setValue("Options/BannerColor1",colorToString(value));}
122         void setBannerColor2(const QColor& value){settings.setValue("Options/BannerColor2",colorToString(value));}
123         void setBannerTextColor(const QColor& value){settings.setValue("Options/BannerTextColor",colorToString(value));}
124         void setClipboardTimeOut(int value){settings.setValue("Options/ClipboardTimeOut",value);}
125         void setColumns(const QBitArray& value){settings.setValue("UI/Columns",bitArrayToString(value));}
126         void setColumnOrder(const QList<int>& value){settings.setValue("UI/ColumnOrder",intArrayToString(value));}
127         void setColumnSizes(const QList<int>& value){settings.setValue("UI/ColumnSizes",intArrayToString(value));}
128         void setColumnSort(int value){settings.setValue("UI/ColumnSort",value);}
129         void setColumnSortOrder(int value){settings.setValue("UI/ColumnSortOrder",value);}
130         void setSearchColumns(const QBitArray& value){settings.setValue("UI/SearchColumns",bitArrayToString(value));}
131         void setSearchColumnOrder(const QList<int>& value){settings.setValue("UI/SearchColumnOrder",intArrayToString(value));}
132         void setSearchColumnSizes(const QList<int>& value){settings.setValue("UI/SearchColumnSizes",intArrayToString(value));}
133         void setSearchColumnSort(int value){settings.setValue("UI/SearchColumnSort",value);}
134         void setSearchColumnSortOrder(int value){settings.setValue("UI/SearchColumnSortOrder",value);}
135         void setFileDlgHistory(unsigned index,const QStringList& value){settings.setValue(QString("FileDlgHistory/ENTRY%1").arg(index), value);}
136         void setGroupTreeState(GrpTreeState value){settings.setValue("Options/GroupTreeState",grpTreeStateToString(value));}
137         void setHidePasswords(bool value){settings.setValue("UI/HidePasswords",value);}
138         void setHideUsernames(bool value){settings.setValue("UI/HideUsernames",value);}
139         void setHSplitterPos(const QByteArray& value){settings.setValue("UI/HSplitterPos",value);}
140         void setAlwaysOnTop(bool value){settings.setValue("UI/AlwaysOnTop",value);}
141         void setIntegrPlugin(IntegrPluginType value){settings.setValue("Options/IntegrPlugin",integrPluginTypeToString(value));}
142         void setLastFile(const QString& value){settings.setValue("Options/LastFile",value);}
143         void setLastKeyLocation(const QString& value){settings.setValue("Options/LastKeyLocation",value);}
144         void setLastKeyType(tKeyType value){settings.setValue("Options/LastKeyType",keyTypeToString(value));}
145         void setMainWindowGeometry(const QByteArray& value){settings.setValue("UI/MainWindowGeometry",value);}
146         void setMinimizeToTray(bool value){settings.setValue("Options/MinimizeToTray",value);}
147         void setMinimizeTray(bool value){settings.setValue("Options/MinimizeTray",value);}
148         void setStartMinimized(bool value){settings.setValue("Options/StartMinimized",value);}
149         void setStartLocked(bool value){settings.setValue("Options/StartLocked",value);}
150         void setMountDir(const QString& value){settings.setValue("Options/MountDir",value);}
151         void setOpenLastFile(bool value){settings.setValue("Options/OpenLastFile",value);}
152         void setAutoSave(bool value){settings.setValue("Options/AutoSave",value);}
153         void setAutoSaveChange(bool value){settings.setValue("Options/AutoSaveChange",value);}
154         void setBackup(bool value){settings.setValue("Options/Backup",value);}
155         void setBackupDelete(bool value){settings.setValue("Options/BackupDelete",value);}
156         void setBackupDeleteAfter(int value){settings.setValue("Options/BackupDeleteAfter",value);}
157         void setPwGenCategory(int value){settings.setValue("Options/PwGenCategory",value);}
158         void setPwGenCharList(const QString& value){settings.setValue("Options/PwGenCharList",value);}
159         void setPwGenExcludeLookAlike(bool value){settings.setValue("Options/PwGenExcludeLookAlike",value);}
160         void setPwGenEveryGroup(bool value){settings.setValue("Options/PwGenEveryGroup",value);}
161         void setPwGenLength(int value){settings.setValue("Options/PwGenLength",value);}
162         void setPwGenOptions(const QBitArray& value){settings.setValue("Options/PwGenOptions",bitArrayToString(value));}
163         void setRememberLastKey(bool value){settings.setValue("Options/RememberLastKey",value);}
164         void setSaveFileDlgHistory(bool value){settings.setValue("Options/SaveFileDlgHistory",value);}
165         void setSaveRelativePaths(bool value){settings.setValue("Options/SaveRelativePaths",value);}
166         void setSearchOptions(const QBitArray& value){settings.setValue("Options/SearchOptions",bitArrayToString(value));}
167         void setShowEntryDetails(bool value){settings.setValue("UI/ShowEntryDetails",value);}
168         void setShowPasswords(bool value){settings.setValue("Options/ShowPasswords",value);}
169         void setShowPasswordsPasswordDlg(bool value){settings.setValue("Options/ShowPasswordsPasswordDlg",value);}
170         void setLockOnMinimize(bool value){settings.setValue("Options/LockOnMinimize",value);}
171         void setLockOnInactivity(bool value){settings.setValue("Options/LockOnInactivity",value);}
172         void setLockAfterSec(int value){settings.setValue("Options/LockAfterSec",value);}
173         void setShowStatusbar(bool value){settings.setValue("UI/ShowStatusbar",value);}
174         void setShowSysTrayIcon(bool value){settings.setValue("Options/ShowSysTrayIcon",value);}
175         void setShowToolbar(bool value){settings.setValue("UI/ShowToolbar",value);}
176         void setToolbarIconSize(int value){settings.setValue("UI/ToolbarIconSize",value);}
177         void setUrlCmd(const QString& value){settings.setValue("Options/UrlCmd",value);}
178         void setUrlCmdDef(bool value){settings.setValue("Options/UrlCmdDef",value);}
179         void setVSplitterPos(const QByteArray& value){settings.setValue("UI/VSplitterPos",value);}
180         void setAskBeforeDelete(bool value){settings.setValue("Options/AskBeforeDelete",value);}
181 #ifdef AUTOTYPE
182         void setAutoTypePreGap(int value){settings.setValue("Options/AutoTypePreGap",value);}
183         void setAutoTypeKeyStrokeDelay(int value){settings.setValue("Options/AutoTypeKeyStrokeDelay",value);}
184 #endif
185 #ifdef GLOBAL_AUTOTYPE
186         void setGlobalShortcut(const Shortcut& s);
187         void setEntryTitlesMatch(bool value){settings.setValue("Options/EntryTitlesMatch",value);}
188 #endif
189         //void setFeatureBookmarks(bool value){settings.setValue("Features/Bookmarks",value);}
190         void setLanguage(const QString& value){settings.setValue("Options/Language",value);}
191
192         unsigned fileDlgHistorySize();
193         void clearFileDlgHistory(){settings.remove("FileDlgHistory");};
194         
195         QRect dialogGeometry(const QWidget* widget);
196         void setDialogGeometry(const QWidget* widget);
197         
198         QString detailViewTemplate();
199         QString defaultDetailViewTemplate();
200         void setDetailViewTemplate(const QString& value);
201
202 private:
203         QSettings settings;
204         QString configFile;
205
206         QColor stringToColor(const QString& str);
207         QBitArray stringToBitArray(const QString& str, unsigned count);
208         GrpTreeState stringToGrpTreeState(const QString& str);
209         QList<int> stringToIntArray(const QString& str, unsigned count);
210         IntegrPluginType stringToIntegrPluginType(const QString& str);
211         tKeyType stringToKeyType(const QString& str);
212
213         QString colorToString(const QColor& color){return QString("%1,%2,%3").arg(color.red()).arg(color.green()).arg(color.blue());}
214         QString bitArrayToString(const QBitArray& bitArray);
215         QString grpTreeStateToString(GrpTreeState grpTreeState);
216         QString intArrayToString(const QList<int>& intArray);
217         QString integrPluginTypeToString(IntegrPluginType integrPluginType);
218         QString keyTypeToString(tKeyType keyType);
219 };
220
221 #endif