File: cl_config.h

package info (click to toggle)
codelite 17.0.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 136,204 kB
  • sloc: cpp: 491,547; ansic: 280,393; php: 10,259; sh: 8,930; lisp: 7,664; vhdl: 6,518; python: 6,020; lex: 4,920; yacc: 3,123; perl: 2,385; javascript: 1,715; cs: 1,193; xml: 1,110; makefile: 804; cobol: 741; sql: 709; ruby: 620; f90: 566; ada: 534; asm: 464; fortran: 350; objc: 289; tcl: 258; java: 157; erlang: 61; pascal: 51; ml: 49; awk: 44; haskell: 36
file content (236 lines) | stat: -rw-r--r-- 8,688 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//
// copyright            : (C) 2014 Eran Ifrah
// file name            : cl_config.h
//
// -------------------------------------------------------------------------
// A
//              _____           _      _     _ _
//             /  __ \         | |    | |   (_) |
//             | /  \/ ___   __| | ___| |    _| |_ ___
//             | |    / _ \ / _  |/ _ \ |   | | __/ _ )
//             | \__/\ (_) | (_| |  __/ |___| | ||  __/
//              \____/\___/ \__,_|\___\_____/_|\__\___|
//
//                                                  F i l e
//
//    This program is free software; you can redistribute it and/or modify
//    it under the terms of the GNU General Public License as published by
//    the Free Software Foundation; either version 2 of the License, or
//    (at your option) any later version.
//
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////

#ifndef CLCONFIG_H
#define CLCONFIG_H

#include "JSON.h"
#include "codelite_exports.h"
#include "wx/filename.h"
#include <functional>
#include <map>

////////////////////////////////////////////////////////

class WXDLLIMPEXP_CL clConfigItem
{
protected:
    wxString m_name;

public:
    clConfigItem(const wxString& name)
        : m_name(name)
    {
    }

    virtual ~clConfigItem()
    {
    }

    const wxString& GetName() const
    {
        return m_name;
    }

    void SetName(const wxString& name)
    {
        this->m_name = name;
    }
    virtual void FromJSON(const JSONItem& json) = 0;
    virtual JSONItem ToJSON() const = 0;
};

////////////////////////////////////////////////////////

#define kConfigLLDBTooltipW "LLDBTooltipW"
#define kConfigLLDBTooltipH "LLDBTooltipH"
#define kConfigBuildAutoScroll "build-auto-scroll"
#define kConfigCreateVirtualFoldersOnDisk "CreateVirtualFoldersOnDisk"
#define kConfigLogVerbosity "LogVerbosity"
#define kConfigRedirectLogOutput "RedirectLogOutput"
#define kConfigSingleInstance "SingleInstance"
#define kConfigCheckForNewVersion "CheckForNewVersion"
#define kConfigMaxItemsInFindReplaceDialog "MaxItemsInFindReplaceDialog"
#define kConfigMaxOpenedTabs "MaxOpenedTabs"
#define kConfigRestoreLastSession "RestoreLastSession"
#define kConfigFrameTitlePattern "FrameTitlePattern"
#define kConfigStatusbarShowLine "StatusbarShowLine"
#define kConfigStatusbarShowColumn "StatusbarShowColumn"
#define kConfigStatusbarShowPosition "StatusbarShowPosition"
#define kConfigStatusbarShowLength "StatusbarShowLength"
#define kConfigStatusbarShowSelectedChars "StatusbarShowSelChars"
#define kConfigToolbarGroupSpacing "ToolbarGroupSpacing"
#define kConfigAutoDetectCompilerOnStartup "AutoDetectCompilerOnStartup"
#define kConfigBootstrapCompleted "BootstrapCompleted"
#define kConfigUpdateParserPaths "updateParserPaths"
#define kConfigShowToolBar "ShowToolBar"
#define kConfigShowTabBar "ShowTabBar"
#define kConfigShowMenuBar "ShowMenuBar"
#define kConfigShowStatusBar "ShowStatusBar"
#define kConfigWorkspaceTabSashPosition "WorkspaceTabSashPosition"
#define kConfigTabsPaneSortAlphabetically "TabsPaneSortAlphabetically"
#define kConfigFileExplorerBookmarks "FileExplorerBookmarks"

class WXDLLIMPEXP_CL clConfig
{
protected:
    wxFileName m_filename;
    JSON* m_root;
    std::map<wxString, wxArrayString> m_cacheRecentItems;

protected:
    void DoDeleteProperty(const wxString& property);
    JSONItem GetGeneralSetting();

    void DoAddRecentItem(const wxString& propName, const wxString& filename);
    wxArrayString DoGetRecentItems(const wxString& propName) const;
    void DoClearRecentItems(const wxString& propName);

public:
    // We provide a global configuration
    // and the ability to allocate a private copy with a different file
    clConfig(const wxString& filename = "codelite.conf");
    virtual ~clConfig();
    static clConfig& Get();

    // Re-read the content from the disk
    void Reload();
    // Save the content to a give file name
    void Save(const wxFileName& fn);
    // Save the content the file passed on the construction
    void Save();

    // Utility functions
    //------------------------------

    // Merge 2 arrays of strings into a single array with all duplicate entries removed
    wxArrayString MergeArrays(const wxArrayString& arr1, const wxArrayString& arr2) const;
    wxStringMap_t MergeStringMaps(const wxStringMap_t& map1, const wxStringMap_t& map2) const;
    // Workspace history
    void AddRecentWorkspace(const wxString& filename)
    {
        DoAddRecentItem("RecentWorkspaces", filename);
    }
    wxArrayString GetRecentWorkspaces() const
    {
        return DoGetRecentItems("RecentWorkspaces");
    }
    void ClearRecentWorkspaces()
    {
        DoClearRecentItems("RecentWorkspaces");
    }

    // File history
    void AddRecentFile(const wxString& filename)
    {
        DoAddRecentItem("RecentFiles", filename);
    }
    wxArrayString GetRecentFiles() const
    {
        return DoGetRecentItems("RecentFiles");
    }
    void ClearRecentFiles()
    {
        DoClearRecentItems("RecentFiles");
    }

    // Workspace tab order
    //------------------------------
    void SetWorkspaceTabOrder(const wxArrayString& tabs, int selected);
    bool GetWorkspaceTabOrder(wxArrayString& tabs, int& selected);

    // Output tab order
    //------------------------------
    void SetOutputTabOrder(const wxArrayString& tabs, int selected);
    bool GetOutputTabOrder(wxArrayString& tabs, int& selected);

    // General objects
    // -----------------------------
    bool ReadItem(clConfigItem* item, const wxString& differentName = wxEmptyString);
    void WriteItem(const clConfigItem* item, const wxString& differentName = wxEmptyString);
    // bool
    bool Read(const wxString& name, bool defaultValue);
    void Write(const wxString& name, bool value);
    // int
    int Read(const wxString& name, int defaultValue);
    void Write(const wxString& name, int value);
    // wxString
    wxString Read(const wxString& name, const wxString& defaultValue);
    void Write(const wxString& name, const wxString& value);

    // wxArrayString
    wxArrayString Read(const wxString& name, const wxArrayString& defaultValue);
    void Write(const wxString& name, const wxArrayString& value);

    // wxFont
    wxFont Read(const wxString& name, const wxFont& defaultValue);
    void Write(const wxString& name, const wxFont& value);

    // wxColour
    wxColour Read(const wxString& name, const wxColour& defaultValue);
    void Write(const wxString& name, const wxColour& value);

    // Custom items, using lambda
    // A general purpose method that writes JSONItem created by a user defined function
    //
    // Write("my_item_name", []() -> JSONItem {
    //          JSONItem item = JSON::createObject();
    //          item.addProperty("name", "eran");
    //          item.addProperty("last_name", "ifrah");
    //          return item;
    //      });
    // Note: if configFile is valid, parameter is IGNORED and the JSONItem is written ino the configFile instead
    // as an anonymous object, e.g. if configFile is set to /tmp/my_config.json, then its content will be written
    // like this:
    //  {
    //      "name" :  "eran",
    //      "last_name" : "ifrah"
    //  }
    bool Write(const wxString& name, std::function<JSONItem()> serialiser_func, const wxFileName& configFile = {});

    // read custom items, using lambda:
    // Read("my_item_name", [&my_struct](const JSONItem& item) {
    //      my_struct.name = item["name"].toString();
    //      my_struct.last_name = item["last_name"].toString();
    //  });
    // Note: if configFile is valid, `name` is ignored (see comment for Write() method above)
    void Read(const wxString& name, std::function<void(const JSONItem& item)> deserialiser_func,
              const wxFileName& configFile = {});

    // Quick Find Bar history
    void AddQuickFindSearchItem(const wxString& str);
    void AddQuickFindReplaceItem(const wxString& str);
    wxArrayString GetQuickFindSearchItems() const;
    wxArrayString GetQuickFindReplaceItems() const;
    void SetQuickFindSearchItems(const wxArrayString& items);
    void SetQuickFindReplaceItems(const wxArrayString& items);

    // standard IDs for annoying dialogs
    int GetAnnoyingDlgAnswer(const wxString& name, int defaultValue = wxNOT_FOUND);
    void SetAnnoyingDlgAnswer(const wxString& name, int value);
    void ClearAnnoyingDlgAnswers();
};

#endif // CLCONFIG_H