forked from eranif/codelite
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDapSettingsPage.cpp
More file actions
96 lines (86 loc) · 3.7 KB
/
Copy pathDapSettingsPage.cpp
File metadata and controls
96 lines (86 loc) · 3.7 KB
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
#include "DapSettingsPage.hpp"
#define UPDATE_TEXT_CB(SETTER_METHOD) \
[this](const wxString& label, const wxAny& value) { \
wxUnusedVar(label); \
wxString str_value; \
if(value.GetAs(&str_value)) { \
DapEntry d; \
m_store.Get(m_entry.GetName(), &d); \
d.SETTER_METHOD(str_value); \
m_store.Set(d); \
} \
}
#define UPDATE_BOOL_CB(SETTER_METHOD) \
[this](const wxString& label, const wxAny& value) { \
wxUnusedVar(label); \
bool bool_value; \
if(value.GetAs(&bool_value)) { \
DapEntry d; \
m_store.Get(m_entry.GetName(), &d); \
d.SETTER_METHOD(bool_value); \
m_store.Set(d); \
} \
}
DapSettingsPage::DapSettingsPage(wxWindow* win, clDapSettingsStore& store, const DapEntry& entry)
: clPropertiesPage(win)
, m_store(store)
, m_entry(entry)
{
AddHeader(_("General"));
AddProperty(_("Command"), m_entry.GetCommand(), UPDATE_TEXT_CB(SetCommand));
AddProperty(_("Connection string"), m_entry.GetConnectionString(), UPDATE_TEXT_CB(SetConnectionString));
const std::vector<wxString> launch_choices = { "Launch", "Attach" };
wxString launch_type = entry.GetLaunchType() == DapLaunchType::LAUNCH ? "Launch" : "Attach";
AddProperty(_("Launch type"), launch_choices, launch_type, [this](const wxString& label, const wxAny& value) {
wxUnusedVar(label);
wxString value_str;
if(value.GetAs(&value_str)) {
DapEntry d;
m_store.Get(m_entry.GetName(), &d);
if(value_str == "Launch") {
d.SetLaunchType(DapLaunchType::LAUNCH);
} else {
d.SetLaunchType(DapLaunchType::ATTACH);
}
m_store.Set(d);
}
});
AddHeader(_("File path options"));
AddProperty(_("Use relative paths"), m_entry.UseRelativePath(), UPDATE_BOOL_CB(SetUseRelativePath));
#ifdef __WXMSW__
AddProperty(_("Use forward slash"), m_entry.UseForwardSlash(), UPDATE_BOOL_CB(SetUseForwardSlash));
AddProperty(_("Use volume"), m_entry.UseVolume(), UPDATE_BOOL_CB(SetUseVolume));
#endif
AddHeader(_("Environment variables"));
AddProperty(_("Server environment"), m_entry.GetEnvironment(), UPDATE_TEXT_CB(SetEnvironment));
const std::vector<wxString> format_choices = { "List", "Dictionary", "None" };
int sel = wxNOT_FOUND;
switch(m_entry.GetEnvFormat()) {
case dap::EnvFormat::LIST:
sel = 0;
break;
case dap::EnvFormat::DICTIONARY:
sel = 1;
break;
case dap::EnvFormat::NONE:
sel = 2;
break;
}
AddProperty(_("Environment format"), format_choices, sel, [this](const wxString& label, const wxAny& value) {
wxUnusedVar(label);
wxString value_str;
if(value.GetAs(&value_str)) {
DapEntry d;
m_store.Get(m_entry.GetName(), &d);
if(value_str == "List") {
d.SetEnvFormat(dap::EnvFormat::LIST);
} else if(value_str == "Dictionary") {
d.SetEnvFormat(dap::EnvFormat::DICTIONARY);
} else {
d.SetEnvFormat(dap::EnvFormat::NONE);
}
m_store.Set(d);
}
});
}
DapSettingsPage::~DapSettingsPage() {}