1 ///////////////////////////////////////////////////////////////////////////////
2 // Name: MadEditFrame.cpp
3 // Description: main frame of MadEdit
4 // Author: madedit@gmail.com
5 // Licence: GPL
6 ///////////////////////////////////////////////////////////////////////////////
7
8 #include "MadEdit/MadEdit.h"
9 #include "MadEdit/MadEditCommand.h"
10 #include "MadEdit/MadEncoding.h"
11 #include "MadEdit/MadSyntax.h"
12 #include "MadEdit/TradSimp.h"
13 #include "MadEditFrame.h"
14 #include "MadSearchDialog.h"
15 #include "MadReplaceDialog.h"
16 #include "MadFindInFilesDialog.h"
17 #include "MadOptionsDialog.h"
18 #include "MadHighlightingDialog.h"
19 #ifdef __WXMSW__
20 #include "MadFileAssociationDialog.h"
21 #endif
22 #include "MadConvEncDialog.h"
23 #include "MadWordCountDialog.h"
24 #include "MadSortDialog.h"
25 #include "MadAboutDialog.h"
26 #include "MadPrintout.h"
27 #include "MadUtils.h"
28 #include "MadCommand.h"
29 #include "plugin.h"
30 #include "wx/aui/auibook.h"
31
32 #include <wx/app.h>
33 //#include <wx/dynload.h>
34 #include <wx/tokenzr.h>
35 #include <wx/fontenum.h>
36 #include <wx/filename.h>
37 #include <wx/fontdlg.h>
38 #include <wx/textdlg.h>
39 #include <wx/msgdlg.h>
40 #include <wx/dnd.h>
41 #include <wx/printdlg.h>
42 #include <wx/config.h>
43
44 #include <algorithm>
45
46 //Do not add custom headers.
47 //wx-dvcpp designer will remove them
48 ////Header Include Start
49 ////Header Include End
50
51
52 #ifdef _DEBUG
53 #include <crtdbg.h>
54 #define new new(_NORMAL_BLOCK ,__FILE__, __LINE__)
55 #endif
56
57
58
59 #if !defined(__WXMSW__) && !defined(__WXPM__)
60 # include "../images/Mad.xpm"
61 # include "../images/Mad2.xpm"
62 #endif
63
64 #include "../images/null.xpm"
65 #define null_xpm_idx 0
66 #include "../images/new.xpm"
67 #define new_xpm_idx (null_xpm_idx+1)
68 #include "../images/fileopen.xpm"
69 #define fileopen_xpm_idx (new_xpm_idx+1)
70 #include "../images/filesave.xpm"
71 #define filesave_xpm_idx (fileopen_xpm_idx+1)
72 #include "../images/saveall.xpm"
73 #define saveall_xpm_idx (filesave_xpm_idx+1)
74 #include "../images/fileclose.xpm"
75 #define fileclose_xpm_idx (saveall_xpm_idx+1)
76 #include "../images/closeall.xpm"
77 #define closeall_xpm_idx (fileclose_xpm_idx+1)
78 #include "../images/preview.xpm"
79 #define preview_xpm_idx (closeall_xpm_idx+1)
80 #include "../images/print.xpm"
81 #define print_xpm_idx (preview_xpm_idx+1)
82 #include "../images/quit.xpm"
83 #define quit_xpm_idx (print_xpm_idx+1)
84
85 #include "../images/undo.xpm"
86 #define undo_xpm_idx (quit_xpm_idx+1)
87 #include "../images/redo.xpm"
88 #define redo_xpm_idx (undo_xpm_idx+1)
89 #include "../images/cut.xpm"
90 #define cut_xpm_idx (redo_xpm_idx+1)
91 #include "../images/copy.xpm"
92 #define copy_xpm_idx (cut_xpm_idx+1)
93 #include "../images/paste.xpm"
94 #define paste_xpm_idx (copy_xpm_idx+1)
95 #include "../images/indent.xpm"
96 #define indent_xpm_idx (paste_xpm_idx+1)
97 #include "../images/unindent.xpm"
98 #define unindent_xpm_idx (indent_xpm_idx+1)
99 #include "../images/comment.xpm"
100 #define comment_xpm_idx (unindent_xpm_idx+1)
101 #include "../images/uncomment.xpm"
102 #define uncomment_xpm_idx (comment_xpm_idx+1)
103
104 #include "../images/find.xpm"
105 #define find_xpm_idx (uncomment_xpm_idx+1)
106 #include "../images/findnext.xpm"
107 #define findnext_xpm_idx (find_xpm_idx+1)
108 #include "../images/findprev.xpm"
109 #define findprev_xpm_idx (findnext_xpm_idx+1)
110 #include "../images/replace.xpm"
111 #define replace_xpm_idx (findprev_xpm_idx+1)
112
113 #include "../images/fontname.xpm"
114 #define fontname_xpm_idx (replace_xpm_idx+1)
115 #include "../images/fontsize.xpm"
116 #define fontsize_xpm_idx (fontname_xpm_idx+1)
117 #include "../images/font.xpm"
118 #define font_xpm_idx (fontsize_xpm_idx+1)
119 #include "../images/nowrap.xpm"
120 #define nowrap_xpm_idx (font_xpm_idx+1)
121 #include "../images/wrapbywin.xpm"
122 #define wrapbywin_xpm_idx (nowrap_xpm_idx+1)
123 #include "../images/wrapbycol.xpm"
124 #define wrapbycol_xpm_idx (wrapbywin_xpm_idx+1)
125 #include "../images/textmode.xpm"
126 #define textmode_xpm_idx (wrapbycol_xpm_idx+1)
127 #include "../images/columnmode.xpm"
128 #define columnmode_xpm_idx (textmode_xpm_idx+1)
129 #include "../images/hexmode.xpm"
130 #define hexmode_xpm_idx (columnmode_xpm_idx+1)
131
132 #include "../images/Mad_16x15.xpm"
133 #define Mad_16x15_xpm_idx (hexmode_xpm_idx+1)
134
135 #if wxCHECK_VERSION(2,7,0)
136 #define GetAccelFromString(x) wxAcceleratorEntry::Create(x)
137 #else
138 #define GetAccelFromString(x) wxGetAccelFromString(x)
139 #endif
140
141
142 wxString g_MadEdit_Version(wxT("MadEdit v0.2.9"));
143 wxString g_MadEdit_URL(wxT("http://madedit.sourceforge.net/wiki"));
144
145
146 extern wxString g_MadEditAppDir, g_MadEditHomeDir;
147
148 MadEditFrame *g_MainFrame=NULL;
149 MadEdit *g_ActiveMadEdit=NULL;
150 int g_PrevPageID=-1;
151 wxStatusBar *g_StatusBar=NULL;
152 bool g_CheckModTimeForReload=true;
153
154 wxMenu *g_Menu_File = NULL;
155 wxMenu *g_Menu_Edit = NULL;
156 wxMenu *g_Menu_Search = NULL;
157 wxMenu *g_Menu_View = NULL;
158 wxMenu *g_Menu_Tools = NULL;
159 wxMenu *g_Menu_Window = NULL;
160 wxMenu *g_Menu_Help = NULL;
161 wxMenu *g_Menu_File_RecentFiles = NULL;
162 wxMenu *g_Menu_Edit_Sort = NULL;
163 wxMenu *g_Menu_Edit_Advanced = NULL;
164 wxMenu *g_Menu_View_Encoding = NULL;
165 wxMenu *g_Menu_View_AllEncodings = NULL;
166 wxMenu *g_Menu_View_Syntax = NULL;
167 wxMenu *g_Menu_View_FontName = NULL;
168 wxMenu *g_Menu_View_Font0 = NULL;
169 wxMenu *g_Menu_View_Font1 = NULL;
170 wxMenu *g_Menu_View_Font2 = NULL;
171 wxMenu *g_Menu_View_Font3 = NULL;
172 wxMenu *g_Menu_View_Font4 = NULL;
173 wxMenu *g_Menu_View_Font5 = NULL;
174 wxMenu *g_Menu_View_Font6 = NULL;
175 wxMenu *g_Menu_View_FontSize = NULL;
176 wxMenu *g_Menu_View_TabColumn = NULL;
177 wxMenu *g_Menu_View_LineSpacing = NULL;
178 wxMenu *g_Menu_Tools_BOM = NULL;
179 wxMenu *g_Menu_Tools_NewLineChar = NULL;
180 wxMenu *g_Menu_Tools_InsertNewLineChar = NULL;
181 wxMenu *g_Menu_Tools_ConvertChineseChar = NULL;
182
183 wxArrayString g_FontNames;
184
185 #ifdef __WXMSW__
186 int g_StatusWidth_1_6= (215+ 215+ 135+ 121+ 60+ (40 + 18));
187 int g_StatusWidths[7]={ 0, 215, 215, 135, 121, 60, (40 + 18)};
188 #else
189 int g_StatusWidth_1_6= (220+ 235+ 135+ 155+ 65+ (40 + 0));
190 int g_StatusWidths[7]={ 0, 220, 235, 135, 155, 65, (40 + 0)};
191 #endif
192
193 wxAcceleratorEntry g_AccelFindNext, g_AccelFindPrev;
194
195 //---------------------------------------------------------------------------
196
197 // for RestoreCaretPos
198 class FileCaretPosManager
199 {
200 int max_count;
201
202 struct FilePosData
203 {
204 wxString name;
205 wxFileOffset pos;
206 unsigned long hash; // hash value of filename
207 wxString encoding;
208 wxString fontname;
209 int fontsize;
210
FilePosDataFileCaretPosManager::FilePosData211 FilePosData(const wxString &n, const wxLongLong_t &p, unsigned long h, const wxString &e, const wxString &fn, int fs)
212 : name(n), pos(p), hash(h), encoding(e), fontname(fn), fontsize(fs)
213 {}
FilePosDataFileCaretPosManager::FilePosData214 FilePosData()
215 : pos(0), fontsize(0)
216 {}
217 };
218 std::list<FilePosData> files;
219
220 public:
FileCaretPosManager()221 FileCaretPosManager() : max_count(40) {}
222
Add(const wxString & name,const wxFileOffset & pos,const wxString & encoding,const wxString & fontname,int fontsize)223 void Add(const wxString &name, const wxFileOffset &pos, const wxString &encoding, const wxString &fontname, int fontsize)
224 {
225 #ifdef __WXMSW__
226 wxString name0(name.Upper());
227 #else
228 const wxString &name0 = name;
229 #endif
230 unsigned long hash = wxStringHash::wxCharStringHash(name0);
231 if(files.size()==0)
232 {
233 files.push_back(FilePosData(name0, pos, hash, encoding, fontname, fontsize));
234 }
235 else
236 {
237 std::list<FilePosData>::iterator it = files.begin();
238 std::list<FilePosData>::iterator itend = files.end();
239 do
240 {
241 if(it->hash == hash && it->name == name0)
242 {
243 break;
244 }
245 }
246 while(++it != itend);
247
248 if(it == itend)
249 {
250 files.push_front(FilePosData(name0, pos, hash, encoding, fontname, fontsize));
251 }
252 else
253 {
254 it->pos = pos;
255 it->encoding = encoding;
256 it->fontname = fontname;
257 it->fontsize = fontsize;
258
259 files.push_front(*it);
260 files.erase(it);
261 }
262 }
263 if(int(files.size()) > max_count)
264 {
265 files.pop_back();
266 }
267 }
Add(MadEdit * madedit)268 void Add(MadEdit *madedit)
269 {
270 if(madedit==NULL) return;
271
272 wxString name=madedit->GetFileName();
273 if(!name.IsEmpty())
274 {
275 wxString fontname;
276 int fontsize;
277 madedit->GetTextFont(fontname, fontsize);
278 wxFileOffset pos = madedit->GetCaretPosition();
279 Add(name, pos, madedit->GetEncodingName(), fontname, fontsize);
280 }
281 }
Save(wxConfigBase * cfg)282 void Save(wxConfigBase *cfg)
283 {
284 cfg->Write(wxT("MaxCount"), max_count);
285
286 std::list<FilePosData>::iterator it = files.begin();
287 wxString entry(wxT("file")), text;
288 int idx=0, count=int(files.size());
289 while(idx < count)
290 {
291 text = wxLongLong(it->pos).ToString();
292 text += wxT("|");
293 text += it->name;
294 text += wxT("|");
295 text += it->encoding;
296 text += wxT("|");
297 text += it->fontname;
298 text += wxT("|");
299 text += wxLongLong(it->fontsize).ToString();
300 cfg->Write(entry + (wxString()<<(idx+1)), text);
301 ++idx;
302 ++it;
303 }
304 }
Load(wxConfigBase * cfg)305 void Load(wxConfigBase *cfg)
306 {
307 cfg->Read(wxT("MaxCount"), &max_count);
308
309 FilePosData fpdata;
310 wxString entry(wxT("file")), text;
311 int idx=1;
312 while(idx<=max_count && cfg->Read(entry + (wxString()<<idx), &text))
313 {
314 int p = text.Find(wxT("|"));
315 if(p != wxNOT_FOUND)
316 {
317 fpdata.pos = 0;
318 fpdata.fontsize = 0;
319 fpdata.encoding.Empty();
320
321 wxInt64 i64;
322 if(StrToInt64(text.Left(p), i64))
323 {
324 fpdata.pos = i64;
325 text = text.Right(text.Len() - (p+1));
326
327 p = text.Find(wxT("|"));
328 if(p != wxNOT_FOUND)
329 {
330 fpdata.name = text.Left(p);
331 text = text.Right(text.Len() - (p+1));
332
333 p = text.Find(wxT("|"));
334 if(p != wxNOT_FOUND)
335 {
336 fpdata.encoding = text.Left(p);
337 text = text.Right(text.Len() - (p+1));
338
339 p = text.Find(wxT("|"));
340 if(p != wxNOT_FOUND)
341 {
342 fpdata.fontname = text.Left(p);
343 text = text.Right(text.Len() - (p+1));
344
345 if(StrToInt64(text, i64))
346 {
347 fpdata.fontsize = i64;
348 }
349 }
350 else
351 {
352 fpdata.fontname = text;
353 }
354 }
355 else
356 {
357 fpdata.encoding = text;
358 }
359 }
360 else // old format
361 {
362 fpdata.name = text;
363 }
364
365 fpdata.hash = wxStringHash::wxCharStringHash(fpdata.name);
366 files.push_back(fpdata);
367 }
368 }
369 ++idx;
370 }
371 }
GetRestoreData(const wxString & name,wxString & encoding,wxString & fontname,int & fontsize)372 wxFileOffset GetRestoreData(const wxString &name, wxString &encoding, wxString &fontname, int &fontsize)
373 {
374 #ifdef __WXMSW__
375 wxString name0(name.Upper());
376 #else
377 const wxString &name0 = name;
378 #endif
379 unsigned long hash = wxStringHash::wxCharStringHash(name0);
380 wxFileOffset pos = 0;
381 fontsize = 0;
382 if(files.size() != 0)
383 {
384 std::list<FilePosData>::iterator it = files.begin();
385 std::list<FilePosData>::iterator itend = files.end();
386 do
387 {
388 if(it->hash == hash && it->name == name0)
389 {
390 pos = it->pos;
391 encoding = it->encoding;
392 fontname = it->fontname;
393 fontsize = it->fontsize;
394 break;
395 }
396 }
397 while(++it != itend);
398 }
399 return pos;
400 }
401 };
402 FileCaretPosManager g_FileCaretPosManager;
403
404
405 //---------------------------------------------------------------------------
406
407 // for FindInFilesResults
408 class CaretPosData: public wxTreeItemData
409 {
410 public:
411 wxString filename;
412 int pageid; // >=0 for 'NoName'
413 wxFileOffset bpos, epos;
CaretPosData(const wxString & fn,int pid,const wxFileOffset & b,wxFileOffset & e)414 CaretPosData(const wxString &fn, int pid, const wxFileOffset &b, wxFileOffset &e)
415 : filename(fn), pageid(pid), bpos(b), epos(e) {}
416 };
417
418 //---------------------------------------------------------------------------
419
420 #ifndef __WXMSW__ // for Linux filename checking/converting
421 MadConvFileName MadConvFileNameObj;
422
FixFileNameEncoding(const wxString & filename)423 wxString FixFileNameEncoding(const wxString &filename)
424 {
425 size_t len=filename.Len();
426 wxByte *bbuf=new wxByte[len+1];
427 wxByte *ps=bbuf;
428 const wxChar *pwcs=filename.c_str();
429 for(size_t l=len;l>0;l--, ++ps, ++pwcs)
430 {
431 if(*pwcs >= 0x100)
432 {
433 delete []bbuf;
434 return filename;
435 }
436
437 *ps = *pwcs;
438 }
439 *ps = 0;
440
441 g_MB2WC_check_dir_filename=true;
442
443 size_t wcslen=MadConvFileNameObj.MB2WC(NULL, (const char*)bbuf, 0);
444 if(wcslen==size_t(-1))
445 return filename;
446
447 wxChar *str=new wxChar[wcslen+1];
448 MadConvFileNameObj.MB2WC(str, (const char*)bbuf, wcslen+1);
449
450 g_MB2WC_check_dir_filename=false;
451
452 wxString newfn(str);
453 delete []bbuf;
454 delete []str;
455
456 return newfn;
457 }
458
459 #endif
460
461
462 class DnDFile : public wxFileDropTarget
463 {
464 public:
OnDropFiles(wxCoord x,wxCoord y,const wxArrayString & filenames)465 virtual bool OnDropFiles(wxCoord x, wxCoord y, const wxArrayString& filenames)
466 {
467 size_t count=filenames.GetCount();
468 for(size_t i=0;i<count;i++)
469 {
470 #ifdef __WXMSW__
471 g_MainFrame->OpenFile(filenames[i], true);
472 #else
473 wxString fn=FixFileNameEncoding(filenames[i]);
474 g_MainFrame->OpenFile(fn, true);
475 #endif
476 }
477 return true;
478 }
479 };
480
481 //---------------------------------------------------------------------------
482
483 class wxMadAuiNotebook : public wxAuiNotebook
484 {
485 public:
wxMadAuiNotebook()486 wxMadAuiNotebook() : wxAuiNotebook() {}
487
wxMadAuiNotebook(wxWindow * parent,wxWindowID id=wxID_ANY,const wxPoint & pos=wxDefaultPosition,const wxSize & size=wxDefaultSize,long style=wxAUI_NB_DEFAULT_STYLE)488 wxMadAuiNotebook(wxWindow* parent,
489 wxWindowID id = wxID_ANY,
490 const wxPoint& pos = wxDefaultPosition,
491 const wxSize& size = wxDefaultSize,
492 long style = wxAUI_NB_DEFAULT_STYLE)
493 : wxAuiNotebook(parent, id, pos, size, style)
494 {
495 }
496
~wxMadAuiNotebook()497 virtual ~wxMadAuiNotebook() {}
498
499 struct PageData
500 {
501 int x, y, idx;
502 MadEdit *madedit;
PageDatawxMadAuiNotebook::PageData503 PageData() {}
PageDatawxMadAuiNotebook::PageData504 PageData(int xx, int yy, int ii, MadEdit *mm)
505 : x(xx), y(yy), idx(ii), madedit(mm)
506 {}
507 };
508
GetPagesList()509 list<PageData> GetPagesList()
510 {
511 wxAuiNotebookPageArray& pages = m_tabs.GetPages();
512 size_t i, page_count = pages.GetCount();
513
514 list<PageData> pages_list;
515 list<PageData>::iterator it;
516
517 for (i = 0; i < page_count; ++i)
518 {
519 wxAuiNotebookPage& page = pages.Item(i);
520 MadEdit *madedit = (MadEdit*)page.window;
521
522 wxAuiTabCtrl *ctrl;
523 int idx;
524 if(FindTab(page.window, &ctrl, &idx))
525 {
526 wxPoint pt = ctrl->GetPosition();
527 pt = ctrl->ClientToScreen(pt);
528 it = pages_list.begin();
529 size_t j=0;
530 for(; j<pages_list.size(); ++j, ++it)
531 {
532 PageData &pd = *it;
533 if(pt.y < pd.y)
534 {
535 break;
536 }
537 else if(pt.y==pd.y)
538 {
539 if(pt.x<pd.x)
540 {
541 break;
542 }
543 else if(pt.x==pd.x)
544 {
545 if(idx<pd.idx)
546 {
547 break;
548 }
549 }
550 }
551 }
552
553 pages_list.insert(it, PageData(pt.x, pt.y, idx, madedit));
554 }
555 }
556
557 return pages_list;
558 }
559
GetFilesList(wxString & files)560 int GetFilesList(wxString &files)
561 {
562 int count = 0;
563 list<PageData> pages_list = GetPagesList();
564 size_t page_count = pages_list.size();
565 list<PageData>::iterator it = pages_list.begin();
566 for (size_t i = 0; i < page_count; ++i, ++it)
567 {
568 wxString name(it->madedit->GetFileName());
569 if(!name.IsEmpty())
570 {
571 files += name;
572 files += wxT('|');
573 ++count;
574 }
575 }
576 return count;
577 }
578
579 struct FunctorA
580 {
581 MadEdit *madedit;
operator ()wxMadAuiNotebook::FunctorA582 bool operator()(PageData &pd)
583 {
584 return madedit == pd.madedit;
585 }
586 };
587
AdvanceSelection(bool bForward)588 void AdvanceSelection(bool bForward)
589 {
590 int count = (int)GetPageCount();
591 if(count <= 1) return;
592
593 list<PageData> pages_list = GetPagesList();
594 wxWindow* win = GetPage(GetSelection());
595
596 FunctorA fa;
597 fa.madedit = (MadEdit*)win;
598 list<PageData>::iterator it = std::find_if(pages_list.begin(), pages_list.end(), fa);
599
600 wxASSERT(it != pages_list.end());
601
602 if(bForward)
603 {
604 if(++it == pages_list.end()) it=pages_list.begin();
605 }
606 else
607 {
608 if(it==pages_list.begin()) it=pages_list.end();
609 --it;
610 }
611 SetSelection(GetPageIndex(it->madedit));
612 }
613
ConnectMouseClick()614 void ConnectMouseClick()
615 {
616 if(GetPageCount()!=0)
617 {
618 wxAuiTabCtrl *ctrl=GetActiveTabCtrl();
619 ctrl->Connect(wxEVT_LEFT_DCLICK, wxMouseEventHandler(wxMadAuiNotebook::OnMouseClick));
620 ctrl->Connect(wxEVT_MIDDLE_UP, wxMouseEventHandler(wxMadAuiNotebook::OnMouseClick));
621 }
622 }
623
624 protected:
OnMouseClick(wxMouseEvent & evt)625 void OnMouseClick(wxMouseEvent &evt)
626 {
627 //wxString s;
628 //s.Printf(L"%d %d", evt.m_x, evt.m_y);
629 //((wxTopLevelWindow*)g_MainFrame)->SetLabel(s);
630
631 wxAuiTabCtrl *ctrl = (wxAuiTabCtrl*)evt.GetEventObject();
632 wxWindow *win;
633 if(ctrl->TabHitTest(evt.m_x, evt.m_y, &win))
634 {
635 g_MainFrame->CloseFile(g_MainFrame->m_Notebook->GetPageIndex(win));
636 }
637 }
638
639 };
640
641
OnReceiveMessage(const wchar_t * msg,size_t size)642 void OnReceiveMessage(const wchar_t *msg, size_t size)
643 {
644 #ifdef __WXMSW__
645 WINDOWPLACEMENT wp;
646 wp.length=sizeof(WINDOWPLACEMENT);
647 GetWindowPlacement((HWND)g_MainFrame->GetHWND(), &wp);
648
649 if(wp.showCmd==SW_SHOWMINIMIZED)
650 {
651 if((wp.flags&WPF_RESTORETOMAXIMIZED)==0) // show normal
652 {
653 wp.showCmd=SW_NORMAL;
654 }
655 else // show maximized
656 {
657 wp.showCmd=SW_SHOWMAXIMIZED;
658 }
659 SetWindowPlacement((HWND)g_MainFrame->GetHWND(), &wp);
660 }
661 #else
662 //g_MainFrame->Show(true);
663 g_MainFrame->Raise();
664 g_MainFrame->RequestUserAttention();//wxUSER_ATTENTION_ERROR);
665 g_MainFrame->SetFocus();
666 #endif
667
668 if(g_ActiveMadEdit) g_ActiveMadEdit->SetFocus();
669
670 // open the files
671 wxString file;
672 size_t len=size/sizeof(wchar_t);
673
674 const wchar_t *pwc=msg;
675 for(size_t i=0;i<len && *pwc!=0 ;i++, pwc++)
676 {
677 if(*pwc=='|')
678 {
679 g_MainFrame->OpenFile(file, false);
680 file.clear();
681 }
682 else
683 {
684 file<<*pwc;
685 }
686 }
687
688 }
689
690
GetIdByEdit(MadEdit * edit)691 int GetIdByEdit(MadEdit *edit)
692 {
693 return g_MainFrame->m_Notebook->GetPageIndex(edit);
694 }
695
696 // return true for name; false for title
GetActiveMadEditPathNameOrTitle(wxString & name)697 bool GetActiveMadEditPathNameOrTitle(wxString &name)
698 {
699 name=g_ActiveMadEdit->GetFileName();
700 if(name.IsEmpty())
701 {
702 name=g_MainFrame->m_Notebook->GetPageText( GetIdByEdit(g_ActiveMadEdit) );
703 if(name[name.Len()-1]==wxT('*'))
704 name.Truncate(name.Len()-1);
705 return false;
706 }
707 return true;
708 }
709
ApplySyntaxAttributes(MadSyntax * syn)710 void ApplySyntaxAttributes(MadSyntax *syn)
711 {
712 int count=int(g_MainFrame->m_Notebook->GetPageCount());
713 for(int id=0;id<count;id++)
714 {
715 MadEdit *me=(MadEdit*)g_MainFrame->m_Notebook->GetPage(id);
716 me->ApplySyntaxAttributes(syn, true);
717 }
718 }
719
OnEditSelectionChanged(MadEdit * madedit)720 void OnEditSelectionChanged(MadEdit *madedit)
721 {
722 g_MainFrame->m_Notebook->ConnectMouseClick();
723
724 if(madedit==NULL)
725 {
726 g_StatusBar->SetStatusText(wxEmptyString, 1);
727 g_StatusBar->SetStatusText(wxEmptyString, 2);
728 g_StatusBar->SetStatusText(wxEmptyString, 3);
729 }
730 else
731 {
732 if(madedit!=g_ActiveMadEdit)
733 return;
734
735 int line,subrow;
736 wxFileOffset col;
737 madedit->GetCaretPosition(line,subrow,col);
738 if(madedit->GetEditMode()!=emHexMode)
739 {
740 ++line;
741 ++col;
742 }
743
744 wxString s1=FormatThousands(wxString::Format(wxT("%d"), line));
745 wxString s2=FormatThousands(wxString::Format(wxT("%u"), madedit->GetLineCount()));
746 wxString s4=FormatThousands(wxLongLong(col).ToString());
747
748 static wxString lnstr(_("Ln:"));
749 static wxString sepstr(wxT(" /"));
750 static wxString sepstr1(wxT(" ("));
751 static wxString substr(_("Sub:"));
752 static wxString sepstr2(wxT(')'));
753 static wxString sepstr3(wxT(' '));
754 static wxString colstr(_("Col:"));
755 static wxString fpstr(_("CharPos:"));
756 static wxString ssstr(_("SelSize:"));
757
758 wxString text=lnstr+s1+ sepstr+s2;
759 if(subrow>0)
760 {
761 wxString s3=FormatThousands(wxString::Format(wxT("%d"), subrow+1));
762 text += (sepstr1+substr+s3+sepstr2);
763 }
764 text += (sepstr3+colstr+s4);
765 g_StatusBar->SetStatusText(text, 1);
766
767 s1=FormatThousands(wxLongLong(madedit->GetCaretPosition()).ToString());
768 s2=FormatThousands(wxLongLong(madedit->GetFileSize()).ToString());
769 g_StatusBar->SetStatusText(fpstr+s1+sepstr+s2, 2);
770
771 s1=FormatThousands(wxLongLong(madedit->GetSelectionSize()).ToString());
772 g_StatusBar->SetStatusText(ssstr+s1, 3);
773 }
774
775 g_StatusBar->Update(); // repaint immediately
776 }
777
OnEditStatusChanged(MadEdit * madedit)778 void OnEditStatusChanged(MadEdit *madedit)
779 {
780 g_MainFrame->m_Notebook->ConnectMouseClick();
781
782 if(madedit==NULL)
783 {
784 g_StatusBar->SetStatusText(wxEmptyString, 4);
785 g_StatusBar->SetStatusText(wxEmptyString, 5);
786 g_StatusBar->SetStatusText(wxEmptyString, 6);
787
788 g_StatusBar->Update(); // repaint immediately
789 }
790 else
791 {
792 // check the title is changed or not
793 int selid=GetIdByEdit(madedit);
794
795 wxString oldtitle = g_MainFrame->m_Notebook->GetPageText(selid);
796
797 wxString filename=madedit->GetFileName(), title;
798 if(!filename.IsEmpty())
799 {
800 wxFileName fn(filename);
801 title=fn.GetFullName();
802 }
803 else
804 {
805 title=oldtitle;
806 }
807
808 if(madedit->IsModified())
809 {
810 if(title[title.Len()-1]!=wxT('*'))
811 title += wxT('*');
812
813 if(filename.IsEmpty())
814 filename=title;
815 else
816 filename+=wxT('*');
817 }
818 else
819 {
820 if(title[title.Len()-1]==wxT('*'))
821 title.Truncate(title.Len()-1);
822 }
823
824 if(title != oldtitle)
825 {
826 g_MainFrame->m_Notebook->SetPageText(selid, title);
827 }
828
829 if(madedit==g_ActiveMadEdit)
830 {
831 if(filename.IsEmpty())
832 filename=title;
833 g_MainFrame->SetTitle(wxString(wxT("MadEdit - ["))+ filename +wxString(wxT("] ")));
834
835 wxString enc=madedit->GetEncodingName();
836 if(madedit->HasBOM())
837 {
838 static wxString bom(wxT(".BOM"));
839 enc += bom;
840 }
841
842 switch(madedit->GetNewLineType())
843 {
844 case nltDOS:
845 {
846 static wxString xdos(wxT(".DOS"));
847 enc += xdos;
848 }
849 break;
850 case nltUNIX:
851 {
852 static wxString xunix(wxT(".UNIX"));
853 enc += xunix;
854 }
855 break;
856 case nltMAC:
857 {
858 static wxString xmac(wxT(".MAC"));
859 enc += xmac;
860 }
861 break;
862 default:
863 break;
864 }
865 g_StatusBar->SetStatusText(enc, 4);
866
867 if(madedit->IsReadOnly())
868 {
869 static wxString rostr(_("ReadOnly"));
870 g_StatusBar->SetStatusText(rostr, 5);
871 }
872 else
873 {
874 g_StatusBar->SetStatusText(wxEmptyString, 5);
875 }
876
877 if(madedit->GetInsertMode())
878 {
879 static wxString insstr(_("INS"));
880 g_StatusBar->SetStatusText(insstr, 6);
881 }
882 else
883 {
884 static wxString ovrstr(_("OVR"));
885 g_StatusBar->SetStatusText(ovrstr, 6);
886 }
887
888 g_StatusBar->Update(); // repaint immediately
889
890
891 if(g_SearchDialog!=NULL)
892 {
893 g_SearchDialog->UpdateCheckBoxByCBHex(g_SearchDialog->WxCheckBoxFindHex->GetValue());
894 }
895 if(g_ReplaceDialog!=NULL)
896 {
897 g_ReplaceDialog->UpdateCheckBoxByCBHex(g_ReplaceDialog->WxCheckBoxFindHex->GetValue());
898 }
899 }
900 }
901 }
902
OnEditToggleWindow(MadEdit * madedit)903 void OnEditToggleWindow(MadEdit *madedit)
904 {
905 wxCommandEvent e(0,0);
906 g_MainFrame->OnWindowToggleWindow(e);
907 }
908
OnEditMouseRightUp(MadEdit * madedit)909 void OnEditMouseRightUp(MadEdit *madedit)
910 {
911 //wxPoint pt=wxGetMousePosition();
912 //pt=g_MainFrame->m_Notebook->ScreenToClient(pt);
913 g_MainFrame->PopupMenu(g_Menu_Edit);//, pt);
914 }
915
916
UpdateMenus()917 void UpdateMenus()
918 {
919 g_Menu_File->UpdateUI();
920 g_Menu_Edit->UpdateUI();
921 g_Menu_Search->UpdateUI();
922 g_Menu_View->UpdateUI();
923 g_Menu_Tools->UpdateUI();
924 g_Menu_Window->UpdateUI();
925 g_Menu_Help->UpdateUI();
926 }
927
928
929 //---------------------------------------------------------------------------
930
931 // enum & sort the facenames
932 class MadFontEnumerator : public wxFontEnumerator
933 {
934 wxArrayString m_facenames_lowercase;
935 public:
936
OnFacename(const wxString & facename)937 virtual bool OnFacename(const wxString& facename)
938 {
939 size_t count=m_facenames_lowercase.Count();
940 if(count==0)
941 {
942 g_FontNames.Add(facename);
943 m_facenames_lowercase.Add(facename.Lower());
944 }
945 else
946 {
947 wxString lname;
948 size_t i=0;
949 for(;i<count;i++)
950 {
951 lname=facename.Lower();
952 if(lname < m_facenames_lowercase[i]) break;
953 }
954
955 g_FontNames.Insert(facename, i);
956 m_facenames_lowercase.Insert(lname, i);
957 }
958 return true;
959 }
960
961 };
962
963 //----------------------------------------------------------------------------
964 // MadEditFrame
965 //----------------------------------------------------------------------------
966 //Add Custom Events only in the appropriate Block.
967 // Code added in other places will be removed by wx-dvcpp
968 ////Event Table Start
969 BEGIN_EVENT_TABLE(MadEditFrame,wxFrame)
970 ////Manual Code Start
971 //EVT_SIZE(MadEditFrame::OnSize)
972 EVT_AUINOTEBOOK_PAGE_CHANGING(ID_NOTEBOOK, MadEditFrame::OnNotebookPageChanging)
973 EVT_AUINOTEBOOK_PAGE_CHANGED(ID_NOTEBOOK, MadEditFrame::OnNotebookPageChanged)
974 EVT_AUINOTEBOOK_PAGE_CLOSE(ID_NOTEBOOK, MadEditFrame::OnNotebookPageClosing)
975 //EVT_AUINOTEBOOK_PAGE_CLOSE(ID_NOTEBOOK, MadEditFrame::OnNotebookPageClosed)
976 //EVT_CHAR(MadEditFrame::OnChar)
977 // file
978 EVT_ACTIVATE(MadEditFrame::OnActivate)
979 EVT_UPDATE_UI(menuSave, MadEditFrame::OnUpdateUI_MenuFile_CheckCount)
980 EVT_UPDATE_UI(menuSaveAs, MadEditFrame::OnUpdateUI_MenuFile_CheckCount)
981 EVT_UPDATE_UI(menuSaveAll, MadEditFrame::OnUpdateUI_MenuFile_CheckCount)
982 EVT_UPDATE_UI(menuReload, MadEditFrame::OnUpdateUI_MenuFileReload)
983 EVT_UPDATE_UI(menuClose, MadEditFrame::OnUpdateUI_MenuFile_CheckCount)
984 EVT_UPDATE_UI(menuCloseAll, MadEditFrame::OnUpdateUI_MenuFile_CheckCount)
985 EVT_UPDATE_UI(menuPrintPreview, MadEditFrame::OnUpdateUI_MenuFile_CheckCount)
986 EVT_UPDATE_UI(menuPrint, MadEditFrame::OnUpdateUI_MenuFile_CheckCount)
987 EVT_UPDATE_UI(menuRecentFiles, MadEditFrame::OnUpdateUI_MenuFileRecentFiles)
988 // edit
989 EVT_UPDATE_UI(menuUndo, MadEditFrame::OnUpdateUI_MenuEditUndo)
990 EVT_UPDATE_UI(menuRedo, MadEditFrame::OnUpdateUI_MenuEditRedo)
991 EVT_UPDATE_UI(menuCut, MadEditFrame::OnUpdateUI_MenuEdit_CheckSelection)
992 EVT_UPDATE_UI(menuCopy, MadEditFrame::OnUpdateUI_MenuEdit_CheckSelection)
993 EVT_UPDATE_UI(menuPaste, MadEditFrame::OnUpdateUI_MenuEditPaste)
994 EVT_UPDATE_UI(menuDelete, MadEditFrame::OnUpdateUI_Menu_CheckSize)
995 EVT_UPDATE_UI(menuCutLine, MadEditFrame::OnUpdateUI_MenuEditDeleteLine)
996 EVT_UPDATE_UI(menuDeleteLine, MadEditFrame::OnUpdateUI_MenuEditDeleteLine)
997 EVT_UPDATE_UI(menuSelectAll, MadEditFrame::OnUpdateUI_Menu_CheckSize)
998 EVT_UPDATE_UI(menuInsertTabChar, MadEditFrame::OnUpdateUI_MenuEditInsertTabChar)
999 EVT_UPDATE_UI(menuInsertDateTime, MadEditFrame::OnUpdateUI_MenuEditInsertDateTime)
1000 EVT_UPDATE_UI(menuSortAscending, MadEditFrame::OnUpdateUI_Menu_CheckTextFile)
1001 EVT_UPDATE_UI(menuSortDescending, MadEditFrame::OnUpdateUI_Menu_CheckTextFile)
1002 EVT_UPDATE_UI(menuSortAscendingCase, MadEditFrame::OnUpdateUI_Menu_CheckTextFile)
1003 EVT_UPDATE_UI(menuSortDescendingCase, MadEditFrame::OnUpdateUI_Menu_CheckTextFile)
1004 EVT_UPDATE_UI(menuSortByOptions, MadEditFrame::OnUpdateUI_Menu_CheckTextFile)
1005 EVT_UPDATE_UI(menuCopyAsHexString, MadEditFrame::OnUpdateUI_MenuEditCopyAsHexString)
1006 EVT_UPDATE_UI(menuCopyAsHexStringWithSpace, MadEditFrame::OnUpdateUI_MenuEditCopyAsHexString)
1007 EVT_UPDATE_UI(menuIncreaseIndent, MadEditFrame::OnUpdateUI_MenuIndent)
1008 EVT_UPDATE_UI(menuDecreaseIndent, MadEditFrame::OnUpdateUI_MenuIndent)
1009 EVT_UPDATE_UI(menuComment, MadEditFrame::OnUpdateUI_MenuComment)
1010 EVT_UPDATE_UI(menuUncomment, MadEditFrame::OnUpdateUI_MenuComment)
1011 EVT_UPDATE_UI(menuWordWrapToNewLine, MadEditFrame::OnUpdateUI_Menu_CheckSize)
1012 EVT_UPDATE_UI(menuNewLineToWordWrap, MadEditFrame::OnUpdateUI_Menu_CheckSize)
1013 EVT_UPDATE_UI(menuToUpperCase, MadEditFrame::OnUpdateUI_MenuEdit_CheckSelSize)
1014 EVT_UPDATE_UI(menuToLowerCase, MadEditFrame::OnUpdateUI_MenuEdit_CheckSelSize)
1015 EVT_UPDATE_UI(menuInvertCase , MadEditFrame::OnUpdateUI_MenuEdit_CheckSelSize)
1016 EVT_UPDATE_UI(menuToHalfWidth, MadEditFrame::OnUpdateUI_MenuEdit_CheckSelSize)
1017 EVT_UPDATE_UI(menuToHalfWidthByOptions, MadEditFrame::OnUpdateUI_MenuEdit_CheckSelSize)
1018 EVT_UPDATE_UI(menuToFullWidth, MadEditFrame::OnUpdateUI_MenuEdit_CheckSelSize)
1019 EVT_UPDATE_UI(menuToFullWidthByOptions, MadEditFrame::OnUpdateUI_MenuEdit_CheckSelSize)
1020 EVT_UPDATE_UI(menuTabToSpace, MadEditFrame::OnUpdateUI_MenuEdit_CheckSelSize)
1021 EVT_UPDATE_UI(menuSpaceToTab, MadEditFrame::OnUpdateUI_MenuEdit_CheckSelSize)
1022 EVT_UPDATE_UI(menuTrimTrailingSpaces, MadEditFrame::OnUpdateUI_Menu_CheckTextFile)
1023 // search
1024 EVT_UPDATE_UI(menuFind, MadEditFrame::OnUpdateUI_MenuFile_CheckCount)
1025 EVT_UPDATE_UI(menuFindNext, MadEditFrame::OnUpdateUI_MenuFile_CheckCount)
1026 EVT_UPDATE_UI(menuFindPrevious, MadEditFrame::OnUpdateUI_MenuFile_CheckCount)
1027 EVT_UPDATE_UI(menuReplace, MadEditFrame::OnUpdateUI_MenuFile_CheckCount)
1028 EVT_UPDATE_UI(menuGoToLine, MadEditFrame::OnUpdateUI_MenuSearchGoTo)
1029 EVT_UPDATE_UI(menuGoToPosition, MadEditFrame::OnUpdateUI_MenuSearchGoTo)
1030 EVT_UPDATE_UI(menuLeftBrace, MadEditFrame::OnUpdateUI_MenuSearchGoToBrace)
1031 EVT_UPDATE_UI(menuRightBrace, MadEditFrame::OnUpdateUI_MenuSearchGoToBrace)
1032 // view
1033 EVT_UPDATE_UI(menuEncoding, MadEditFrame::OnUpdateUI_MenuViewEncoding)
1034 EVT_UPDATE_UI(menuSyntax, MadEditFrame::OnUpdateUI_MenuViewSyntax)
1035 EVT_UPDATE_UI(menuFontName, MadEditFrame::OnUpdateUI_MenuViewFontName)
1036 EVT_UPDATE_UI(menuFontSize, MadEditFrame::OnUpdateUI_MenuViewFontSize)
1037 EVT_UPDATE_UI(menuSetFont, MadEditFrame::OnUpdateUI_MenuViewSetFont)
1038 EVT_UPDATE_UI(menuFixedWidthMode, MadEditFrame::OnUpdateUI_MenuViewFixedWidthMode)
1039 EVT_UPDATE_UI(menuTabColumn, MadEditFrame::OnUpdateUI_MenuViewTabColumn)
1040 EVT_UPDATE_UI(menuLineSpacing, MadEditFrame::OnUpdateUI_MenuViewLineSpacing)
1041 EVT_UPDATE_UI(menuNoWrap, MadEditFrame::OnUpdateUI_MenuViewNoWrap)
1042 EVT_UPDATE_UI(menuWrapByWindow, MadEditFrame::OnUpdateUI_MenuViewWrapByWindow)
1043 EVT_UPDATE_UI(menuWrapByColumn, MadEditFrame::OnUpdateUI_MenuViewWrapByColumn)
1044 EVT_UPDATE_UI(menuDisplayLineNumber, MadEditFrame::OnUpdateUI_MenuViewDisplayLineNumber)
1045 EVT_UPDATE_UI(menuShowEndOfLine, MadEditFrame::OnUpdateUI_MenuViewShowEndOfLine)
1046 EVT_UPDATE_UI(menuShowTabChar, MadEditFrame::OnUpdateUI_MenuViewShowTabChar)
1047 EVT_UPDATE_UI(menuShowSpaceChar, MadEditFrame::OnUpdateUI_MenuViewShowSpaceChar)
1048 EVT_UPDATE_UI(menuMarkActiveLine, MadEditFrame::OnUpdateUI_MenuViewMarkActiveLine)
1049 EVT_UPDATE_UI(menuMarkBracePair, MadEditFrame::OnUpdateUI_MenuViewMarkBracePair)
1050 EVT_UPDATE_UI(menuTextMode, MadEditFrame::OnUpdateUI_MenuViewTextMode)
1051 EVT_UPDATE_UI(menuColumnMode, MadEditFrame::OnUpdateUI_MenuViewColumnMode)
1052 EVT_UPDATE_UI(menuHexMode, MadEditFrame::OnUpdateUI_MenuViewHexMode)
1053 // tools
1054 EVT_UPDATE_UI(menuByteOrderMark, MadEditFrame::OnUpdateUI_MenuToolsByteOrderMark)
1055 EVT_UPDATE_UI(menuNewLineChar, MadEditFrame::OnUpdateUI_MenuToolsNewLineChar)
1056 EVT_UPDATE_UI(menuInsertNewLineChar, MadEditFrame::OnUpdateUI_MenuToolsInsertNewLineChar)
1057 EVT_UPDATE_UI(menuConvertToDOS, MadEditFrame::OnUpdateUI_MenuToolsConvertNL)
1058 EVT_UPDATE_UI(menuConvertToMAC, MadEditFrame::OnUpdateUI_MenuToolsConvertNL)
1059 EVT_UPDATE_UI(menuConvertToUNIX, MadEditFrame::OnUpdateUI_MenuToolsConvertNL)
1060 EVT_UPDATE_UI(menuConvertEncoding, MadEditFrame::OnUpdateUI_MenuToolsConvertEncoding)
1061 EVT_UPDATE_UI(menuSimp2TradChinese, MadEditFrame::OnUpdateUI_MenuToolsConvertEncoding)
1062 EVT_UPDATE_UI(menuTrad2SimpChinese, MadEditFrame::OnUpdateUI_MenuToolsConvertEncoding)
1063 EVT_UPDATE_UI(menuKanji2TradChinese, MadEditFrame::OnUpdateUI_MenuToolsConvertEncoding)
1064 EVT_UPDATE_UI(menuKanji2SimpChinese, MadEditFrame::OnUpdateUI_MenuToolsConvertEncoding)
1065 EVT_UPDATE_UI(menuChinese2Kanji, MadEditFrame::OnUpdateUI_MenuToolsConvertEncoding)
1066 EVT_UPDATE_UI(menuWordCount, MadEditFrame::OnUpdateUI_MenuFile_CheckCount)
1067 // window
1068 EVT_UPDATE_UI(menuToggleWindow, MadEditFrame::OnUpdateUI_MenuWindow_CheckCount)
1069 EVT_UPDATE_UI(menuNextWindow, MadEditFrame::OnUpdateUI_MenuWindow_CheckCount)
1070 EVT_UPDATE_UI(menuPreviousWindow, MadEditFrame::OnUpdateUI_MenuWindow_CheckCount)
1071 // file
1072 EVT_MENU(menuNew, MadEditFrame::OnFileNew)
1073 EVT_MENU(menuOpen, MadEditFrame::OnFileOpen)
1074 EVT_MENU(menuSave, MadEditFrame::OnFileSave)
1075 EVT_MENU(menuSaveAs, MadEditFrame::OnFileSaveAs)
1076 EVT_MENU(menuSaveAll, MadEditFrame::OnFileSaveAll)
1077 EVT_MENU(menuReload, MadEditFrame::OnFileReload)
1078 EVT_MENU(menuClose, MadEditFrame::OnFileClose)
1079 EVT_MENU(menuCloseAll, MadEditFrame::OnFileCloseAll)
1080 EVT_MENU(menuPageSetup, MadEditFrame::OnFilePageSetup)
1081 EVT_MENU(menuPrintPreview, MadEditFrame::OnFilePrintPreview)
1082 EVT_MENU(menuPrint, MadEditFrame::OnFilePrint)
1083 EVT_MENU_RANGE(wxID_FILE1, wxID_FILE9, MadEditFrame::OnFileRecentFile)
1084 EVT_MENU(menuExit, MadEditFrame::OnFileExit)
1085 // edit
1086 EVT_MENU(menuUndo, MadEditFrame::OnEditUndo)
1087 EVT_MENU(menuRedo, MadEditFrame::OnEditRedo)
1088 EVT_MENU(menuCut, MadEditFrame::OnEditCut)
1089 EVT_MENU(menuCopy, MadEditFrame::OnEditCopy)
1090 EVT_MENU(menuPaste, MadEditFrame::OnEditPaste)
1091 EVT_MENU(menuDelete, MadEditFrame::OnEditDelete)
1092 EVT_MENU(menuCutLine, MadEditFrame::OnEditCutLine)
1093 EVT_MENU(menuDeleteLine, MadEditFrame::OnEditDeleteLine)
1094 EVT_MENU(menuSelectAll, MadEditFrame::OnEditSelectAll)
1095 EVT_MENU(menuInsertTabChar, MadEditFrame::OnEditInsertTabChar)
1096 EVT_MENU(menuInsertDateTime, MadEditFrame::OnEditInsertDateTime)
1097 EVT_MENU(menuSortAscending, MadEditFrame::OnEditSortAscending)
1098 EVT_MENU(menuSortDescending, MadEditFrame::OnEditSortDescending)
1099 EVT_MENU(menuSortAscendingCase, MadEditFrame::OnEditSortAscendingCase)
1100 EVT_MENU(menuSortDescendingCase, MadEditFrame::OnEditSortDescendingCase)
1101 EVT_MENU(menuSortByOptions, MadEditFrame::OnEditSortByOptions)
1102 EVT_MENU(menuSortOptions, MadEditFrame::OnEditSortOptions)
1103 EVT_MENU(menuCopyAsHexString, MadEditFrame::OnEditCopyAsHexString)
1104 EVT_MENU(menuCopyAsHexStringWithSpace, MadEditFrame::OnEditCopyAsHexStringWithSpace)
1105 EVT_MENU(menuIncreaseIndent, MadEditFrame::OnEditIncIndent)
1106 EVT_MENU(menuDecreaseIndent, MadEditFrame::OnEditDecIndent)
1107 EVT_MENU(menuComment, MadEditFrame::OnEditComment)
1108 EVT_MENU(menuUncomment, MadEditFrame::OnEditUncomment)
1109 EVT_MENU(menuWordWrapToNewLine, MadEditFrame::OnEditWordWrapToNewLine)
1110 EVT_MENU(menuNewLineToWordWrap, MadEditFrame::OnEditNewLineToWordWrap)
1111 EVT_MENU(menuToUpperCase, MadEditFrame::OnEditToUpperCase)
1112 EVT_MENU(menuToLowerCase, MadEditFrame::OnEditToLowerCase)
1113 EVT_MENU(menuInvertCase , MadEditFrame::OnEditInvertCase)
1114 EVT_MENU(menuToHalfWidth, MadEditFrame::OnEditToHalfWidth)
1115 EVT_MENU(menuToHalfWidthByOptions, MadEditFrame::OnEditToHalfWidthByOptions)
1116 EVT_MENU(menuToFullWidth, MadEditFrame::OnEditToFullWidth)
1117 EVT_MENU(menuToFullWidthByOptions, MadEditFrame::OnEditToFullWidthByOptions)
1118 EVT_MENU(menuTabToSpace, MadEditFrame::OnEditTabToSpace)
1119 EVT_MENU(menuSpaceToTab, MadEditFrame::OnEditSpaceToTab)
1120 EVT_MENU(menuTrimTrailingSpaces, MadEditFrame::OnEditTrimTrailingSpaces)
1121 // search
1122 EVT_MENU(menuFind, MadEditFrame::OnSearchFind)
1123 EVT_MENU(menuFindNext, MadEditFrame::OnSearchFindNext)
1124 EVT_MENU(menuFindPrevious, MadEditFrame::OnSearchFindPrevious)
1125 EVT_MENU(menuReplace, MadEditFrame::OnSearchReplace)
1126 EVT_MENU(menuFindInFiles, MadEditFrame::OnSearchFindInFiles)
1127 EVT_MENU(menuShowFindInFilesResults, MadEditFrame::OnSearchShowFindInFilesResults)
1128 EVT_MENU(menuGoToLine, MadEditFrame::OnSearchGoToLine)
1129 EVT_MENU(menuGoToPosition, MadEditFrame::OnSearchGoToPosition)
1130 EVT_MENU(menuLeftBrace, MadEditFrame::OnSearchGoToLeftBrace)
1131 EVT_MENU(menuRightBrace, MadEditFrame::OnSearchGoToRightBrace)
1132 // view
1133 EVT_MENU_RANGE(menuEncoding1, menuEncoding99, MadEditFrame::OnViewEncoding)
1134 EVT_MENU_RANGE(menuRecentEncoding1, menuRecentEncoding9, MadEditFrame::OnViewRecentEncoding)
1135 EVT_MENU_RANGE(menuSyntax1, menuSyntax199, MadEditFrame::OnViewSyntax)
1136 EVT_MENU_RANGE(menuFontName1, menuFontName999, MadEditFrame::OnViewFontName)
1137 EVT_MENU_RANGE(menuRecentFont1, menuRecentFont9, MadEditFrame::OnViewRecentFont)
1138 EVT_MENU_RANGE(menuFontSize1, menuFontSize99, MadEditFrame::OnViewFontSize)
1139 EVT_MENU(menuSetFont, MadEditFrame::OnViewSetFont)
1140 EVT_MENU(menuFixedWidthMode, MadEditFrame::OnViewFixedWidthMode)
1141 EVT_MENU_RANGE(menuTabColumn1, menuTabColumn16, MadEditFrame::OnViewTabColumn)
1142 EVT_MENU_RANGE(menuLineSpacing100, menuLineSpacing250, MadEditFrame::OnViewLineSpacing)
1143 EVT_MENU(menuNoWrap, MadEditFrame::OnViewNoWrap)
1144 EVT_MENU(menuWrapByWindow, MadEditFrame::OnViewWrapByWindow)
1145 EVT_MENU(menuWrapByColumn, MadEditFrame::OnViewWrapByColumn)
1146 EVT_MENU(menuDisplayLineNumber, MadEditFrame::OnViewDisplayLineNumber)
1147 EVT_MENU(menuShowEndOfLine, MadEditFrame::OnViewShowEndOfLine)
1148 EVT_MENU(menuShowTabChar, MadEditFrame::OnViewShowTabChar)
1149 EVT_MENU(menuShowSpaceChar, MadEditFrame::OnViewShowSpaceChar)
1150 EVT_MENU(menuMarkActiveLine, MadEditFrame::OnViewMarkActiveLine)
1151 EVT_MENU(menuMarkBracePair, MadEditFrame::OnViewMarkBracePair)
1152 EVT_MENU(menuTextMode, MadEditFrame::OnViewTextMode)
1153 EVT_MENU(menuColumnMode, MadEditFrame::OnViewColumnMode)
1154 EVT_MENU(menuHexMode, MadEditFrame::OnViewHexMode)
1155 // tools
1156 EVT_MENU(menuOptions, MadEditFrame::OnToolsOptions)
1157 EVT_MENU(menuHighlighting, MadEditFrame::OnToolsHighlighting)
1158 #ifdef __WXMSW__
1159 EVT_MENU(menuFileAssociation, MadEditFrame::OnToolsFileAssociation)
1160 #endif
1161 EVT_MENU(menuToggleBOM, MadEditFrame::OnToolsToggleBOM)
1162 EVT_MENU(menuConvertToDOS, MadEditFrame::OnToolsConvertToDOS)
1163 EVT_MENU(menuConvertToMAC, MadEditFrame::OnToolsConvertToMAC)
1164 EVT_MENU(menuConvertToUNIX, MadEditFrame::OnToolsConvertToUNIX)
1165 EVT_MENU(menuInsertDOS, MadEditFrame::OnToolsInsertDOS)
1166 EVT_MENU(menuInsertMAC, MadEditFrame::OnToolsInsertMAC)
1167 EVT_MENU(menuInsertUNIX, MadEditFrame::OnToolsInsertUNIX)
1168 EVT_MENU(menuConvertEncoding, MadEditFrame::OnToolsConvertEncoding)
1169 EVT_MENU(menuSimp2TradChinese, MadEditFrame::OnToolsSimp2TradChinese)
1170 EVT_MENU(menuTrad2SimpChinese, MadEditFrame::OnToolsTrad2SimpChinese)
1171 EVT_MENU(menuKanji2TradChinese, MadEditFrame::OnToolsKanji2TradChinese)
1172 EVT_MENU(menuKanji2SimpChinese, MadEditFrame::OnToolsKanji2SimpChinese)
1173 EVT_MENU(menuChinese2Kanji, MadEditFrame::OnToolsChinese2Kanji)
1174 EVT_MENU(menuSimp2TradClipboard, MadEditFrame::OnToolsSimp2TradClipboard)
1175 EVT_MENU(menuTrad2SimpClipboard, MadEditFrame::OnToolsTrad2SimpClipboard)
1176 EVT_MENU(menuKanji2TradClipboard, MadEditFrame::OnToolsKanji2TradClipboard)
1177 EVT_MENU(menuKanji2SimpClipboard, MadEditFrame::OnToolsKanji2SimpClipboard)
1178 EVT_MENU(menuChinese2KanjiClipboard, MadEditFrame::OnToolsChinese2KanjiClipboard)
1179 EVT_MENU(menuWordCount, MadEditFrame::OnToolsWordCount)
1180 // window
1181 EVT_MENU(menuToggleWindow, MadEditFrame::OnWindowToggleWindow)
1182 EVT_MENU(menuNextWindow, MadEditFrame::OnWindowNextWindow)
1183 EVT_MENU(menuPreviousWindow, MadEditFrame::OnWindowPreviousWindow)
1184 // help
1185 EVT_MENU(menuAbout, MadEditFrame::OnHelpAbout)
1186 ////Manual Code End
1187
1188 EVT_CLOSE(MadEditFrame::MadEditFrameClose)
1189 EVT_KEY_DOWN(MadEditFrame::MadEditFrameKeyDown)
1190 END_EVENT_TABLE()
1191 ////Event Table End
1192
1193
1194
1195 //==========================================================
1196 // do not use wxGetTranslation() now
1197 #undef _
1198 #define _(s) wxT(s)
1199
1200 CommandData CommandTable[]=
1201 {
1202 // file
1203 { 0, 0, 0, 0, _("&File"), 0, wxITEM_NORMAL, 0, &g_Menu_File, 0},
1204 { 0, 1, menuNew, wxT("menuNew"), _("&New File"), wxT("Ctrl-N"), wxITEM_NORMAL, new_xpm_idx, 0, _("Create a new file")},
1205 { 0, 1, menuOpen, wxT("menuOpen"), _("&Open File..."), wxT("Ctrl-O"), wxITEM_NORMAL, fileopen_xpm_idx, 0, _("Open an existing file")},
1206 { 0, 1, 0, 0, 0, 0, wxITEM_SEPARATOR, -1, 0, 0},
1207 { 0, 1, menuSave, wxT("menuSave"), _("&Save File"), wxT("Ctrl-S"), wxITEM_NORMAL, filesave_xpm_idx, 0, _("Save the file")},
1208 { 0, 1, menuSaveAs, wxT("menuSaveAs"), _("Save &As..."), wxT(""), wxITEM_NORMAL, -1, 0, _("Save the file with a new name")},
1209 { 0, 1, menuSaveAll, wxT("menuSaveAll"), _("Sa&ve All"), wxT("Ctrl-Shift-S"), wxITEM_NORMAL, saveall_xpm_idx, 0, _("Save all files")},
1210 { 0, 1, 0, 0, 0, 0, wxITEM_SEPARATOR, -1, 0, 0},
1211 { 0, 1, menuReload, wxT("menuReload"), _("&Reload File"), wxT("Ctrl-R"), wxITEM_NORMAL, -1, 0, _("Reload the file")},
1212 { 0, 1, 0, 0, 0, 0, wxITEM_SEPARATOR, -1, 0, 0},
1213 { 0, 1, menuClose, wxT("menuClose"), _("&Close File"), wxT("Ctrl-F4"), wxITEM_NORMAL, fileclose_xpm_idx, 0, _("Close the file")},
1214 { 0, 1, menuCloseAll, wxT("menuCloseAll"), _("C&lose All"), wxT(""), wxITEM_NORMAL, closeall_xpm_idx, 0, _("Close all files")},
1215 { 0, 1, 0, 0, 0, 0, wxITEM_SEPARATOR, -1, 0, 0},
1216 { 0, 1, menuPageSetup, wxT("menuPageSetup"), _("Page Set&up..."), wxT(""), wxITEM_NORMAL, -1, 0, _("Setup the pages for printing")},
1217 { 0, 1, menuPrintPreview, wxT("menuPrintPreview"), _("Print Previe&w..."), wxT(""), wxITEM_NORMAL, preview_xpm_idx, 0, _("Preview the result of printing")},
1218 { 0, 1, menuPrint, wxT("menuPrint"), _("&Print..."), wxT("Ctrl-P"), wxITEM_NORMAL, print_xpm_idx, 0, _("Print the file")},
1219 { 0, 1, 0, 0, 0, 0, wxITEM_SEPARATOR, -1, 0, 0},
1220 { 0, 1, menuRecentFiles, wxT("menuRecentFiles"), _("Recent Files"), wxT(""), wxITEM_NORMAL, -1, &g_Menu_File_RecentFiles, 0},
1221 { 0, 1, 0, 0, 0, 0, wxITEM_SEPARATOR, -1, 0, 0},
1222 { 0, 1, menuExit, wxT("menuExit"), _("E&xit"), wxT(""), wxITEM_NORMAL, quit_xpm_idx, 0, _("Quit MadEdit")},
1223
1224 // Edit
1225 { 0, 0, 0, 0, _("&Edit"), 0, wxITEM_NORMAL, 0, &g_Menu_Edit, 0},
1226 { ecUndo, 1, menuUndo, wxT("menuUndo"), _("&Undo"), wxT("Ctrl-Z"), wxITEM_NORMAL, undo_xpm_idx, 0, _("Undo the last action")},
1227
1228 { ecRedo, 1, menuRedo, wxT("menuRedo"), _("&Redo"),
1229 #ifdef __WXMSW__
1230 wxT("Ctrl-Y"),
1231 #else
1232 wxT("Ctrl-Shift-Z"),
1233 #endif
1234 wxITEM_NORMAL, redo_xpm_idx, 0, _("Redo the previously undone action")},
1235
1236 { 0, 1, 0, 0, 0, 0, wxITEM_SEPARATOR, -1, 0, 0},
1237 { ecCut, 1, menuCut, wxT("menuCut"), _("Cu&t"), wxT("Ctrl-X"), wxITEM_NORMAL, cut_xpm_idx, 0, _("Cut the selection and put it on the Clipboard")},
1238 { ecCopy, 1, menuCopy, wxT("menuCopy"), _("&Copy"), wxT("Ctrl-C"), wxITEM_NORMAL, copy_xpm_idx, 0, _("Copy the selection and put it on the Clipboard")},
1239 { ecPaste, 1, menuPaste, wxT("menuPaste"), _("&Paste"), wxT("Ctrl-V"), wxITEM_NORMAL, paste_xpm_idx, 0, _("Insert data from the Clipboard")},
1240 { ecDelete, 1, menuDelete, wxT("menuDelete"), _("&Delete"), wxT("DEL"), wxITEM_NORMAL, -1, 0, _("Delete data")},
1241 { 0, 1, 0, 0, 0, 0, wxITEM_SEPARATOR, -1, 0, 0},
1242 { ecCutLine, 1, menuCutLine, wxT("menuCutLine"), _("Cut L&ine"), wxT("Ctrl-Shift-L"), wxITEM_NORMAL, -1, 0, _("Cut the selected lines and put it on the Clipboard")},
1243
1244 { ecDeleteLine, 1, menuDeleteLine, wxT("menuDeleteLine"), _("Delete &Line"),
1245 #ifdef __WXMSW__
1246 wxT("Ctrl-L"),
1247 #else
1248 wxT("Ctrl-Y"),
1249 #endif
1250 wxITEM_NORMAL, -1, 0, _("Delete the selected lines")},
1251
1252 { 0, 1, 0, 0, 0, 0, wxITEM_SEPARATOR, -1, 0, 0},
1253 { ecSelectAll, 1, menuSelectAll, wxT("menuSelectAll"), _("Select &All"), wxT("Ctrl-A"), wxITEM_NORMAL, -1, 0, _("Select all data")},
1254 { 0, 1, 0, 0, 0, 0, wxITEM_SEPARATOR, -1, 0, 0},
1255
1256 { ecInsertTabChar, 1, menuInsertTabChar, wxT("menuInsertTabChar"), _("Insert Ta&b Char"),
1257 #ifdef __WXMSW__
1258 wxT("Ctrl-~"),
1259 #else
1260 wxT("Ctrl-`"),
1261 #endif
1262 wxITEM_NORMAL, -1, 0, _("Insert a Tab char at current position")},
1263
1264 { ecInsertDateTime, 1, menuInsertDateTime, wxT("menuInsertDateTime"), _("Insert Dat&e and Time"), wxT("F7"), wxITEM_NORMAL, -1, 0, _("Insert date and time at current position")},
1265 { 0, 1, 0, 0, 0, 0, wxITEM_SEPARATOR, -1, 0, 0},
1266 { 0, 1, menuAdvanced, wxT("menuAdvanced"), _("Ad&vanced"), 0, wxITEM_NORMAL, -1, &g_Menu_Edit_Advanced, 0},
1267 { 0, 2, menuCopyAsHexString, wxT("menuCopyAsHexString"), _("Copy As &Hex String"), wxT(""), wxITEM_NORMAL, -1, 0, _("Copy the selection as hex-string")},
1268 { 0, 2, menuCopyAsHexStringWithSpace, wxT("menuCopyAsHexStringWithSpace"), _("Copy As He&x String with Space"), wxT(""), wxITEM_NORMAL, -1, 0, _("Copy the selection as hex-string with space")},
1269 { 0, 2, 0, 0, 0, 0, wxITEM_SEPARATOR, -1, 0, 0},
1270 { ecIncreaseIndent, 2, menuIncreaseIndent, wxT("menuIncreaseIndent"), _("&Increase Indent"), wxT(""), wxITEM_NORMAL, indent_xpm_idx, 0, _("Increase the indent of seleted lines")},
1271 { ecDecreaseIndent, 2, menuDecreaseIndent, wxT("menuDecreaseIndent"), _("&Decrease Indent"), wxT("Shift-TAB"), wxITEM_NORMAL, unindent_xpm_idx, 0, _("Decrease the indent of seleted lines")},
1272 { 0, 2, 0, 0, 0, 0, wxITEM_SEPARATOR, -1, 0, 0},
1273 { ecComment, 2, menuComment, wxT("menuComment"), _("&Comment"), wxT("Ctrl-M"), wxITEM_NORMAL, comment_xpm_idx, 0, _("Comment out the selected lines")},
1274 { ecUncomment, 2, menuUncomment, wxT("menuUncomment"), _("&Uncomment"), wxT("Ctrl-Shift-M"), wxITEM_NORMAL, uncomment_xpm_idx, 0, _("Uncomment the selected lines")},
1275 { 0, 2, 0, 0, 0, 0, wxITEM_SEPARATOR, -1, 0, 0},
1276 { 0, 2, menuWordWrapToNewLine, wxT("menuWordWrapToNewLine"), _("WordWraps To NewLine Chars"), wxT(""), wxITEM_NORMAL, -1, 0, _("Convert WordWraps to NewLine chars in the file or selection")},
1277 { 0, 2, menuNewLineToWordWrap, wxT("menuNewLineToWordWrap"), _("NewLine Chars To WordWraps"), wxT(""), wxITEM_NORMAL, -1, 0, _("Convert NewLine chars to WordWraps in the selection")},
1278 { 0, 2, 0, 0, 0, 0, wxITEM_SEPARATOR, -1, 0, 0},
1279 { ecToUpperCase, 2, menuToUpperCase, wxT("menuToUpperCase"), _("To U&pperCase"), wxT("Ctrl-U"), wxITEM_NORMAL, -1, 0, _("Convert the selection to uppercase")},
1280 { ecToLowerCase, 2, menuToLowerCase, wxT("menuToLowerCase"), _("To L&owerCase"), wxT("Ctrl-Shift-U"), wxITEM_NORMAL, -1, 0, _("Convert the selection to lowercase")},
1281 { ecInvertCase , 2, menuInvertCase , wxT("menuInvertCase") , _("Inver&t Case"), wxT("Ctrl-Alt-U"), wxITEM_NORMAL, -1, 0, _("Invert the case of the selection")},
1282 { 0, 2, 0, 0, 0, 0, wxITEM_SEPARATOR, -1, 0, 0},
1283 { ecToHalfWidth, 2, menuToHalfWidth, wxT("menuToHalfWidth"), _("To H&alfwidth"), wxT(""), wxITEM_NORMAL, -1, 0, _("Convert the selection to halfwidth")},
1284 { 0, 2, menuToHalfWidthByOptions, wxT("menuToHalfWidthByOptions"), _("To Halfwidth by Options..."), wxT(""), wxITEM_NORMAL, -1, 0, _("Convert the selection to halfwidth by options")},
1285 { ecToFullWidth, 2, menuToFullWidth, wxT("menuToFullWidth"), _("To &Fullwidth"), wxT(""), wxITEM_NORMAL, -1, 0, _("Convert the selection to fullwidth")},
1286 { 0, 2, menuToFullWidthByOptions, wxT("menuToFullWidthByOptions"), _("To Fullwidth by Options..."), wxT(""), wxITEM_NORMAL, -1, 0, _("Convert the selection to fullwidth by options")},
1287 { 0, 2, 0, 0, 0, 0, wxITEM_SEPARATOR, -1, 0, 0},
1288 { 0, 2, menuTabToSpace, wxT("menuTabToSpace"), _("Tab Chars To Space Chars"), wxT(""), wxITEM_NORMAL, -1, 0, _("Convert Tab chars to Space chars in the selection")},
1289 { 0, 2, menuSpaceToTab, wxT("menuSpaceToTab"), _("Space Chars To Tab Chars"), wxT(""), wxITEM_NORMAL, -1, 0, _("Convert Space chars to Tab chars in the selection")},
1290 { 0, 2, 0, 0, 0, 0, wxITEM_SEPARATOR, -1, 0, 0},
1291 { 0, 2, menuTrimTrailingSpaces, wxT("menuTrimTrailingSpaces"), _("Tri&m Trailing Spaces"), wxT(""), wxITEM_NORMAL, -1, 0, _("Trim trailing spaces at the end of lines")},
1292 { 0, 1, 0, 0, 0, 0, wxITEM_SEPARATOR, -1, 0, 0},
1293 { 0, 1, menuSort, wxT("menuSort"), _("&Sort"), 0, wxITEM_NORMAL, -1, &g_Menu_Edit_Sort, 0},
1294 { 0, 2, menuSortAscending, wxT("menuSortAscending"), _("Sort Lines (&Ascending)"), wxT(""), wxITEM_NORMAL, -1, 0, _("Sort the selected or all lines in ascending order")},
1295 { 0, 2, menuSortDescending, wxT("menuSortDescending"), _("Sort Lines (&Descending)"), wxT(""), wxITEM_NORMAL, -1, 0, _("Sort the selected or all lines in descending order")},
1296 { 0, 2, 0, 0, 0, 0, wxITEM_SEPARATOR, -1, 0, 0},
1297 { 0, 2, menuSortAscendingCase, wxT("menuSortAscendingCase"), _("Sort Lines (A&scending, CaseSensitive)"), wxT(""), wxITEM_NORMAL, -1, 0, _("Sort lines in ascending order and with case-sensitive")},
1298 { 0, 2, menuSortDescendingCase, wxT("menuSortDescendingCase"), _("Sort Lines (D&escending, CaseSensitive)"), wxT(""), wxITEM_NORMAL, -1, 0, _("Sort lines in descending order and with case-sensitive")},
1299 { 0, 2, 0, 0, 0, 0, wxITEM_SEPARATOR, -1, 0, 0},
1300 { 0, 2, menuSortByOptions, wxT("menuSortByOptions"), _("Sort Lines by &Current Options"), wxT(""), wxITEM_NORMAL, -1, 0, _("Sort the selected or all lines by using current options")},
1301 { 0, 2, menuSortOptions, wxT("menuSortOptions"), _("Sort &Options..."), wxT(""), wxITEM_NORMAL, -1, 0, _("Set the sort options")},
1302
1303 // Search
1304 { 0, 0, 0, 0, _("&Search"), 0, wxITEM_NORMAL, 0, &g_Menu_Search, 0},
1305 { 0, 1, menuFind, wxT("menuFind"), _("&Find..."), wxT("Ctrl-F"), wxITEM_NORMAL, find_xpm_idx, 0, _("Find a string")},
1306 { 0, 1, menuFindNext, wxT("menuFindNext"), _("Find &Next"), wxT("F3"), wxITEM_NORMAL, findnext_xpm_idx, 0, _("Find next occurrence")},
1307 { 0, 1, menuFindPrevious, wxT("menuFindPrevious"), _("Find &Previous"), wxT("Ctrl-F3"), wxITEM_NORMAL, findprev_xpm_idx, 0, _("Find previous occurrence")},
1308 { 0, 1, 0, 0, 0, 0, wxITEM_SEPARATOR, -1, 0, 0},
1309 { 0, 1, menuReplace, wxT("menuReplace"), _("&Replace..."), wxT("Ctrl-H"), wxITEM_NORMAL, replace_xpm_idx, 0, _("Replace a string")},
1310 { 0, 1, 0, 0, 0, 0, wxITEM_SEPARATOR, -1, 0, 0},
1311 { 0, 1, menuFindInFiles, wxT("menuFindInFiles"), _("Fin&d/Replace in Files..."), wxT("Ctrl-Shift-F"), wxITEM_NORMAL, -1, 0, _("Find or replace a string in files")},
1312 { 0, 1, menuShowFindInFilesResults, wxT("menuShowFindInFilesResults"), _("&Show/Hide the Results of Find/Replace in Files"), wxT("Ctrl-Shift-R"), wxITEM_NORMAL, -1, 0, _("Show or hide the results of find or replace a string in files")},
1313 { 0, 1, 0, 0, 0, 0, wxITEM_SEPARATOR, -1, 0, 0},
1314 { 0, 1, menuGoToLine, wxT("menuGoToLine"), _("&Go To Line..."), wxT("Ctrl-G"), wxITEM_NORMAL, -1, 0, _("Go to the specified line")},
1315 { 0, 1, menuGoToPosition, wxT("menuGoToPosition"), _("G&o To Position..."), wxT("Ctrl-Shift-G"), wxITEM_NORMAL, -1, 0, _("Go to the specified position")},
1316 { 0, 1, 0, 0, 0, 0, wxITEM_SEPARATOR, -1, 0, 0},
1317 { ecLeftBrace, 1, menuLeftBrace, wxT("menuLeftBrace"), _("Go To L&eft Brace"), wxT("Ctrl-["), wxITEM_NORMAL, -1, 0, _("Go to left brace")},
1318 { ecRightBrace, 1, menuRightBrace, wxT("menuRightBrace"), _("Go To R&ight Brace"), wxT("Ctrl-]"), wxITEM_NORMAL, -1, 0, _("Go to right brace")},
1319
1320 // View
1321 { 0, 0, 0, 0, _("&View"), 0, wxITEM_NORMAL, 0, &g_Menu_View, 0},
1322 { 0, 1, menuEncoding, wxT("menuEncoding"), _("Encoding: "), 0, wxITEM_NORMAL, -1, &g_Menu_View_Encoding, 0},
1323 { 0, 2, menuAllEncodings, wxT("menuAllEncodings"), _("All Encodings"), 0, wxITEM_NORMAL, -1, &g_Menu_View_AllEncodings, 0},
1324 { 0, 1, 0, 0, 0, 0, wxITEM_SEPARATOR, -1, 0, 0},
1325 { 0, 1, menuSyntax, wxT("menuSyntax"), _("Syntax Type: "), 0, wxITEM_NORMAL, -1, &g_Menu_View_Syntax, 0},
1326 { 0, 1, 0, 0, 0, 0, wxITEM_SEPARATOR, -1, 0, 0},
1327 { 0, 1, menuFontName, wxT("menuFontName"), _("Font Name: "), 0, wxITEM_NORMAL, fontname_xpm_idx, &g_Menu_View_FontName, 0},
1328 { 0, 2, menuFont0, wxT("menuFont0"), _("[@]"), 0, wxITEM_NORMAL, -1, &g_Menu_View_Font0, 0},
1329 { 0, 2, menuFont1, wxT("menuFont1"), _("[ABCDE]"), 0, wxITEM_NORMAL, -1, &g_Menu_View_Font1, 0},
1330 { 0, 2, menuFont2, wxT("menuFont2"), _("[FGHIJ]"), 0, wxITEM_NORMAL, -1, &g_Menu_View_Font2, 0},
1331 { 0, 2, menuFont3, wxT("menuFont3"), _("[KLMNO]"), 0, wxITEM_NORMAL, -1, &g_Menu_View_Font3, 0},
1332 { 0, 2, menuFont4, wxT("menuFont4"), _("[PQRST]"), 0, wxITEM_NORMAL, -1, &g_Menu_View_Font4, 0},
1333 { 0, 2, menuFont5, wxT("menuFont5"), _("[UVWXYZ]"), 0, wxITEM_NORMAL, -1, &g_Menu_View_Font5, 0},
1334 { 0, 2, menuFont6, wxT("menuFont6"), _("[other]"), 0, wxITEM_NORMAL, -1, &g_Menu_View_Font6, 0},
1335
1336 { 0, 1, menuFontSize, wxT("menuFontSize"), _("Font Size: "), 0, wxITEM_NORMAL, fontsize_xpm_idx, &g_Menu_View_FontSize, 0},
1337 { 0, 2, menuFontSize1, wxT("menuFontSize1"), wxT(" 1 "), 0, wxITEM_NORMAL, -1, 0, _("Set font point-size")},
1338 { 0, 2, menuFontSize1+ 1, wxT("menuFontSize2"), wxT(" 2 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1339 { 0, 2, menuFontSize1+ 2, wxT("menuFontSize3"), wxT(" 3 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1340 { 0, 2, menuFontSize1+ 3, wxT("menuFontSize4"), wxT(" 4 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1341 { 0, 2, menuFontSize1+ 4, wxT("menuFontSize5"), wxT(" 5 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1342 { 0, 2, menuFontSize1+ 5, wxT("menuFontSize6"), wxT(" 6 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1343 { 0, 2, menuFontSize1+ 6, wxT("menuFontSize7"), wxT(" 7 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1344 { 0, 2, menuFontSize1+ 7, wxT("menuFontSize8"), wxT(" 8 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1345 { 0, 2, menuFontSize1+ 8, wxT("menuFontSize9"), wxT(" 9 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1346 { 0, 2, menuFontSize1+ 9, wxT("menuFontSize10"), wxT(" 10 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1347 { 0, 2, menuFontSize1+10, wxT("menuFontSize11"), wxT(" 11 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1348 { 0, 2, menuFontSize1+11, wxT("menuFontSize12"), wxT(" 12 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1349 { 0, 2, menuFontSize1+12, wxT("menuFontSize13"), wxT(" 13 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1350 { 0, 2, menuFontSize1+13, wxT("menuFontSize14"), wxT(" 14 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1351 { 0, 2, menuFontSize1+14, wxT("menuFontSize15"), wxT(" 15 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1352 { 0, 2, menuFontSize1+15, wxT("menuFontSize16"), wxT(" 16 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1353 { 0, 2, menuFontSize1+16, wxT("menuFontSize17"), wxT(" 17 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1354 { 0, 2, menuFontSize1+17, wxT("menuFontSize18"), wxT(" 18 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1355 { 0, 2, menuFontSize1+18, wxT("menuFontSize19"), wxT(" 19 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1356 { 0, 2, menuFontSize1+19, wxT("menuFontSize20"), wxT(" 20 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1357 { 0, 2, menuFontSize1+20, wxT("menuFontSize21"), wxT(" 21 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1358 { 0, 2, menuFontSize1+21, wxT("menuFontSize22"), wxT(" 22 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1359 { 0, 2, menuFontSize1+22, wxT("menuFontSize23"), wxT(" 23 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1360 { 0, 2, menuFontSize1+23, wxT("menuFontSize24"), wxT(" 24 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1361 { 0, 2, menuFontSize1+24, wxT("menuFontSize25"), wxT(" 25 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1362 { 0, 2, menuFontSize1+25, wxT("menuFontSize26"), wxT(" 26 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1363 { 0, 2, menuFontSize1+26, wxT("menuFontSize27"), wxT(" 27 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1364 { 0, 2, menuFontSize1+27, wxT("menuFontSize28"), wxT(" 28 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1365 { 0, 2, menuFontSize1+28, wxT("menuFontSize29"), wxT(" 29 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1366 { 0, 2, menuFontSize1+29, wxT("menuFontSize30"), wxT(" 30 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1367 { 0, 2, menuFontSize1+30, wxT("menuFontSize31"), wxT(" 31 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1368 { 0, 2, menuFontSize1+31, wxT("menuFontSize32"), wxT(" 32 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1369 { 0, 2, menuFontSize1+32, wxT("menuFontSize33"), wxT(" 33 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1370 { 0, 2, menuFontSize1+33, wxT("menuFontSize34"), wxT(" 34 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1371 { 0, 2, menuFontSize1+34, wxT("menuFontSize35"), wxT(" 35 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1372 { 0, 2, menuFontSize1+35, wxT("menuFontSize36"), wxT(" 36 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1373 { 0, 2, menuFontSize1+36, wxT("menuFontSize37"), wxT(" 37 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1374 { 0, 2, menuFontSize1+37, wxT("menuFontSize38"), wxT(" 38 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1375 { 0, 2, menuFontSize1+38, wxT("menuFontSize39"), wxT(" 39 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1376 { 0, 2, menuFontSize1+39, wxT("menuFontSize40"), wxT(" 40 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1377 { 0, 2, menuFontSize1+40, wxT("menuFontSize41"), wxT(" 41 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1378 { 0, 2, menuFontSize1+41, wxT("menuFontSize42"), wxT(" 42 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1379 { 0, 2, menuFontSize1+42, wxT("menuFontSize43"), wxT(" 43 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1380 { 0, 2, menuFontSize1+43, wxT("menuFontSize44"), wxT(" 44 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1381 { 0, 2, menuFontSize1+44, wxT("menuFontSize45"), wxT(" 45 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1382 { 0, 2, menuFontSize1+45, wxT("menuFontSize46"), wxT(" 46 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1383 { 0, 2, menuFontSize1+46, wxT("menuFontSize47"), wxT(" 47 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1384 { 0, 2, menuFontSize1+47, wxT("menuFontSize48"), wxT(" 48 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1385 { 0, 2, menuFontSize1+48, wxT("menuFontSize49"), wxT(" 49 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1386 { 0, 2, menuFontSize1+49, wxT("menuFontSize50"), wxT(" 50 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1387 { 0, 2, menuFontSize1+50, wxT("menuFontSize51"), wxT(" 51 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1388 { 0, 2, menuFontSize1+51, wxT("menuFontSize52"), wxT(" 52 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1389 { 0, 2, menuFontSize1+52, wxT("menuFontSize53"), wxT(" 53 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1390 { 0, 2, menuFontSize1+53, wxT("menuFontSize54"), wxT(" 54 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1391 { 0, 2, menuFontSize1+54, wxT("menuFontSize55"), wxT(" 55 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1392 { 0, 2, menuFontSize1+55, wxT("menuFontSize56"), wxT(" 56 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1393 { 0, 2, menuFontSize1+56, wxT("menuFontSize57"), wxT(" 57 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1394 { 0, 2, menuFontSize1+57, wxT("menuFontSize58"), wxT(" 58 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1395 { 0, 2, menuFontSize1+58, wxT("menuFontSize59"), wxT(" 59 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1396 { 0, 2, menuFontSize1+59, wxT("menuFontSize60"), wxT(" 60 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1397 { 0, 2, menuFontSize1+60, wxT("menuFontSize61"), wxT(" 61 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1398 { 0, 2, menuFontSize1+61, wxT("menuFontSize62"), wxT(" 62 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1399 { 0, 2, menuFontSize1+62, wxT("menuFontSize63"), wxT(" 63 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1400 { 0, 2, menuFontSize1+63, wxT("menuFontSize64"), wxT(" 64 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1401 { 0, 2, menuFontSize1+64, wxT("menuFontSize65"), wxT(" 65 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1402 { 0, 2, menuFontSize1+65, wxT("menuFontSize66"), wxT(" 66 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1403 { 0, 2, menuFontSize1+66, wxT("menuFontSize67"), wxT(" 67 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1404 { 0, 2, menuFontSize1+67, wxT("menuFontSize68"), wxT(" 68 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1405 { 0, 2, menuFontSize1+68, wxT("menuFontSize69"), wxT(" 69 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1406 { 0, 2, menuFontSize1+69, wxT("menuFontSize70"), wxT(" 70 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1407 { 0, 2, menuFontSize1+70, wxT("menuFontSize71"), wxT(" 71 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1408 { 0, 2, menuFontSize1+71, wxT("menuFontSize72"), wxT(" 72 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set font point-size")},
1409
1410 { 0, 1, menuSetFont, wxT("menuSetFont"), _("Set Font..."), wxT(""), wxITEM_NORMAL, font_xpm_idx, 0, _("Change font settings")},
1411 { 0, 1, menuFixedWidthMode, wxT("menuFixedWidthMode"), _("&Fixed Width Mode"), wxT("Ctrl-Alt-F"), wxITEM_CHECK, -1, 0, _("Set/Unset the font with Fixed Width")},
1412
1413 { 0, 1, 0, 0, 0, 0, wxITEM_SEPARATOR, -1, 0, 0},
1414 { 0, 1, menuTabColumn, wxT("menuTabColumn"), _("Tab Column: "), 0, wxITEM_NORMAL, -1, &g_Menu_View_TabColumn, 0},
1415 { 0, 2, menuTabColumn1, wxT("menuTabColumn1"), wxT(" 1 "), 0, wxITEM_NORMAL, -1, 0, _("Set column of Tab char")},
1416 { 0, 2, menuTabColumn1+ 1, wxT("menuTabColumn2"), wxT(" 2 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set column of Tab char")},
1417 { 0, 2, menuTabColumn1+ 2, wxT("menuTabColumn3"), wxT(" 3 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set column of Tab char")},
1418 { 0, 2, menuTabColumn1+ 3, wxT("menuTabColumn4"), wxT(" 4 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set column of Tab char")},
1419 { 0, 2, menuTabColumn1+ 4, wxT("menuTabColumn5"), wxT(" 5 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set column of Tab char")},
1420 { 0, 2, menuTabColumn1+ 5, wxT("menuTabColumn6"), wxT(" 6 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set column of Tab char")},
1421 { 0, 2, menuTabColumn1+ 6, wxT("menuTabColumn7"), wxT(" 7 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set column of Tab char")},
1422 { 0, 2, menuTabColumn1+ 7, wxT("menuTabColumn8"), wxT(" 8 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set column of Tab char")},
1423 { 0, 2, menuTabColumn1+ 8, wxT("menuTabColumn9"), wxT(" 9 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set column of Tab char")},
1424 { 0, 2, menuTabColumn1+ 9, wxT("menuTabColumn10"), wxT(" 10 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set column of Tab char")},
1425 { 0, 2, menuTabColumn1+10, wxT("menuTabColumn11"), wxT(" 11 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set column of Tab char")},
1426 { 0, 2, menuTabColumn1+11, wxT("menuTabColumn12"), wxT(" 12 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set column of Tab char")},
1427 { 0, 2, menuTabColumn1+12, wxT("menuTabColumn13"), wxT(" 13 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set column of Tab char")},
1428 { 0, 2, menuTabColumn1+13, wxT("menuTabColumn14"), wxT(" 14 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set column of Tab char")},
1429 { 0, 2, menuTabColumn1+14, wxT("menuTabColumn15"), wxT(" 15 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set column of Tab char")},
1430 { 0, 2, menuTabColumn1+15, wxT("menuTabColumn16"), wxT(" 16 "), 0, wxITEM_NORMAL, -1, 0, wxT("Set column of Tab char")},
1431
1432 { 0, 1, 0, 0, 0, 0, wxITEM_SEPARATOR, -1, 0, 0},
1433 { 0, 1, menuLineSpacing, wxT("menuLineSpacing"), _("Line Spacing: "), 0, wxITEM_NORMAL, -1, &g_Menu_View_LineSpacing, 0},
1434 { 0, 2, menuLineSpacing100, wxT("menuLineSpacing100"), wxT("100%"), 0, wxITEM_NORMAL, -1, 0, _("Set line spacing")},
1435 { 0, 2, menuLineSpacing100+ 1, wxT("menuLineSpacing105"), wxT("105%"), 0, wxITEM_NORMAL, -1, 0, wxT("Set line spacing")},
1436 { 0, 2, menuLineSpacing100+ 2, wxT("menuLineSpacing110"), wxT("110%"), 0, wxITEM_NORMAL, -1, 0, wxT("Set line spacing")},
1437 { 0, 2, menuLineSpacing100+ 3, wxT("menuLineSpacing115"), wxT("115%"), 0, wxITEM_NORMAL, -1, 0, wxT("Set line spacing")},
1438 { 0, 2, menuLineSpacing100+ 4, wxT("menuLineSpacing120"), wxT("120%"), 0, wxITEM_NORMAL, -1, 0, wxT("Set line spacing")},
1439 { 0, 2, menuLineSpacing100+ 5, wxT("menuLineSpacing125"), wxT("125%"), 0, wxITEM_NORMAL, -1, 0, wxT("Set line spacing")},
1440 { 0, 2, menuLineSpacing100+ 6, wxT("menuLineSpacing130"), wxT("130%"), 0, wxITEM_NORMAL, -1, 0, wxT("Set line spacing")},
1441 { 0, 2, menuLineSpacing100+ 7, wxT("menuLineSpacing135"), wxT("135%"), 0, wxITEM_NORMAL, -1, 0, wxT("Set line spacing")},
1442 { 0, 2, menuLineSpacing100+ 8, wxT("menuLineSpacing140"), wxT("140%"), 0, wxITEM_NORMAL, -1, 0, wxT("Set line spacing")},
1443 { 0, 2, menuLineSpacing100+ 9, wxT("menuLineSpacing145"), wxT("145%"), 0, wxITEM_NORMAL, -1, 0, wxT("Set line spacing")},
1444 { 0, 2, menuLineSpacing100+10, wxT("menuLineSpacing150"), wxT("150%"), 0, wxITEM_NORMAL, -1, 0, wxT("Set line spacing")},
1445 { 0, 2, menuLineSpacing100+11, wxT("menuLineSpacing155"), wxT("155%"), 0, wxITEM_NORMAL, -1, 0, wxT("Set line spacing")},
1446 { 0, 2, menuLineSpacing100+12, wxT("menuLineSpacing160"), wxT("160%"), 0, wxITEM_NORMAL, -1, 0, wxT("Set line spacing")},
1447 { 0, 2, menuLineSpacing100+13, wxT("menuLineSpacing165"), wxT("165%"), 0, wxITEM_NORMAL, -1, 0, wxT("Set line spacing")},
1448 { 0, 2, menuLineSpacing100+14, wxT("menuLineSpacing170"), wxT("170%"), 0, wxITEM_NORMAL, -1, 0, wxT("Set line spacing")},
1449 { 0, 2, menuLineSpacing100+15, wxT("menuLineSpacing175"), wxT("175%"), 0, wxITEM_NORMAL, -1, 0, wxT("Set line spacing")},
1450 { 0, 2, menuLineSpacing100+16, wxT("menuLineSpacing180"), wxT("180%"), 0, wxITEM_NORMAL, -1, 0, wxT("Set line spacing")},
1451 { 0, 2, menuLineSpacing100+17, wxT("menuLineSpacing185"), wxT("185%"), 0, wxITEM_NORMAL, -1, 0, wxT("Set line spacing")},
1452 { 0, 2, menuLineSpacing100+18, wxT("menuLineSpacing190"), wxT("190%"), 0, wxITEM_NORMAL, -1, 0, wxT("Set line spacing")},
1453 { 0, 2, menuLineSpacing100+19, wxT("menuLineSpacing195"), wxT("195%"), 0, wxITEM_NORMAL, -1, 0, wxT("Set line spacing")},
1454 { 0, 2, menuLineSpacing100+20, wxT("menuLineSpacing200"), wxT("200%"), 0, wxITEM_NORMAL, -1, 0, wxT("Set line spacing")},
1455 { 0, 2, menuLineSpacing100+21, wxT("menuLineSpacing205"), wxT("205%"), 0, wxITEM_NORMAL, -1, 0, wxT("Set line spacing")},
1456 { 0, 2, menuLineSpacing100+22, wxT("menuLineSpacing210"), wxT("210%"), 0, wxITEM_NORMAL, -1, 0, wxT("Set line spacing")},
1457 { 0, 2, menuLineSpacing100+23, wxT("menuLineSpacing215"), wxT("215%"), 0, wxITEM_NORMAL, -1, 0, wxT("Set line spacing")},
1458 { 0, 2, menuLineSpacing100+24, wxT("menuLineSpacing220"), wxT("220%"), 0, wxITEM_NORMAL, -1, 0, wxT("Set line spacing")},
1459 { 0, 2, menuLineSpacing100+25, wxT("menuLineSpacing225"), wxT("225%"), 0, wxITEM_NORMAL, -1, 0, wxT("Set line spacing")},
1460 { 0, 2, menuLineSpacing100+26, wxT("menuLineSpacing230"), wxT("230%"), 0, wxITEM_NORMAL, -1, 0, wxT("Set line spacing")},
1461 { 0, 2, menuLineSpacing100+27, wxT("menuLineSpacing235"), wxT("235%"), 0, wxITEM_NORMAL, -1, 0, wxT("Set line spacing")},
1462 { 0, 2, menuLineSpacing100+28, wxT("menuLineSpacing240"), wxT("240%"), 0, wxITEM_NORMAL, -1, 0, wxT("Set line spacing")},
1463 { 0, 2, menuLineSpacing100+29, wxT("menuLineSpacing245"), wxT("245%"), 0, wxITEM_NORMAL, -1, 0, wxT("Set line spacing")},
1464 { 0, 2, menuLineSpacing100+30, wxT("menuLineSpacing250"), wxT("250%"), 0, wxITEM_NORMAL, -1, 0, wxT("Set line spacing")},
1465
1466 { 0, 1, 0, 0, 0, 0, wxITEM_SEPARATOR, -1, 0, 0},
1467 { ecNoWrap, 1, menuNoWrap, wxT("menuNoWrap"), _("&No Wrap"), wxT("Ctrl-Q"), wxITEM_CHECK, nowrap_xpm_idx, 0, _("Do not wrap lines")},
1468 { ecWrapByWindow, 1, menuWrapByWindow, wxT("menuWrapByWindow"), _("Wrap By &Window"), wxT("Ctrl-W"), wxITEM_CHECK, wrapbywin_xpm_idx, 0, _("Wrap the lines by the window width")},
1469 { ecWrapByColumn, 1, menuWrapByColumn, wxT("menuWrapByColumn"), _("Wrap By Column"), wxT("Ctrl-E"), wxITEM_CHECK, wrapbycol_xpm_idx, 0, _("Wrap the lines by the specified Max Columns")},
1470 { 0, 1, 0, 0, 0, 0, wxITEM_SEPARATOR, -1, 0, 0},
1471 { 0, 1, menuDisplayLineNumber, wxT("menuDisplayLineNumber"), _("&Display Line Number"), wxT("Ctrl-Alt-D"), wxITEM_CHECK, -1, 0, _("Display the Line Numbers")},
1472 { 0, 1, menuShowEndOfLine, wxT("menuShowEndOfLine"), _("Show End Of Line"), wxT("Ctrl-Alt-L"), wxITEM_CHECK, -1, 0, _("Show the sign of EndOfLine")},
1473 { 0, 1, menuShowTabChar, wxT("menuShowTabChar"), _("Show Tab Char"), wxT("Ctrl-Alt-T"), wxITEM_CHECK, -1, 0, _("Show the sign of Tab char")},
1474 { 0, 1, menuShowSpaceChar, wxT("menuShowSpaceChar"), _("Show Space Char"), wxT("Ctrl-Alt-S"), wxITEM_CHECK, -1, 0, _("Show the sign of Space char")},
1475 { 0, 1, menuMarkActiveLine, wxT("menuMarkActiveLine"), _("Mark Active Line"), wxT(""), wxITEM_CHECK, -1, 0, _("Mark the current line")},
1476 { 0, 1, menuMarkBracePair, wxT("menuMarkBracePair"), _("Mark Brace Pair"), wxT(""), wxITEM_CHECK, -1, 0, _("Mark the BracePair under the caret")},
1477 { 0, 1, 0, 0, 0, 0, wxITEM_SEPARATOR, -1, 0, 0},
1478 { ecTextMode, 1, menuTextMode, wxT("menuTextMode"), _("&Text Mode"), wxT("Alt-1"), wxITEM_CHECK, textmode_xpm_idx, 0, _("Change the editing mode to Text-Mode")},
1479 { ecColumnMode, 1, menuColumnMode, wxT("menuColumnMode"), _("&Column Mode"), wxT("Alt-2"), wxITEM_CHECK, columnmode_xpm_idx, 0, _("Change the editing mode to Column-Mode")},
1480 { ecHexMode, 1, menuHexMode, wxT("menuHexMode"), _("&Hex Mode"), wxT("Alt-3"), wxITEM_CHECK, hexmode_xpm_idx, 0, _("Change the editing mode to Hex-Mode")},
1481
1482 // Tools
1483 { 0, 0, 0, 0, _("&Tools"), 0, wxITEM_NORMAL, 0, &g_Menu_Tools, 0},
1484 { 0, 1, menuOptions, wxT("menuOptions"), _("&Options..."), wxT(""), wxITEM_NORMAL, -1, 0, _("Change the configuration")},
1485 { 0, 1, menuHighlighting, wxT("menuHighlighting"), _("&Syntax Highlighting Settings..."), wxT(""), wxITEM_NORMAL, -1, 0, _("Change syntax highlighting settings")},
1486 #ifdef __WXMSW__
1487 { 0, 1, menuFileAssociation, wxT("menuFileAssociation"), _("&File Type Associations..."), wxT(""), wxITEM_NORMAL, -1, 0, _("Change file type associations")},
1488 #endif
1489 { 0, 1, 0, 0, 0, 0, wxITEM_SEPARATOR, -1, 0, 0},
1490 { 0, 1, menuByteOrderMark, wxT("menuByteOrderMark"), _("Has Unicode BOM (Byte-Order Mark)"), 0, wxITEM_NORMAL, -1, &g_Menu_Tools_BOM, 0},
1491 { 0, 2, menuToggleBOM, wxT("menuToggleBOM"), _("Add/Remove BOM"), wxT(""), wxITEM_NORMAL, -1, 0, _("Add/Remove Unicode BOM")},
1492 { 0, 1, 0, 0, 0, 0, wxITEM_SEPARATOR, -1, 0, 0},
1493 { 0, 1, menuNewLineChar, wxT("menuNewLineChar"), _("NewLine Char (File Format): "), 0, wxITEM_NORMAL, -1, &g_Menu_Tools_NewLineChar, 0},
1494 { 0, 2, menuConvertToDOS, wxT("menuConvertToDOS"), _("Convert To CRLF/0D0A (&DOS)"), wxT(""), wxITEM_NORMAL, -1, 0, _("Convert the file format to DOS format")},
1495 { 0, 2, menuConvertToMAC, wxT("menuConvertToMAC"), _("Convert To CR/0D (&MAC)"), wxT(""), wxITEM_NORMAL, -1, 0, _("Convert the file format to MAC format")},
1496 { 0, 2, menuConvertToUNIX, wxT("menuConvertToUNIX"), _("Convert To LF/0A (&UNIX)"), wxT(""), wxITEM_NORMAL, -1, 0, _("Convert the file format to UNIX format")},
1497 { 0, 1, menuInsertNewLineChar, wxT("menuInsertNewLineChar"), _("Press Enter to Insert NewLine Char: "), 0, wxITEM_NORMAL, -1, &g_Menu_Tools_InsertNewLineChar, 0},
1498 { 0, 2, menuInsertDOS, wxT("menuInsertDOS"), _("Insert CRLF/0D0A (&DOS)"), wxT(""), wxITEM_NORMAL, -1, 0, _("Insert CR&LF chars when pressing Enter key")},
1499 { 0, 2, menuInsertMAC, wxT("menuInsertMAC"), _("Insert CR/0D (&MAC)"), wxT(""), wxITEM_NORMAL, -1, 0, _("Insert CR char when pressing Enter key")},
1500 { 0, 2, menuInsertUNIX, wxT("menuInsertUNIX"), _("Insert LF/0A (&UNIX)"), wxT(""), wxITEM_NORMAL, -1, 0, _("Insert LF char when pressing Enter key")},
1501 { 0, 1, 0, 0, 0, 0, wxITEM_SEPARATOR, -1, 0, 0},
1502 { 0, 1, menuConvertEncoding, wxT("menuConvertEncoding"), _("Convert File &Encoding..."), 0, wxITEM_NORMAL, -1, 0, _("Convert to the specified encoding")},
1503 { 0, 1, 0, 0, 0, 0, wxITEM_SEPARATOR, -1, 0, 0},
1504 { 0, 1, menuConvertChineseChar, wxT("menuConvertChineseChar"), _("Convert &Chinese Char"), 0, wxITEM_NORMAL, -1, &g_Menu_Tools_ConvertChineseChar, 0},
1505 { 0, 2, menuSimp2TradChinese, wxT("menuSimp2TradChinese"), _("File: Simplified Chinese to &Traditional Chinese"), 0, wxITEM_NORMAL, -1, 0, _("Convert simplified Chinese chars to traditional Chinese chars in the file")},
1506 { 0, 2, menuTrad2SimpChinese, wxT("menuTrad2SimpChinese"), _("File: Traditional Chinese to &Simplified Chinese"), 0, wxITEM_NORMAL, -1, 0, _("Convert traditional Chinese chars to simplified Chinese chars in the file")},
1507 { 0, 2, menuKanji2TradChinese, wxT("menuKanji2TradChinese"), _("File: Japanese Kanji to Tr&aditional Chinese"), 0, wxITEM_NORMAL, -1, 0, _("Convert Japanese Kanji to traditional Chinese chars in the file")},
1508 { 0, 2, menuKanji2SimpChinese, wxT("menuKanji2SimpChinese"), _("File: Japanese Kanji to Si&mplified Chinese"), 0, wxITEM_NORMAL, -1, 0, _("Convert Japanese Kanji to simplified Chinese chars in the file")},
1509 { 0, 2, menuChinese2Kanji, wxT("menuChinese2Kanji"), _("File: Chinese to &Japanese Kanji"), 0, wxITEM_NORMAL, -1, 0, _("Convert Chinese chars to Japanese Kanji in the file")},
1510 { 0, 2, 0, 0, 0, 0, wxITEM_SEPARATOR, -1, 0, 0},
1511 { 0, 2, menuSimp2TradClipboard, wxT("menuSimp2TradClipboard"), _("Clipboard: Simplified Chinese to T&raditional Chinese"), 0, wxITEM_NORMAL, -1, 0, _("Convert simplified Chinese chars to traditional Chinese chars in the clipboard")},
1512 { 0, 2, menuTrad2SimpClipboard, wxT("menuTrad2SimpClipboard"), _("Clipboard: Traditional Chinese to S&implified Chinese"), 0, wxITEM_NORMAL, -1, 0, _("Convert traditional Chinese chars to simplified Chinese chars in the clipboard")},
1513 { 0, 2, menuKanji2TradClipboard, wxT("menuKanji2TradClipboard"), _("Clipboard: Japanese Kanji to Tra&ditional Chinese"), 0, wxITEM_NORMAL, -1, 0, _("Convert Japanese Kanji to traditional Chinese chars in the clipboard")},
1514 { 0, 2, menuKanji2SimpClipboard, wxT("menuKanji2SimpClipboard"), _("Clipboard: Japanese Kanji to Sim&plified Chinese"), 0, wxITEM_NORMAL, -1, 0, _("Convert Japanese Kanji to simplified Chinese chars in the clipboard")},
1515 { 0, 2, menuChinese2KanjiClipboard, wxT("menuChinese2KanjiClipboard"), _("Clipboard: Chinese to Japanese &Kanji"), 0, wxITEM_NORMAL, -1, 0, _("Convert Chinese chars to Japanese Kanji in the clipboard")},
1516 { 0, 1, 0, 0, 0, 0, wxITEM_SEPARATOR, -1, 0, 0},
1517 { 0, 1, menuWordCount, wxT("menuWordCount"), _("&Word Count"), 0, wxITEM_NORMAL, -1, 0, _("Count the words and chars of the file or selection")},
1518
1519 // Window
1520 { 0, 0, 0, 0, _("&Window"), 0, wxITEM_NORMAL, 0, &g_Menu_Window, 0},
1521 { ecToggleWindow, 1, menuToggleWindow, wxT("menuToggleWindow"), _("&Toggle Window"), wxT("Ctrl-TAB"), wxITEM_NORMAL, -1, 0, _("Switch to the previous active window")},
1522 { 0, 1, menuPreviousWindow, wxT("menuPreviousWindow"), _("&Previous Window"), wxT("F5"), wxITEM_NORMAL, -1, 0, _("Activate the previous window")},
1523 { 0, 1, menuNextWindow, wxT("menuNextWindow"), _("&Next Window"), wxT("F6"), wxITEM_NORMAL, -1, 0, _("Activate the next window")},
1524
1525 // Help
1526 { 0, 0, 0, 0, _("&Help"), 0, wxITEM_NORMAL, 0, &g_Menu_Help, 0},
1527 { 0, 1, menuAbout, wxT("menuAbout"), _("&About MadEdit..."), wxT(""), wxITEM_NORMAL, Mad_16x15_xpm_idx, 0, wxT("")},
1528 // end menu
1529
1530 // begin editor
1531 { ecLeft, -1, 0, 0, 0, 0, wxITEM_NORMAL , -1, 0, _("Move caret left one char")},
1532 { ecRight, -1, 0, 0, 0, 0, wxITEM_NORMAL , -1, 0, _("Move caret right one char")},
1533 { ecUp, -1, 0, 0, 0, 0, wxITEM_NORMAL , -1, 0, _("Move caret up one line")},
1534 { ecDown, -1, 0, 0, 0, 0, wxITEM_NORMAL , -1, 0, _("Move caret down one line")},
1535 { ecBeginLine, -1, 0, 0, 0, 0, wxITEM_NORMAL , -1, 0, _("Go to begin of line")},
1536 { ecEndLine, -1, 0, 0, 0, 0, wxITEM_NORMAL , -1, 0, _("Go to end of line")},
1537 { ecBeginDoc, -1, 0, 0, 0, 0, wxITEM_NORMAL , -1, 0, _("Go to begin of document")},
1538 { ecEndDoc, -1, 0, 0, 0, 0, wxITEM_NORMAL , -1, 0, _("Go to end of document")},
1539 { ecPrevPage, -1, 0, 0, 0, 0, wxITEM_NORMAL , -1, 0, _("Go to previous page")},
1540 { ecNextPage, -1, 0, 0, 0, 0, wxITEM_NORMAL , -1, 0, _("Go to next page")},
1541 { ecPrevWord, -1, 0, 0, 0, 0, wxITEM_NORMAL , -1, 0, _("Go to previous word")},
1542 { ecNextWord, -1, 0, 0, 0, 0, wxITEM_NORMAL , -1, 0, _("Go to next word")},
1543
1544 { ecSelLeft, -1, 0, 0, 0, 0, wxITEM_NORMAL , -1, 0, _("Move caret left one char and select")},
1545 { ecSelRight, -1, 0, 0, 0, 0, wxITEM_NORMAL , -1, 0, _("Move caret right one char and select")},
1546 { ecSelUp, -1, 0, 0, 0, 0, wxITEM_NORMAL , -1, 0, _("Move caret up one line and select")},
1547 { ecSelDown, -1, 0, 0, 0, 0, wxITEM_NORMAL , -1, 0, _("Move caret down one line and select")},
1548 { ecSelBeginLine, -1, 0, 0, 0, 0, wxITEM_NORMAL , -1, 0, _("Go to begin of line and select")},
1549 { ecSelEndLine, -1, 0, 0, 0, 0, wxITEM_NORMAL , -1, 0, _("Go to end of line and select")},
1550 { ecSelBeginDoc, -1, 0, 0, 0, 0, wxITEM_NORMAL , -1, 0, _("Go to begin of document and select")},
1551 { ecSelEndDoc, -1, 0, 0, 0, 0, wxITEM_NORMAL , -1, 0, _("Go to end of document and select")},
1552 { ecSelPrevPage, -1, 0, 0, 0, 0, wxITEM_NORMAL , -1, 0, _("Go to previous page and select")},
1553 { ecSelNextPage, -1, 0, 0, 0, 0, wxITEM_NORMAL , -1, 0, _("Go to next page and select")},
1554 { ecSelPrevWord, -1, 0, 0, 0, 0, wxITEM_NORMAL , -1, 0, _("Go to previous word and select")},
1555 { ecSelNextWord, -1, 0, 0, 0, 0, wxITEM_NORMAL , -1, 0, _("Go to next word and select")},
1556 { ecSelLeftBrace, -1, 0, 0, 0, 0, wxITEM_NORMAL , -1, 0, _("Go to left brace and select")},
1557 { ecSelRightBrace, -1, 0, 0, 0, 0, wxITEM_NORMAL , -1, 0, _("Go to right brace and select")},
1558
1559 { ecScrollLineUp, -1, 0, 0, 0, 0, wxITEM_NORMAL , -1, 0, _("Scroll text up one line")},
1560 { ecScrollLineDown, -1, 0, 0, 0, 0, wxITEM_NORMAL , -1, 0, _("Scroll text down one line")},
1561 { ecScrollPageUp, -1, 0, 0, 0, 0, wxITEM_NORMAL , -1, 0, _("Scroll text up one page")},
1562 { ecScrollPageDown, -1, 0, 0, 0, 0, wxITEM_NORMAL , -1, 0, _("Scroll text down one page")},
1563 { ecScrollLeft, -1, 0, 0, 0, 0, wxITEM_NORMAL , -1, 0, _("Scroll text left")},
1564 { ecScrollRight, -1, 0, 0, 0, 0, wxITEM_NORMAL , -1, 0, _("Scroll text right")},
1565
1566 { ecReturn, -1, 0, 0, 0, 0, wxITEM_NORMAL , -1, 0, _("Insert one NewLine char")},
1567 { ecReturnNoIndent, -1, 0, 0, 0, 0, wxITEM_NORMAL , -1, 0, _("Insert one NewLine char without indentation")},
1568 { ecTab, -1, 0, 0, 0, 0, wxITEM_NORMAL , -1, 0, _("Insert one Tab char or indent lines")},
1569 { ecBackSpace, -1, 0, 0, 0, 0, wxITEM_NORMAL , -1, 0, _("Delete one char to the left of the caret")},
1570
1571 { ecToggleInsertMode, -1, 0, 0, 0, 0, wxITEM_NORMAL , -1, 0, _("Toggle Insert/Overwrite Mode")},
1572
1573 // end editor
1574 { -1, -1, 0, 0, 0, 0, wxITEM_NORMAL , -1, 0, 0},
1575 };
1576
1577 // restore the definition of _(s)
1578 #undef _
1579 #define _(s) wxGetTranslation(_T(s))
1580 //==========================================================
1581
LoadDefaultSettings(wxConfigBase * m_Config)1582 void LoadDefaultSettings(wxConfigBase *m_Config)
1583 {
1584 m_Config->SetPath(wxT("/MadEdit"));
1585
1586 long templong, x,y;
1587 bool tempbool;
1588 wxString tempstr;
1589
1590 long orien;
1591 m_Config->Read(wxT("PageOrientation"), &orien, wxPORTRAIT);
1592 g_PageSetupData->GetPrintData().SetOrientation(orien);
1593
1594 wxSize psize=g_PageSetupData->GetPaperSize();
1595 m_Config->Read(wxT("PagePaperSizeW"), &psize.x);
1596 m_Config->Read(wxT("PagePaperSizeH"), &psize.y);
1597 if(orien!=wxPORTRAIT)
1598 {
1599 long tmp=psize.x;
1600 psize.x=psize.y;
1601 psize.y=tmp;
1602 }
1603 g_PageSetupData->SetPaperSize(psize);
1604
1605 m_Config->Read(wxT("PageLeftMargin"), &x, 20);
1606 m_Config->Read(wxT("PageTopMargin"), &y, 30);
1607 g_PageSetupData->SetMarginTopLeft(wxPoint(x,y));
1608 m_Config->Read(wxT("PageRightMargin"), &x, 20);
1609 m_Config->Read(wxT("PageBottomMargin"), &y, 30);
1610 g_PageSetupData->SetMarginBottomRight(wxPoint(x,y));
1611
1612
1613 m_Config->Read(wxT("PrintSyntax"), &tempbool, false);
1614 m_Config->Read(wxT("PrintLineNumber"), &tempbool, true);
1615 m_Config->Read(wxT("PrintEndOfLine"), &tempbool, false);
1616 m_Config->Read(wxT("PrintTabChar"), &tempbool, false);
1617 m_Config->Read(wxT("PrintSpaceChar"), &tempbool, false);
1618
1619 m_Config->Read(wxT("PrintOffsetHeader"), &templong, 2);
1620
1621 m_Config->Read(wxT("PrintPageHeader"), &tempbool, true);
1622 m_Config->Read(wxT("PageHeaderLeft"), &tempstr, wxT("%f"));
1623 m_Config->Read(wxT("PageHeaderCenter"), &tempstr, wxEmptyString);
1624 m_Config->Read(wxT("PageHeaderRight"), &tempstr, wxT("%n/%s"));
1625
1626 m_Config->Read(wxT("PrintPageFooter"), &tempbool, true);
1627 m_Config->Read(wxT("PageFooterLeft"), &tempstr, wxEmptyString);
1628 m_Config->Read(wxT("PageFooterCenter"), &tempstr, wxEmptyString);
1629 m_Config->Read(wxT("PageFooterRight"), &tempstr, wxT("%d %t"));
1630
1631 m_Config->SetPath(wxT("/FileCaretPos"));
1632 g_FileCaretPosManager.Load(m_Config);
1633 }
1634
1635
MadEditFrame(wxWindow * parent,wxWindowID id,const wxString & title,const wxPoint & position,const wxSize & size,long style)1636 MadEditFrame::MadEditFrame( wxWindow *parent, wxWindowID id, const wxString &title, const wxPoint &position, const wxSize& size, long style )
1637 : wxFrame( parent, id, title, position, size, style)
1638 {
1639 #ifndef __WXMSW__
1640 wxConvFileName=&MadConvFileNameObj;
1641 #endif
1642
1643 this->SetWindowStyleFlag(this->GetWindowStyleFlag() & ~wxTAB_TRAVERSAL);
1644
1645 /*
1646 #if !defined(__WXMSW__) && !defined(__WXPM__)
1647 SetIcon(wxIcon(Mad_xpm));
1648 #else // __MSW__
1649 SetIcon(wxIcon(wxT("appicon")));
1650 #endif
1651 */
1652
1653 m_NewFileCount=0;
1654 m_Config=wxConfigBase::Get(false);
1655 MadEncoding::InitEncodings();
1656
1657 MadSyntax::SetAttributeFilePath(g_MadEditHomeDir + wxT("syntax/"));
1658
1659 #if defined(__WXMSW__)
1660 MadSyntax::AddSyntaxFilesPath(g_MadEditAppDir + wxT("syntax/"));
1661 #elif defined(__WXGTK__) // linux
1662 MadSyntax::AddSyntaxFilesPath(g_MadEditAppDir + wxT("syntax/"));
1663 MadSyntax::AddSyntaxFilesPath(g_MadEditHomeDir + wxT("syntax/"));
1664 #if defined (DATA_DIR)
1665 MadSyntax::AddSyntaxFilesPath(wxT(DATA_DIR"/madedit/syntax/"));
1666 #else
1667 MadSyntax::AddSyntaxFilesPath(wxT("/usr/share/madedit/syntax/"));
1668 #endif
1669 #else // other platform
1670 MadSyntax::AddSyntaxFilesPath(g_MadEditAppDir + wxT("syntax/"));
1671 #endif
1672
1673 CreateGUIControls();
1674
1675 //g_PrintData = new wxPrintData;
1676 g_PageSetupData = new wxPageSetupDialogData;
1677
1678 LoadDefaultSettings(m_Config);
1679
1680 SetDropTarget(new DnDFile());
1681
1682 m_PageClosing=false;
1683 g_MainFrame=this;
1684 }
1685
~MadEditFrame()1686 MadEditFrame::~MadEditFrame()
1687 {}
1688
1689
CreateGUIControls(void)1690 void MadEditFrame::CreateGUIControls(void)
1691 {
1692 #if 0
1693 //Do not add custom Code here
1694 //wx-devcpp designer will remove them.
1695 //Add the custom code before or after the Blocks
1696 ////GUI Items Creation Start
1697
1698 WxStatusBar1 = new wxStatusBar(this, ID_WXSTATUSBAR1);
1699
1700 WxToolBar1 = new wxToolBar(this, ID_WXTOOLBAR1, wxPoint(0, 0), wxSize(482, 29));
1701 WxToolBar1->SetFont(wxFont(12, wxSWISS, wxNORMAL, wxNORMAL, false));
1702
1703 WxMenuBar1 = new wxMenuBar();
1704
1705 WxToolBar1->Realize();
1706 SetToolBar(WxToolBar1);
1707 SetStatusBar(WxStatusBar1);
1708 SetTitle(_("MadEdit"));
1709 SetIcon(wxNullIcon);
1710 SetSize(8,8,490,487);
1711 Center();
1712
1713 ////GUI Items Creation End
1714 #endif
1715
1716
1717 WxStatusBar1 = new wxStatusBar(this, ID_WXSTATUSBAR1);
1718 g_StatusBar = WxStatusBar1;
1719
1720 #if defined(__WXGTK__)
1721 const wxFont &font=WxStatusBar1->GetFont();
1722 int pt=font.GetPointSize();
1723 if(pt>10) pt=10;
1724 wxFont *pf=wxTheFontList->FindOrCreateFont(pt, font.GetFamily(), font.GetStyle(), font.GetWeight(), font.GetUnderlined(), wxT("Serif"));
1725 WxStatusBar1->SetFont(*pf);
1726 #endif
1727
1728 WxToolBar1 = new wxToolBar(this, ID_WXTOOLBAR1, wxPoint(0,0), wxSize(392,29));
1729
1730 m_Notebook = new wxMadAuiNotebook(this, ID_NOTEBOOK, wxPoint(0,29),wxSize(392,320), wxWANTS_CHARS |wxAUI_NB_TOP|wxAUI_NB_TAB_SPLIT|wxAUI_NB_TAB_MOVE|wxAUI_NB_SCROLL_BUTTONS|wxAUI_NB_WINDOWLIST_BUTTON|wxAUI_NB_CLOSE_ON_ACTIVE_TAB);
1731 m_Notebook->wxControl::SetWindowStyleFlag(m_Notebook->wxControl::GetWindowStyleFlag() & ~wxTAB_TRAVERSAL);
1732 m_Notebook->SetDropTarget(new DnDFile());
1733 m_Notebook->SetArtProvider(new wxAuiSimpleTabArt);
1734
1735 WxMenuBar1 = new wxMenuBar();
1736 this->SetMenuBar(WxMenuBar1);
1737
1738 WxToolBar1->Realize();
1739 this->SetToolBar(WxToolBar1);
1740 this->SetStatusBar(WxStatusBar1);
1741 this->SetTitle(wxT("MadEdit "));
1742
1743 #if !defined(__WXMSW__) //&& !defined(__WXPM__)
1744 SetIcon(wxIcon(Mad2_xpm));
1745 #else // __MSW__
1746 SetIcon(wxIcon(wxT("appicon")));
1747 #endif
1748
1749 // load MenuText
1750 {
1751 CommandData *cd = &CommandTable[0];
1752 do
1753 {
1754 if(cd->menuid_name!=0)
1755 {
1756 MadKeyBindings::AddMenuTextCommand(cd->menu_id, wxString(cd->menuid_name), cd->command);
1757 }
1758 ++cd;
1759 }while(cd->menu_level >= 0);
1760 }
1761
1762 // load keybindings
1763 if(m_Config->Exists(wxT("/KeyBindings")))
1764 {
1765 m_Config->SetPath(wxT("/KeyBindings"));
1766 MadEdit::ms_KeyBindings.LoadFromConfig_New(m_Config);
1767 MadEdit::ms_KeyBindings.AddDefaultBindings(false);
1768 }
1769 else if(m_Config->Exists(wxT("/MenuKeys")))
1770 {
1771 m_Config->SetPath(wxT("/MenuKeys"));
1772 LoadMenuKeys(m_Config);
1773 }
1774
1775 // add keybinding of ecToggleWindow
1776 wxString str=GetMenuKey(wxT("menuToggleWindow"), wxEmptyString);
1777 if(!str.IsEmpty())
1778 {
1779 if(str[0]==wxT('\t'))
1780 {
1781 str=str.Right(str.Len()-1);
1782 }
1783 MadEdit::ms_KeyBindings.Add(StringToShortCut(str), ecToggleWindow, true);
1784 }
1785
1786
1787 //m_ImageList
1788 m_ImageList=new wxImageList(16,15);
1789 m_ImageList->Add(wxBitmap(null_xpm));
1790 m_ImageList->Add(wxBitmap(new_xpm));
1791 m_ImageList->Add(wxBitmap(fileopen_xpm));
1792 m_ImageList->Add(wxBitmap(filesave_xpm));
1793 m_ImageList->Add(wxBitmap(saveall_xpm));
1794 m_ImageList->Add(wxBitmap(fileclose_xpm));
1795 m_ImageList->Add(wxBitmap(closeall_xpm));
1796 m_ImageList->Add(wxBitmap(preview_xpm));
1797 m_ImageList->Add(wxBitmap(print_xpm));
1798 m_ImageList->Add(wxBitmap(quit_xpm));
1799 m_ImageList->Add(wxBitmap(undo_xpm));
1800 m_ImageList->Add(wxBitmap(redo_xpm));
1801 m_ImageList->Add(wxBitmap(cut_xpm));
1802 m_ImageList->Add(wxBitmap(copy_xpm));
1803 m_ImageList->Add(wxBitmap(paste_xpm));
1804 m_ImageList->Add(wxBitmap(indent_xpm));
1805 m_ImageList->Add(wxBitmap(unindent_xpm));
1806 m_ImageList->Add(wxBitmap(comment_xpm));
1807 m_ImageList->Add(wxBitmap(uncomment_xpm));
1808 m_ImageList->Add(wxBitmap(find_xpm));
1809 m_ImageList->Add(wxBitmap(findnext_xpm));
1810 m_ImageList->Add(wxBitmap(findprev_xpm));
1811 m_ImageList->Add(wxBitmap(replace_xpm));
1812 m_ImageList->Add(wxBitmap(fontname_xpm));
1813 m_ImageList->Add(wxBitmap(fontsize_xpm));
1814 m_ImageList->Add(wxBitmap(font_xpm));
1815 m_ImageList->Add(wxBitmap(nowrap_xpm));
1816 m_ImageList->Add(wxBitmap(wrapbywin_xpm));
1817 m_ImageList->Add(wxBitmap(wrapbycol_xpm));
1818 m_ImageList->Add(wxBitmap(textmode_xpm));
1819 m_ImageList->Add(wxBitmap(columnmode_xpm));
1820 m_ImageList->Add(wxBitmap(hexmode_xpm));
1821 m_ImageList->Add(wxBitmap(Mad_16x15_xpm));
1822
1823
1824 // add menuitems
1825 g_Menu_File = new wxMenu(0);
1826 g_Menu_Edit = new wxMenu(0);
1827 g_Menu_Search = new wxMenu(0);
1828 g_Menu_View = new wxMenu(0);
1829 g_Menu_Tools = new wxMenu(0);
1830 g_Menu_Window = new wxMenu(0);
1831 g_Menu_Help = new wxMenu(0);
1832 g_Menu_File_RecentFiles = new wxMenu(0);
1833 g_Menu_Edit_Sort = new wxMenu(0);
1834 g_Menu_Edit_Advanced = new wxMenu(0);
1835 g_Menu_View_Encoding = new wxMenu(0);
1836 g_Menu_View_AllEncodings = new wxMenu(0);
1837 g_Menu_View_Syntax = new wxMenu(0);
1838 g_Menu_View_FontName = new wxMenu(0);
1839 g_Menu_View_FontSize = new wxMenu(0);
1840 g_Menu_View_LineSpacing = new wxMenu(0);
1841 g_Menu_View_TabColumn = new wxMenu(0);
1842 g_Menu_Tools_BOM = new wxMenu(0);
1843 g_Menu_Tools_NewLineChar = new wxMenu(0);
1844 g_Menu_Tools_InsertNewLineChar = new wxMenu(0);
1845 g_Menu_Tools_ConvertChineseChar = new wxMenu(0);
1846 g_Menu_View_Font0 = new wxMenu(0);
1847 g_Menu_View_Font1 = new wxMenu(0);
1848 g_Menu_View_Font2 = new wxMenu(0);
1849 g_Menu_View_Font3 = new wxMenu(0);
1850 g_Menu_View_Font4 = new wxMenu(0);
1851 g_Menu_View_Font5 = new wxMenu(0);
1852 g_Menu_View_Font6 = new wxMenu(0);
1853
1854
1855 list<wxMenu*> menu_stack;
1856 CommandData *cd = &CommandTable[0];
1857 #ifdef __WXMSW__
1858 bool bHasMenuIcon = (wxGetOsVersion()!=wxOS_WINDOWS_9X); // fixed win98 will crash if menuitem has icon
1859 #endif
1860 do
1861 {
1862 if(cd->menu_level==0)
1863 {
1864 menu_stack.clear();
1865 menu_stack.push_back(*cd->menu_ptr);
1866 WxMenuBar1->Append(*cd->menu_ptr, wxGetTranslation(cd->text));
1867 ++cd;
1868 continue;
1869 }
1870 else if(cd->menu_level < int(menu_stack.size()))
1871 {
1872 do
1873 {
1874 menu_stack.pop_back();
1875 }
1876 while(cd->menu_level < int(menu_stack.size()));
1877 }
1878
1879 if(cd->menu_ptr != 0)
1880 {
1881 menu_stack.back()->Append(cd->menu_id, wxGetTranslation(cd->text), *cd->menu_ptr);
1882 menu_stack.push_back(*cd->menu_ptr);
1883 }
1884 else if(cd->kind == wxITEM_SEPARATOR)
1885 {
1886 menu_stack.back()->AppendSeparator();
1887 }
1888 else
1889 {
1890 wxMenuItem *mit=new wxMenuItem(menu_stack.back(), cd->menu_id, wxString(wxGetTranslation(cd->text)) + GetMenuKey(cd->menuid_name,cd->key), wxGetTranslation(cd->hint), cd->kind);
1891
1892 #ifdef __WXMSW__
1893 if(bHasMenuIcon)
1894 #endif
1895 if(cd->image_idx >= 0 && cd->kind==wxITEM_NORMAL)
1896 {
1897 mit->SetBitmap(m_ImageList->GetBitmap(cd->image_idx));
1898 }
1899
1900 menu_stack.back()->Append(mit);
1901 }
1902
1903 ++cd;
1904 }
1905 while(cd->menu_level>=0);
1906
1907 // set FindNext/FindPrev keys for search/replace dialog
1908 g_AccelFindNext.Set(0, 0, 0, 0);
1909 g_AccelFindPrev.Set(0, 0, 0, 0);
1910
1911 wxAcceleratorEntry *ent=GetAccelFromString(g_Menu_Search->GetLabel(menuFindNext));
1912 if(ent!=NULL)
1913 {
1914 g_AccelFindNext=*ent;
1915 delete ent;
1916 }
1917 ent=GetAccelFromString(g_Menu_Search->GetLabel(menuFindPrevious));
1918 if(ent!=NULL)
1919 {
1920 g_AccelFindPrev=*ent;
1921 delete ent;
1922 }
1923
1924 {
1925 size_t cnt=MadEncoding::GetEncodingsCount();
1926 for(size_t i=0;i<cnt;i++)
1927 {
1928 wxString enc=wxString(wxT('['))+ MadEncoding::GetEncodingName(i) + wxT("] ");
1929 wxString des=wxGetTranslation(MadEncoding::GetEncodingDescription(i).c_str());
1930
1931 g_Menu_View_AllEncodings->Append(menuEncoding1 + int(i), enc+des);
1932 }
1933 }
1934
1935 {
1936 size_t cnt=MadSyntax::GetSyntaxCount();
1937 for(size_t i=0;i<cnt;i++)
1938 {
1939 g_Menu_View_Syntax->Append(menuSyntax1+int(i), MadSyntax::GetSyntaxTitle(i));
1940 }
1941 }
1942
1943 {
1944 MadFontEnumerator fontenumerator;
1945 fontenumerator.EnumerateFacenames(); // get all fontnames
1946
1947 size_t count=g_FontNames.Count();
1948 for(size_t i=0;i<count; i++)
1949 {
1950 wxString &name=g_FontNames[i];
1951 wxChar firstchar=name[0];
1952 if(firstchar<='Z' && firstchar>='A')
1953 {
1954 firstchar |= 0x20; // to lower case
1955 }
1956
1957 wxMenu *menu=g_Menu_View_Font6;
1958 if(firstchar==wxT('@'))
1959 {
1960 menu=g_Menu_View_Font0;
1961 }
1962 else if(firstchar<='z' && firstchar>='a')
1963 {
1964 if(firstchar<='e') menu=g_Menu_View_Font1;
1965 else if(firstchar<='j') menu=g_Menu_View_Font2;
1966 else if(firstchar<='o') menu=g_Menu_View_Font3;
1967 else if(firstchar<='t') menu=g_Menu_View_Font4;
1968 else if(firstchar<='z') menu=g_Menu_View_Font5;
1969 }
1970
1971 menu->Append(menuFontName1 + int(i), name);
1972 }
1973 }
1974
1975 if(!m_Config->Exists(wxT("/KeyBindings")))
1976 {
1977 if(m_Config->Exists(wxT("/EditKeys")))
1978 {
1979 m_Config->SetPath(wxT("/EditKeys"));
1980 MadEdit::ms_KeyBindings.LoadFromConfig(m_Config);
1981 }
1982 else
1983 {
1984 MadEdit::ms_KeyBindings.AddDefaultBindings(true);
1985 }
1986 }
1987 ResetAcceleratorTable();
1988
1989
1990 /***/
1991 m_RecentFiles=new wxFileHistory();
1992 m_RecentFiles->UseMenu(g_Menu_File_RecentFiles);
1993 m_Config->SetPath(wxT("/RecentFiles"));
1994 m_RecentFiles->Load(*m_Config);
1995
1996 m_RecentEncodings=new wxFileHistory(9, menuRecentEncoding1);
1997 m_RecentEncodings->UseMenu(g_Menu_View_Encoding);
1998 m_Config->SetPath(wxT("/RecentEncodings"));
1999 m_RecentEncodings->Load(*m_Config);
2000
2001 m_RecentFonts=new wxFileHistory(9, menuRecentFont1);
2002 m_RecentFonts->UseMenu(g_Menu_View_FontName);
2003 m_Config->SetPath(wxT("/RecentFonts"));
2004 m_RecentFonts->Load(*m_Config);
2005
2006
2007 // status bar field widths
2008 int width0= GetClientSize().GetWidth() - g_StatusWidth_1_6;
2009 if(width0<0) width0=0;
2010 g_StatusWidths[0]= width0;
2011 WxStatusBar1->SetFieldsCount(7, g_StatusWidths);
2012 //int styles[6]={wxSB_RAISED, wxSB_RAISED, wxSB_RAISED, wxSB_RAISED, wxSB_RAISED, wxSB_RAISED, wxSB_RAISED};
2013 //WxStatusBar1->SetStatusStyles(6, styles);
2014
2015
2016
2017 /*
2018 // load plugins
2019 wxPluginLibrary *lib = wxPluginManager::LoadLibrary(wxT("./plugin"));
2020 if(lib)
2021 {
2022 wxLogWarning(wxString::Format(wxT("Loaded [ %s ]\n"), wxT("plugin")));
2023 //wxString(path + filename).c_str()));
2024
2025 if(lib->HasSymbol(wxT("PluginProc")))
2026 {
2027 //typedef const wchar_t* (*GetNameProc)();
2028 typedef int (*PluginProc_Proc)(int PluginID, int nMsg, void* pParam);
2029 PluginProc_Proc PluginProc=(PluginProc_Proc)lib->GetSymbol(wxT("PluginProc"));
2030
2031 if(PluginProc)
2032 {
2033 wchar_t *name;
2034
2035 PluginProc(0, PL_GET_NAME, (void*)&name);
2036 wxLogWarning(wxString::Format(wxT("GetName: [%s]\n"), name));
2037
2038 char **xpm;
2039 PluginProc(0, PL_GET_XPM, (void*)&xpm);
2040 m_ImageList->Add(wxBitmap(xpm));
2041
2042 }
2043 }
2044 }
2045 */
2046
2047
2048 //WxToolBar1
2049 //WxToolBar1->AddSeparator();
2050 WxToolBar1->AddTool(menuNew, _T("New"), m_ImageList->GetBitmap(new_xpm_idx),wxNullBitmap, wxITEM_NORMAL, _("New File") );
2051 WxToolBar1->AddTool(menuOpen, _T("Open"), m_ImageList->GetBitmap(fileopen_xpm_idx),wxNullBitmap, wxITEM_NORMAL, _("Open File") );
2052 WxToolBar1->AddTool(menuSave, _T("Save"), m_ImageList->GetBitmap(filesave_xpm_idx),wxNullBitmap, wxITEM_NORMAL, _("Save File") );
2053 WxToolBar1->AddTool(menuSaveAll, _T("SaveAll"), m_ImageList->GetBitmap(saveall_xpm_idx),wxNullBitmap, wxITEM_NORMAL, _("Save All Files") );
2054 WxToolBar1->AddTool(menuClose, _T("Close"), m_ImageList->GetBitmap(fileclose_xpm_idx),wxNullBitmap, wxITEM_NORMAL, _("Close File") );
2055 WxToolBar1->AddTool(menuCloseAll, _T("CloseAll"), m_ImageList->GetBitmap(closeall_xpm_idx),wxNullBitmap, wxITEM_NORMAL, _("Close All Files") );
2056 WxToolBar1->AddSeparator();
2057 WxToolBar1->AddTool(menuUndo, _T("Undo"), m_ImageList->GetBitmap(undo_xpm_idx),wxNullBitmap, wxITEM_NORMAL, _("Undo") );
2058 WxToolBar1->AddTool(menuRedo, _T("Redo"), m_ImageList->GetBitmap(redo_xpm_idx),wxNullBitmap, wxITEM_NORMAL, _("Redo") );
2059 WxToolBar1->AddSeparator();
2060 WxToolBar1->AddTool(menuCut, _T("Cut"), m_ImageList->GetBitmap(cut_xpm_idx),wxNullBitmap, wxITEM_NORMAL, _("Cut") );
2061 WxToolBar1->AddTool(menuCopy, _T("Copy"), m_ImageList->GetBitmap(copy_xpm_idx),wxNullBitmap, wxITEM_NORMAL, _("Copy") );
2062 WxToolBar1->AddTool(menuPaste, _T("Paste"), m_ImageList->GetBitmap(paste_xpm_idx),wxNullBitmap, wxITEM_NORMAL, _("Paste") );
2063 WxToolBar1->AddSeparator();
2064 WxToolBar1->AddTool(menuIncreaseIndent, _T("IncIndent"), m_ImageList->GetBitmap(indent_xpm_idx),wxNullBitmap, wxITEM_NORMAL, _("Increase Indent") );
2065 WxToolBar1->AddTool(menuDecreaseIndent, _T("DecIndent"), m_ImageList->GetBitmap(unindent_xpm_idx),wxNullBitmap, wxITEM_NORMAL, _("Decrease Indent") );
2066 WxToolBar1->AddSeparator();
2067 WxToolBar1->AddTool(menuComment, _T("Comment"), m_ImageList->GetBitmap(comment_xpm_idx),wxNullBitmap, wxITEM_NORMAL, _("Comment") );
2068 WxToolBar1->AddTool(menuUncomment, _T("Uncomment"), m_ImageList->GetBitmap(uncomment_xpm_idx),wxNullBitmap, wxITEM_NORMAL, _("Uncomment") );
2069 WxToolBar1->AddSeparator();
2070 WxToolBar1->AddTool(menuFind, _T("Find"), m_ImageList->GetBitmap(find_xpm_idx),wxNullBitmap, wxITEM_NORMAL, _("Find") );
2071 WxToolBar1->AddTool(menuFindNext, _T("FindNext"), m_ImageList->GetBitmap(findnext_xpm_idx),wxNullBitmap, wxITEM_NORMAL, _("Find Next") );
2072 WxToolBar1->AddTool(menuFindPrevious, _T("FindPrev"), m_ImageList->GetBitmap(findprev_xpm_idx),wxNullBitmap, wxITEM_NORMAL, _("Find Previous") );
2073 WxToolBar1->AddTool(menuReplace, _T("Replace"), m_ImageList->GetBitmap(replace_xpm_idx),wxNullBitmap, wxITEM_NORMAL, _("Replace") );
2074 WxToolBar1->AddSeparator();
2075 WxToolBar1->AddTool(menuNoWrap, _T("NoWrap"), m_ImageList->GetBitmap(nowrap_xpm_idx),wxNullBitmap, wxITEM_CHECK, _("No Line Wrap") );
2076 WxToolBar1->AddTool(menuWrapByWindow, _T("WrapByWindow"), m_ImageList->GetBitmap(wrapbywin_xpm_idx),wxNullBitmap, wxITEM_CHECK, _("Wrap Lines by Window") );
2077 WxToolBar1->AddTool(menuWrapByColumn, _T("WrapByColumn"), m_ImageList->GetBitmap(wrapbycol_xpm_idx),wxNullBitmap, wxITEM_CHECK, _("Wrap Lines by Max Columns") );
2078 WxToolBar1->AddSeparator();
2079 WxToolBar1->AddTool(menuTextMode, _T("TextMode"), m_ImageList->GetBitmap(textmode_xpm_idx),wxNullBitmap, wxITEM_CHECK, _("Text Mode") );
2080 WxToolBar1->AddTool(menuColumnMode, _T("ColumnMode"), m_ImageList->GetBitmap(columnmode_xpm_idx),wxNullBitmap, wxITEM_CHECK, _("Column Mode") );
2081 WxToolBar1->AddTool(menuHexMode, _T("HexMode"), m_ImageList->GetBitmap(hexmode_xpm_idx),wxNullBitmap, wxITEM_CHECK, _("Hex Mode") );
2082 WxToolBar1->Realize();
2083
2084 //WxToolBar1->EnableTool(wxID_NEW, false);
2085 //WxToolBar1->ToggleTool(wxID_NEW, true);
2086
2087
2088 // information window
2089 int infoW = 300, infoH = 130;
2090 m_Config->Read(wxT("/MadEdit/InfoWindowWidth"), &infoW);
2091 m_Config->Read(wxT("/MadEdit/InfoWindowHeight"), &infoH);
2092 wxSize nbsize(infoW, infoH);
2093 m_InfoNotebook = new wxAuiNotebook(this, ID_OUTPUTNOTEBOOK, wxDefaultPosition, nbsize, wxAUI_NB_TOP|wxAUI_NB_SCROLL_BUTTONS);
2094
2095 m_FindInFilesResults = new wxTreeCtrl(m_InfoNotebook, ID_FINDINFILESRESULTS, wxDefaultPosition, wxSize(infoW,4), wxTR_DEFAULT_STYLE|wxTR_HIDE_ROOT);
2096 m_FindInFilesResults->AddRoot(wxT("Root"));
2097 m_FindInFilesResults->Connect(wxEVT_LEFT_DCLICK, wxMouseEventHandler(MadEditFrame::OnFindInFilesResultsDClick));
2098
2099 m_InfoNotebook->AddPage(m_FindInFilesResults, _("Find/Replace in Files Results"));
2100 m_InfoNotebook->Connect(wxEVT_SIZE, wxSizeEventHandler(MadEditFrame::OnInfoNotebookSize));
2101
2102 // wxAUI
2103 m_AuiManager.SetManagedWindow(this);
2104 m_AuiManager.SetFlags(m_AuiManager.GetFlags() | wxAUI_MGR_ALLOW_ACTIVE_PANE);
2105 m_AuiManager.SetDockSizeConstraint(0.75, 0.75);
2106 m_AuiManager.AddPane(m_Notebook, wxCENTER);
2107 m_AuiManager.AddPane(m_InfoNotebook, wxBOTTOM, _("Information Window"));
2108 m_AuiManager.GetPane(m_InfoNotebook).Show(false).FloatingSize(nbsize);
2109 m_AuiManager.Update();
2110
2111 // fixed for using wxAUI
2112 WxStatusBar1->Connect(wxEVT_SIZE, wxSizeEventHandler(MadEditFrame::OnSize));
2113 }
2114
MadEditFrameClose(wxCloseEvent & event)2115 void MadEditFrame::MadEditFrameClose(wxCloseEvent& event)
2116 {
2117 // --> Don't use Close with a Frame,
2118 // use Destroy instead.
2119
2120 if(event.CanVeto())
2121 {
2122 if(QueryCloseAllFiles()==false)
2123 {
2124 event.Veto(true);
2125 return;
2126 }
2127 }
2128
2129
2130 // save ReloadFilesList
2131 wxString files;
2132 int count=int(m_Notebook->GetPageCount());
2133 bool bb=true;
2134 m_Config->Read(wxT("ReloadFiles"), &bb);
2135 if(bb && count>0)
2136 {
2137 count = m_Notebook->GetFilesList(files);
2138
2139 wxString selname = g_ActiveMadEdit->GetFileName();
2140 if(count!=1 && !selname.IsEmpty())
2141 {
2142 files += selname; // append selname to activate it
2143 files += wxT('|');
2144 }
2145 }
2146 m_Config->Write(wxT("/MadEdit/ReloadFilesList"), files );
2147
2148 m_Config->SetPath(wxT("/FileCaretPos"));
2149 g_FileCaretPosManager.Save(m_Config);
2150
2151 #ifdef __WXMSW__
2152 int style=::GetWindowLong((HWND)GetHWND(), GWL_STYLE);
2153 m_Config->Write(wxT("/MadEdit/WindowMaximize"), (style&WS_MAXIMIZE)!=0 );
2154 #endif
2155
2156 int x,y;
2157 GetPosition(&x,&y);
2158 m_Config->Write(wxT("/MadEdit/WindowLeft"), x );
2159 m_Config->Write(wxT("/MadEdit/WindowTop"), y );
2160
2161 GetSize(&x,&y);
2162 m_Config->Write(wxT("/MadEdit/WindowWidth"), x );
2163 m_Config->Write(wxT("/MadEdit/WindowHeight"), y );
2164
2165
2166 m_Config->SetPath(wxT("/RecentFiles"));
2167 m_RecentFiles->Save(*m_Config);
2168
2169 m_Config->SetPath(wxT("/RecentEncodings"));
2170 m_RecentEncodings->Save(*m_Config);
2171
2172 m_Config->SetPath(wxT("/RecentFonts"));
2173 m_RecentFonts->Save(*m_Config);
2174
2175 if(g_SearchDialog!=NULL)
2176 {
2177 g_SearchDialog->Show(false);
2178 m_Config->SetPath(wxT("/RecentFindText"));
2179 g_SearchDialog->m_RecentFindText->Save(*m_Config);
2180 }
2181 if(g_ReplaceDialog!=NULL)
2182 {
2183 g_ReplaceDialog->Show(false);
2184 m_Config->SetPath(wxT("/RecentReplaceText"));
2185 g_ReplaceDialog->m_RecentReplaceText->Save(*m_Config);
2186 }
2187 if(g_FindInFilesDialog!=NULL)
2188 {
2189 g_FindInFilesDialog->Show(false);
2190 m_Config->SetPath(wxT("/RecentFindDir"));
2191 g_FindInFilesDialog->m_RecentFindDir->Save(*m_Config);
2192 m_Config->SetPath(wxT("/RecentFindFilter"));
2193 g_FindInFilesDialog->m_RecentFindFilter->Save(*m_Config);
2194 m_Config->SetPath(wxT("/RecentFindExcludeFilter"));
2195 g_FindInFilesDialog->m_RecentFindExclude->Save(*m_Config);
2196 }
2197
2198 // reset SearchInSelection
2199 m_Config->Write(wxT("/MadEdit/SearchInSelection"), false);
2200 m_Config->Write(wxT("/MadEdit/SearchFrom"), wxEmptyString);
2201 m_Config->Write(wxT("/MadEdit/SearchTo"), wxEmptyString);
2202
2203
2204 delete m_RecentFiles;
2205 m_RecentFiles=NULL;
2206 delete m_RecentEncodings;
2207 m_RecentEncodings=NULL;
2208 delete m_RecentFonts;
2209 m_RecentFonts=NULL;
2210
2211 delete m_ImageList;
2212
2213 MadEncoding::FreeEncodings();
2214
2215 FreeConvertChineseTable();
2216
2217 //delete g_PrintData;
2218 delete g_PageSetupData;
2219
2220 extern void DeleteConfig();
2221 DeleteConfig();
2222
2223 m_AuiManager.UnInit();
2224
2225 #ifndef __WXMSW__
2226 // it will crash randomly under linux.
2227 // so we must call exit() to quit the app.
2228 exit(0);
2229 #else
2230 extern HANDLE g_Mutex;
2231 if(g_Mutex)
2232 {
2233 ReleaseMutex(g_Mutex);
2234 }
2235 Destroy(); // quit app normally.
2236 #endif
2237 }
2238
2239 /*
2240 * MadEditFrameKeyDown
2241 */
MadEditFrameKeyDown(wxKeyEvent & event)2242 void MadEditFrame::MadEditFrameKeyDown(wxKeyEvent& event)
2243 {
2244 int key=event.GetKeyCode();
2245
2246 switch(key)
2247 {
2248 case WXK_ESCAPE:
2249 if(g_SearchDialog && g_SearchDialog->IsShown())
2250 {
2251 g_SearchDialog->Show(false);
2252 }
2253 if(g_ReplaceDialog && g_ReplaceDialog->IsShown())
2254 {
2255 g_ReplaceDialog->Show(false);
2256 }
2257 if(g_FindInFilesDialog && g_FindInFilesDialog->IsShown())
2258 {
2259 g_FindInFilesDialog->Show(false);
2260 }
2261
2262 break;
2263 }
2264
2265 event.Skip();
2266 }
2267
SetPageFocus(int pageId)2268 void MadEditFrame::SetPageFocus(int pageId)
2269 {
2270 int selid=m_Notebook->GetSelection();
2271 if(pageId!=selid && pageId>=0 && pageId<int(m_Notebook->GetPageCount()))
2272 {
2273 m_Notebook->SetSelection(pageId);
2274
2275 MadEdit *cme=(MadEdit*)m_Notebook->GetPage(m_Notebook->GetSelection());
2276 if(cme!=g_ActiveMadEdit)
2277 {
2278 wxAuiNotebookEvent event(wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGED, m_Notebook->GetId());
2279 event.SetSelection(pageId);
2280 event.SetOldSelection(selid);
2281 event.SetEventObject(this);
2282 OnNotebookPageChanged(event);
2283 }
2284 }
2285 }
2286
GetEditByFileName(const wxString & filename,int & id)2287 MadEdit *MadEditFrame::GetEditByFileName(const wxString &filename, int &id)
2288 {
2289 int count=int(m_Notebook->GetPageCount());
2290 wxString fn;
2291 for(id=0; id<count; id++)
2292 {
2293 MadEdit *me=(MadEdit*)m_Notebook->GetPage(id);
2294 fn = me->GetFileName();
2295 #ifdef __WXMSW__
2296 if(fn.Lower()==filename.Lower())
2297 #else
2298 if(fn==filename)
2299 #endif
2300 {
2301 return me;
2302 }
2303 }
2304 id=-1;
2305 return NULL;
2306 }
2307
ResetAcceleratorTable()2308 void MadEditFrame::ResetAcceleratorTable()
2309 {
2310 vector<wxAcceleratorEntry> entries;
2311 MadEdit::ms_KeyBindings.BuildAccelEntries(true, entries);
2312 if(entries.size()>0)
2313 {
2314 wxAcceleratorTable accel(int(entries.size()), &entries[0]);
2315 this->SetAcceleratorTable(accel);
2316 }
2317 }
2318
2319 #ifdef __WXMSW__
MSWWindowProc(WXUINT message,WXWPARAM wParam,WXLPARAM lParam)2320 WXLRESULT MadEditFrame::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
2321 {
2322 switch(message)
2323 {
2324 case WM_COPYDATA:
2325 {
2326 COPYDATASTRUCT *pcds=*((COPYDATASTRUCT**)&lParam);
2327 OnReceiveMessage((wxChar*)pcds->lpData, pcds->cbData);
2328 }
2329 return TRUE;
2330 }
2331
2332 return wxFrame::MSWWindowProc(message, wParam, lParam);
2333 }
2334 #endif
2335
2336
OnNotebookPageChanging(wxAuiNotebookEvent & event)2337 void MadEditFrame::OnNotebookPageChanging(wxAuiNotebookEvent& event)
2338 {
2339 g_PrevPageID = event.GetOldSelection();
2340 }
2341
OnNotebookPageChanged(wxAuiNotebookEvent & event)2342 void MadEditFrame::OnNotebookPageChanged(wxAuiNotebookEvent& event)
2343 {
2344 g_ActiveMadEdit=(MadEdit*)m_Notebook->GetPage(m_Notebook->GetSelection());
2345
2346 int now=event.GetSelection();
2347 int old=event.GetOldSelection();
2348 if(event.GetEventObject()==this)
2349 {
2350 old=event.GetOldSelection();
2351 }
2352
2353 //wxLogDebug(wxT("curr :%d, prev: %d"), now, old);
2354
2355 if(old!=now && old>=0)
2356 {
2357 g_PrevPageID=old;
2358 }
2359
2360 //wxLogMessage( wxString()<<int(g_ActiveMadEdit));
2361 if(g_ActiveMadEdit!=NULL)
2362 {
2363 g_ActiveMadEdit->SetFocus();
2364
2365 wxString title=g_ActiveMadEdit->GetFileName();
2366 if(title.IsEmpty())
2367 {
2368 title=m_Notebook->GetPageText(event.GetSelection());
2369 }
2370
2371 if(g_ActiveMadEdit->IsModified() && title[title.Len()-1]!=wxT('*'))
2372 title += wxT('*');
2373
2374 SetTitle(wxString(wxT("MadEdit - ["))+ title +wxString(wxT("] ")));
2375
2376 OnEditSelectionChanged(g_ActiveMadEdit);
2377 OnEditStatusChanged(g_ActiveMadEdit);
2378
2379 if(g_CheckModTimeForReload)
2380 {
2381 g_ActiveMadEdit->ReloadByModificationTime();
2382 }
2383 }
2384 else
2385 {
2386 SetTitle(wxString(wxT("MadEdit ")));
2387 }
2388 }
2389
OnNotebookPageClosing(wxAuiNotebookEvent & event)2390 void MadEditFrame::OnNotebookPageClosing(wxAuiNotebookEvent& event)
2391 {
2392 if(m_PageClosing)
2393 {
2394 return;
2395 }
2396
2397 m_PageClosing=true;
2398 if(QueryCloseFile(event.GetSelection())==false)
2399 {
2400 event.Veto();
2401 }
2402 else
2403 {
2404 if(m_Notebook->GetPageCount()==1) //close last file
2405 {
2406 OnNotebookPageClosed(true);
2407 }
2408 }
2409 m_PageClosing=false;
2410 }
2411
OnNotebookPageClosed(bool bZeroPage)2412 void MadEditFrame::OnNotebookPageClosed(bool bZeroPage)
2413 {
2414 if(bZeroPage || m_Notebook->GetPageCount()==0)
2415 {
2416 g_ActiveMadEdit=NULL;
2417 SetTitle(wxString(wxT("MadEdit ")));
2418 OnEditSelectionChanged(NULL);
2419 OnEditStatusChanged(NULL);
2420 }
2421 else
2422 {
2423 MadEdit *madedit=(MadEdit*)m_Notebook->GetPage(m_Notebook->GetSelection());
2424 if(g_ActiveMadEdit != madedit)
2425 {
2426 g_ActiveMadEdit=madedit;
2427 OnEditSelectionChanged(g_ActiveMadEdit);
2428 OnEditStatusChanged(g_ActiveMadEdit);
2429
2430 wxString title=g_ActiveMadEdit->GetFileName();
2431 if(title.IsEmpty())
2432 {
2433 title=m_Notebook->GetPageText( m_Notebook->GetSelection() );
2434 }
2435
2436 if(g_ActiveMadEdit->IsModified() && title[title.Len()-1]!=wxT('*'))
2437 title += wxT('*');
2438
2439 SetTitle(wxString(wxT("MadEdit - ["))+ title +wxString(wxT("] ")));
2440 }
2441 g_ActiveMadEdit->ReloadByModificationTime();
2442 }
2443 }
2444
OnSize(wxSizeEvent & evt)2445 void MadEditFrame::OnSize(wxSizeEvent &evt)
2446 {
2447 evt.Skip();
2448
2449 int width0= g_MainFrame->GetClientSize().GetWidth() - g_StatusWidth_1_6;
2450 if(width0<0) width0=0;
2451 g_StatusWidths[0]= width0;
2452 g_MainFrame->WxStatusBar1->SetFieldsCount(7, g_StatusWidths);
2453
2454 //static int n=0;
2455 //g_MainFrame->SetTitle(wxString::Format(wxT("%d %d %d"), n++, g_MainFrame->GetClientSize().GetWidth(), width0));
2456 }
2457
2458 //void MadEditFrame::OnChar(wxKeyEvent& evt)
2459 //{
2460 //wxLogDebug(wxT("frame OnChar"));
2461 //evt.Skip();
2462 //}
2463
OnActivate(wxActivateEvent & evt)2464 void MadEditFrame::OnActivate(wxActivateEvent &evt)
2465 {
2466 if(evt.GetActive() && g_ActiveMadEdit)
2467 {
2468 g_ActiveMadEdit->SetFocus();
2469 g_ActiveMadEdit->ReloadByModificationTime();
2470 }
2471 evt.Skip();
2472 }
2473
2474 //---------------------------------------------------------------------------
2475
LoadMenuKeys(wxConfigBase * config)2476 void MadEditFrame::LoadMenuKeys(wxConfigBase *config)
2477 {
2478 wxString key, menu;
2479 long idx=0;
2480 bool kcont=config->GetNextEntry(key, idx);
2481 while(kcont)
2482 {
2483 config->Read(key, &menu);
2484
2485 int menuid=MadKeyBindings::TextToMenuId(menu);
2486 MadEditShortCut sc=StringToShortCut(key);
2487 if(menuid!=0 && sc!=0)
2488 {
2489 MadEdit::ms_KeyBindings.Add(sc, true, menuid, true);
2490 }
2491
2492 kcont=config->GetNextEntry(key, idx);
2493 }
2494 }
2495
GetMenuKey(const wxString & menu,const wxString & defaultkey)2496 wxString MadEditFrame::GetMenuKey(const wxString &menu, const wxString &defaultkey)
2497 {
2498 wxString key = MadEdit::ms_KeyBindings.GetKeyByMenuText(menu);
2499 if(!key.IsEmpty())
2500 {
2501 return wxString(wxT("\t"))+key;
2502 }
2503
2504 // defaultkey is empty
2505 if(defaultkey.IsEmpty())
2506 {
2507 return wxEmptyString;
2508 }
2509
2510 // check the defaultkey is applied to other menuitem or not
2511 if(MadEdit::ms_KeyBindings.KeyIsAssigned(defaultkey))
2512 {
2513 return wxEmptyString;
2514 }
2515
2516 // the defaultkey doesn't apply yet, add it
2517 int menuid=MadKeyBindings::TextToMenuId(menu);
2518 MadEditShortCut sc=StringToShortCut(defaultkey);
2519 if(menuid!=0 && sc!=0)
2520 {
2521 MadEdit::ms_KeyBindings.Add(sc, true, menuid, true);
2522 }
2523
2524 return wxString(wxT("\t"))+defaultkey;
2525 }
2526
OnInfoNotebookSize(wxSizeEvent & evt)2527 void MadEditFrame::OnInfoNotebookSize(wxSizeEvent &evt)
2528 {
2529 wxAuiPaneInfo &pinfo=g_MainFrame->m_AuiManager.GetPane(g_MainFrame->m_InfoNotebook);
2530 if(pinfo.IsOk())// && pinfo.IsShown())
2531 {
2532 wxSize size;
2533 if(pinfo.IsDocked())
2534 {
2535 size=g_MainFrame->m_InfoNotebook->GetSize();
2536 }
2537 else
2538 {
2539 if(pinfo.frame != NULL)
2540 {
2541 size=pinfo.frame->GetSize();
2542 }
2543 else
2544 {
2545 size.x=0;
2546 }
2547 }
2548
2549 if(size.x>16 && size.y>16)
2550 {
2551 if(pinfo.IsDocked())
2552 {
2553 if(pinfo.dock_direction==wxAUI_DOCK_TOP || pinfo.dock_direction==wxAUI_DOCK_BOTTOM)
2554 {
2555 pinfo.floating_size.y = size.y;
2556 pinfo.best_size.y = size.y;
2557 g_MainFrame->m_Config->Write(wxT("/MadEdit/InfoWindowHeight"), size.y);
2558 }
2559 else
2560 {
2561 pinfo.floating_size.x = size.x;
2562 pinfo.best_size.x = size.x;
2563 g_MainFrame->m_Config->Write(wxT("/MadEdit/InfoWindowWidth"), size.x);
2564 }
2565 }
2566 else //IsFloating()
2567 {
2568 pinfo.BestSize(size);
2569 g_MainFrame->m_Config->Write(wxT("/MadEdit/InfoWindowWidth"), size.x);
2570 g_MainFrame->m_Config->Write(wxT("/MadEdit/InfoWindowHeight"), size.y);
2571 }
2572 }
2573 }
2574 evt.Skip();
2575 }
2576
OnFindInFilesResultsDClick(wxMouseEvent & event)2577 void MadEditFrame::OnFindInFilesResultsDClick(wxMouseEvent& event)
2578 {
2579 MadEdit *madedit=NULL;
2580 int flags;
2581 wxTreeItemId id = g_MainFrame->m_FindInFilesResults->HitTest(event.GetPosition(), flags);
2582 if(id.IsOk())
2583 {
2584 CaretPosData *cpdata = (CaretPosData*)g_MainFrame->m_FindInFilesResults->GetItemData(id);
2585 if(cpdata)
2586 {
2587 int count = int(g_MainFrame->m_Notebook->GetPageCount());
2588 if(cpdata->pageid>=0 && cpdata->pageid<count)
2589 {
2590 wxString title=g_MainFrame->m_Notebook->GetPageText(cpdata->pageid);
2591 if(title[title.Len()-1]==wxT('*'))
2592 title.Truncate(title.Len()-1);
2593 if(title==cpdata->filename)
2594 {
2595 g_MainFrame->SetPageFocus(cpdata->pageid);
2596 madedit = g_ActiveMadEdit;
2597 }
2598 }
2599
2600 if(madedit==NULL && wxFileExists(cpdata->filename))
2601 {
2602 g_MainFrame->OpenFile(cpdata->filename, true);
2603
2604 #ifdef __WXMSW__
2605 if(g_ActiveMadEdit->GetFileName().Lower()==cpdata->filename.Lower())
2606 #else
2607 if(g_ActiveMadEdit->GetFileName()==cpdata->filename)
2608 #endif
2609 {
2610 madedit = g_ActiveMadEdit;
2611 }
2612 }
2613
2614 if(madedit)
2615 {
2616 madedit->SetCaretPosition(cpdata->epos, cpdata->bpos, cpdata->epos);
2617 madedit->SetFocus();
2618 }
2619 }
2620 }
2621
2622 if(madedit==NULL) event.Skip();
2623 }
2624
ResetFindInFilesResults()2625 void MadEditFrame::ResetFindInFilesResults()
2626 {
2627 m_FindInFilesResults->DeleteAllItems();
2628 m_FindInFilesResults->AddRoot(wxT("Root"));
2629 }
2630
AddItemToFindInFilesResults(const wxString & text,size_t index,const wxString & filename,int pageid,const wxFileOffset & begpos,wxFileOffset & endpos)2631 void MadEditFrame::AddItemToFindInFilesResults(const wxString &text, size_t index, const wxString &filename, int pageid, const wxFileOffset &begpos, wxFileOffset &endpos)
2632 {
2633 static wxTreeItemId fileid;
2634
2635 if(index==0)
2636 {
2637 if(m_FindInFilesResults->GetChildrenCount(m_FindInFilesResults->GetRootItem(), false)==0)
2638 {
2639 fileid = m_FindInFilesResults->AppendItem(m_FindInFilesResults->GetRootItem(), filename);
2640 }
2641 else
2642 {
2643 // sort the results
2644 wxTreeItemIdValue cookie;
2645 wxTreeItemId id=m_FindInFilesResults->GetFirstChild(m_FindInFilesResults->GetRootItem(), cookie);
2646 size_t before=0;
2647 while(id.IsOk())
2648 {
2649 wxString idname=m_FindInFilesResults->GetItemText(id);
2650 #ifdef __WXMSW__
2651 if(filename.Lower() < idname.Lower())
2652 #else
2653 if(filename < idname)
2654 #endif
2655 {
2656 break;
2657 }
2658 id=m_FindInFilesResults->GetNextChild(m_FindInFilesResults->GetRootItem(), cookie);
2659 ++before;
2660 }
2661
2662 if(!id.IsOk()) // append item
2663 {
2664 fileid = m_FindInFilesResults->AppendItem(m_FindInFilesResults->GetRootItem(), filename);
2665 }
2666 else // insert item
2667 {
2668 fileid = m_FindInFilesResults->InsertItem(m_FindInFilesResults->GetRootItem(), before, filename);
2669 }
2670 }
2671 }
2672
2673 m_FindInFilesResults->AppendItem(fileid, text, -1, -1, new CaretPosData(filename, pageid, begpos, endpos));
2674 }
2675
2676
2677 //---------------------------------------------------------------------------
2678
OpenedFileCount()2679 int MadEditFrame::OpenedFileCount()
2680 {
2681 return (int)m_Notebook->GetPageCount();
2682 }
2683
OpenFile(const wxString & filename,bool mustExist)2684 void MadEditFrame::OpenFile(const wxString &filename, bool mustExist)
2685 {
2686 wxString title;
2687 if(filename.IsEmpty())
2688 {
2689 title.Printf(_("NoName%d"), ++m_NewFileCount);
2690 }
2691 else
2692 {
2693 int selid=m_Notebook->GetSelection();
2694
2695 // check this file is opened or not
2696 int count=int(m_Notebook->GetPageCount());
2697 for(int id=0;id<count;id++)
2698 {
2699 MadEdit *me=(MadEdit*)m_Notebook->GetPage(id);
2700 #ifdef __WXMSW__
2701 if(me->GetFileName().Lower()==filename.Lower())
2702 #else
2703 if(me->GetFileName()==filename)
2704 #endif
2705 { // YES, it's opened. Activate it.
2706 g_CheckModTimeForReload=false;
2707 m_Notebook->SetSelection(id);
2708
2709 MadEdit *madedit=(MadEdit*)m_Notebook->GetPage(m_Notebook->GetSelection());
2710 if(madedit!=g_ActiveMadEdit)
2711 {
2712 wxAuiNotebookEvent event(wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGED, m_Notebook->GetId());
2713 event.SetSelection(m_Notebook->GetSelection());
2714 event.SetOldSelection(selid);
2715 event.SetEventObject(this);
2716 OnNotebookPageChanged(event);
2717 }
2718
2719 g_CheckModTimeForReload=true;
2720 g_ActiveMadEdit->ReloadByModificationTime();
2721 m_RecentFiles->AddFileToHistory(filename); // bring the filename to top of list
2722 g_ActiveMadEdit->SetFocus();
2723 return;
2724 }
2725 }
2726
2727 if(MadDirExists(filename)!=0)
2728 {
2729 wxLogError(wxString(_("This is a Directory:")) + wxT("\n\n") + filename);
2730 return;
2731 }
2732
2733 int utf8test=MadFileNameIsUTF8(filename);
2734 bool exists= (wxFileExists(filename) || (utf8test!=0));
2735
2736 if(mustExist && !exists)
2737 {
2738 wxLogError(wxString(_("This file does not exist:")) + wxT("\n\n") + filename);
2739 return;
2740 }
2741
2742 wxFileName fn(filename);
2743 title=fn.GetFullName();
2744
2745 // test parent dir
2746 if(MadDirExists(fn.GetPath(wxPATH_GET_VOLUME))==0)
2747 {
2748 wxLogError(wxString(_("The Parent Directory of this file does not exist:")) + wxT("\n\n") + filename);
2749 return;
2750 }
2751
2752 // test access mode
2753 MadConvFileName_WC2MB_UseLibc uselibc(utf8test<0);
2754 if(exists && wxFile::Access(filename.c_str(), wxFile::read)==false)
2755 {
2756 wxLogError(wxString(_("Cannot access this file:")) + wxT("\n\n") + filename);
2757 return;
2758 }
2759 }
2760
2761 MadEdit *madedit=g_ActiveMadEdit;
2762
2763 if(!filename.IsEmpty() && madedit!=NULL
2764 && !madedit->IsModified() && madedit->GetFileName().IsEmpty())
2765 {
2766 // load file in g_ActiveMadEdit
2767 }
2768 else
2769 {
2770 // create a new MadEdit
2771 madedit=new MadEdit(m_Notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, /*wxSIMPLE_BORDER|*/wxWANTS_CHARS);
2772 madedit->SetWindowStyleFlag(madedit->GetWindowStyleFlag() & ~wxTAB_TRAVERSAL);
2773 //madedit->SetDropTarget(new DnDFile());
2774 madedit->SetOnSelectionChanged(&OnEditSelectionChanged);
2775 madedit->SetOnStatusChanged(&OnEditStatusChanged);
2776 madedit->SetOnToggleWindow(&OnEditToggleWindow);
2777 madedit->SetOnMouseRightUp(&OnEditMouseRightUp);
2778
2779 madedit->Connect(wxEVT_KEY_DOWN, wxKeyEventHandler(MadEditFrame::MadEditFrameKeyDown));
2780
2781 g_PrevPageID=m_Notebook->GetSelection();
2782
2783 m_Notebook->AddPage(madedit, title, true);
2784 m_Notebook->SetSelection(m_Notebook->GetPageCount()-1);
2785 }
2786
2787 if(!filename.IsEmpty())
2788 {
2789 wxString enc, fn;
2790 wxFileOffset pos;
2791 int fs;
2792 pos = g_FileCaretPosManager.GetRestoreData(filename, enc, fn, fs);
2793
2794 if(!fn.IsEmpty() && fs > 0)
2795 {
2796 madedit->SetTextFont(fn, fs, false);
2797 }
2798
2799 if(!madedit->LoadFromFile(filename, enc) && mustExist)
2800 {
2801 wxLogError(wxString(_("Cannot load this file:")) + wxT("\n\n") + filename);
2802 }
2803 else
2804 {
2805 // add filename, fontname, and encoding to recentlist
2806 m_RecentFiles->AddFileToHistory(filename);
2807
2808 bool rcp;
2809 m_Config->Read(wxT("/MadEdit/RestoreCaretPos"), &rcp, true);
2810 if(rcp)
2811 {
2812 madedit->SetCaretPosition(pos);
2813 }
2814 }
2815 }
2816 wxString str;
2817 int size;
2818 madedit->GetFont(str, size);
2819 m_RecentFonts->AddFileToHistory(str);
2820
2821 str= wxString(wxT('['))+ madedit->GetEncodingName() + wxT("] ")+ wxGetTranslation(madedit->GetEncodingDescription().c_str());
2822 m_RecentEncodings->AddFileToHistory(str);
2823
2824 madedit->SetFocus();
2825
2826 if(g_ActiveMadEdit != madedit)
2827 {
2828 g_ActiveMadEdit=madedit;
2829 OnEditSelectionChanged(g_ActiveMadEdit);
2830 OnEditStatusChanged(g_ActiveMadEdit);
2831 }
2832
2833 title=g_ActiveMadEdit->GetFileName();
2834 if(title.IsEmpty())
2835 {
2836 title=m_Notebook->GetPageText( GetIdByEdit(g_ActiveMadEdit) );
2837 }
2838
2839 if(g_ActiveMadEdit->IsModified() && title[title.Len()-1]!=wxT('*'))
2840 title += wxT('*');
2841
2842 SetTitle(wxString(wxT("MadEdit - ["))+ title +wxString(wxT("] ")));
2843 }
2844
CloseFile(int pageId)2845 void MadEditFrame::CloseFile(int pageId)
2846 {
2847 if(QueryCloseFile(pageId))
2848 {
2849 m_PageClosing=true;
2850 g_CheckModTimeForReload=false;
2851 m_Notebook->DeletePage(pageId);
2852 if(m_Notebook->GetPageCount()==0) OnNotebookPageClosed();
2853 g_CheckModTimeForReload=true;
2854 m_PageClosing=false;
2855 }
2856 }
2857
QueryCloseFile(int idx)2858 bool MadEditFrame::QueryCloseFile(int idx)
2859 {
2860 MadEdit *madedit=(MadEdit*)m_Notebook->GetPage(idx);
2861 if(madedit==NULL)
2862 return false;
2863
2864 wxString name=m_Notebook->GetPageText(idx);
2865 if(name[name.Len()-1]==wxT('*'))
2866 name.Truncate(name.Len()-1);
2867
2868 if(madedit->Save(true, name, false)==wxID_CANCEL)
2869 return false;
2870
2871 g_FileCaretPosManager.Add(madedit);
2872
2873 return true;
2874 }
2875
QueryCloseAllFiles()2876 bool MadEditFrame::QueryCloseAllFiles()
2877 {
2878 if(m_Notebook->GetPageCount()==0) return true;
2879
2880 int selid=m_Notebook->GetSelection();
2881 if(selid==-1) return true;
2882
2883 MadEdit *madedit=(MadEdit*)m_Notebook->GetPage(selid);
2884 wxString name;
2885 if(madedit->IsModified())
2886 {
2887 name=m_Notebook->GetPageText(selid);
2888 if(name[name.Len()-1]==wxT('*'))
2889 name.Truncate(name.Len()-1);
2890
2891 if(madedit->Save(true, name, false)==wxID_CANCEL)
2892 return false;
2893 }
2894 g_FileCaretPosManager.Add(madedit);
2895
2896 int count=int(m_Notebook->GetPageCount());
2897 int id=0, sid=selid;
2898 do
2899 {
2900 if(id!=selid)
2901 {
2902 madedit=(MadEdit*)m_Notebook->GetPage(id);
2903 if(madedit->IsModified())
2904 {
2905 m_Notebook->SetSelection(id);
2906
2907 MadEdit *cme=(MadEdit*)m_Notebook->GetPage(m_Notebook->GetSelection());
2908 if(cme!=g_ActiveMadEdit)
2909 {
2910 wxAuiNotebookEvent event(wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGED, m_Notebook->GetId());
2911 event.SetSelection(id);
2912 event.SetOldSelection(sid);
2913 event.SetEventObject(this);
2914 OnNotebookPageChanged(event);
2915 }
2916
2917 name=m_Notebook->GetPageText(id);
2918 if(name[name.Len()-1]==wxT('*'))
2919 name.Truncate(name.Len()-1);
2920
2921 if(madedit->Save(true, name, false)==wxID_CANCEL)
2922 return false;
2923
2924 sid=id;
2925 }
2926 g_FileCaretPosManager.Add(madedit);
2927 }
2928 }
2929 while(++id<count);
2930
2931 return true;
2932 }
2933
2934 //---------------------------------------------------------------------------
2935
OnUpdateUI_MenuFile_CheckCount(wxUpdateUIEvent & event)2936 void MadEditFrame::OnUpdateUI_MenuFile_CheckCount(wxUpdateUIEvent& event)
2937 {
2938 event.Enable(g_ActiveMadEdit!=NULL);
2939 }
2940
OnUpdateUI_MenuFileReload(wxUpdateUIEvent & event)2941 void MadEditFrame::OnUpdateUI_MenuFileReload(wxUpdateUIEvent& event)
2942 {
2943 event.Enable(g_ActiveMadEdit!=NULL &&
2944 !g_ActiveMadEdit->GetFileName().IsEmpty());
2945 }
2946
OnUpdateUI_MenuFileRecentFiles(wxUpdateUIEvent & event)2947 void MadEditFrame::OnUpdateUI_MenuFileRecentFiles(wxUpdateUIEvent& event)
2948 {
2949 event.Enable(m_RecentFiles->GetCount()!=0);
2950 }
2951
OnUpdateUI_MenuEditUndo(wxUpdateUIEvent & event)2952 void MadEditFrame::OnUpdateUI_MenuEditUndo(wxUpdateUIEvent& event)
2953 {
2954 event.Enable(g_ActiveMadEdit && g_ActiveMadEdit->CanUndo());
2955 }
OnUpdateUI_MenuEditRedo(wxUpdateUIEvent & event)2956 void MadEditFrame::OnUpdateUI_MenuEditRedo(wxUpdateUIEvent& event)
2957 {
2958 event.Enable(g_ActiveMadEdit && g_ActiveMadEdit->CanRedo());
2959 }
2960
OnUpdateUI_MenuEdit_CheckSelection(wxUpdateUIEvent & event)2961 void MadEditFrame::OnUpdateUI_MenuEdit_CheckSelection(wxUpdateUIEvent& event)
2962 {
2963 event.Enable(g_ActiveMadEdit && g_ActiveMadEdit->IsSelected());
2964 }
2965
OnUpdateUI_MenuEdit_CheckSelSize(wxUpdateUIEvent & event)2966 void MadEditFrame::OnUpdateUI_MenuEdit_CheckSelSize(wxUpdateUIEvent& event)
2967 {
2968 event.Enable(g_ActiveMadEdit && g_ActiveMadEdit->GetSelectionSize()>0);
2969 }
2970
OnUpdateUI_MenuEditPaste(wxUpdateUIEvent & event)2971 void MadEditFrame::OnUpdateUI_MenuEditPaste(wxUpdateUIEvent& event)
2972 {
2973 #ifdef __WXMSW__
2974 event.Enable(g_ActiveMadEdit && g_ActiveMadEdit->CanPaste());
2975 #else
2976 event.Enable(g_ActiveMadEdit!=NULL); // workaround for high CPU loading in Linux
2977 #endif
2978 }
OnUpdateUI_Menu_CheckSize(wxUpdateUIEvent & event)2979 void MadEditFrame::OnUpdateUI_Menu_CheckSize(wxUpdateUIEvent& event)
2980 {
2981 event.Enable(g_ActiveMadEdit && g_ActiveMadEdit->GetFileSize());
2982 }
2983
OnUpdateUI_MenuEditDeleteLine(wxUpdateUIEvent & event)2984 void MadEditFrame::OnUpdateUI_MenuEditDeleteLine(wxUpdateUIEvent& event)
2985 {
2986 event.Enable(g_ActiveMadEdit && g_ActiveMadEdit->GetEditMode()!=emHexMode);
2987 }
2988
OnUpdateUI_MenuEditInsertTabChar(wxUpdateUIEvent & event)2989 void MadEditFrame::OnUpdateUI_MenuEditInsertTabChar(wxUpdateUIEvent& event)
2990 {
2991 event.Enable(g_ActiveMadEdit!=NULL && g_ActiveMadEdit->GetEditMode()!=emHexMode);
2992 }
OnUpdateUI_MenuEditInsertDateTime(wxUpdateUIEvent & event)2993 void MadEditFrame::OnUpdateUI_MenuEditInsertDateTime(wxUpdateUIEvent& event)
2994 {
2995 event.Enable(g_ActiveMadEdit!=NULL && g_ActiveMadEdit->GetEditMode()!=emHexMode);
2996 }
2997
OnUpdateUI_Menu_CheckTextFile(wxUpdateUIEvent & event)2998 void MadEditFrame::OnUpdateUI_Menu_CheckTextFile(wxUpdateUIEvent& event)
2999 {
3000 event.Enable(g_ActiveMadEdit!=NULL && g_ActiveMadEdit->GetEditMode()!=emHexMode);
3001 }
3002
OnUpdateUI_MenuEditCopyAsHexString(wxUpdateUIEvent & event)3003 void MadEditFrame::OnUpdateUI_MenuEditCopyAsHexString(wxUpdateUIEvent& event)
3004 {
3005 event.Enable(g_ActiveMadEdit && //g_ActiveMadEdit->GetEditMode()==emHexMode &&
3006 g_ActiveMadEdit->IsSelected());
3007 }
3008
OnUpdateUI_MenuIndent(wxUpdateUIEvent & event)3009 void MadEditFrame::OnUpdateUI_MenuIndent(wxUpdateUIEvent& event)
3010 {
3011 event.Enable(g_ActiveMadEdit && !g_ActiveMadEdit->IsReadOnly() &&
3012 g_ActiveMadEdit->GetEditMode()!=emHexMode );
3013 }
3014
OnUpdateUI_MenuComment(wxUpdateUIEvent & event)3015 void MadEditFrame::OnUpdateUI_MenuComment(wxUpdateUIEvent& event)
3016 {
3017 event.Enable(g_ActiveMadEdit && !g_ActiveMadEdit->IsReadOnly() &&
3018 g_ActiveMadEdit->HasLineComment() && g_ActiveMadEdit->GetEditMode()!=emHexMode );
3019 }
3020
OnUpdateUI_MenuSearchGoTo(wxUpdateUIEvent & event)3021 void MadEditFrame::OnUpdateUI_MenuSearchGoTo(wxUpdateUIEvent& event)
3022 {
3023 event.Enable(g_ActiveMadEdit!=NULL);
3024 }
3025
OnUpdateUI_MenuSearchGoToBrace(wxUpdateUIEvent & event)3026 void MadEditFrame::OnUpdateUI_MenuSearchGoToBrace(wxUpdateUIEvent& event)
3027 {
3028 event.Enable(g_ActiveMadEdit!=NULL && g_ActiveMadEdit->HasBracePair() &&
3029 g_ActiveMadEdit->GetEditMode()!=emHexMode);
3030 }
3031
OnUpdateUI_MenuViewEncoding(wxUpdateUIEvent & event)3032 void MadEditFrame::OnUpdateUI_MenuViewEncoding(wxUpdateUIEvent& event)
3033 {
3034 if(g_ActiveMadEdit)
3035 {
3036 event.Enable(true);
3037 wxString str=wxString(wxT('[')) + g_ActiveMadEdit->GetEncodingName() + wxT("] ") + wxGetTranslation(g_ActiveMadEdit->GetEncodingDescription().c_str());
3038 event.SetText(wxString(_("Encoding: ")) + str);
3039
3040 //m_RecentEncodings->AddFileToHistory(str);
3041 }
3042 else
3043 {
3044 event.Enable(false);
3045 event.SetText(wxString(_("Encoding: ")) + _("None") );
3046 }
3047 }
3048
OnUpdateUI_MenuViewSyntax(wxUpdateUIEvent & event)3049 void MadEditFrame::OnUpdateUI_MenuViewSyntax(wxUpdateUIEvent& event)
3050 {
3051 if(g_ActiveMadEdit)
3052 {
3053 event.Enable(true);
3054 event.SetText(wxString(_("Syntax Type: ")) + g_ActiveMadEdit->GetSyntaxTitle());
3055 }
3056 else
3057 {
3058 event.Enable(false);
3059 event.SetText(wxString(_("Syntax Type: ")) + _("None") );
3060 }
3061 }
3062
OnUpdateUI_MenuViewFontName(wxUpdateUIEvent & event)3063 void MadEditFrame::OnUpdateUI_MenuViewFontName(wxUpdateUIEvent& event)
3064 {
3065 if(g_ActiveMadEdit)
3066 {
3067 event.Enable(true);
3068 wxString name;
3069 int size;
3070 g_ActiveMadEdit->GetFont(name, size);
3071 event.SetText(wxString(_("Font Name: ")) + name);
3072 }
3073 else
3074 {
3075 event.Enable(false);
3076 event.SetText(wxString(_("Font Name: ")) + _("None") );
3077 }
3078 }
OnUpdateUI_MenuViewFontSize(wxUpdateUIEvent & event)3079 void MadEditFrame::OnUpdateUI_MenuViewFontSize(wxUpdateUIEvent& event)
3080 {
3081 if(g_ActiveMadEdit)
3082 {
3083 event.Enable(true);
3084 wxString name;
3085 int size;
3086 g_ActiveMadEdit->GetFont(name, size);
3087 event.SetText(wxString(_("Font Size: ")) << size);
3088 }
3089 else
3090 {
3091 event.Enable(false);
3092 event.SetText(wxString(_("Font Size: ")) + _("None") );
3093 }
3094 }
OnUpdateUI_MenuViewSetFont(wxUpdateUIEvent & event)3095 void MadEditFrame::OnUpdateUI_MenuViewSetFont(wxUpdateUIEvent& event)
3096 {
3097 event.Enable(g_ActiveMadEdit!=NULL);
3098 }
3099
OnUpdateUI_MenuViewFixedWidthMode(wxUpdateUIEvent & event)3100 void MadEditFrame::OnUpdateUI_MenuViewFixedWidthMode(wxUpdateUIEvent& event)
3101 {
3102 event.Enable(g_ActiveMadEdit!=NULL);
3103 event.Check(g_ActiveMadEdit && g_ActiveMadEdit->GetFixedWidthMode());
3104 }
3105
OnUpdateUI_MenuViewTabColumn(wxUpdateUIEvent & event)3106 void MadEditFrame::OnUpdateUI_MenuViewTabColumn(wxUpdateUIEvent& event)
3107 {
3108 if(g_ActiveMadEdit!=NULL)
3109 {
3110 event.Enable(true);
3111 event.SetText(wxString(_("Tab Column: ")) << g_ActiveMadEdit->GetTabColumns());
3112 }
3113 else
3114 {
3115 event.Enable(false);
3116 event.SetText(wxString(_("Tab Column: ")) + _("None") );
3117 }
3118 }
3119
OnUpdateUI_MenuViewLineSpacing(wxUpdateUIEvent & event)3120 void MadEditFrame::OnUpdateUI_MenuViewLineSpacing(wxUpdateUIEvent& event)
3121 {
3122 if(g_ActiveMadEdit!=NULL)
3123 {
3124 event.Enable(true);
3125 event.SetText(wxString(_("Line Spacing: ")) << g_ActiveMadEdit->GetLineSpacing() << wxT('%'));
3126 }
3127 else
3128 {
3129 event.Enable(false);
3130 event.SetText(wxString(_("Line Spacing: ")) + _("None") );
3131 }
3132 }
3133
OnUpdateUI_MenuViewNoWrap(wxUpdateUIEvent & event)3134 void MadEditFrame::OnUpdateUI_MenuViewNoWrap(wxUpdateUIEvent& event)
3135 {
3136 event.Enable(g_ActiveMadEdit!=NULL);
3137 event.Check(g_ActiveMadEdit && g_ActiveMadEdit->GetWordWrapMode()==wwmNoWrap);
3138 }
OnUpdateUI_MenuViewWrapByWindow(wxUpdateUIEvent & event)3139 void MadEditFrame::OnUpdateUI_MenuViewWrapByWindow(wxUpdateUIEvent& event)
3140 {
3141 event.Enable(g_ActiveMadEdit!=NULL);
3142 event.Check(g_ActiveMadEdit && g_ActiveMadEdit->GetWordWrapMode()==wwmWrapByWindow);
3143 }
OnUpdateUI_MenuViewWrapByColumn(wxUpdateUIEvent & event)3144 void MadEditFrame::OnUpdateUI_MenuViewWrapByColumn(wxUpdateUIEvent& event)
3145 {
3146 event.Enable(g_ActiveMadEdit!=NULL);
3147 event.Check(g_ActiveMadEdit && g_ActiveMadEdit->GetWordWrapMode()==wwmWrapByColumn);
3148 }
3149
OnUpdateUI_MenuViewDisplayLineNumber(wxUpdateUIEvent & event)3150 void MadEditFrame::OnUpdateUI_MenuViewDisplayLineNumber(wxUpdateUIEvent& event)
3151 {
3152 event.Enable(g_ActiveMadEdit!=NULL);
3153 event.Check(g_ActiveMadEdit && g_ActiveMadEdit->GetDisplayLineNumber());
3154 }
OnUpdateUI_MenuViewShowEndOfLine(wxUpdateUIEvent & event)3155 void MadEditFrame::OnUpdateUI_MenuViewShowEndOfLine(wxUpdateUIEvent& event)
3156 {
3157 event.Enable(g_ActiveMadEdit!=NULL);
3158 event.Check(g_ActiveMadEdit && g_ActiveMadEdit->GetShowEndOfLine());
3159 }
OnUpdateUI_MenuViewShowTabChar(wxUpdateUIEvent & event)3160 void MadEditFrame::OnUpdateUI_MenuViewShowTabChar(wxUpdateUIEvent& event)
3161 {
3162 event.Enable(g_ActiveMadEdit!=NULL);
3163 event.Check(g_ActiveMadEdit && g_ActiveMadEdit->GetShowTabChar());
3164 }
OnUpdateUI_MenuViewShowSpaceChar(wxUpdateUIEvent & event)3165 void MadEditFrame::OnUpdateUI_MenuViewShowSpaceChar(wxUpdateUIEvent& event)
3166 {
3167 event.Enable(g_ActiveMadEdit!=NULL);
3168 event.Check(g_ActiveMadEdit && g_ActiveMadEdit->GetShowSpaceChar());
3169 }
OnUpdateUI_MenuViewMarkActiveLine(wxUpdateUIEvent & event)3170 void MadEditFrame::OnUpdateUI_MenuViewMarkActiveLine(wxUpdateUIEvent& event)
3171 {
3172 event.Enable(g_ActiveMadEdit!=NULL);
3173 event.Check(g_ActiveMadEdit && g_ActiveMadEdit->GetMarkActiveLine());
3174 }
OnUpdateUI_MenuViewMarkBracePair(wxUpdateUIEvent & event)3175 void MadEditFrame::OnUpdateUI_MenuViewMarkBracePair(wxUpdateUIEvent& event)
3176 {
3177 event.Enable(g_ActiveMadEdit!=NULL);
3178 event.Check(g_ActiveMadEdit && g_ActiveMadEdit->GetMarkBracePair());
3179 }
3180
OnUpdateUI_MenuViewTextMode(wxUpdateUIEvent & event)3181 void MadEditFrame::OnUpdateUI_MenuViewTextMode(wxUpdateUIEvent& event)
3182 {
3183 event.Enable(g_ActiveMadEdit!=NULL);
3184 event.Check(g_ActiveMadEdit && g_ActiveMadEdit->GetEditMode()==emTextMode);
3185 }
OnUpdateUI_MenuViewColumnMode(wxUpdateUIEvent & event)3186 void MadEditFrame::OnUpdateUI_MenuViewColumnMode(wxUpdateUIEvent& event)
3187 {
3188 event.Enable(g_ActiveMadEdit!=NULL);
3189 event.Check(g_ActiveMadEdit && g_ActiveMadEdit->GetEditMode()==emColumnMode);
3190 }
OnUpdateUI_MenuViewHexMode(wxUpdateUIEvent & event)3191 void MadEditFrame::OnUpdateUI_MenuViewHexMode(wxUpdateUIEvent& event)
3192 {
3193 event.Enable(g_ActiveMadEdit!=NULL);
3194 event.Check(g_ActiveMadEdit && g_ActiveMadEdit->GetEditMode()==emHexMode);
3195 }
3196
OnUpdateUI_MenuToolsByteOrderMark(wxUpdateUIEvent & event)3197 void MadEditFrame::OnUpdateUI_MenuToolsByteOrderMark(wxUpdateUIEvent& event)
3198 {
3199 MadEncodingType type;
3200 if(g_ActiveMadEdit && g_ActiveMadEdit->IsTextFile()
3201 && (type=g_ActiveMadEdit->GetEncodingType())!=etSingleByte
3202 && type!=etDoubleByte) // unicode format
3203 {
3204 event.Enable(true);
3205 if(g_ActiveMadEdit->HasBOM())
3206 {
3207 event.SetText(_("Has Unicode BOM (Byte-Order Mark)"));
3208 }
3209 else
3210 {
3211 event.SetText(_("Has No Unicode BOM (Byte-Order Mark)"));
3212 }
3213 }
3214 else
3215 {
3216 event.Enable(false);
3217 event.SetText(_("Has No Unicode BOM (Byte-Order Mark)"));
3218 }
3219 }
OnUpdateUI_MenuToolsNewLineChar(wxUpdateUIEvent & event)3220 void MadEditFrame::OnUpdateUI_MenuToolsNewLineChar(wxUpdateUIEvent& event)
3221 {
3222 wxString text(_("NewLine Char (File Format): "));
3223 if(g_ActiveMadEdit && g_ActiveMadEdit->IsTextFile())
3224 {
3225 event.Enable(true);
3226
3227 switch(g_ActiveMadEdit->GetNewLineType())
3228 {
3229 case nltDOS: text += wxT("CRLF/0D0A (DOS)"); break;
3230 case nltUNIX: text += wxT("LF/0A (UNIX)"); break;
3231 case nltMAC: text += wxT("CR/0D (MAC)"); break;
3232 default: break;
3233 }
3234 event.SetText(text);
3235 }
3236 else
3237 {
3238 event.Enable(false);
3239 event.SetText(text + _("None"));
3240 }
3241 }
OnUpdateUI_MenuToolsInsertNewLineChar(wxUpdateUIEvent & event)3242 void MadEditFrame::OnUpdateUI_MenuToolsInsertNewLineChar(wxUpdateUIEvent& event)
3243 {
3244 wxString text(_("Press Enter to Insert NewLine Char: "));
3245 if(g_ActiveMadEdit && g_ActiveMadEdit->IsTextFile())
3246 {
3247 event.Enable(true);
3248
3249 switch(g_ActiveMadEdit->GetInsertNewLineType())
3250 {
3251 case nltDOS: text += wxT("CRLF/0D0A (DOS)"); break;
3252 case nltUNIX: text += wxT("LF/0A (UNIX)"); break;
3253 case nltMAC: text += wxT("CR/0D (MAC)"); break;
3254 default: break;
3255 }
3256 event.SetText(text);
3257 }
3258 else
3259 {
3260 event.Enable(false);
3261 event.SetText(text + _("None"));
3262 }
3263 }
3264
OnUpdateUI_MenuToolsConvertNL(wxUpdateUIEvent & event)3265 void MadEditFrame::OnUpdateUI_MenuToolsConvertNL(wxUpdateUIEvent& event)
3266 {
3267 event.Enable(g_ActiveMadEdit!=NULL && !g_ActiveMadEdit->IsReadOnly());
3268 }
3269
OnUpdateUI_MenuToolsConvertEncoding(wxUpdateUIEvent & event)3270 void MadEditFrame::OnUpdateUI_MenuToolsConvertEncoding(wxUpdateUIEvent& event)
3271 {
3272 event.Enable(g_ActiveMadEdit!=NULL &&
3273 !g_ActiveMadEdit->IsReadOnly() && g_ActiveMadEdit->IsTextFile());
3274 }
3275
OnUpdateUI_MenuWindow_CheckCount(wxUpdateUIEvent & event)3276 void MadEditFrame::OnUpdateUI_MenuWindow_CheckCount(wxUpdateUIEvent& event)
3277 {
3278 event.Enable(m_Notebook->GetPageCount()>=2);
3279 }
3280
3281 //---------------------------------------------------------------------------
3282
OnFileNew(wxCommandEvent & event)3283 void MadEditFrame::OnFileNew(wxCommandEvent& event)
3284 {
3285 OpenFile(wxEmptyString, false);
3286 }
3287
OnFileOpen(wxCommandEvent & event)3288 void MadEditFrame::OnFileOpen(wxCommandEvent& event)
3289 {
3290 wxString dir;
3291 if(m_RecentFiles->GetCount())
3292 {
3293 wxFileName filename(m_RecentFiles->GetHistoryFile(0));
3294 dir=filename.GetPath(wxPATH_GET_VOLUME|wxPATH_GET_SEPARATOR);
3295 }
3296
3297 wxFileDialog dlg(this, _("Open File"), dir, wxEmptyString, wxFileSelectorDefaultWildcardStr,
3298 #if wxCHECK_VERSION(2,8,0)
3299 wxFD_OPEN|wxFD_MULTIPLE );
3300 #else
3301 wxOPEN|wxMULTIPLE );
3302 #endif
3303
3304 if (dlg.ShowModal()==wxID_OK)
3305 {
3306 wxArrayString filenames;
3307
3308 g_MB2WC_check_dir_filename=true;
3309 dlg.GetPaths(filenames);
3310 g_MB2WC_check_dir_filename=false;
3311
3312 size_t count=filenames.GetCount();
3313 for(size_t i=0;i<count;i++)
3314 {
3315 OpenFile(filenames[i], false);
3316 }
3317 }
3318 }
3319
OnFileSave(wxCommandEvent & event)3320 void MadEditFrame::OnFileSave(wxCommandEvent& event)
3321 {
3322 if(g_ActiveMadEdit!=NULL)
3323 {
3324 wxString name=m_Notebook->GetPageText(m_Notebook->GetSelection());
3325 if(name[name.Len()-1]==wxT('*'))
3326 name.Truncate(name.Len()-1);
3327
3328 if(g_ActiveMadEdit->Save(false, name, false)==wxID_YES)
3329 {
3330 m_RecentFiles->AddFileToHistory(g_ActiveMadEdit->GetFileName());
3331 }
3332 }
3333 }
3334
OnFileSaveAs(wxCommandEvent & event)3335 void MadEditFrame::OnFileSaveAs(wxCommandEvent& event)
3336 {
3337 if(g_ActiveMadEdit!=NULL)
3338 {
3339 wxString name=m_Notebook->GetPageText(m_Notebook->GetSelection());
3340 if(name[name.Len()-1]==wxT('*'))
3341 name.Truncate(name.Len()-1);
3342
3343 if(g_ActiveMadEdit->Save(false, name, true)==wxID_YES)
3344 {
3345 m_RecentFiles->AddFileToHistory(g_ActiveMadEdit->GetFileName());
3346 }
3347 }
3348 }
3349
OnFileSaveAll(wxCommandEvent & event)3350 void MadEditFrame::OnFileSaveAll(wxCommandEvent& event)
3351 {
3352 int selid=m_Notebook->GetSelection();
3353 if(selid==-1) return; // no file was opened
3354
3355 MadEdit *madedit=(MadEdit*)m_Notebook->GetPage(selid);
3356 wxString name;
3357 if(madedit->IsModified())
3358 {
3359 name=m_Notebook->GetPageText(selid);
3360 if(name[name.Len()-1]==wxT('*'))
3361 name.Truncate(name.Len()-1);
3362
3363 if(madedit->Save(false, name, false)==wxID_CANCEL)
3364 return;
3365 }
3366
3367 int count=int(m_Notebook->GetPageCount());
3368 int id=0, sid=selid;
3369 do
3370 {
3371 if(id!=selid)
3372 {
3373 madedit=(MadEdit*)m_Notebook->GetPage(id);
3374 if(madedit->IsModified())
3375 {
3376 if(madedit->GetFileName().IsEmpty())
3377 {
3378 m_Notebook->SetSelection(id);
3379
3380 MadEdit *cme=(MadEdit*)m_Notebook->GetPage(m_Notebook->GetSelection());
3381 if(cme!=g_ActiveMadEdit)
3382 {
3383 wxAuiNotebookEvent event(wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGED, m_Notebook->GetId());
3384 event.SetSelection(id);
3385 event.SetOldSelection(sid);
3386 event.SetEventObject(this);
3387 OnNotebookPageChanged(event);
3388 }
3389
3390 }
3391 name=m_Notebook->GetPageText(id);
3392 if(name[name.Len()-1]==wxT('*'))
3393 name.Truncate(name.Len()-1);
3394
3395 if(madedit->Save(false, name, false)==wxID_CANCEL)
3396 return;
3397
3398 sid=id;
3399 }
3400 }
3401 }
3402 while(++id<count);
3403 }
3404
OnFileReload(wxCommandEvent & event)3405 void MadEditFrame::OnFileReload(wxCommandEvent& event)
3406 {
3407 if(g_ActiveMadEdit)
3408 {
3409 g_ActiveMadEdit->Reload();
3410 }
3411 }
3412
OnFileClose(wxCommandEvent & event)3413 void MadEditFrame::OnFileClose(wxCommandEvent& event)
3414 {
3415 int idx=m_Notebook->GetSelection();
3416 CloseFile(idx);
3417 }
3418
OnFileCloseAll(wxCommandEvent & event)3419 void MadEditFrame::OnFileCloseAll(wxCommandEvent& event)
3420 {
3421 if(QueryCloseAllFiles())
3422 {
3423 m_PageClosing=true;
3424 //m_Notebook->DeleteAllPages();
3425 while(m_Notebook->GetPageCount()!=0)
3426 {
3427 m_Notebook->DeletePage(0);
3428 }
3429 m_PageClosing=false;
3430
3431 g_ActiveMadEdit=NULL;
3432 SetTitle(wxString(wxT("MadEdit ")));
3433 OnEditSelectionChanged(NULL);
3434 OnEditStatusChanged(NULL);
3435 }
3436 }
3437
OnFilePageSetup(wxCommandEvent & event)3438 void MadEditFrame::OnFilePageSetup(wxCommandEvent& event)
3439 {
3440 //(*g_PageSetupData) = *g_PrintData;
3441
3442 wxPageSetupDialog pageSetupDialog(this, g_PageSetupData);
3443 if(pageSetupDialog.ShowModal()==wxID_OK)
3444 //pageSetupDialog.ShowModal();
3445 {
3446 //(*g_PrintData) = pageSetupDialog.GetPageSetupData().GetPrintData();
3447 (*g_PageSetupData) = pageSetupDialog.GetPageSetupData();
3448 //g_PageSetupData->SetPrintData( pageSetupDialog.GetPageSetupData().GetPrintData() );
3449
3450 wxString oldpath=m_Config->GetPath();
3451 m_Config->SetPath(wxT("/MadEdit"));
3452
3453 m_Config->Write(wxT("PageOrientation"), g_PageSetupData->GetPrintData().GetOrientation());
3454
3455 //((wxFrame*)wxTheApp->GetTopWindow())->SetTitle(wxString::Format(wxT("%d"), g_PageSetupData->GetPaperId()));
3456 wxSize size=g_PageSetupData->GetPaperSize();
3457 m_Config->Write(wxT("PagePaperSizeW"), size.x);
3458 m_Config->Write(wxT("PagePaperSizeH"), size.y);
3459
3460 wxPoint p=g_PageSetupData->GetMarginTopLeft();
3461 m_Config->Write(wxT("PageLeftMargin"), p.x);
3462 m_Config->Write(wxT("PageTopMargin"), p.y);
3463 p=g_PageSetupData->GetMarginBottomRight();
3464 m_Config->Write(wxT("PageRightMargin"), p.x);
3465 m_Config->Write(wxT("PageBottomMargin"), p.y);
3466
3467 m_Config->SetPath(oldpath);
3468 }
3469 }
3470
OnFilePrintPreview(wxCommandEvent & event)3471 void MadEditFrame::OnFilePrintPreview(wxCommandEvent& event)
3472 {
3473 if(g_ActiveMadEdit==NULL) return;
3474
3475 // Pass two printout objects: for preview, and possible printing.
3476 wxPrintDialogData printDialogData(g_PageSetupData->GetPrintData());//*g_PrintData);
3477
3478 wxPrintPreview *preview = new wxPrintPreview(new MadPrintout, new MadPrintout, &printDialogData);
3479
3480 //#ifdef __WXMSW__
3481 //preview->SetZoom(30);
3482 //#endif
3483
3484 if (!preview->Ok())
3485 {
3486 delete preview;
3487 wxMessageBox(_("There was a problem previewing.\nPerhaps your current printer is not set correctly?"), _("Previewing"), wxOK);
3488 }
3489 else
3490 {
3491 wxPreviewFrame *frame = new wxPreviewFrame(preview, this, _T("MadEdit Print Preview"),
3492 wxPoint(0, 0),
3493 #ifdef __WXMSW__
3494 wxSize(600, 720)
3495 #else
3496 wxSize(600, 620)
3497 #endif
3498 );
3499
3500 frame->Centre(wxBOTH);
3501 frame->Initialize();
3502 frame->Show();
3503 }
3504 }
3505
3506
PrintOut(wxWindow * parentWin)3507 void PrintOut(wxWindow *parentWin)
3508 {
3509 wxPrintDialogData printDialogData(g_PageSetupData->GetPrintData());//*g_PrintData);
3510 wxPrinter printer(&printDialogData);
3511 MadPrintout printout;
3512
3513 if (!printer.Print(parentWin, &printout, true /*prompt*/))
3514 {
3515 if (wxPrinter::GetLastError() == wxPRINTER_ERROR)
3516 wxMessageBox(_("There was a problem printing.\nPerhaps your current printer is not set correctly?"), _("Printing"), wxOK);
3517 }
3518 else
3519 {
3520 //(*g_PrintData) = printer.GetPrintDialogData().GetPrintData();
3521 g_PageSetupData->SetPrintData(printer.GetPrintDialogData().GetPrintData());
3522 }
3523 }
3524
3525 #if defined(__WXMSW__)
3526 /* temp modal-dialog for printing */
3527 class TempPrintDialog : public wxDialog
3528 {
3529 private:
3530 DECLARE_EVENT_TABLE()
3531 public:
TempPrintDialog(wxWindow * parent,wxWindowID id=1,const wxString & title=wxT ("TopPrintDialog"),const wxPoint & pos=wxPoint (10,10),const wxSize & size=wxSize (1,1),long style=wxDIALOG_NO_PARENT)3532 TempPrintDialog(wxWindow *parent, wxWindowID id = 1, const wxString &title = wxT("TopPrintDialog"),
3533 const wxPoint& pos = wxPoint(10,10),//wxDefaultPosition,
3534 const wxSize& size = wxSize(1, 1),//wxDefaultSize,
3535 long style = wxDIALOG_NO_PARENT)
3536 : wxDialog(parent, id, title, pos, size, style), m_Printed(false) { }
~TempPrintDialog()3537 virtual ~TempPrintDialog() { }
3538
3539 void OnPaint(wxPaintEvent &evt);
3540
3541 bool m_Printed;
3542 };
3543
BEGIN_EVENT_TABLE(TempPrintDialog,wxDialog)3544 BEGIN_EVENT_TABLE(TempPrintDialog,wxDialog)
3545 EVT_PAINT(TempPrintDialog::OnPaint)
3546 END_EVENT_TABLE()
3547
3548 void TempPrintDialog::OnPaint(wxPaintEvent &evt)
3549 {
3550 if(!m_Printed)
3551 {
3552 m_Printed=true;
3553
3554 PrintOut(this);
3555
3556 Close(); //EndModal(wxID_OK);
3557 }
3558 evt.Skip();
3559 }
3560 #endif
3561
OnFilePrint(wxCommandEvent & event)3562 void MadEditFrame::OnFilePrint(wxCommandEvent& event)
3563 {
3564 if(g_ActiveMadEdit==NULL) return;
3565
3566 #if defined(__WXMSW__)
3567 // using a temp modal-dialog to avoid the user change the contents of Edit
3568 TempPrintDialog *dlg=new TempPrintDialog(this);
3569 dlg->ShowModal();
3570 delete dlg;
3571 #else
3572 PrintOut(this);
3573 #endif
3574 }
3575
3576
OnFileRecentFile(wxCommandEvent & event)3577 void MadEditFrame::OnFileRecentFile(wxCommandEvent& event)
3578 {
3579 int idx=event.GetId()-wxID_FILE1;
3580 wxString file=m_RecentFiles->GetHistoryFile(idx);
3581 if(!file.IsEmpty())
3582 {
3583 OpenFile(file, true);
3584 }
3585 }
3586
OnFileExit(wxCommandEvent & event)3587 void MadEditFrame::OnFileExit(wxCommandEvent& event)
3588 {
3589 Close(false);
3590 }
3591
OnEditUndo(wxCommandEvent & event)3592 void MadEditFrame::OnEditUndo(wxCommandEvent& event)
3593 {
3594 if(g_ActiveMadEdit) g_ActiveMadEdit->Undo();
3595 }
3596
OnEditRedo(wxCommandEvent & event)3597 void MadEditFrame::OnEditRedo(wxCommandEvent& event)
3598 {
3599 if(g_ActiveMadEdit) g_ActiveMadEdit->Redo();
3600 }
3601
OnEditCut(wxCommandEvent & event)3602 void MadEditFrame::OnEditCut(wxCommandEvent& event)
3603 {
3604 if(g_ActiveMadEdit) g_ActiveMadEdit->CutToClipboard();
3605 }
3606
OnEditCopy(wxCommandEvent & event)3607 void MadEditFrame::OnEditCopy(wxCommandEvent& event)
3608 {
3609 if(g_ActiveMadEdit) g_ActiveMadEdit->CopyToClipboard();
3610 }
3611
OnEditPaste(wxCommandEvent & event)3612 void MadEditFrame::OnEditPaste(wxCommandEvent& event)
3613 {
3614 if(g_ActiveMadEdit) g_ActiveMadEdit->PasteFromClipboard();
3615 }
3616
OnEditDelete(wxCommandEvent & event)3617 void MadEditFrame::OnEditDelete(wxCommandEvent& event)
3618 {
3619 if(g_ActiveMadEdit) g_ActiveMadEdit->Delete();
3620 }
3621
OnEditCutLine(wxCommandEvent & event)3622 void MadEditFrame::OnEditCutLine(wxCommandEvent& event)
3623 {
3624 if(g_ActiveMadEdit) g_ActiveMadEdit->CutLine();
3625 }
3626
OnEditDeleteLine(wxCommandEvent & event)3627 void MadEditFrame::OnEditDeleteLine(wxCommandEvent& event)
3628 {
3629 if(g_ActiveMadEdit) g_ActiveMadEdit->DeleteLine();
3630 }
3631
OnEditSelectAll(wxCommandEvent & event)3632 void MadEditFrame::OnEditSelectAll(wxCommandEvent& event)
3633 {
3634 if(g_ActiveMadEdit) g_ActiveMadEdit->SelectAll();
3635 }
3636
OnEditInsertTabChar(wxCommandEvent & event)3637 void MadEditFrame::OnEditInsertTabChar(wxCommandEvent& event)
3638 {
3639 if(g_ActiveMadEdit==NULL) return;
3640 g_ActiveMadEdit->InsertTabChar();
3641 }
3642
OnEditInsertDateTime(wxCommandEvent & event)3643 void MadEditFrame::OnEditInsertDateTime(wxCommandEvent& event)
3644 {
3645 if(g_ActiveMadEdit==NULL) return;
3646 g_ActiveMadEdit->InsertDateTime();
3647 }
3648
OnEditSortAscending(wxCommandEvent & event)3649 void MadEditFrame::OnEditSortAscending(wxCommandEvent& event)
3650 {
3651 if(g_ActiveMadEdit && g_ActiveMadEdit->GetEditMode()!=emHexMode)
3652 {
3653 int begin, end;
3654 g_ActiveMadEdit->GetSelectionLineId(begin, end);
3655 g_ActiveMadEdit->SortLines(sfAscending, begin, end);
3656 }
3657 }
3658
OnEditSortDescending(wxCommandEvent & event)3659 void MadEditFrame::OnEditSortDescending(wxCommandEvent& event)
3660 {
3661 if(g_ActiveMadEdit && g_ActiveMadEdit->GetEditMode()!=emHexMode)
3662 {
3663 int begin, end;
3664 g_ActiveMadEdit->GetSelectionLineId(begin, end);
3665 g_ActiveMadEdit->SortLines(sfDescending, begin, end);
3666 }
3667 }
3668
OnEditSortAscendingCase(wxCommandEvent & event)3669 void MadEditFrame::OnEditSortAscendingCase(wxCommandEvent& event)
3670 {
3671 if(g_ActiveMadEdit && g_ActiveMadEdit->GetEditMode()!=emHexMode)
3672 {
3673 int begin, end;
3674 g_ActiveMadEdit->GetSelectionLineId(begin, end);
3675 g_ActiveMadEdit->SortLines(sfAscending|sfCaseSensitive, begin, end);
3676 }
3677 }
3678
OnEditSortDescendingCase(wxCommandEvent & event)3679 void MadEditFrame::OnEditSortDescendingCase(wxCommandEvent& event)
3680 {
3681 if(g_ActiveMadEdit && g_ActiveMadEdit->GetEditMode()!=emHexMode)
3682 {
3683 int begin, end;
3684 g_ActiveMadEdit->GetSelectionLineId(begin, end);
3685 g_ActiveMadEdit->SortLines(sfDescending|sfCaseSensitive, begin, end);
3686 }
3687 }
3688
OnEditSortByOptions(wxCommandEvent & event)3689 void MadEditFrame::OnEditSortByOptions(wxCommandEvent& event)
3690 {
3691 if(g_ActiveMadEdit && g_ActiveMadEdit->GetEditMode()!=emHexMode)
3692 {
3693 wxString oldpath=m_Config->GetPath();
3694 m_Config->SetPath(wxT("/MadEdit"));
3695
3696 int order;
3697 bool cs, num, rem;
3698 m_Config->Read(wxT("SortOrder"), &order, sfAscending);
3699 m_Config->Read(wxT("SortCaseSensitive"), &cs, false);
3700 m_Config->Read(wxT("SortNumeric"), &num, false);
3701 m_Config->Read(wxT("SortRemoveDup"), &rem, false);
3702 m_Config->SetPath(oldpath);
3703
3704 MadSortFlags flags = order |
3705 (cs ? sfCaseSensitive : 0) |
3706 (num ? sfNumericSort : 0) |
3707 (rem ? sfRemoveDuplicate : 0) ;
3708
3709 int begin, end;
3710 g_ActiveMadEdit->GetSelectionLineId(begin, end);
3711
3712 g_ActiveMadEdit->SortLines(flags, begin, end);
3713 }
3714 }
3715
OnEditSortOptions(wxCommandEvent & event)3716 void MadEditFrame::OnEditSortOptions(wxCommandEvent& event)
3717 {
3718 if(g_ActiveMadEdit==NULL || g_ActiveMadEdit->GetEditMode()==emHexMode)
3719 return;
3720
3721 MadSortDialog dialog(this, -1);
3722
3723 wxString oldpath=m_Config->GetPath();
3724 m_Config->SetPath(wxT("/MadEdit"));
3725
3726 int order;
3727 bool cs, num, rem;
3728 m_Config->Read(wxT("SortOrder"), &order, sfAscending);
3729 dialog.WxRadioBoxOrder->SetSelection(order);
3730
3731 m_Config->Read(wxT("SortCaseSensitive"), &cs, false);
3732 dialog.WxCheckBoxCase->SetValue(cs);
3733
3734 m_Config->Read(wxT("SortNumeric"), &num, false);
3735 dialog.WxCheckBoxNumeric->SetValue(num);
3736
3737 m_Config->Read(wxT("SortRemoveDup"), &rem, false);
3738 dialog.WxCheckBoxRemoveDup->SetValue(rem);
3739
3740 if(dialog.ShowModal()==wxID_OK)
3741 {
3742 order = dialog.WxRadioBoxOrder->GetSelection();
3743 cs = dialog.WxCheckBoxCase->GetValue();
3744 num = dialog.WxCheckBoxNumeric->GetValue();
3745 rem = dialog.WxCheckBoxRemoveDup->GetValue();
3746
3747 m_Config->Write(wxT("SortOrder"), order);
3748 m_Config->Write(wxT("SortCaseSensitive"), cs);
3749 m_Config->Write(wxT("SortNumeric"), num);
3750 m_Config->Write(wxT("SortRemoveDup"), rem);
3751
3752 int flags = order |
3753 (cs ? sfCaseSensitive : 0) |
3754 (num ? sfNumericSort : 0) |
3755 (rem ? sfRemoveDuplicate : 0) ;
3756
3757 int begin, end;
3758 g_ActiveMadEdit->GetSelectionLineId(begin, end);
3759
3760 g_ActiveMadEdit->SortLines(flags, begin, end);
3761 }
3762
3763 m_Config->SetPath(oldpath);
3764 }
3765
OnEditCopyAsHexString(wxCommandEvent & event)3766 void MadEditFrame::OnEditCopyAsHexString(wxCommandEvent& event)
3767 {
3768 if(g_ActiveMadEdit) g_ActiveMadEdit->CopyAsHexString(false);
3769 }
OnEditCopyAsHexStringWithSpace(wxCommandEvent & event)3770 void MadEditFrame::OnEditCopyAsHexStringWithSpace(wxCommandEvent& event)
3771 {
3772 if(g_ActiveMadEdit) g_ActiveMadEdit->CopyAsHexString(true);
3773 }
3774
OnEditIncIndent(wxCommandEvent & event)3775 void MadEditFrame::OnEditIncIndent(wxCommandEvent& event)
3776 {
3777 if(g_ActiveMadEdit) g_ActiveMadEdit->IncreaseDecreaseIndent(true);
3778 }
OnEditDecIndent(wxCommandEvent & event)3779 void MadEditFrame::OnEditDecIndent(wxCommandEvent& event)
3780 {
3781 if(g_ActiveMadEdit) g_ActiveMadEdit->IncreaseDecreaseIndent(false);
3782 }
3783
OnEditComment(wxCommandEvent & event)3784 void MadEditFrame::OnEditComment(wxCommandEvent& event)
3785 {
3786 if(g_ActiveMadEdit) g_ActiveMadEdit->CommentUncomment(true);
3787 }
OnEditUncomment(wxCommandEvent & event)3788 void MadEditFrame::OnEditUncomment(wxCommandEvent& event)
3789 {
3790 if(g_ActiveMadEdit) g_ActiveMadEdit->CommentUncomment(false);
3791 }
3792
OnEditWordWrapToNewLine(wxCommandEvent & event)3793 void MadEditFrame::OnEditWordWrapToNewLine(wxCommandEvent& event)
3794 {
3795 if(g_ActiveMadEdit) g_ActiveMadEdit->ConvertWordWrapToNewLine();
3796 }
OnEditNewLineToWordWrap(wxCommandEvent & event)3797 void MadEditFrame::OnEditNewLineToWordWrap(wxCommandEvent& event)
3798 {
3799 if(g_ActiveMadEdit) g_ActiveMadEdit->ConvertNewLineToWordWrap();
3800 }
3801
OnEditToUpperCase(wxCommandEvent & event)3802 void MadEditFrame::OnEditToUpperCase(wxCommandEvent& event)
3803 {
3804 if(g_ActiveMadEdit) g_ActiveMadEdit->ToUpperCase();
3805 }
3806
OnEditToLowerCase(wxCommandEvent & event)3807 void MadEditFrame::OnEditToLowerCase(wxCommandEvent& event)
3808 {
3809 if(g_ActiveMadEdit) g_ActiveMadEdit->ToLowerCase();
3810 }
3811
OnEditInvertCase(wxCommandEvent & event)3812 void MadEditFrame::OnEditInvertCase(wxCommandEvent& event)
3813 {
3814 if(g_ActiveMadEdit) g_ActiveMadEdit->InvertCase();
3815 }
3816
OnEditToHalfWidth(wxCommandEvent & event)3817 void MadEditFrame::OnEditToHalfWidth(wxCommandEvent& event)
3818 {
3819 if(g_ActiveMadEdit) g_ActiveMadEdit->ToHalfWidth();
3820 }
3821
OnEditToHalfWidthByOptions(wxCommandEvent & event)3822 void MadEditFrame::OnEditToHalfWidthByOptions(wxCommandEvent& event)
3823 {
3824 if(g_ActiveMadEdit == NULL) return;
3825
3826 static wxArrayInt selections;
3827 static bool inited = false;
3828 if(!inited)
3829 {
3830 selections.Add(0);
3831 selections.Add(1);
3832 selections.Add(2);
3833 selections.Add(3);
3834 inited = true;
3835 }
3836
3837 wxString choices[4] = { _("ASCII characters"), _("Japanese characters"),
3838 _("Korean characters"), _("other characters") };
3839 size_t sels = wxGetMultipleChoices(selections,
3840 _("Choose the characters you want to convert:"), _("To Halfwidth by Options..."),
3841 4, choices, this );
3842
3843 if(sels > 0)
3844 {
3845 bool ascii=false, japanese=false, korean=false, other=false;
3846 for(size_t i=0; i<sels; i++)
3847 {
3848 switch(selections[i])
3849 {
3850 case 0: ascii = true; break;
3851 case 1: japanese = true; break;
3852 case 2: korean = true; break;
3853 case 3: other = true; break;
3854 }
3855 }
3856 g_ActiveMadEdit->ToHalfWidth(ascii, japanese, korean, other);
3857 }
3858 }
3859
OnEditToFullWidth(wxCommandEvent & event)3860 void MadEditFrame::OnEditToFullWidth(wxCommandEvent& event)
3861 {
3862 if(g_ActiveMadEdit) g_ActiveMadEdit->ToFullWidth();
3863 }
3864
OnEditToFullWidthByOptions(wxCommandEvent & event)3865 void MadEditFrame::OnEditToFullWidthByOptions(wxCommandEvent& event)
3866 {
3867 if(g_ActiveMadEdit == NULL) return;
3868
3869 static wxArrayInt selections;
3870 static bool inited = false;
3871 if(!inited)
3872 {
3873 selections.Add(0);
3874 selections.Add(1);
3875 selections.Add(2);
3876 selections.Add(3);
3877 inited = true;
3878 }
3879
3880 wxString choices[4] = { _("ASCII characters"), _("Japanese characters"),
3881 _("Korean characters"), _("other characters") };
3882 size_t sels = wxGetMultipleChoices(selections,
3883 _("Choose the characters you want to convert:"), _("To Fullwidth by Options..."),
3884 4, choices, this );
3885
3886 if(sels > 0)
3887 {
3888 bool ascii=false, japanese=false, korean=false, other=false;
3889 for(size_t i=0; i<sels; i++)
3890 {
3891 switch(selections[i])
3892 {
3893 case 0: ascii = true; break;
3894 case 1: japanese = true; break;
3895 case 2: korean = true; break;
3896 case 3: other = true; break;
3897 }
3898 }
3899 g_ActiveMadEdit->ToFullWidth(ascii, japanese, korean, other);
3900 }
3901 }
3902
OnEditTabToSpace(wxCommandEvent & event)3903 void MadEditFrame::OnEditTabToSpace(wxCommandEvent& event)
3904 {
3905 if(g_ActiveMadEdit) g_ActiveMadEdit->ConvertTabToSpace();
3906 }
OnEditSpaceToTab(wxCommandEvent & event)3907 void MadEditFrame::OnEditSpaceToTab(wxCommandEvent& event)
3908 {
3909 if(g_ActiveMadEdit) g_ActiveMadEdit->ConvertSpaceToTab();
3910 }
3911
OnEditTrimTrailingSpaces(wxCommandEvent & event)3912 void MadEditFrame::OnEditTrimTrailingSpaces(wxCommandEvent& event)
3913 {
3914 if(g_ActiveMadEdit && g_ActiveMadEdit->GetEditMode()!=emHexMode)
3915 g_ActiveMadEdit->TrimTrailingSpaces();
3916 }
3917
OnSearchFind(wxCommandEvent & event)3918 void MadEditFrame::OnSearchFind(wxCommandEvent& event)
3919 {
3920 if(g_ActiveMadEdit==NULL) return;
3921
3922 if(g_SearchDialog==NULL)
3923 {
3924 g_SearchDialog=new MadSearchDialog(this, -1);
3925 }
3926 if(g_ReplaceDialog==NULL)
3927 {
3928 g_ReplaceDialog=new MadReplaceDialog(this, -1);
3929 }
3930
3931 g_ReplaceDialog->Show(false);
3932
3933 g_SearchDialog->Show();
3934 g_SearchDialog->SetFocus();
3935 g_SearchDialog->Raise();
3936
3937 wxString fname;
3938 int fsize;
3939
3940 g_SearchDialog->UpdateCheckBoxByCBHex(g_SearchDialog->WxCheckBoxFindHex->GetValue());
3941
3942 g_ActiveMadEdit->GetFont(fname, fsize);
3943 g_SearchDialog->m_FindText->SetFont(fname, 14);
3944
3945 if(g_ActiveMadEdit->IsSelected())
3946 {
3947 if(g_ActiveMadEdit->GetSelectionSize()<=10240)
3948 {
3949 if(g_SearchDialog->WxCheckBoxFindHex->GetValue())
3950 {
3951 wxString ws;
3952 g_ActiveMadEdit->GetSelHexString(ws, true);
3953 g_SearchDialog->m_FindText->SetText(ws);
3954 }
3955 else if(g_SearchDialog->WxCheckBoxRegex->GetValue()==false)
3956 {
3957 wxString ws;
3958 g_ActiveMadEdit->GetSelText(ws);
3959 g_SearchDialog->m_FindText->SetText(ws);
3960 }
3961 }
3962 }
3963 else
3964 {
3965 if(g_SearchDialog->WxCheckBoxRegex->GetValue()==false &&
3966 !(g_SearchDialog->WxCheckBoxFindHex->GetValue()) )
3967 {
3968 wxString ws;
3969 g_ActiveMadEdit->GetWordFromCaretPos(ws);
3970 if(!ws.IsEmpty() && ws[0]>wxChar(0x20))
3971 {
3972 g_SearchDialog->m_FindText->SetText(ws);
3973 }
3974 }
3975 }
3976
3977 g_SearchDialog->m_FindText->SelectAll();
3978 g_SearchDialog->m_FindText->SetFocus();
3979 }
3980
OnSearchFindNext(wxCommandEvent & event)3981 void MadEditFrame::OnSearchFindNext(wxCommandEvent& event)
3982 {
3983 if(g_ActiveMadEdit==NULL) return;
3984
3985 if(g_SearchDialog==NULL)
3986 {
3987 g_SearchDialog=new MadSearchDialog(this, -1);
3988 }
3989 if(g_ReplaceDialog==NULL)
3990 {
3991 g_ReplaceDialog=new MadReplaceDialog(this, -1);
3992 }
3993
3994 g_SearchDialog->UpdateCheckBoxByCBHex(g_SearchDialog->WxCheckBoxFindHex->GetValue());
3995
3996 if(g_ActiveMadEdit->IsSelected())
3997 {
3998 if(g_ActiveMadEdit->GetSelectionSize()<=10240)
3999 {
4000 if(g_SearchDialog->WxCheckBoxFindHex->GetValue())
4001 {
4002 wxString ws;
4003 g_ActiveMadEdit->GetSelHexString(ws, true);
4004 g_SearchDialog->m_FindText->SetText(ws);
4005 }
4006 else if(g_SearchDialog->WxCheckBoxRegex->GetValue()==false)
4007 {
4008 wxString ws;
4009 g_ActiveMadEdit->GetSelText(ws);
4010 g_SearchDialog->m_FindText->SetText(ws);
4011 }
4012 }
4013 }
4014
4015 wxCommandEvent e;
4016 g_SearchDialog->WxButtonFindNextClick(e);
4017 }
4018
OnSearchFindPrevious(wxCommandEvent & event)4019 void MadEditFrame::OnSearchFindPrevious(wxCommandEvent& event)
4020 {
4021 if(g_ActiveMadEdit==NULL) return;
4022
4023 if(g_SearchDialog==NULL)
4024 {
4025 g_SearchDialog=new MadSearchDialog(this, -1);
4026 }
4027 if(g_ReplaceDialog==NULL)
4028 {
4029 g_ReplaceDialog=new MadReplaceDialog(this, -1);
4030 }
4031
4032 g_SearchDialog->UpdateCheckBoxByCBHex(g_SearchDialog->WxCheckBoxFindHex->GetValue());
4033
4034 if(g_ActiveMadEdit->IsSelected())
4035 {
4036 if(g_ActiveMadEdit->GetSelectionSize()<=10240)
4037 {
4038 if(g_SearchDialog->WxCheckBoxFindHex->GetValue())
4039 {
4040 wxString ws;
4041 g_ActiveMadEdit->GetSelHexString(ws, true);
4042 g_SearchDialog->m_FindText->SetText(ws);
4043 }
4044 else if(g_SearchDialog->WxCheckBoxRegex->GetValue()==false)
4045 {
4046 wxString ws;
4047 g_ActiveMadEdit->GetSelText(ws);
4048 g_SearchDialog->m_FindText->SetText(ws);
4049 }
4050 }
4051 }
4052
4053 wxCommandEvent e;
4054 g_SearchDialog->WxButtonFindPrevClick(e);
4055 }
4056
OnSearchReplace(wxCommandEvent & event)4057 void MadEditFrame::OnSearchReplace(wxCommandEvent& event)
4058 {
4059 if(g_ActiveMadEdit==NULL) return;
4060
4061 if(g_SearchDialog==NULL)
4062 {
4063 g_SearchDialog=new MadSearchDialog(this, -1);
4064 }
4065 if(g_ReplaceDialog==NULL)
4066 {
4067 g_ReplaceDialog=new MadReplaceDialog(this, -1);
4068 }
4069
4070 g_SearchDialog->Show(false);
4071
4072 g_ReplaceDialog->Show();
4073 g_ReplaceDialog->SetFocus();
4074 g_ReplaceDialog->Raise();
4075
4076 wxString fname;
4077 int fsize;
4078
4079 g_ReplaceDialog->UpdateCheckBoxByCBHex(g_ReplaceDialog->WxCheckBoxFindHex->GetValue());
4080
4081 g_ActiveMadEdit->GetFont(fname, fsize);
4082 g_ReplaceDialog->m_FindText->SetFont(fname, 14);
4083 g_ReplaceDialog->m_ReplaceText->SetFont(fname, 14);
4084
4085 if(g_ActiveMadEdit->IsSelected())
4086 {
4087 if(g_ActiveMadEdit->GetSelectionSize()<=10240)
4088 {
4089 if(g_ReplaceDialog->WxCheckBoxFindHex->GetValue())
4090 {
4091 wxString ws;
4092 g_ActiveMadEdit->GetSelHexString(ws, true);
4093 g_ReplaceDialog->m_FindText->SetText(ws);
4094 }
4095 else if(g_ReplaceDialog->WxCheckBoxRegex->GetValue()==false)
4096 {
4097 wxString ws;
4098 g_ActiveMadEdit->GetSelText(ws);
4099 g_ReplaceDialog->m_FindText->SetText(ws);
4100 }
4101 }
4102 }
4103 else
4104 {
4105 if(g_ReplaceDialog->WxCheckBoxRegex->GetValue()==false &&
4106 !(g_ReplaceDialog->WxCheckBoxFindHex->GetValue()) )
4107 {
4108 wxString ws;
4109 g_ActiveMadEdit->GetWordFromCaretPos(ws);
4110 if(!ws.IsEmpty() && ws[0]>wxChar(0x20))
4111 {
4112 g_ReplaceDialog->m_FindText->SetText(ws);
4113 }
4114 }
4115 }
4116
4117 g_ReplaceDialog->m_FindText->SelectAll();
4118 g_ReplaceDialog->m_FindText->SetFocus();
4119 }
4120
OnSearchFindInFiles(wxCommandEvent & event)4121 void MadEditFrame::OnSearchFindInFiles(wxCommandEvent& event)
4122 {
4123 if(g_SearchDialog==NULL)
4124 {
4125 g_SearchDialog=new MadSearchDialog(this, -1);
4126 }
4127 if(g_ReplaceDialog==NULL)
4128 {
4129 g_ReplaceDialog=new MadReplaceDialog(this, -1);
4130 }
4131 if(g_FindInFilesDialog==NULL)
4132 {
4133 g_FindInFilesDialog=new MadFindInFilesDialog(this, -1);
4134 }
4135
4136 g_FindInFilesDialog->Show();
4137 g_FindInFilesDialog->SetFocus();
4138 g_FindInFilesDialog->Raise();
4139
4140 wxString fname;
4141 int fsize;
4142 if(g_ActiveMadEdit) g_ActiveMadEdit->GetFont(fname, fsize);
4143 else g_FindInFilesDialog->m_FindText->GetFont(fname, fsize);
4144 g_FindInFilesDialog->m_FindText->SetFont(fname, 14);
4145 g_FindInFilesDialog->m_ReplaceText->SetFont(fname, 14);
4146
4147 if(g_ActiveMadEdit && g_ActiveMadEdit->IsSelected())
4148 {
4149 if(g_ActiveMadEdit->GetSelectionSize()<=10240)
4150 {
4151 if(g_FindInFilesDialog->WxCheckBoxFindHex->GetValue())
4152 {
4153 wxString ws;
4154 g_ActiveMadEdit->GetSelHexString(ws, true);
4155 g_FindInFilesDialog->m_FindText->SetText(ws);
4156 }
4157 else if(g_FindInFilesDialog->WxCheckBoxRegex->GetValue()==false)
4158 {
4159 wxString ws;
4160 g_ActiveMadEdit->GetSelText(ws);
4161 g_FindInFilesDialog->m_FindText->SetText(ws);
4162 }
4163 }
4164 }
4165 g_FindInFilesDialog->m_FindText->SelectAll();
4166 g_FindInFilesDialog->m_FindText->SetFocus();
4167 }
4168
OnSearchShowFindInFilesResults(wxCommandEvent & event)4169 void MadEditFrame::OnSearchShowFindInFilesResults(wxCommandEvent& event)
4170 {
4171 if(m_AuiManager.GetPane(m_InfoNotebook).IsShown())
4172 {
4173 m_AuiManager.GetPane(m_InfoNotebook).Hide();
4174 }
4175 else
4176 {
4177 m_AuiManager.GetPane(m_InfoNotebook).Show();
4178 }
4179 m_AuiManager.Update();
4180 }
4181
OnSearchGoToLine(wxCommandEvent & event)4182 void MadEditFrame::OnSearchGoToLine(wxCommandEvent& event)
4183 {
4184 if(g_ActiveMadEdit==NULL) return;
4185
4186 static wxString defstr;
4187 wxString str=wxGetTextFromUser(_("Line Number: (you can input HexNumber: 0xNNN)"), _("Go To Line"), defstr);
4188
4189 if(!str.IsEmpty())
4190 {
4191 defstr=str;
4192 }
4193
4194 str.Trim(false);
4195 str.Trim(true);
4196 long line;
4197 int base=10;
4198 if(str.Left(2).Lower()==wxT("0x")) base=16;
4199
4200 if(!str.IsEmpty() && str.ToLong(&line, base))
4201 {
4202 g_ActiveMadEdit->GoToLine(line);
4203 }
4204 }
4205
OnSearchGoToPosition(wxCommandEvent & event)4206 void MadEditFrame::OnSearchGoToPosition(wxCommandEvent& event)
4207 {
4208 if(g_ActiveMadEdit==NULL) return;
4209
4210 static wxString defstr;
4211 wxString str=wxGetTextFromUser(_("Position: (you can input HexNumber: 0xNNN)"), _("Go To Position"), defstr);
4212 if(!str.IsEmpty())
4213 {
4214 defstr=str;
4215
4216 wxInt64 pos;
4217 if(StrToInt64(str, pos))
4218 {
4219 g_ActiveMadEdit->SetCaretPosition(pos);
4220 }
4221 }
4222 }
4223
OnSearchGoToLeftBrace(wxCommandEvent & event)4224 void MadEditFrame::OnSearchGoToLeftBrace(wxCommandEvent& event)
4225 {
4226 if(g_ActiveMadEdit==NULL) return;
4227
4228 g_ActiveMadEdit->GoToLeftBrace();
4229 }
OnSearchGoToRightBrace(wxCommandEvent & event)4230 void MadEditFrame::OnSearchGoToRightBrace(wxCommandEvent& event)
4231 {
4232 if(g_ActiveMadEdit==NULL) return;
4233
4234 g_ActiveMadEdit->GoToRightBrace();
4235 }
4236
4237
OnViewEncoding(wxCommandEvent & event)4238 void MadEditFrame::OnViewEncoding(wxCommandEvent& event)
4239 {
4240 if(g_ActiveMadEdit==NULL) return;
4241
4242 int idx=event.GetId()-menuEncoding1;
4243 wxString enc=MadEncoding::GetEncodingName(idx);
4244 g_ActiveMadEdit->SetEncoding(enc);
4245
4246 wxString str=wxString(wxT('['))+ enc + wxT("] ")+ wxGetTranslation(MadEncoding::GetEncodingDescription(idx).c_str());
4247 m_RecentEncodings->AddFileToHistory(str);
4248
4249 int size;
4250 g_ActiveMadEdit->GetFont(str, size);
4251 m_RecentFonts->AddFileToHistory(str);
4252 }
4253
OnViewRecentEncoding(wxCommandEvent & event)4254 void MadEditFrame::OnViewRecentEncoding(wxCommandEvent& event)
4255 {
4256 if(g_ActiveMadEdit==NULL) return;
4257
4258 int idx=event.GetId()-menuRecentEncoding1;
4259 wxString str=m_RecentEncodings->GetHistoryFile(idx);
4260 if(!str.IsEmpty())
4261 {
4262 // get encname from str
4263 wxStringTokenizer tkz(str, wxT("[]"), wxTOKEN_STRTOK);
4264 if( tkz.HasMoreTokens() )
4265 {
4266 wxString enc = tkz.GetNextToken();
4267 g_ActiveMadEdit->SetEncoding(enc);
4268
4269 m_RecentEncodings->AddFileToHistory(str);
4270
4271 wxString str;
4272 int size;
4273 g_ActiveMadEdit->GetFont(str, size);
4274 m_RecentFonts->AddFileToHistory(str);
4275 }
4276
4277 }
4278 }
4279
OnViewSyntax(wxCommandEvent & event)4280 void MadEditFrame::OnViewSyntax(wxCommandEvent& event)
4281 {
4282 if(g_ActiveMadEdit==NULL) return;
4283
4284 int idx=event.GetId()-menuSyntax1;
4285 wxString title=MadSyntax::GetSyntaxTitle(idx);
4286 g_ActiveMadEdit->SetSyntax(title);
4287 }
4288
OnViewFontName(wxCommandEvent & event)4289 void MadEditFrame::OnViewFontName(wxCommandEvent& event)
4290 {
4291 if(g_ActiveMadEdit==NULL) return;
4292
4293 int idx=event.GetId()-menuFontName1;
4294 wxString fn;
4295 int fs;
4296 g_ActiveMadEdit->GetFont(fn, fs);
4297
4298 wxString &fontname=g_FontNames[idx];
4299 g_ActiveMadEdit->SetFont(fontname, fs);
4300
4301 m_RecentFonts->AddFileToHistory(fontname);
4302 }
4303
OnViewRecentFont(wxCommandEvent & event)4304 void MadEditFrame::OnViewRecentFont(wxCommandEvent& event)
4305 {
4306 if(g_ActiveMadEdit==NULL) return;
4307
4308 int idx=event.GetId()-menuRecentFont1;
4309 wxString fontname=m_RecentFonts->GetHistoryFile(idx);
4310 if(!fontname.IsEmpty())
4311 {
4312 wxString fn;
4313 int fs;
4314 g_ActiveMadEdit->GetFont(fn, fs);
4315 g_ActiveMadEdit->SetFont(fontname, fs);
4316
4317 m_RecentFonts->AddFileToHistory(fontname);
4318 }
4319 }
4320
OnViewFontSize(wxCommandEvent & event)4321 void MadEditFrame::OnViewFontSize(wxCommandEvent& event)
4322 {
4323 if(g_ActiveMadEdit==NULL) return;
4324
4325 wxString fn;
4326 int fs;
4327 g_ActiveMadEdit->GetFont(fn, fs);
4328
4329 fs=event.GetId()-menuFontSize1 + 1;
4330
4331 g_ActiveMadEdit->SetFont(fn, fs);
4332 }
4333
OnViewSetFont(wxCommandEvent & event)4334 void MadEditFrame::OnViewSetFont(wxCommandEvent& event)
4335 {
4336 if(g_ActiveMadEdit==NULL) return;
4337
4338 wxFontData data;
4339 wxFont font = g_ActiveMadEdit->GetFont();
4340
4341 MadSyntax* syn = g_ActiveMadEdit->GetSyntax();
4342 MadAttributes* attr = syn->GetAttributes(aeText);
4343 data.SetColour(attr->color);
4344
4345 if((attr->style&fsItalic) != 0) font.SetStyle(wxFONTSTYLE_ITALIC);
4346 if((attr->style&fsBold) != 0) font.SetWeight(wxFONTWEIGHT_BOLD);
4347 font.SetUnderlined((attr->style&fsUnderline) != 0);
4348
4349 if(font.Ok())
4350 {
4351 data.SetInitialFont(font);
4352 }
4353
4354 wxFontDialog dialog(this, data);
4355 if (dialog.ShowModal() == wxID_OK)
4356 {
4357 font = dialog.GetFontData().GetChosenFont();
4358 if(font.Ok())
4359 {
4360 wxString fn=FixUTF8ToWCS(font.GetFaceName());
4361 g_ActiveMadEdit->SetFont(fn, font.GetPointSize());
4362 m_RecentFonts->AddFileToHistory(fn);
4363 }
4364
4365 attr->color = dialog.GetFontData().GetColour();
4366
4367 MadFontStyles style = fsNone;
4368 if(font.GetWeight()==wxFONTWEIGHT_BOLD) style |= fsBold;
4369 if(font.GetStyle()==wxFONTSTYLE_ITALIC) style |= fsItalic;
4370 if(font.GetUnderlined()) style |= fsUnderline;
4371 attr->style = style;
4372
4373 ApplySyntaxAttributes(syn);
4374 syn->SaveAttributes();
4375 }
4376 }
4377
OnViewFixedWidthMode(wxCommandEvent & event)4378 void MadEditFrame::OnViewFixedWidthMode(wxCommandEvent& event)
4379 {
4380 if(g_ActiveMadEdit==NULL) return;
4381
4382 g_ActiveMadEdit->SetFixedWidthMode(event.IsChecked());
4383 }
4384
OnViewTabColumn(wxCommandEvent & event)4385 void MadEditFrame::OnViewTabColumn(wxCommandEvent& event)
4386 {
4387 if(g_ActiveMadEdit==NULL) return;
4388
4389 int col=event.GetId()-menuTabColumn1 +1;
4390 g_ActiveMadEdit->SetTabColumns(col);
4391 }
4392
OnViewLineSpacing(wxCommandEvent & event)4393 void MadEditFrame::OnViewLineSpacing(wxCommandEvent& event)
4394 {
4395 if(g_ActiveMadEdit==NULL) return;
4396
4397 int ls=(event.GetId()-menuLineSpacing100)*5 + 100;
4398 g_ActiveMadEdit->SetLineSpacing(ls);
4399 }
4400
OnViewNoWrap(wxCommandEvent & event)4401 void MadEditFrame::OnViewNoWrap(wxCommandEvent& event)
4402 {
4403 if(g_ActiveMadEdit==NULL) return;
4404
4405 g_ActiveMadEdit->SetWordWrapMode(wwmNoWrap);
4406 }
OnViewWrapByWindow(wxCommandEvent & event)4407 void MadEditFrame::OnViewWrapByWindow(wxCommandEvent& event)
4408 {
4409 if(g_ActiveMadEdit==NULL) return;
4410
4411 g_ActiveMadEdit->SetWordWrapMode(wwmWrapByWindow);
4412 }
OnViewWrapByColumn(wxCommandEvent & event)4413 void MadEditFrame::OnViewWrapByColumn(wxCommandEvent& event)
4414 {
4415 if(g_ActiveMadEdit==NULL) return;
4416
4417 g_ActiveMadEdit->SetWordWrapMode(wwmWrapByColumn);
4418 }
4419
OnViewDisplayLineNumber(wxCommandEvent & event)4420 void MadEditFrame::OnViewDisplayLineNumber(wxCommandEvent& event)
4421 {
4422 if(g_ActiveMadEdit==NULL) return;
4423
4424 g_ActiveMadEdit->SetDisplayLineNumber(event.IsChecked());
4425 }
OnViewShowEndOfLine(wxCommandEvent & event)4426 void MadEditFrame::OnViewShowEndOfLine(wxCommandEvent& event)
4427 {
4428 if(g_ActiveMadEdit==NULL) return;
4429
4430 g_ActiveMadEdit->SetShowEndOfLine(event.IsChecked());
4431 }
OnViewShowTabChar(wxCommandEvent & event)4432 void MadEditFrame::OnViewShowTabChar(wxCommandEvent& event)
4433 {
4434 if(g_ActiveMadEdit==NULL) return;
4435
4436 g_ActiveMadEdit->SetShowTabChar(event.IsChecked());
4437 }
OnViewShowSpaceChar(wxCommandEvent & event)4438 void MadEditFrame::OnViewShowSpaceChar(wxCommandEvent& event)
4439 {
4440 if(g_ActiveMadEdit==NULL) return;
4441
4442 g_ActiveMadEdit->SetShowSpaceChar(event.IsChecked());
4443 }
OnViewMarkActiveLine(wxCommandEvent & event)4444 void MadEditFrame::OnViewMarkActiveLine(wxCommandEvent& event)
4445 {
4446 if(g_ActiveMadEdit==NULL) return;
4447
4448 g_ActiveMadEdit->SetMarkActiveLine(event.IsChecked());
4449 }
OnViewMarkBracePair(wxCommandEvent & event)4450 void MadEditFrame::OnViewMarkBracePair(wxCommandEvent& event)
4451 {
4452 if(g_ActiveMadEdit==NULL) return;
4453
4454 g_ActiveMadEdit->SetMarkBracePair(event.IsChecked());
4455 }
4456
OnViewTextMode(wxCommandEvent & event)4457 void MadEditFrame::OnViewTextMode(wxCommandEvent& event)
4458 {
4459 if(g_ActiveMadEdit==NULL) return;
4460
4461 g_ActiveMadEdit->SetEditMode(emTextMode);
4462 }
OnViewColumnMode(wxCommandEvent & event)4463 void MadEditFrame::OnViewColumnMode(wxCommandEvent& event)
4464 {
4465 if(g_ActiveMadEdit==NULL) return;
4466
4467 g_ActiveMadEdit->SetEditMode(emColumnMode);
4468 }
OnViewHexMode(wxCommandEvent & event)4469 void MadEditFrame::OnViewHexMode(wxCommandEvent& event)
4470 {
4471 if(g_ActiveMadEdit==NULL) return;
4472
4473 g_ActiveMadEdit->SetEditMode(emHexMode);
4474 }
4475
4476
OnToolsOptions(wxCommandEvent & event)4477 void MadEditFrame::OnToolsOptions(wxCommandEvent& event)
4478 {
4479 if(g_OptionsDialog==NULL) g_OptionsDialog=new MadOptionsDialog(this, -1);
4480
4481 g_OptionsDialog->LoadOptions();
4482 if(g_OptionsDialog->ShowModal()==wxID_OK)
4483 {
4484 // save options
4485 wxString oldpath=m_Config->GetPath();
4486 m_Config->SetPath(wxT("/MadEdit"));
4487
4488 bool rcm, isiot, ai, acp, msc, mscck, mmp;
4489 wxString mc, tc, ic;
4490
4491 m_Config->Write(wxT("Language"), g_OptionsDialog->WxComboBoxLanguage->GetValue());
4492 m_Config->Write(wxT("SingleInstance"), g_OptionsDialog->WxCheckBoxSingleInstance->GetValue());
4493
4494 rcm=g_OptionsDialog->WxCheckBoxRecordCaretMovements->GetValue();
4495 m_Config->Write(wxT("RecordCaretMovements"), rcm);
4496
4497 m_Config->Write(wxT("MaxSizeToLoad"), g_OptionsDialog->WxEditMaxSizeToLoad->GetValue());
4498
4499 m_Config->Write(wxT("MaxTextFileSize"), g_OptionsDialog->WxEditMaxTextFileSize->GetValue());
4500 m_Config->Write(wxT("DefaultEncoding"), g_OptionsDialog->WxComboBoxEncoding->GetValue());
4501
4502 #ifdef __WXMSW__
4503 if(g_OptionsDialog->WxCheckBoxRightClickMenu->GetValue())
4504 {
4505 wxRegKey *pRegKey = new wxRegKey(wxT("HKEY_CLASSES_ROOT\\*\\shell\\MadEdit\\command"));
4506 pRegKey->Create();
4507 wxString exepath=GetExecutablePath();
4508 pRegKey->SetValue(wxEmptyString, wxString(wxT('"'))+exepath+wxString(wxT("\" \"%1\"")));
4509 delete pRegKey;
4510 }
4511 else
4512 {
4513 wxRegKey *pRegKey = new wxRegKey(wxT("HKEY_CLASSES_ROOT\\*\\shell\\MadEdit"));
4514 pRegKey->DeleteSelf();
4515 delete pRegKey;
4516 }
4517 #endif
4518
4519 m_Config->Write(wxT("MaxLineLength"), g_OptionsDialog->WxEditMaxLineLength->GetValue());
4520
4521 mc=g_OptionsDialog->WxEditMaxColumns->GetValue();
4522 m_Config->Write(wxT("MaxColumns"), mc);
4523
4524 tc=g_OptionsDialog->WxEditTabColumns->GetValue();
4525 m_Config->Write(wxT("TabColumns"), tc);
4526
4527 ic=g_OptionsDialog->WxEditIndentColumns->GetValue();
4528 m_Config->Write(wxT("IndentColumns"), ic);
4529
4530 m_Config->Write(wxT("DateTimeFormat"), g_OptionsDialog->WxEditDateTime->GetValue());
4531 m_Config->Write(wxT("DateTimeInEnglish"), g_OptionsDialog->WxCheckBoxDateTimeInEnglish->GetValue());
4532
4533 isiot=g_OptionsDialog->WxCheckBoxTabOrSpaces->GetValue();
4534 m_Config->Write(wxT("InsertSpacesInsteadOfTab"), isiot);
4535
4536 ai=g_OptionsDialog->WxCheckBoxAutoIndent->GetValue();
4537 m_Config->Write(wxT("AutoIndent"), ai);
4538
4539 acp=g_OptionsDialog->WxCheckBoxAutoCompletePair->GetValue();
4540 m_Config->Write(wxT("AutoCompletePair"), acp);
4541
4542 msc=g_OptionsDialog->WxCheckBoxMouseSelectToCopy->GetValue();
4543 m_Config->Write(wxT("MouseSelectToCopy"), msc);
4544
4545 mscck=g_OptionsDialog->WxRadioButtonEnable->GetValue();
4546 m_Config->Write(wxT("MouseSelectToCopyWithCtrlKey"), mscck);
4547
4548 mmp=g_OptionsDialog->WxCheckBoxMiddleMouseToPaste->GetValue();
4549 m_Config->Write(wxT("MiddleMouseToPaste"), mmp);
4550
4551 extern bool g_DoNotSaveSettings;
4552 g_DoNotSaveSettings=g_OptionsDialog->WxCheckBoxDoNotSaveSettings->GetValue();
4553
4554 m_Config->Write(wxT("ReloadFiles"), g_OptionsDialog->WxCheckBoxReloadFiles->GetValue());
4555 m_Config->Write(wxT("RestoreCaretPos"), g_OptionsDialog->WxCheckBoxRestoreCaretPos->GetValue());
4556
4557
4558 bool bb;
4559 long ll;
4560 wxString ss;
4561 bb=g_OptionsDialog->WxCheckBoxPrintSyntax->GetValue();
4562 m_Config->Write(wxT("PrintSyntax"), bb);
4563
4564 bb=g_OptionsDialog->WxCheckBoxPrintLineNumber->GetValue();
4565 m_Config->Write(wxT("PrintLineNumber"), bb);
4566
4567 bb=g_OptionsDialog->WxCheckBoxPrintEndOfLine->GetValue();
4568 m_Config->Write(wxT("PrintEndOfLine"), bb);
4569
4570 bb=g_OptionsDialog->WxCheckBoxPrintTabChar->GetValue();
4571 m_Config->Write(wxT("PrintTabChar"), bb);
4572
4573 bb=g_OptionsDialog->WxCheckBoxPrintSpaceChar->GetValue();
4574 m_Config->Write(wxT("PrintSpaceChar"), bb);
4575
4576 ll=g_OptionsDialog->WxRadioBoxPrintOffset->GetSelection();
4577 m_Config->Write(wxT("PrintOffsetHeader"), ll);
4578
4579 bb=g_OptionsDialog->WxCheckBoxPrintPageHeader->GetValue();
4580 m_Config->Write(wxT("PrintPageHeader"), bb);
4581
4582 ss=g_OptionsDialog->WxEditHeaderLeft->GetValue();
4583 m_Config->Write(wxT("PageHeaderLeft"), ss);
4584 ss=g_OptionsDialog->WxEditHeaderCenter->GetValue();
4585 m_Config->Write(wxT("PageHeaderCenter"), ss);
4586 ss=g_OptionsDialog->WxEditHeaderRight->GetValue();
4587 m_Config->Write(wxT("PageHeaderRight"), ss);
4588
4589 bb=g_OptionsDialog->WxCheckBoxPrintPageFooter->GetValue();
4590 m_Config->Write(wxT("PrintPageFooter"), bb);
4591
4592 ss=g_OptionsDialog->WxEditFooterLeft->GetValue();
4593 m_Config->Write(wxT("PageFooterLeft"), ss);
4594 ss=g_OptionsDialog->WxEditFooterCenter->GetValue();
4595 m_Config->Write(wxT("PageFooterCenter"), ss);
4596 ss=g_OptionsDialog->WxEditFooterRight->GetValue();
4597 m_Config->Write(wxT("PageFooterRight"), ss);
4598
4599 int count=int(m_Notebook->GetPageCount());
4600 for(int i=0;i<count;i++)
4601 {
4602 MadEdit *madedit=(MadEdit*)m_Notebook->GetPage(i);
4603
4604 madedit->SetRecordCaretMovements(rcm);
4605 madedit->SetInsertSpacesInsteadOfTab(isiot);
4606 madedit->SetAutoIndent(ai);
4607 madedit->SetAutoCompletePair(acp);
4608 madedit->SetMouseSelectToCopy(msc);
4609 madedit->SetMouseSelectToCopyWithCtrlKey(mscck);
4610 madedit->SetMiddleMouseToPaste(mmp);
4611 long lo;
4612 if(mc.ToLong(&lo)) madedit->SetMaxColumns(lo);
4613 if(tc.ToLong(&lo)) madedit->SetTabColumns(lo);
4614 if(ic.ToLong(&lo)) madedit->SetIndentColumns(lo);
4615 }
4616
4617
4618 extern bool g_ResetAllKeys;
4619 g_ResetAllKeys=g_OptionsDialog->WxCheckBoxResetAllKeys->GetValue();
4620
4621 // apply the changed keybindings
4622 if(g_OptionsDialog->ChangedTreeItemDataList.size()!=0)
4623 {
4624 list<TreeItemData*> ChangedMenuList;
4625 list<TreeItemData*>::iterator tidit=g_OptionsDialog->ChangedTreeItemDataList.begin();
4626 list<TreeItemData*>::iterator tiditend=g_OptionsDialog->ChangedTreeItemDataList.end();
4627
4628 while(tidit!=tiditend)
4629 {
4630 TreeItemData *tid = *tidit;
4631 CommandData *cd = tid->cmddata;
4632
4633 // remove key of changed menu
4634 if(cd->menu_id > 0)
4635 {
4636 wxString menukey, newkey;
4637
4638 menukey=MadEdit::ms_KeyBindings.GetKeyByMenuText(cd->menuid_name);
4639 if(!tid->keys.IsEmpty())
4640 {
4641 newkey=tid->keys[0];
4642 }
4643
4644 if(menukey.Lower() != newkey.Lower())
4645 {
4646 // add it to ChangedMenuList for modifying menukey later
4647 ChangedMenuList.push_back(tid);
4648 }
4649
4650 MadEdit::ms_KeyBindings.RemoveByMenuId(cd->menu_id);
4651 }
4652 else if(cd->command > 0) // delete the keys of changed comnnad
4653 {
4654 MadEdit::ms_KeyBindings.RemoveByCommand(cd->command);
4655 }
4656
4657 ++tidit;
4658 }
4659
4660 // add the keys of changed comnnad
4661 tidit=g_OptionsDialog->ChangedTreeItemDataList.begin();
4662 while(tidit!=tiditend)
4663 {
4664 TreeItemData *tid = *tidit;
4665 CommandData *cd = tid->cmddata;
4666 if(cd->menu_id > 0)
4667 {
4668 size_t idx=0, count=tid->keys.GetCount();
4669 for(;idx<count;idx++)
4670 {
4671 MadEdit::ms_KeyBindings.Add(StringToShortCut(tid->keys[idx]), idx==0, cd->menu_id, true);
4672 }
4673 }
4674 else if(cd->command > 0)
4675 {
4676 size_t idx=0, count=tid->keys.GetCount();
4677 for(;idx<count;idx++)
4678 {
4679 MadEdit::ms_KeyBindings.Add(StringToShortCut(tid->keys[idx]), cd->command, true);
4680 }
4681 }
4682 ++tidit;
4683 }
4684
4685 // change the menukey
4686 tidit=ChangedMenuList.begin();
4687 tiditend=ChangedMenuList.end();
4688 #ifdef __WXMSW__
4689 bool bHasMenuIcon = (wxGetOsVersion()!=wxOS_WINDOWS_9X); // fixed win98 will crash if menuitem has icon
4690 #endif
4691 while(tidit!=tiditend)
4692 {
4693 TreeItemData *tid = *tidit;
4694 CommandData *cd = tid->cmddata;
4695
4696 wxString newkey;
4697 if(!tid->keys.IsEmpty())
4698 {
4699 newkey=tid->keys[0];
4700 newkey = wxString(wxT('\t'))+newkey;
4701 }
4702
4703 // change the menu key
4704 wxMenuItem *mit=WxMenuBar1->FindItem(cd->menu_id);
4705 mit->SetText(mit->GetLabel()+ newkey);
4706 #ifdef __WXMSW__
4707 if(bHasMenuIcon)
4708 #endif
4709 if(cd->image_idx >= 0 && cd->kind==wxITEM_NORMAL)
4710 {
4711 mit->SetBitmap(m_ImageList->GetBitmap(cd->image_idx));
4712 }
4713
4714 ++tidit;
4715 }
4716
4717 ResetAcceleratorTable();
4718 }
4719
4720 m_Config->SetPath(oldpath);
4721 }
4722 }
4723
OnToolsHighlighting(wxCommandEvent & event)4724 void MadEditFrame::OnToolsHighlighting(wxCommandEvent& event)
4725 {
4726 if(g_HighlightingDialog==NULL) g_HighlightingDialog=new MadHighlightingDialog(this, -1);
4727
4728 if(g_ActiveMadEdit)
4729 {
4730 g_HighlightingDialog->m_InitSetting=g_ActiveMadEdit->GetSyntaxTitle();
4731 }
4732 else
4733 {
4734 g_HighlightingDialog->m_InitSetting=wxT("XXX");
4735 }
4736 int id=g_HighlightingDialog->ShowModal();
4737 g_HighlightingDialog->FreeSyntax(id!=wxID_OK); // press cancel to restore the syntax
4738
4739 if(g_ActiveMadEdit)
4740 {
4741 g_ActiveMadEdit->SetFocus();
4742 }
4743 }
4744
4745 #ifdef __WXMSW__
OnToolsFileAssociation(wxCommandEvent & event)4746 void MadEditFrame::OnToolsFileAssociation(wxCommandEvent& event)
4747 {
4748 MadFileAssociationDialog fadialog(this, -1);
4749 fadialog.ShowModal();
4750 }
4751 #endif
4752
OnToolsToggleBOM(wxCommandEvent & event)4753 void MadEditFrame::OnToolsToggleBOM(wxCommandEvent& event)
4754 {
4755 if(g_ActiveMadEdit==NULL) return;
4756
4757 g_ActiveMadEdit->ToggleBOM();
4758 }
OnToolsConvertToDOS(wxCommandEvent & event)4759 void MadEditFrame::OnToolsConvertToDOS(wxCommandEvent& event)
4760 {
4761 if(g_ActiveMadEdit==NULL) return;
4762
4763 g_ActiveMadEdit->ConvertNewLineType(nltDOS);
4764 }
OnToolsConvertToMAC(wxCommandEvent & event)4765 void MadEditFrame::OnToolsConvertToMAC(wxCommandEvent& event)
4766 {
4767 if(g_ActiveMadEdit==NULL) return;
4768
4769 g_ActiveMadEdit->ConvertNewLineType(nltMAC);
4770 }
OnToolsConvertToUNIX(wxCommandEvent & event)4771 void MadEditFrame::OnToolsConvertToUNIX(wxCommandEvent& event)
4772 {
4773 if(g_ActiveMadEdit==NULL) return;
4774
4775 g_ActiveMadEdit->ConvertNewLineType(nltUNIX);
4776 }
4777
OnToolsInsertDOS(wxCommandEvent & event)4778 void MadEditFrame::OnToolsInsertDOS(wxCommandEvent& event)
4779 {
4780 if(g_ActiveMadEdit==NULL) return;
4781
4782 g_ActiveMadEdit->SetInsertNewLineType(nltDOS);
4783 }
OnToolsInsertMAC(wxCommandEvent & event)4784 void MadEditFrame::OnToolsInsertMAC(wxCommandEvent& event)
4785 {
4786 if(g_ActiveMadEdit==NULL) return;
4787
4788 g_ActiveMadEdit->SetInsertNewLineType(nltMAC);
4789 }
OnToolsInsertUNIX(wxCommandEvent & event)4790 void MadEditFrame::OnToolsInsertUNIX(wxCommandEvent& event)
4791 {
4792 if(g_ActiveMadEdit==NULL) return;
4793
4794 g_ActiveMadEdit->SetInsertNewLineType(nltUNIX);
4795 }
4796
4797
OnToolsConvertEncoding(wxCommandEvent & event)4798 void MadEditFrame::OnToolsConvertEncoding(wxCommandEvent& event)
4799 {
4800 if(g_ActiveMadEdit==NULL) return;
4801
4802 if(g_ConvEncDialog==NULL) g_ConvEncDialog=new MadConvEncDialog(this, -1);
4803
4804 if(g_ConvEncDialog->ShowModal()==wxID_OK)
4805 {
4806 g_ActiveMadEdit->ConvertEncoding(g_ConvEncDialog->WxComboBoxEncoding->GetValue(),
4807 MadConvertEncodingFlag(g_ConvEncDialog->WxRadioBoxOption->GetSelection()));
4808 wxString oldpath=m_Config->GetPath();
4809 m_Config->SetPath(wxT("/MadEdit"));
4810 m_Config->Write(wxT("/MadEdit/ConvertEncoding"), g_ConvEncDialog->WxComboBoxEncoding->GetValue());
4811 m_Config->SetPath(oldpath);
4812
4813 wxString str=wxString(wxT('['))+ g_ActiveMadEdit->GetEncodingName() + wxT("] ")+
4814 wxGetTranslation(g_ActiveMadEdit->GetEncodingDescription().c_str());
4815 m_RecentEncodings->AddFileToHistory(str);
4816
4817 int size;
4818 g_ActiveMadEdit->GetFont(str, size);
4819 m_RecentFonts->AddFileToHistory(str);
4820 }
4821 }
4822
OnToolsSimp2TradChinese(wxCommandEvent & event)4823 void MadEditFrame::OnToolsSimp2TradChinese(wxCommandEvent& event)
4824 {
4825 if(g_ActiveMadEdit==NULL) return;
4826 g_ActiveMadEdit->ConvertChinese(cefSC2TC);
4827 }
4828
OnToolsTrad2SimpChinese(wxCommandEvent & event)4829 void MadEditFrame::OnToolsTrad2SimpChinese(wxCommandEvent& event)
4830 {
4831 if(g_ActiveMadEdit==NULL) return;
4832 g_ActiveMadEdit->ConvertChinese(cefTC2SC);
4833 }
4834
OnToolsKanji2TradChinese(wxCommandEvent & event)4835 void MadEditFrame::OnToolsKanji2TradChinese(wxCommandEvent& event)
4836 {
4837 if(g_ActiveMadEdit==NULL) return;
4838 g_ActiveMadEdit->ConvertChinese(cefJK2TC);
4839 }
4840
OnToolsKanji2SimpChinese(wxCommandEvent & event)4841 void MadEditFrame::OnToolsKanji2SimpChinese(wxCommandEvent& event)
4842 {
4843 if(g_ActiveMadEdit==NULL) return;
4844 g_ActiveMadEdit->ConvertChinese(cefJK2SC);
4845 }
4846
OnToolsChinese2Kanji(wxCommandEvent & event)4847 void MadEditFrame::OnToolsChinese2Kanji(wxCommandEvent& event)
4848 {
4849 if(g_ActiveMadEdit==NULL) return;
4850 g_ActiveMadEdit->ConvertChinese(cefC2JK);
4851 }
4852
OnToolsSimp2TradClipboard(wxCommandEvent & event)4853 void MadEditFrame::OnToolsSimp2TradClipboard(wxCommandEvent& event)
4854 {
4855 ConvertChineseInClipboard(ccfSimp2Trad);
4856 }
4857
OnToolsTrad2SimpClipboard(wxCommandEvent & event)4858 void MadEditFrame::OnToolsTrad2SimpClipboard(wxCommandEvent& event)
4859 {
4860 ConvertChineseInClipboard(ccfTrad2Simp);
4861 }
4862
OnToolsKanji2TradClipboard(wxCommandEvent & event)4863 void MadEditFrame::OnToolsKanji2TradClipboard(wxCommandEvent& event)
4864 {
4865 ConvertChineseInClipboard(ccfKanji2Trad);
4866 }
4867
OnToolsKanji2SimpClipboard(wxCommandEvent & event)4868 void MadEditFrame::OnToolsKanji2SimpClipboard(wxCommandEvent& event)
4869 {
4870 ConvertChineseInClipboard(ccfKanji2Simp);
4871 }
4872
OnToolsChinese2KanjiClipboard(wxCommandEvent & event)4873 void MadEditFrame::OnToolsChinese2KanjiClipboard(wxCommandEvent& event)
4874 {
4875 ConvertChineseInClipboard(ccfChinese2Kanji);
4876 }
4877
OnToolsWordCount(wxCommandEvent & event)4878 void MadEditFrame::OnToolsWordCount(wxCommandEvent& event)
4879 {
4880 if(g_ActiveMadEdit==NULL) return;
4881
4882 MadWordCountDialog dialog(this, -1);
4883 dialog.ShowModal();
4884 }
4885
OnWindowToggleWindow(wxCommandEvent & event)4886 void MadEditFrame::OnWindowToggleWindow(wxCommandEvent& event)
4887 {
4888 int count=int(m_Notebook->GetPageCount());
4889 if(count<=1) return;
4890
4891 int selid=m_Notebook->GetSelection();
4892
4893 g_CheckModTimeForReload=false;
4894
4895 if( g_PrevPageID >= 0 &&
4896 g_PrevPageID < count &&
4897 g_PrevPageID != selid)
4898 {
4899 m_Notebook->SetSelection(g_PrevPageID);
4900 g_PrevPageID=selid;
4901 }
4902 else
4903 {
4904 g_PrevPageID=selid;
4905 m_Notebook->AdvanceSelection(true);
4906 }
4907
4908 MadEdit *madedit=(MadEdit*)m_Notebook->GetPage(m_Notebook->GetSelection());
4909 if(madedit!=g_ActiveMadEdit)
4910 {
4911 wxAuiNotebookEvent event(wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGED, m_Notebook->GetId());
4912 event.SetSelection(m_Notebook->GetSelection());
4913 event.SetOldSelection(g_PrevPageID);
4914 event.SetEventObject(this);
4915 OnNotebookPageChanged(event);
4916 }
4917
4918 g_CheckModTimeForReload=true;
4919 g_ActiveMadEdit->ReloadByModificationTime();
4920 }
4921
OnWindowPreviousWindow(wxCommandEvent & event)4922 void MadEditFrame::OnWindowPreviousWindow(wxCommandEvent& event)
4923 {
4924 if(m_Notebook->GetPageCount()<=1) return;
4925
4926 g_PrevPageID=m_Notebook->GetSelection();
4927 g_CheckModTimeForReload=false;
4928 m_Notebook->AdvanceSelection(false);
4929
4930 MadEdit *madedit=(MadEdit*)m_Notebook->GetPage(m_Notebook->GetSelection());
4931 if(madedit!=g_ActiveMadEdit)
4932 {
4933 wxAuiNotebookEvent event(wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGED, m_Notebook->GetId());
4934 event.SetSelection(m_Notebook->GetSelection());
4935 event.SetOldSelection(g_PrevPageID);
4936 event.SetEventObject(this);
4937 OnNotebookPageChanged(event);
4938 }
4939
4940 g_CheckModTimeForReload=true;
4941 g_ActiveMadEdit->ReloadByModificationTime();
4942 }
OnWindowNextWindow(wxCommandEvent & event)4943 void MadEditFrame::OnWindowNextWindow(wxCommandEvent& event)
4944 {
4945 if(m_Notebook->GetPageCount()<=1) return;
4946
4947 g_PrevPageID=m_Notebook->GetSelection();
4948 g_CheckModTimeForReload=false;
4949 m_Notebook->AdvanceSelection(true);
4950
4951 MadEdit *madedit=(MadEdit*)m_Notebook->GetPage(m_Notebook->GetSelection());
4952 if(madedit!=g_ActiveMadEdit)
4953 {
4954 wxAuiNotebookEvent event(wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGED, m_Notebook->GetId());
4955 event.SetSelection(m_Notebook->GetSelection());
4956 event.SetOldSelection(g_PrevPageID);
4957 event.SetEventObject(this);
4958 OnNotebookPageChanged(event);
4959 }
4960
4961 g_CheckModTimeForReload=true;
4962 g_ActiveMadEdit->ReloadByModificationTime();
4963 }
4964
OnHelpAbout(wxCommandEvent & event)4965 void MadEditFrame::OnHelpAbout(wxCommandEvent& event)
4966 {
4967 MadAboutDialog dlg(this);
4968 dlg.WxMemo1->AppendText(g_MadEdit_Version + wxT("\n\n")+
4969 g_MadEdit_URL + wxT("\n\n")+
4970 _("Press OK to visit our HomePage."));
4971
4972 if(dlg.ShowModal()==wxID_OK)
4973 {
4974 #ifdef __WXGTK__
4975 const wxChar *browsers[]=
4976 {
4977 wxT("/usr/bin/firefox"),
4978 wxT("/usr/bin/mozilla"),
4979 wxT("/usr/kde/3.5/bin/konqueror"),
4980 wxT("/usr/kde/3.4/bin/konqueror"),
4981 wxT("/usr/kde/3.3/bin/konqueror"),
4982 wxT("/usr/kde/3.2/bin/konqueror"),
4983 };
4984 int idx=0;
4985 int count=sizeof(browsers)/sizeof(browsers[0]);
4986 do
4987 {
4988 if(wxFileExists(wxString(browsers[idx])))
4989 break;
4990 }while(++idx < count);
4991
4992 if(idx < count)
4993 {
4994 wxExecute(wxString(browsers[idx]) +wxT(' ') +g_MadEdit_URL);
4995 }
4996 else
4997 {
4998 wxLaunchDefaultBrowser(g_MadEdit_URL);
4999 }
5000 #else
5001 wxLaunchDefaultBrowser(g_MadEdit_URL);
5002 #endif
5003 }
5004 }
5005
5006