1 ///////////////////////////////////////////////////////////////////////////////
2 // Name: MadHighlightingDialog.cpp
3 // Description:
4 // Author: madedit@gmail.com
5 // Licence: GPL
6 ///////////////////////////////////////////////////////////////////////////////
7
8 #include "MadHighlightingDialog.h"
9 #include "MadUtils.h"
10 #include "MadEdit/MadSyntax.h"
11 #include <wx/colordlg.h>
12
13
14 //Do not add custom headers
15 //wxDev-C++ designer will remove them
16 ////Header Include Start
17 ////Header Include End
18
19
20 #ifdef _DEBUG
21 #include <crtdbg.h>
22 #define new new(_NORMAL_BLOCK ,__FILE__, __LINE__)
23 #endif
24
25
26 extern void ApplySyntaxAttributes(MadSyntax *syn);
27
28 MadHighlightingDialog *g_HighlightingDialog=NULL;
29
30 enum
31 {
32 kindSysAttr1, kindSysAttr2/*aeActiveLine, aeBookmark*/, kindRange, kindKeyword
33 };
34
35 struct KeywordInfo
36 {
37 int kind;
38 MadAttributes *attr; // for kindSysAttr1, kindSysArrt2, kindKeyword
39 wxColour *range_bgcolor; // for kindRange
KeywordInfoKeywordInfo40 KeywordInfo(): kind(0), attr(0), range_bgcolor(0)
41 {}
KeywordInfoKeywordInfo42 KeywordInfo(int k, MadAttributes *a, wxColour *bg): kind(k), attr(a), range_bgcolor(bg)
43 {}
44 };
45 vector<KeywordInfo> g_KeywordInfoTable;
46 long g_Index=-1;
47 MadSyntax *g_Syntax=NULL;
48 wxColourDialog *g_ColourDialog=NULL;
49 int g_DefaultFontSize;
50
GetColourFromUser(const wxColour & colInit,const wxString & caption)51 wxColour GetColourFromUser(const wxColour& colInit, const wxString& caption)
52 {
53 if(g_ColourDialog==NULL)
54 {
55 wxColourData *data=new wxColourData;
56 data->SetChooseFull(true);
57 if ( colInit.Ok() )
58 {
59 data->SetColour((wxColour &)colInit); // const_cast
60 }
61 g_ColourDialog = new wxColourDialog(g_HighlightingDialog, data);
62 }
63 else
64 {
65 if ( colInit.Ok() )
66 {
67 g_ColourDialog->GetColourData().SetColour(colInit);
68 }
69 }
70
71 if (!caption.IsEmpty())
72 g_ColourDialog->SetTitle(caption);
73
74 wxColour colRet;
75 if ( g_ColourDialog->ShowModal() == wxID_OK )
76 {
77 colRet = g_ColourDialog->GetColourData().GetColour();
78 }
79
80 return colRet;
81 }
82
SetItemColour(wxListCtrl * listctrl,long item,const wxColour & fc,const wxColour & bc)83 void SetItemColour(wxListCtrl *listctrl, long item, const wxColour& fc, const wxColour& bc)
84 {
85 wxListItem it;
86 it.SetId(item);
87 listctrl->GetItem(it);
88 it.SetTextColour(fc);
89 it.SetBackgroundColour(bc);
90 listctrl->SetItem(it);
91 }
92
SetItemTextColour(wxListCtrl * listctrl,long item,const wxColour & fc)93 void SetItemTextColour(wxListCtrl *listctrl, long item, const wxColour& fc)
94 {
95 wxListItem it;
96 it.SetId(item);
97 listctrl->GetItem(it);
98 it.SetTextColour(fc);
99 listctrl->SetItem(it);
100 }
SetItemBackgroundColour(wxListCtrl * listctrl,long item,const wxColour & bc)101 void SetItemBackgroundColour(wxListCtrl *listctrl, long item, const wxColour& bc)
102 {
103 wxListItem it;
104 it.SetId(item);
105 listctrl->GetItem(it);
106 it.SetBackgroundColour(bc);
107 listctrl->SetItem(it);
108 }
109
SetFontStyle(wxFont & font,MadFontStyles fs)110 void SetFontStyle(wxFont &font, MadFontStyles fs)
111 {
112 if((fs&fsBold)!=0) font.SetWeight(wxFONTWEIGHT_BOLD);
113 else font.SetWeight(wxFONTWEIGHT_NORMAL);
114 if((fs&fsItalic)!=0) font.SetStyle(wxFONTSTYLE_ITALIC);
115 else font.SetStyle(wxFONTSTYLE_NORMAL);
116 font.SetUnderlined((fs&fsUnderline)!=0);
117 }
GetItemFont(wxListCtrl * listctrl,long item)118 wxFont GetItemFont(wxListCtrl *listctrl, long item)
119 {
120 wxListItem it;
121 it.SetId(item);
122 listctrl->GetItem(it);
123 return it.GetFont();
124 }
SetItemFont(wxListCtrl * listctrl,long item,wxFont & font)125 void SetItemFont(wxListCtrl *listctrl, long item, wxFont &font)
126 {
127 wxListItem it;
128 it.SetId(item);
129 listctrl->GetItem(it);
130 font.SetPointSize(g_DefaultFontSize);
131 it.SetFont(font);
132 listctrl->SetItem(it);
133 }
134
135 //----------------------------------------------------------------------------
136 // MadHighlightingDialog
137 //----------------------------------------------------------------------------
138 //Add Custom Events only in the appropriate block.
139 //Code added in other places will be removed by wxDev-C++
140 ////Event Table Start
BEGIN_EVENT_TABLE(MadHighlightingDialog,wxDialog)141 BEGIN_EVENT_TABLE(MadHighlightingDialog,wxDialog)
142 ////Manual Code Start
143 ////Manual Code End
144
145 EVT_CLOSE(MadHighlightingDialog::MadHighlightingDialogClose)
146 EVT_ACTIVATE(MadHighlightingDialog::MadHighlightingDialogActivate)
147 EVT_BUTTON(ID_WXBUTTONBC,MadHighlightingDialog::WxButtonBCClick)
148
149 EVT_LIST_ITEM_SELECTED(ID_WXLISTCTRLBC,MadHighlightingDialog::WxListCtrlBCSelected)
150 EVT_BUTTON(ID_WXBUTTONFC,MadHighlightingDialog::WxButtonFCClick)
151
152 EVT_LIST_ITEM_SELECTED(ID_WXLISTCTRLFC,MadHighlightingDialog::WxListCtrlFCSelected)
153 EVT_CHECKBOX(ID_WXCHECKBOXUNDERLINE,MadHighlightingDialog::WxCheckBoxUnderlineClick)
154 EVT_CHECKBOX(ID_WXCHECKBOXITALIC,MadHighlightingDialog::WxCheckBoxItalicClick)
155 EVT_CHECKBOX(ID_WXCHECKBOXBOLD,MadHighlightingDialog::WxCheckBoxBoldClick)
156
157 EVT_LIST_ITEM_SELECTED(ID_WXLISTCTRLKEYWORD,MadHighlightingDialog::WxListCtrlKeywordSelected)
158 EVT_BUTTON(ID_WXBUTTONDELETE,MadHighlightingDialog::WxButtonDeleteClick)
159 EVT_BUTTON(ID_WXBUTTONSAVE,MadHighlightingDialog::WxButtonSaveClick)
160 EVT_BUTTON(ID_WXBUTTONLOAD,MadHighlightingDialog::WxButtonLoadClick)
161 EVT_LISTBOX(ID_WXLISTBOXSYNTAX,MadHighlightingDialog::WxListBoxSyntaxSelected)
162 END_EVENT_TABLE()
163 ////Event Table End
164
165 MadHighlightingDialog::MadHighlightingDialog(wxWindow *parent, wxWindowID id, const wxString &title, const wxPoint &position, const wxSize& size, long style)
166 : wxDialog(parent, id, title, position, size, style)
167 {
168 m_Syntax=NULL;
169 m_InitSetting.Empty();
170 CreateGUIControls();
171 }
172
~MadHighlightingDialog()173 MadHighlightingDialog::~MadHighlightingDialog() {}
174
175 //static int gs_MinX=0;
176
ResizeItem(wxBoxSizer * sizer,wxWindow * item,int ax,int ay)177 static void ResizeItem(wxBoxSizer* sizer, wxWindow *item, int ax, int ay)
178 {
179 int x, y;
180 wxString str=item->GetLabel();
181 item->GetTextExtent(str, &x, &y);
182 item->SetSize(x+=ax, y+=ay);
183 sizer->SetItemMinSize(item, x, y);
184
185 //wxPoint pos=item->GetPosition();
186 //if(pos.x + x > gs_MinX) gs_MinX = pos.x + x;
187 }
188
189
CreateGUIControls(void)190 void MadHighlightingDialog::CreateGUIControls(void)
191 {
192 //do not set FontName, it is not exist on all platforms
193 #define wxFont(p0,p1,p2,p3,p4,p5) wxFont(wxDEFAULT,wxDEFAULT,p2,p3,p4)
194
195 //Do not add custom code here
196 //wxDev-C++ designer will remove them.
197 //Add the custom code before or after the blocks
198 ////GUI Items Creation Start
199
200 WxBoxSizer1 = new wxBoxSizer(wxHORIZONTAL);
201 this->SetSizer(WxBoxSizer1);
202 this->SetAutoLayout(true);
203
204 wxArrayString arrayStringFor_WxListBoxSyntax;
205 WxListBoxSyntax = new wxListBox(this, ID_WXLISTBOXSYNTAX, wxPoint(4, 32), wxSize(145, 380), arrayStringFor_WxListBoxSyntax, wxLB_SINGLE | wxLB_HSCROLL);
206 WxListBoxSyntax->SetFont(wxFont(8, wxSWISS, wxNORMAL, wxNORMAL, false, _("MS Sans Serif")));
207 WxBoxSizer1->Add(WxListBoxSyntax,1,wxEXPAND | wxALL,4);
208
209 WxBoxSizer2 = new wxBoxSizer(wxVERTICAL);
210 WxBoxSizer1->Add(WxBoxSizer2, 3, wxEXPAND | wxALL, 0);
211
212 WxBoxSizer3 = new wxBoxSizer(wxVERTICAL);
213 WxBoxSizer2->Add(WxBoxSizer3, 0, wxALIGN_CENTER_HORIZONTAL | wxALL, 0);
214
215 WxBoxSizer4 = new wxBoxSizer(wxHORIZONTAL);
216 WxBoxSizer3->Add(WxBoxSizer4, 0, wxALIGN_CENTER_HORIZONTAL | wxALL, 4);
217
218 WxStaticText1 = new wxStaticText(this, ID_WXSTATICTEXT1, _("Scheme:"), wxPoint(3, 5), wxDefaultSize, 0, _("WxStaticText1"));
219 WxStaticText1->SetFont(wxFont(8, wxSWISS, wxNORMAL, wxNORMAL, false, _("MS Sans Serif")));
220 WxBoxSizer4->Add(WxStaticText1,0,wxALIGN_CENTER_VERTICAL | wxALL,3);
221
222 wxArrayString arrayStringFor_WxComboBoxScheme;
223 WxComboBoxScheme = new wxComboBox(this, ID_WXCOMBOBOXSCHEME, _(""), wxPoint(55, 3), wxSize(145, 21), arrayStringFor_WxComboBoxScheme, 0, wxDefaultValidator, _("WxComboBoxScheme"));
224 WxComboBoxScheme->SetFont(wxFont(8, wxSWISS, wxNORMAL, wxNORMAL, false, _("MS Sans Serif")));
225 WxBoxSizer4->Add(WxComboBoxScheme,0,wxALIGN_CENTER_VERTICAL | wxALL,3);
226
227 WxStaticText2 = new wxStaticText(this, ID_WXSTATICTEXT2, _("You cannot modify the scheme with * sign."), wxPoint(206, 5), wxDefaultSize, 0, _("WxStaticText2"));
228 WxStaticText2->SetFont(wxFont(8, wxSWISS, wxNORMAL, wxNORMAL, false, _("MS Sans Serif")));
229 WxBoxSizer4->Add(WxStaticText2,0,wxALIGN_CENTER_VERTICAL | wxALL,3);
230
231 WxBoxSizer6 = new wxBoxSizer(wxHORIZONTAL);
232 WxBoxSizer3->Add(WxBoxSizer6, 0, wxALIGN_CENTER_HORIZONTAL | wxALL, 2);
233
234 WxButtonLoad = new wxButton(this, ID_WXBUTTONLOAD, _("&Load"), wxPoint(2, 2), wxSize(75, 25), 0, wxDefaultValidator, _("WxButtonLoad"));
235 WxButtonLoad->SetFont(wxFont(8, wxSWISS, wxNORMAL, wxNORMAL, false, _("MS Sans Serif")));
236 WxBoxSizer6->Add(WxButtonLoad,0,wxALIGN_CENTER_VERTICAL | wxALL,2);
237
238 WxButtonSave = new wxButton(this, ID_WXBUTTONSAVE, _("&Save"), wxPoint(81, 2), wxSize(75, 25), 0, wxDefaultValidator, _("WxButtonSave"));
239 WxButtonSave->SetFont(wxFont(8, wxSWISS, wxNORMAL, wxNORMAL, false, _("MS Sans Serif")));
240 WxBoxSizer6->Add(WxButtonSave,0,wxALIGN_CENTER_VERTICAL | wxALL,2);
241
242 WxButtonDelete = new wxButton(this, ID_WXBUTTONDELETE, _("&Delete"), wxPoint(160, 2), wxSize(75, 25), 0, wxDefaultValidator, _("WxButtonDelete"));
243 WxButtonDelete->SetFont(wxFont(8, wxSWISS, wxNORMAL, wxNORMAL, false, _("MS Sans Serif")));
244 WxBoxSizer6->Add(WxButtonDelete,0,wxALIGN_CENTER_VERTICAL | wxALL,2);
245
246 WxStaticLine1 = new wxStaticLine(this, ID_WXSTATICLINE1, wxPoint(47, 69), wxSize(400, -1), wxLI_HORIZONTAL);
247 WxStaticLine1->SetFont(wxFont(8, wxSWISS, wxNORMAL, wxNORMAL, false, _("MS Sans Serif")));
248 WxBoxSizer2->Add(WxStaticLine1,0,wxEXPAND | wxALL,1);
249
250 WxBoxSizer5 = new wxBoxSizer(wxHORIZONTAL);
251 WxBoxSizer2->Add(WxBoxSizer5, 1, wxEXPAND | wxALL, 0);
252
253 WxListCtrlKeyword = new wxListCtrl(this, ID_WXLISTCTRLKEYWORD, wxPoint(2, 35), wxSize(145, 259), wxLC_REPORT | wxLC_NO_HEADER | wxLC_SINGLE_SEL, wxDefaultValidator, _("WxListCtrlKeyword"));
254 WxListCtrlKeyword->SetFont(wxFont(8, wxSWISS, wxNORMAL, wxNORMAL, false, _("MS Sans Serif")));
255 WxBoxSizer5->Add(WxListCtrlKeyword,1,wxEXPAND | wxALL,2);
256
257 WxBoxSizer8 = new wxBoxSizer(wxVERTICAL);
258 WxBoxSizer5->Add(WxBoxSizer8, 2, wxEXPAND | wxALL, 0);
259
260 WxBoxSizer9 = new wxBoxSizer(wxVERTICAL);
261 WxBoxSizer8->Add(WxBoxSizer9, 0, wxALIGN_LEFT | wxALL, 2);
262
263 WxCheckBoxBold = new wxCheckBox(this, ID_WXCHECKBOXBOLD, _("Bold"), wxPoint(2, 2), wxSize(97, 17), 0, wxDefaultValidator, _("WxCheckBoxBold"));
264 WxCheckBoxBold->SetFont(wxFont(8, wxSWISS, wxNORMAL, wxNORMAL, false, _("MS Sans Serif")));
265 WxBoxSizer9->Add(WxCheckBoxBold,0,wxALIGN_LEFT | wxALL,2);
266
267 WxCheckBoxItalic = new wxCheckBox(this, ID_WXCHECKBOXITALIC, _("Italic"), wxPoint(2, 23), wxSize(97, 17), 0, wxDefaultValidator, _("WxCheckBoxItalic"));
268 WxCheckBoxItalic->SetFont(wxFont(8, wxSWISS, wxNORMAL, wxNORMAL, false, _("MS Sans Serif")));
269 WxBoxSizer9->Add(WxCheckBoxItalic,0,wxALIGN_LEFT | wxALL,2);
270
271 WxCheckBoxUnderline = new wxCheckBox(this, ID_WXCHECKBOXUNDERLINE, _("Underline"), wxPoint(2, 44), wxSize(97, 17), 0, wxDefaultValidator, _("WxCheckBoxUnderline"));
272 WxCheckBoxUnderline->SetFont(wxFont(8, wxSWISS, wxNORMAL, wxNORMAL, false, _("MS Sans Serif")));
273 WxBoxSizer9->Add(WxCheckBoxUnderline,0,wxALIGN_LEFT | wxALL,2);
274
275 WxStaticLine3 = new wxStaticLine(this, ID_WXSTATICLINE3, wxPoint(47, 68), wxSize(250, -1), wxLI_HORIZONTAL);
276 WxStaticLine3->SetFont(wxFont(8, wxSWISS, wxNORMAL, wxNORMAL, false, _("MS Sans Serif")));
277 WxBoxSizer8->Add(WxStaticLine3,0,wxEXPAND | wxALL,1);
278
279 WxBoxSizer10 = new wxBoxSizer(wxHORIZONTAL);
280 WxBoxSizer8->Add(WxBoxSizer10, 1, wxEXPAND | wxALL, 2);
281
282 WxBoxSizer11 = new wxBoxSizer(wxVERTICAL);
283 WxBoxSizer10->Add(WxBoxSizer11, 1, wxEXPAND | wxALL, 2);
284
285 WxStaticText3 = new wxStaticText(this, ID_WXSTATICTEXT3, _("Foreground/Text Color"), wxPoint(26, 3), wxDefaultSize, 0, _("WxStaticText3"));
286 WxStaticText3->SetFont(wxFont(8, wxSWISS, wxNORMAL, wxNORMAL, false, _("MS Sans Serif")));
287 WxBoxSizer11->Add(WxStaticText3,0,wxALIGN_CENTER_HORIZONTAL | wxALL,3);
288
289 WxStaticTextFCName = new wxStaticText(this, ID_WXSTATICTEXTFCNAME, _("WxStaticTextFCName"), wxPoint(27, 26), wxDefaultSize, wxALIGN_CENTRE, _("WxStaticTextFCName"));
290 WxStaticTextFCName->SetFont(wxFont(8, wxSWISS, wxNORMAL, wxNORMAL, false, _("MS Sans Serif")));
291 WxBoxSizer11->Add(WxStaticTextFCName,0,wxALIGN_CENTER_HORIZONTAL | wxALL,3);
292
293 WxPanelFC = new wxPanel(this, ID_WXPANELFC, wxPoint(39, 48), wxSize(85, 20), wxSIMPLE_BORDER);
294 WxPanelFC->SetFont(wxFont(8, wxSWISS, wxNORMAL, wxNORMAL, false, _("MS Sans Serif")));
295 WxBoxSizer11->Add(WxPanelFC,0,wxALIGN_CENTER_HORIZONTAL | wxALL,2);
296
297 WxListCtrlFC = new wxListCtrl(this, ID_WXLISTCTRLFC, wxPoint(2, 72), wxSize(160, 140), wxLC_REPORT | wxLC_NO_HEADER | wxLC_SINGLE_SEL, wxDefaultValidator, _("WxListCtrlFC"));
298 WxListCtrlFC->SetFont(wxFont(8, wxSWISS, wxNORMAL, wxNORMAL, false, _("MS Sans Serif")));
299 WxBoxSizer11->Add(WxListCtrlFC,1,wxEXPAND | wxALL,2);
300
301 WxButtonFC = new wxButton(this, ID_WXBUTTONFC, _("Other Color"), wxPoint(37, 216), wxSize(90, 25), 0, wxDefaultValidator, _("WxButtonFC"));
302 WxButtonFC->SetFont(wxFont(8, wxSWISS, wxNORMAL, wxNORMAL, false, _("MS Sans Serif")));
303 WxBoxSizer11->Add(WxButtonFC,0,wxALIGN_CENTER_HORIZONTAL | wxALL,2);
304
305 WxStaticLine2 = new wxStaticLine(this, ID_WXSTATICLINE2, wxPoint(169, 25), wxSize(-1, 200), wxLI_VERTICAL);
306 WxStaticLine2->SetFont(wxFont(8, wxSWISS, wxNORMAL, wxNORMAL, false, _("MS Sans Serif")));
307 WxBoxSizer10->Add(WxStaticLine2,0,wxEXPAND | wxALL,1);
308
309 WxBoxSizer12 = new wxBoxSizer(wxVERTICAL);
310 WxBoxSizer10->Add(WxBoxSizer12, 1, wxEXPAND | wxALL, 2);
311
312 WxStaticText4 = new wxStaticText(this, ID_WXSTATICTEXT4, _("Background Color"), wxPoint(37, 3), wxDefaultSize, 0, _("WxStaticText4"));
313 WxStaticText4->SetFont(wxFont(8, wxSWISS, wxNORMAL, wxNORMAL, false, _("MS Sans Serif")));
314 WxBoxSizer12->Add(WxStaticText4,0,wxALIGN_CENTER_HORIZONTAL | wxALL,3);
315
316 WxStaticTextBCName = new wxStaticText(this, ID_WXSTATICTEXTBCNAME, _("WxStaticTextBCName"), wxPoint(27, 26), wxDefaultSize, wxALIGN_CENTRE, _("WxStaticTextBCName"));
317 WxStaticTextBCName->SetFont(wxFont(8, wxSWISS, wxNORMAL, wxNORMAL, false, _("MS Sans Serif")));
318 WxBoxSizer12->Add(WxStaticTextBCName,0,wxALIGN_CENTER_HORIZONTAL | wxALL,3);
319
320 WxPanelBC = new wxPanel(this, ID_WXPANELBC, wxPoint(39, 48), wxSize(85, 20), wxSIMPLE_BORDER);
321 WxPanelBC->SetFont(wxFont(8, wxSWISS, wxNORMAL, wxNORMAL, false, _("MS Sans Serif")));
322 WxBoxSizer12->Add(WxPanelBC,0,wxALIGN_CENTER_HORIZONTAL | wxALL,2);
323
324 WxListCtrlBC = new wxListCtrl(this, ID_WXLISTCTRLBC, wxPoint(2, 72), wxSize(160, 140), wxLC_REPORT | wxLC_NO_HEADER | wxLC_SINGLE_SEL, wxDefaultValidator, _("WxListCtrlBC"));
325 WxListCtrlBC->SetFont(wxFont(8, wxSWISS, wxNORMAL, wxNORMAL, false, _("MS Sans Serif")));
326 WxBoxSizer12->Add(WxListCtrlBC,1,wxEXPAND | wxALL,2);
327
328 WxButtonBC = new wxButton(this, ID_WXBUTTONBC, _("Other Color"), wxPoint(37, 216), wxSize(90, 28), 0, wxDefaultValidator, _("WxButtonBC"));
329 WxButtonBC->SetFont(wxFont(8, wxSWISS, wxNORMAL, wxNORMAL, false, _("MS Sans Serif")));
330 WxBoxSizer12->Add(WxButtonBC,0,wxALIGN_CENTER_HORIZONTAL | wxALL,2);
331
332 WxBoxSizer7 = new wxBoxSizer(wxHORIZONTAL);
333 WxBoxSizer2->Add(WxBoxSizer7, 0, wxALIGN_CENTER_HORIZONTAL | wxALL, 2);
334
335 WxButtonClose = new wxButton(this, wxID_OK, _("&OK"), wxPoint(5, 3), wxSize(90, 27), 0, wxDefaultValidator, _("WxButtonClose"));
336 WxButtonClose->SetFont(wxFont(8, wxSWISS, wxNORMAL, wxNORMAL, false, _("MS Sans Serif")));
337 WxBoxSizer7->Add(WxButtonClose,0,wxALIGN_CENTER_VERTICAL | wxALL,3);
338
339 WxButtonCancel = new wxButton(this, wxID_CANCEL, _("&Cancel"), wxPoint(99, 3), wxSize(90, 27), 0, wxDefaultValidator, _("WxButtonCancel"));
340 WxButtonCancel->SetFont(wxFont(8, wxSWISS, wxNORMAL, wxNORMAL, false, _("MS Sans Serif")));
341 WxBoxSizer7->Add(WxButtonCancel,0,wxALIGN_CENTER_VERTICAL | wxALL,3);
342
343 SetTitle(_("Syntax Highlighting Settings"));
344 SetIcon(wxNullIcon);
345
346 GetSizer()->Layout();
347 GetSizer()->Fit(this);
348 GetSizer()->SetSizeHints(this);
349 Center();
350
351 ////GUI Items Creation End
352
353 //restore wxFont
354 #undef wxFont
355
356 ResizeItem(WxBoxSizer4, WxStaticText1, 2, 2);
357 ResizeItem(WxBoxSizer4, WxStaticText2, 2, 2);
358
359 ResizeItem(WxBoxSizer9, WxCheckBoxBold, 25, 4);
360 ResizeItem(WxBoxSizer9, WxCheckBoxItalic, 25, 4);
361 ResizeItem(WxBoxSizer9, WxCheckBoxUnderline, 25, 4);
362
363 ResizeItem(WxBoxSizer11, WxStaticText3, 2, 2);
364 ResizeItem(WxBoxSizer11, WxStaticTextFCName, 2, 2);
365
366 ResizeItem(WxBoxSizer12, WxStaticText4, 2, 2);
367 ResizeItem(WxBoxSizer12, WxStaticTextBCName, 2, 2);
368
369 { // build scheme list
370 size_t cnt=MadSyntax::GetSchemeCount();
371 for(size_t i=0;i<cnt;i++)
372 {
373 wxString name=MadSyntax::GetSchemeName(i);
374 WxComboBoxScheme->Append(name);
375 if(i==0) WxComboBoxScheme->SetValue(name);
376 }
377 }
378
379 { // build syntax type list
380 size_t cnt=MadSyntax::GetSyntaxCount();
381 for(size_t i=0;i<cnt;i++)
382 {
383 wxString title=MadSyntax::GetSyntaxTitle(i);
384 WxListBoxSyntax->Append(title);
385 }
386 }
387
388 g_DefaultFontSize=WxListCtrlKeyword->GetFont().GetPointSize();
389 WxListCtrlKeyword->InsertColumn(0, wxT("first column"));
390
391 // build color list
392 WxListCtrlFC->Hide();
393 WxListCtrlBC->Hide();
394 WxListCtrlFC->InsertColumn(0, wxT("first column"));
395 WxListCtrlBC->InsertColumn(0, wxT("first column"));
396
397 wxListItem it;
398 it.SetColumn(0);
399 it.SetId(0);
400 it.SetText(wxT("(Automatic)"));
401 it.SetTextColour(wxT("Red"));
402 WxListCtrlFC->InsertItem(it);
403 WxListCtrlBC->InsertItem(it);
404
405 HtmlColor *hc=HtmlColorTable;
406 for(int i=0; i<HtmlColorTableCount; ++i, ++hc)
407 {
408 it.SetText(hc->name);
409 it.SetId(i+1);
410
411 wxColor c(wxColor(hc->red, hc->green, hc->blue));
412 it.SetTextColour(c);
413 it.SetBackgroundColour(wxNullColour);
414 WxListCtrlFC->InsertItem(it);
415
416 if((hc->red+hc->green+hc->blue)/3 >= 128)
417 it.SetTextColour(*wxBLACK);
418 else
419 it.SetTextColour(*wxWHITE);
420 it.SetBackgroundColour(c);
421 WxListCtrlBC->InsertItem(it);
422 }
423
424 WxListCtrlFC->SetColumnWidth( 0, wxLIST_AUTOSIZE );
425 WxListCtrlBC->SetColumnWidth( 0, wxLIST_AUTOSIZE );
426 WxListCtrlFC->Show();
427 WxListCtrlBC->Show();
428 }
429
MadHighlightingDialogClose(wxCloseEvent & event)430 void MadHighlightingDialog::MadHighlightingDialogClose(wxCloseEvent& event)
431 {
432 if(event.CanVeto())
433 {
434 event.Veto();
435 Show(false);
436 return;
437 }
438
439 FreeSyntax(false);
440 g_HighlightingDialog=NULL;
441 if(g_ColourDialog) delete g_ColourDialog;
442 Destroy();
443 }
444
445 /*
446 * WxListBoxSyntaxSelected
447 */
WxListBoxSyntaxSelected(wxCommandEvent & event)448 void MadHighlightingDialog::WxListBoxSyntaxSelected(wxCommandEvent& event)
449 {
450 wxString title=WxListBoxSyntax->GetString(event.GetSelection());
451 g_Syntax=GetSyntax(title);
452
453 // build keyword list
454 WxListCtrlKeyword->Freeze();
455 WxListCtrlKeyword->DeleteAllItems();
456 g_KeywordInfoTable.clear();
457 int index=0;
458
459 // system attributes
460 for(int ae=aeText; ae<aeNone; ae++)
461 {
462 long item = WxListCtrlKeyword->InsertItem(index++, MadSyntax::GetAttributeName((MadAttributeElement)ae));
463 MadAttributes *attr = g_Syntax->GetAttributes((MadAttributeElement)ae);
464 int kind=kindSysAttr1;
465 if(ae==aeActiveLine || ae==aeBookmark) kind=kindSysAttr2;
466 g_KeywordInfoTable.push_back(KeywordInfo(kind, attr, NULL));
467
468 if(ae==aeText)
469 {
470 WxListCtrlKeyword->SetBackgroundColour(attr->bgcolor);
471 }
472
473 SetItemColour(WxListCtrlKeyword, item, attr->color, attr->bgcolor);
474 wxFont font=GetItemFont(WxListCtrlKeyword, item);
475 SetFontStyle(font, attr->style);
476 SetItemFont(WxListCtrlKeyword, item, font);
477 }
478
479 // custom ranges
480 size_t i;
481 for(i=0; i<g_Syntax->m_CustomRange.size(); ++i)
482 {
483 wxString text;
484 text.Printf(wxT("Range %s %s"), g_Syntax->m_CustomRange[i].begin.c_str(), g_Syntax->m_CustomRange[i].end.c_str());
485 long item = WxListCtrlKeyword->InsertItem(index++, text);
486 wxColour *bg = &(g_Syntax->m_CustomRange[i].bgcolor);
487 g_KeywordInfoTable.push_back( KeywordInfo(kindRange, NULL, bg) );
488 SetItemColour(WxListCtrlKeyword, item, g_KeywordInfoTable[0].attr->color, *bg);
489 }
490
491 // custom keywords
492 for(i=0; i<g_Syntax->m_CustomKeyword.size(); ++i)
493 {
494 long item = WxListCtrlKeyword->InsertItem(index++, g_Syntax->m_CustomKeyword[i].m_Name);
495 MadAttributes *attr = &(g_Syntax->m_CustomKeyword[i].m_Attr);
496 g_KeywordInfoTable.push_back(KeywordInfo(kindKeyword, attr, NULL));
497
498 SetItemColour(WxListCtrlKeyword, item, attr->color, attr->bgcolor);
499 wxFont font=GetItemFont(WxListCtrlKeyword, item);
500 SetFontStyle(font, attr->style);
501 SetItemFont(WxListCtrlKeyword, item, font);
502 }
503
504 WxListCtrlKeyword->SetColumnWidth( 0, WxListCtrlKeyword->GetClientSize().x - 4);
505 WxListCtrlKeyword->Thaw();
506
507 g_Index=-1;
508 wxListEvent e;
509 e.m_itemIndex=0;
510 WxListCtrlKeywordSelected(e);
511 }
512
513
SetPanelFC(const wxColor & color)514 void MadHighlightingDialog::SetPanelFC(const wxColor &color)
515 {
516 if(color==wxNullColour)
517 {
518 WxStaticTextFCName->SetLabel(wxT("(Automatic)"));
519 WxPanelFC->SetBackgroundColour(WxListCtrlFC->GetItemTextColour(0));
520 WxPanelFC->ClearBackground();
521 }
522 else
523 {
524 wxString cname=wxTheColourDatabase->FindName(color);
525 if(cname.IsEmpty())
526 {
527 cname.Printf(wxT("#%02X%02X%02X"), color.Red(), color.Green(), color.Blue());
528 }
529 WxStaticTextFCName->SetLabel(cname);
530 WxPanelFC->SetBackgroundColour(color);
531 WxPanelFC->ClearBackground();
532 }
533 }
534
SetPanelBC(const wxColor & color)535 void MadHighlightingDialog::SetPanelBC(const wxColor &color)
536 {
537 if(color==wxNullColour)
538 {
539 WxStaticTextBCName->SetLabel(wxT("(Automatic)"));
540 WxPanelBC->SetBackgroundColour(WxListCtrlBC->GetItemBackgroundColour(0));
541 WxPanelBC->ClearBackground();
542 }
543 else
544 {
545 wxString cname=wxTheColourDatabase->FindName(color);
546 if(cname.IsEmpty())
547 {
548 cname.Printf(wxT("#%02X%02X%02X"), color.Red(), color.Green(), color.Blue());
549 }
550 WxStaticTextBCName->SetLabel(cname);
551 WxPanelBC->SetBackgroundColour(color);
552 WxPanelBC->ClearBackground();
553 }
554 }
555
556 /*
557 * WxListCtrlKeywordSelected
558 */
WxListCtrlKeywordSelected(wxListEvent & event)559 void MadHighlightingDialog::WxListCtrlKeywordSelected(wxListEvent& event)
560 {
561 long oldIndex=g_Index;
562 g_Index = event.m_itemIndex;
563
564 WxListCtrlKeyword->Freeze();
565 WxListCtrlFC->Freeze();
566
567 if(oldIndex!=g_Index)
568 {
569 wxString str;
570 if(oldIndex>=0)
571 {
572 str = WxListCtrlKeyword->GetItemText(oldIndex);
573 if(str[0]==wxT('*'))
574 {
575 WxListCtrlKeyword->SetItemText(oldIndex, str.Right(str.Len()-1));
576 }
577 }
578
579 str = WxListCtrlKeyword->GetItemText(g_Index);
580 WxListCtrlKeyword->SetItemText(g_Index, wxString(wxT('*'))+str);
581
582 WxListCtrlKeyword->SetColumnWidth(0, WxListCtrlKeyword->GetClientSize().x - 4);
583 }
584
585 KeywordInfo &kinfo=g_KeywordInfoTable[g_Index];
586 if(g_Index==0) // set (Automatic) colors
587 {
588 SetItemTextColour(WxListCtrlFC, 0, kinfo.attr->color);
589 int c = (kinfo.attr->bgcolor.Red()+kinfo.attr->bgcolor.Green()+kinfo.attr->bgcolor.Blue())/3;
590 if(c >= 128)
591 {
592 SetItemColour(WxListCtrlBC, 0, *wxBLACK, kinfo.attr->bgcolor);
593 }
594 else
595 {
596 SetItemColour(WxListCtrlBC, 0, *wxWHITE, kinfo.attr->bgcolor);
597 }
598 }
599
600 wxColour bgc;
601 switch(kinfo.kind)
602 {
603 case kindSysAttr1:
604 case kindKeyword:
605 WxCheckBoxBold->Enable();
606 WxCheckBoxItalic->Enable();
607 WxCheckBoxUnderline->Enable();
608 WxCheckBoxBold->SetValue((kinfo.attr->style&fsBold)!=0);
609 WxCheckBoxItalic->SetValue((kinfo.attr->style&fsItalic)!=0);
610 WxCheckBoxUnderline->SetValue((kinfo.attr->style&fsUnderline)!=0);
611 SetPanelFC(kinfo.attr->color);
612 SetPanelBC(kinfo.attr->bgcolor);
613 WxListCtrlFC->Enable();
614 WxButtonFC->Enable();
615 WxListCtrlBC->Enable();
616 WxButtonBC->Enable();
617 bgc=kinfo.attr->bgcolor;
618 break;
619 case kindSysAttr2:
620 WxCheckBoxBold->SetValue(false);
621 WxCheckBoxItalic->SetValue(false);
622 WxCheckBoxUnderline->SetValue(false);
623 WxCheckBoxBold->Disable();
624 WxCheckBoxItalic->Disable();
625 WxCheckBoxUnderline->Disable();
626 SetPanelFC(kinfo.attr->color);
627 SetPanelBC(wxNullColour);
628 WxListCtrlFC->Enable();
629 WxButtonFC->Enable();
630 WxListCtrlBC->Disable();
631 WxButtonBC->Disable();
632 bgc==wxNullColour;
633 break;
634 case kindRange:
635 WxCheckBoxBold->SetValue(false);
636 WxCheckBoxItalic->SetValue(false);
637 WxCheckBoxUnderline->SetValue(false);
638 WxCheckBoxBold->Disable();
639 WxCheckBoxItalic->Disable();
640 WxCheckBoxUnderline->Disable();
641 SetPanelFC(wxNullColour);
642 SetPanelBC(*kinfo.range_bgcolor);
643 WxListCtrlFC->Disable();
644 WxButtonFC->Disable();
645 WxListCtrlBC->Enable();
646 WxButtonBC->Enable();
647 bgc=*kinfo.range_bgcolor;
648 break;
649 }
650 if(bgc==wxNullColour) bgc=g_KeywordInfoTable[0].attr->bgcolor;
651 WxListCtrlFC->SetBackgroundColour(bgc);
652 SetItemBackgroundColour(WxListCtrlFC, 0, bgc);
653 this->Layout();
654
655 WxListCtrlKeyword->SetItemState(event.m_itemIndex, 0, wxLIST_STATE_SELECTED);
656 WxListCtrlKeyword->Thaw();
657 WxListCtrlFC->Thaw();
658 }
659
660 /*
661 * WxListCtrlFCSelected
662 */
WxListCtrlFCSelected(wxListEvent & event)663 void MadHighlightingDialog::WxListCtrlFCSelected(wxListEvent& event)
664 {
665 wxString colorname=WxListCtrlFC->GetItemText(event.m_itemIndex);
666 wxColor color=WxListCtrlFC->GetItemTextColour(event.m_itemIndex);
667 WxStaticTextFCName->SetLabel(colorname);
668 this->Layout();
669
670 WxPanelFC->SetBackgroundColour(color);
671 WxPanelFC->ClearBackground();
672
673 SetAttrFC(color, colorname);
674 SetToModifiedSyntax(g_Syntax);
675
676 WxListCtrlFC->SetItemState(event.m_itemIndex, 0, wxLIST_STATE_SELECTED);
677 }
678
679 /*
680 * WxListCtrlBCSelected
681 */
WxListCtrlBCSelected(wxListEvent & event)682 void MadHighlightingDialog::WxListCtrlBCSelected(wxListEvent& event)
683 {
684 wxString colorname=WxListCtrlBC->GetItemText(event.m_itemIndex);
685 wxColor color=WxListCtrlBC->GetItemBackgroundColour(event.m_itemIndex);
686 WxStaticTextBCName->SetLabel(colorname);
687 this->Layout();
688
689 WxPanelBC->SetBackgroundColour(color);
690 WxPanelBC->ClearBackground();
691
692 SetAttrBC(color, colorname);
693 SetToModifiedSyntax(g_Syntax);
694
695 WxListCtrlBC->SetItemState(event.m_itemIndex, 0, wxLIST_STATE_SELECTED);
696 }
697
698 /*
699 * WxCheckBoxBoldClick
700 */
WxCheckBoxBoldClick(wxCommandEvent & event)701 void MadHighlightingDialog::WxCheckBoxBoldClick(wxCommandEvent& event)
702 {
703 wxFont font=GetItemFont(WxListCtrlKeyword, g_Index);
704 if(event.IsChecked())
705 {
706 g_KeywordInfoTable[g_Index].attr->style |= fsBold;
707 }
708 else
709 {
710 g_KeywordInfoTable[g_Index].attr->style &= (~fsBold);
711 }
712 SetFontStyle(font, g_KeywordInfoTable[g_Index].attr->style);
713 SetItemFont(WxListCtrlKeyword, g_Index, font);
714 WxListCtrlKeyword->SetColumnWidth(0, WxListCtrlKeyword->GetClientSize().x - 4);
715 SetToModifiedSyntax(g_Syntax);
716 }
717
718 /*
719 * WxCheckBoxItalicClick
720 */
WxCheckBoxItalicClick(wxCommandEvent & event)721 void MadHighlightingDialog::WxCheckBoxItalicClick(wxCommandEvent& event)
722 {
723 wxFont font=GetItemFont(WxListCtrlKeyword, g_Index);
724 if(event.IsChecked())
725 {
726 g_KeywordInfoTable[g_Index].attr->style |= fsItalic;
727 }
728 else
729 {
730 g_KeywordInfoTable[g_Index].attr->style &= (~fsItalic);
731 }
732 SetFontStyle(font, g_KeywordInfoTable[g_Index].attr->style);
733 SetItemFont(WxListCtrlKeyword, g_Index, font);
734 WxListCtrlKeyword->SetColumnWidth(0, WxListCtrlKeyword->GetClientSize().x - 4);
735 SetToModifiedSyntax(g_Syntax);
736 }
737
738 /*
739 * WxCheckBoxUnderlineClick
740 */
WxCheckBoxUnderlineClick(wxCommandEvent & event)741 void MadHighlightingDialog::WxCheckBoxUnderlineClick(wxCommandEvent& event)
742 {
743 wxFont font=GetItemFont(WxListCtrlKeyword, g_Index);
744 if(event.IsChecked())
745 {
746 g_KeywordInfoTable[g_Index].attr->style |= fsUnderline;
747 }
748 else
749 {
750 g_KeywordInfoTable[g_Index].attr->style &= (~fsUnderline);
751 }
752 SetFontStyle(font, g_KeywordInfoTable[g_Index].attr->style);
753 SetItemFont(WxListCtrlKeyword, g_Index, font);
754 WxListCtrlKeyword->SetColumnWidth(0, WxListCtrlKeyword->GetClientSize().x - 4);
755 SetToModifiedSyntax(g_Syntax);
756 }
757
758 /*
759 * WxButtonFCClick
760 */
WxButtonFCClick(wxCommandEvent & event)761 void MadHighlightingDialog::WxButtonFCClick(wxCommandEvent& event)
762 {
763 wxColour color=GetColourFromUser(WxListCtrlKeyword->GetItemTextColour(g_Index), WxStaticText3->GetLabel());
764 if(color.Ok())
765 {
766 SetPanelFC(color);
767 this->Layout();
768 wxString colorname=WxStaticTextFCName->GetLabel();
769 SetAttrFC(color, colorname);
770 SetToModifiedSyntax(g_Syntax);
771 }
772 }
773
774 /*
775 * WxButtonBCClick
776 */
WxButtonBCClick(wxCommandEvent & event)777 void MadHighlightingDialog::WxButtonBCClick(wxCommandEvent& event)
778 {
779 wxColour color=GetColourFromUser(WxPanelBC->GetBackgroundColour(), WxStaticText4->GetLabel());
780 if(color.Ok())
781 {
782 SetPanelBC(color);
783 this->Layout();
784 wxString colorname=WxStaticTextBCName->GetLabel();
785 SetAttrBC(color, colorname);
786 SetToModifiedSyntax(g_Syntax);
787 }
788 }
789
790 /*
791 * MadHighlightingDialogActivate
792 */
MadHighlightingDialogActivate(wxActivateEvent & event)793 void MadHighlightingDialog::MadHighlightingDialogActivate(wxActivateEvent& event)
794 {
795 if(!m_InitSetting.IsEmpty() && event.GetActive())
796 {
797 g_Index=-1;
798
799 int i=WxListBoxSyntax->FindString(m_InitSetting);
800 if(i==wxNOT_FOUND)
801 {
802 i=WxListBoxSyntax->GetSelection();
803 if(i==wxNOT_FOUND) i=0;
804 }
805 WxListBoxSyntax->SetSelection(i);
806
807 wxCommandEvent e;
808 e.SetInt(i);
809 WxListBoxSyntaxSelected(e);
810
811 m_InitSetting.Empty();
812
813 if(FindFocus()==NULL)
814 {
815 WxButtonCancel->SetFocus();
816 }
817 }
818 }
819
GetSyntax(const wxString & title)820 MadSyntax *MadHighlightingDialog::GetSyntax(const wxString &title)
821 {
822 if(m_Syntax && m_Syntax->m_Title.CmpNoCase(title)==0)
823 return m_Syntax;
824
825 for(size_t i=0; i<m_ModifiedSyntax.size(); ++i)
826 {
827 if(m_ModifiedSyntax[i]->m_Title.CmpNoCase(title)==0)
828 return m_ModifiedSyntax[i];
829 }
830
831 if(m_Syntax) delete m_Syntax;
832 m_Syntax=MadSyntax::GetSyntaxByTitle(title);
833 return m_Syntax;
834 }
835
SetToModifiedSyntax(MadSyntax * syn)836 void MadHighlightingDialog::SetToModifiedSyntax(MadSyntax *syn)
837 {
838 if(syn==m_Syntax)
839 {
840 m_ModifiedSyntax.push_back(syn);
841 m_Syntax=NULL;
842 }
843 ApplySyntaxAttributes(syn);// apply syntax attributes to editor
844 }
845
SetAttrFC(const wxColor & color,const wxString & colorname)846 void MadHighlightingDialog::SetAttrFC(const wxColor &color, const wxString &colorname)
847 {
848 KeywordInfo &kinfo=g_KeywordInfoTable[g_Index];
849 if(g_Index==0)
850 {
851 SetItemTextColour(WxListCtrlFC, 0, color);
852 kinfo.attr->color=color;
853 }
854 else
855 {
856 wxASSERT(kinfo.kind!=kindRange);
857 if(colorname==wxT("(Automatic)"))
858 {
859 kinfo.attr->color=wxNullColour;
860 }
861 else
862 {
863 kinfo.attr->color=color;
864 }
865 }
866 RepaintKeyword();
867 }
868
SetAttrBC(const wxColor & color,const wxString & colorname)869 void MadHighlightingDialog::SetAttrBC(const wxColor &color, const wxString &colorname)
870 {
871 KeywordInfo &kinfo=g_KeywordInfoTable[g_Index];
872 if(g_Index==0)
873 {
874 SetItemBackgroundColour(WxListCtrlBC, 0, color);
875 WxListCtrlKeyword->SetBackgroundColour(color);
876 kinfo.attr->bgcolor=color;
877 }
878 else
879 {
880 wxASSERT(kinfo.kind!=kindSysAttr2);
881 switch(kinfo.kind)
882 {
883 case kindSysAttr1:
884 case kindKeyword:
885 if(colorname==wxT("(Automatic)")) kinfo.attr->bgcolor=wxNullColour;
886 else kinfo.attr->bgcolor=color;
887 break;
888 case kindRange:
889 if(colorname==wxT("(Automatic)")) *kinfo.range_bgcolor=wxNullColour;
890 else *kinfo.range_bgcolor=color;
891 break;
892 }
893 }
894 RepaintKeyword();
895
896 SetItemBackgroundColour(WxListCtrlFC, 0, color);
897 WxListCtrlFC->SetBackgroundColour(color);
898 WxListCtrlFC->Refresh();
899 }
900
RepaintKeyword()901 void MadHighlightingDialog::RepaintKeyword()
902 {
903 vector<KeywordInfo>::iterator it=g_KeywordInfoTable.begin();
904 vector<KeywordInfo>::iterator itend=g_KeywordInfoTable.end();
905 long idx=0;
906 wxFont font;
907 wxColour &fc0=it->attr->color;
908 wxColour &bc0=it->attr->bgcolor;
909 wxColour fc, bc;
910 WxListCtrlKeyword->Freeze();
911 do
912 {
913 switch(it->kind)
914 {
915 case kindSysAttr1:
916 case kindSysAttr2:
917 case kindKeyword:
918 fc=it->attr->color;
919 bc=it->attr->bgcolor;
920 font=GetItemFont(WxListCtrlKeyword, idx);
921 SetFontStyle(font, it->attr->style);
922 SetItemFont(WxListCtrlKeyword, idx, font);
923 break;
924 case kindRange:
925 fc=wxNullColour;
926 bc=*it->range_bgcolor;
927 break;
928 }
929 if(fc==wxNullColour) fc=fc0;
930 if(bc==wxNullColour) bc=bc0;
931 SetItemColour(WxListCtrlKeyword, idx, fc, bc);
932 ++idx;
933 }
934 while(++it != itend);
935 WxListCtrlKeyword->SetColumnWidth(0, WxListCtrlKeyword->GetClientSize().x - 4);
936 WxListCtrlKeyword->Thaw();
937 }
938
FreeSyntax(bool restore)939 void MadHighlightingDialog::FreeSyntax(bool restore)
940 {
941 if(restore) // restore the original syntax
942 {
943 for(size_t i=0; i<m_ModifiedSyntax.size(); ++i)
944 {
945 MadSyntax *syn=MadSyntax::GetSyntaxByTitle(m_ModifiedSyntax[i]->m_Title);
946 ApplySyntaxAttributes(syn);
947 delete syn;
948 }
949 }
950 else // write the modified syntax back
951 {
952 for(size_t i=0; i<m_ModifiedSyntax.size(); ++i)
953 {
954 m_ModifiedSyntax[i]->SaveAttributes();
955 }
956 }
957
958 if(m_Syntax)
959 {
960 delete m_Syntax;
961 m_Syntax=NULL;
962 }
963
964 for(size_t i=0; i<m_ModifiedSyntax.size(); ++i)
965 {
966 delete m_ModifiedSyntax[i];
967 }
968 m_ModifiedSyntax.clear();
969 }
970
971
972 /*
973 * WxButtonLoadClick
974 */
WxButtonLoadClick(wxCommandEvent & event)975 void MadHighlightingDialog::WxButtonLoadClick(wxCommandEvent& event)
976 {
977 if(MadSyntax::LoadScheme(WxComboBoxScheme->GetValue(), g_Syntax))
978 {
979 WxListCtrlKeyword->SetBackgroundColour(g_KeywordInfoTable[0].attr->bgcolor);
980 RepaintKeyword();
981 wxListEvent e;
982 e.m_itemIndex=g_Index;
983 WxListCtrlKeywordSelected(e);
984
985 SetToModifiedSyntax(g_Syntax);
986 }
987 else
988 {
989 wxMessageBox(_("Cannot load this scheme."), wxT("MadEdit"), wxICON_WARNING|wxOK);
990 }
991 }
992
993 /*
994 * WxButtonSaveClick
995 */
WxButtonSaveClick(wxCommandEvent & event)996 void MadHighlightingDialog::WxButtonSaveClick(wxCommandEvent& event)
997 {
998 wxString schname = WxComboBoxScheme->GetValue();
999 if(MadSyntax::SaveScheme(schname, g_Syntax))
1000 {
1001 WxComboBoxScheme->Clear();
1002 size_t cnt=MadSyntax::GetSchemeCount();
1003 for(size_t i=0;i<cnt;i++)
1004 {
1005 wxString name=MadSyntax::GetSchemeName(i);
1006 WxComboBoxScheme->Append(name);
1007 }
1008 WxComboBoxScheme->SetValue(schname);
1009 }
1010 else
1011 {
1012 wxMessageBox(_("Cannot save to the scheme."), wxT("MadEdit"), wxICON_WARNING|wxOK);
1013 }
1014 }
1015
1016 /*
1017 * WxButtonDeleteClick
1018 */
WxButtonDeleteClick(wxCommandEvent & event)1019 void MadHighlightingDialog::WxButtonDeleteClick(wxCommandEvent& event)
1020 {
1021 if(MadSyntax::DeleteScheme(WxComboBoxScheme->GetValue()))
1022 {
1023 WxComboBoxScheme->Clear();
1024 size_t cnt=MadSyntax::GetSchemeCount();
1025 for(size_t i=0;i<cnt;i++)
1026 {
1027 wxString name=MadSyntax::GetSchemeName(i);
1028 WxComboBoxScheme->Append(name);
1029 if(i==0) WxComboBoxScheme->SetValue(name);
1030 }
1031 }
1032 else
1033 {
1034 wxMessageBox(_("Cannot delete this scheme."), wxT("MadEdit"), wxICON_WARNING|wxOK);
1035 }
1036 }
1037