summaryrefslogtreecommitdiff
path: root/LiteEditor/workspacesettingsdlg.cpp
blob: 7f1e400f5390264eefa61112d6c626f54b157805 (plain)
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
#include "workspacesettingsdlg.h"
#include "localworkspace.h"
#include "environmentconfig.h"
#include "evnvarlist.h"
#include "windowattrmanager.h"
#include <wx/dirdlg.h>
#include <map>

WorkspaceSettingsDlg::WorkspaceSettingsDlg( wxWindow* parent, LocalWorkspace *localWorkspace)
: WorkspaceSettingsBase( parent )
, m_localWorkspace(localWorkspace)
{
	wxArrayString excludePaths, includePaths;
	localWorkspace->GetParserPaths(includePaths, excludePaths);

	m_listBoxExcludePaths->Append(excludePaths);
	m_listBoxSearchPaths->Append(includePaths);

	EvnVarList vars;
	EnvironmentConfig::Instance()->ReadObject(wxT("Variables"), &vars);
	std::map<wxString, wxString> envSets = vars.GetEnvVarSets();
	wxString activePage = vars.GetActiveSet();
	m_choiceEnvSets->Clear();

	std::map<wxString, wxString>::iterator iter = envSets.begin();
	for (; iter != envSets.end(); iter++) {
		m_choiceEnvSets->Append(iter->first);
	}

	// select the current workspace active set name
	wxString activeEnvSet;
	int where = m_choiceEnvSets->FindString(localWorkspace->GetActiveEnvironmentSet());
	if (where == wxNOT_FOUND) {
		// try to select the default active set
		where = m_choiceEnvSets->FindString(activePage);
		if (where != wxNOT_FOUND) {
			m_choiceEnvSets->SetSelection(where);
			activeEnvSet = activePage;
		}

	} else {
		activeEnvSet = localWorkspace->GetActiveEnvironmentSet();
		m_choiceEnvSets->SetSelection(where);
	}

	if(activeEnvSet.IsEmpty() == false){
		vars.SetActiveSet(activeEnvSet);
		EnvironmentConfig::Instance()->SetSettings(vars);
	}

	WindowAttrManager::Load(this, wxT("WorkspaceSettingsDlg"), NULL);
}

WorkspaceSettingsDlg::~WorkspaceSettingsDlg()
{
	WindowAttrManager::Save(this, wxT("WorkspaceSettingsDlg"), NULL);
}

void WorkspaceSettingsDlg::OnAddIncludePath( wxCommandEvent& event )
{
	wxUnusedVar(event);
	wxString new_path = wxDirSelector(wxT("Add Parser Search Path:"), wxT(""), wxDD_DEFAULT_STYLE, wxDefaultPosition, this);
	if (new_path.IsEmpty() == false) {
		if (m_listBoxSearchPaths->GetStrings().Index(new_path) == wxNOT_FOUND) {
			m_listBoxSearchPaths->Append(new_path);
		}
	}
}

void WorkspaceSettingsDlg::OnRemoveIncludePath( wxCommandEvent& event )
{
	wxUnusedVar(event);
	int sel = m_listBoxSearchPaths->GetSelection();
	if ( sel != wxNOT_FOUND) {
		m_listBoxSearchPaths->Delete((unsigned int)sel);
	}
}

void WorkspaceSettingsDlg::OnRemoveIncludePathUI( wxUpdateUIEvent& event )
{
	event.Enable( m_listBoxSearchPaths->GetSelection() != wxNOT_FOUND );
}

void WorkspaceSettingsDlg::OnClearAllIncludePaths( wxCommandEvent& event )
{
	wxUnusedVar(event);
	m_listBoxSearchPaths->Clear();
}

void WorkspaceSettingsDlg::OnClearAllIncludePathUI( wxUpdateUIEvent& event )
{
	event.Enable( m_listBoxSearchPaths->IsEmpty() == false );
}

void WorkspaceSettingsDlg::OnAddExcludePath( wxCommandEvent& event )
{
	wxUnusedVar(event);
	wxString new_path = wxDirSelector(wxT("Add Parser Exclude Path:"), wxT(""), wxDD_DEFAULT_STYLE, wxDefaultPosition, this);
	if (new_path.IsEmpty() == false) {
		if (m_listBoxExcludePaths->GetStrings().Index(new_path) == wxNOT_FOUND) {
			m_listBoxExcludePaths->Append(new_path);
		}
	}
}

void WorkspaceSettingsDlg::OnRemoveExcludePath( wxCommandEvent& event )
{
	wxUnusedVar(event);
	int sel = m_listBoxExcludePaths->GetSelection();
	if ( sel != wxNOT_FOUND) {
		m_listBoxExcludePaths->Delete((unsigned int)sel);
	}
}

void WorkspaceSettingsDlg::OnRemoveExcludePathUI( wxUpdateUIEvent& event )
{
	event.Enable( m_listBoxExcludePaths->GetSelection() != wxNOT_FOUND );
}

void WorkspaceSettingsDlg::OnClearAllExcludePaths( wxCommandEvent& event )
{
	wxUnusedVar(event);
	m_listBoxExcludePaths->Clear();
}

void WorkspaceSettingsDlg::OnClearAllExcludePathsUI( wxUpdateUIEvent& event )
{
	event.Enable(m_listBoxExcludePaths->IsEmpty() == false);
}

wxArrayString WorkspaceSettingsDlg::GetExcludePaths() const
{
	return m_listBoxExcludePaths->GetStrings();
}

wxArrayString WorkspaceSettingsDlg::GetIncludePaths() const
{
	return m_listBoxSearchPaths->GetStrings();
}

void WorkspaceSettingsDlg::OnButtonOK(wxCommandEvent& event)
{
	m_localWorkspace->SetParserPaths(GetIncludePaths(), GetExcludePaths());
	m_localWorkspace->SetActiveEnvironmentSet(m_choiceEnvSets->GetStringSelection());
	event.Skip();
}