File: cl_config.h

package info (click to toggle)
codelite 10.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 71,364 kB
  • sloc: cpp: 415,397; ansic: 18,277; php: 9,547; lex: 4,181; yacc: 2,820; python: 2,294; sh: 383; makefile: 51; xml: 13
file content (173 lines) | stat: -rw-r--r-- 6,802 bytes parent folder | download
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
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//
// 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 "codelite_exports.h"
#include "json_node.h"
#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 JSONElement& json) = 0;
    virtual JSONElement 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 kConfigAutoDetectCompilerOnStartup "AutoDetectCompilerOnStartup"
#define kConfigBootstrapCompleted "BootstrapCompleted"
#define kConfigUpdateParserPaths "updateParserPaths"
#define kConfigShowToolBar "ShowToolBar"
#define kConfigShowTabBar "ShowTabBar"
#define kConfigShowStatusBar "ShowStatusBar"
#define kConfigWorkspaceTabSashPosition "WorkspaceTabSashPosition"
#define kConfigTabsPaneSortAlphabetically "TabsPaneSortAlphabetically"
#define kConfigFileExplorerBookmarks "FileExplorerBookmarks"

class WXDLLIMPEXP_CL clConfig
{
protected:
    wxFileName m_filename;
    JSONRoot* m_root;
    std::map<wxString, wxArrayString> m_cacheRecentItems;
    
protected:
    void DoDeleteProperty(const wxString& property);
    JSONElement 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;
    JSONElement::wxStringMap_t MergeStringMaps(const JSONElement::wxStringMap_t& map1,
                                               const JSONElement::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);
    
    // Quick Find Bar history
    void AddQuickFindSearchItem(const wxString& str);
    void AddQuickFindReplaceItem(const wxString& str);
    wxArrayString GetQuickFindSearchItems() const;
    wxArrayString GetQuickFindReplaceItems() const;

    // 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