2015-04-02 18:00:50 -04:00
|
|
|
/**
|
|
|
|
* Main Application Frame
|
|
|
|
*/
|
2015-04-07 17:08:28 -04:00
|
|
|
#include "MainFrame.h"
|
2015-03-30 14:50:10 -04:00
|
|
|
|
2015-04-23 16:40:59 -04:00
|
|
|
// Top level menus
|
2015-04-24 16:55:10 -04:00
|
|
|
enum myMenuIds {
|
2015-04-23 16:40:59 -04:00
|
|
|
myFILE_MENU,
|
|
|
|
myEDIT_MENU,
|
|
|
|
myVIEW_MENU,
|
|
|
|
myLANG_MENU,
|
|
|
|
myHELP_MENU
|
|
|
|
};
|
|
|
|
|
|
|
|
// Menu ids
|
2015-04-24 16:55:10 -04:00
|
|
|
enum myMenuItemIds {
|
2015-04-27 15:00:31 -04:00
|
|
|
myID_VIEW_WHITESPACE = wxID_HIGHEST,
|
|
|
|
myID_VIEW_LINE_ENDINGS,
|
|
|
|
myID_CLOSE_ALL,
|
2015-04-29 14:36:34 -04:00
|
|
|
myID_CLOSE_ALL_BUT_THIS,
|
|
|
|
myID_LINE_WRAP
|
2015-04-23 16:40:59 -04:00
|
|
|
};
|
|
|
|
|
2015-04-21 10:21:02 -04:00
|
|
|
MainFrame::MainFrame(wxFrame *frame, const wxString &title)
|
2015-03-31 22:52:12 -04:00
|
|
|
: wxFrame(frame, -1, title)
|
2015-04-17 12:48:00 -04:00
|
|
|
{
|
2015-04-27 11:33:24 -04:00
|
|
|
#include "../../resources/xpm/tyro.xpm"
|
2015-04-17 12:48:00 -04:00
|
|
|
|
2015-04-27 11:33:24 -04:00
|
|
|
wxIcon app_icon(tyro_icon);
|
2015-04-17 12:48:00 -04:00
|
|
|
this->SetIcon(app_icon);
|
|
|
|
|
2015-04-09 11:45:19 -04:00
|
|
|
// Create menus and bars
|
2015-04-01 15:15:29 -04:00
|
|
|
this->SetupMenu();
|
2015-04-02 14:20:35 -04:00
|
|
|
this->SetupStatusBar();
|
|
|
|
this->SetupToolbar();
|
2015-04-09 11:45:19 -04:00
|
|
|
|
|
|
|
// Create the tab container
|
|
|
|
notebook = new TabContainer(this);
|
2015-04-01 10:11:56 -04:00
|
|
|
|
|
|
|
// Set up control layout
|
|
|
|
wxBoxSizer *base_sizer = new wxBoxSizer(wxVERTICAL);
|
2015-04-06 15:57:17 -04:00
|
|
|
|
2015-04-02 18:00:50 -04:00
|
|
|
base_sizer->Add(notebook, 1, wxEXPAND | wxALL, 5);
|
2015-04-01 10:11:56 -04:00
|
|
|
base_sizer->SetContainingWindow(this);
|
2015-04-17 16:55:48 -04:00
|
|
|
base_sizer->SetMinSize(800,600);
|
2015-04-09 11:45:19 -04:00
|
|
|
|
2015-04-21 10:09:39 -04:00
|
|
|
this->EnableEditControls(false);
|
2015-04-09 11:45:19 -04:00
|
|
|
this->BindEvents();
|
2015-04-16 17:03:27 -04:00
|
|
|
|
|
|
|
// Do the layout
|
|
|
|
SetSizerAndFit(base_sizer);
|
2015-04-01 10:11:56 -04:00
|
|
|
}
|
|
|
|
|
2015-04-02 11:01:21 -04:00
|
|
|
MainFrame::~MainFrame() {}
|
2015-04-01 10:11:56 -04:00
|
|
|
|
2015-04-02 11:01:21 -04:00
|
|
|
void MainFrame::SetupStatusBar()
|
2015-04-01 15:15:29 -04:00
|
|
|
{
|
2015-04-02 11:01:21 -04:00
|
|
|
CreateStatusBar(2);
|
2015-04-01 15:15:29 -04:00
|
|
|
SetStatusText(_(""), 0);
|
|
|
|
SetStatusText(_(""), 1);
|
|
|
|
}
|
|
|
|
|
2015-04-21 17:06:21 -04:00
|
|
|
/**
|
|
|
|
* Create the main toolbar
|
|
|
|
*
|
|
|
|
* @return void
|
|
|
|
*/
|
2015-04-02 11:01:21 -04:00
|
|
|
void MainFrame::SetupToolbar()
|
2015-04-01 15:15:29 -04:00
|
|
|
{
|
2015-04-02 14:20:35 -04:00
|
|
|
// Icon files
|
2015-04-15 15:02:05 -04:00
|
|
|
#ifdef __WXMAC__
|
2015-04-15 12:17:25 -04:00
|
|
|
#include "../../resources/xpm/file_add.xpm"
|
|
|
|
#include "../../resources/xpm/folder.xpm"
|
|
|
|
#include "../../resources/xpm/diskette.xpm"
|
2015-04-16 17:03:27 -04:00
|
|
|
#include "../../resources/xpm/close.xpm"
|
2015-04-15 12:17:25 -04:00
|
|
|
#include "../../resources/xpm/copy.xpm"
|
|
|
|
#include "../../resources/xpm/scissors.xpm"
|
|
|
|
#include "../../resources/xpm/clipboard.xpm"
|
2015-04-02 11:01:21 -04:00
|
|
|
|
2015-04-16 09:37:20 -04:00
|
|
|
wxBitmap new_file_icon(file_add);
|
|
|
|
wxBitmap open_file_icon(folder);
|
|
|
|
wxBitmap save_file_icon(diskette);
|
2015-04-16 17:03:27 -04:00
|
|
|
wxBitmap close_file_icon(close);
|
2015-04-16 09:37:20 -04:00
|
|
|
wxBitmap copy_icon(copy);
|
|
|
|
wxBitmap cut_icon(scissors);
|
|
|
|
wxBitmap paste_icon(clipboard);
|
|
|
|
#else
|
2015-04-17 12:48:00 -04:00
|
|
|
wxBitmap new_file_icon = wxArtProvider::GetBitmap(wxART_NEW, wxART_TOOLBAR);
|
|
|
|
wxBitmap open_file_icon = wxArtProvider::GetBitmap(wxART_FILE_OPEN, wxART_TOOLBAR);
|
|
|
|
wxBitmap save_file_icon = wxArtProvider::GetBitmap(wxART_FILE_SAVE, wxART_TOOLBAR);
|
|
|
|
wxBitmap close_file_icon = wxArtProvider::GetBitmap(wxART_CLOSE, wxART_TOOLBAR);
|
|
|
|
wxBitmap copy_icon = wxArtProvider::GetBitmap(wxART_COPY, wxART_TOOLBAR);
|
|
|
|
wxBitmap cut_icon = wxArtProvider::GetBitmap(wxART_CUT, wxART_TOOLBAR);
|
|
|
|
wxBitmap paste_icon = wxArtProvider::GetBitmap(wxART_PASTE, wxART_TOOLBAR);
|
2015-04-16 09:37:20 -04:00
|
|
|
#endif
|
|
|
|
|
2015-04-02 14:20:35 -04:00
|
|
|
CreateToolBar(wxNO_BORDER | wxTB_FLAT | wxTB_HORIZONTAL);
|
|
|
|
|
2015-04-13 09:30:56 -04:00
|
|
|
toolBar = GetToolBar();
|
2015-04-02 14:20:35 -04:00
|
|
|
|
2015-04-16 09:37:20 -04:00
|
|
|
toolBar->AddTool(wxID_NEW, "New", new_file_icon, "New file");
|
|
|
|
toolBar->AddTool(wxID_OPEN, "Open", open_file_icon, "Open file");
|
|
|
|
toolBar->AddTool(wxID_SAVE, "Save", save_file_icon, "Save file");
|
2015-04-21 10:21:02 -04:00
|
|
|
#ifndef __WXMSW__
|
2015-04-16 17:03:27 -04:00
|
|
|
toolBar->AddTool(wxID_CLOSE, "Close", close_file_icon, "Close file");
|
2015-04-17 12:48:00 -04:00
|
|
|
#endif
|
2015-04-15 12:17:25 -04:00
|
|
|
toolBar->AddSeparator();
|
2015-04-16 09:37:20 -04:00
|
|
|
toolBar->AddTool(wxID_COPY, "Copy", copy_icon, "Copy");
|
|
|
|
toolBar->AddTool(wxID_CUT, "Cut", cut_icon, "Cut");
|
|
|
|
toolBar->AddTool(wxID_PASTE, "Paste", paste_icon, "Paste");
|
2015-04-13 09:30:56 -04:00
|
|
|
|
2015-04-02 14:20:35 -04:00
|
|
|
toolBar->Realize();
|
2015-04-01 15:15:29 -04:00
|
|
|
}
|
|
|
|
|
2015-04-21 17:06:21 -04:00
|
|
|
/**
|
|
|
|
* Create the main menu
|
|
|
|
*
|
|
|
|
* @return void
|
|
|
|
*/
|
2015-04-02 11:01:21 -04:00
|
|
|
void MainFrame::SetupMenu()
|
2015-03-30 14:50:10 -04:00
|
|
|
{
|
2015-03-31 22:52:12 -04:00
|
|
|
// create a menu bar
|
2015-04-23 16:40:59 -04:00
|
|
|
this->mbar = new wxMenuBar();
|
2015-03-31 22:52:12 -04:00
|
|
|
|
|
|
|
// Create Base menus
|
2015-04-28 16:59:19 -04:00
|
|
|
fileMenu = new wxMenu();
|
|
|
|
editMenu = new wxMenu();
|
|
|
|
viewMenu = new wxMenu();
|
|
|
|
langMenu = new wxMenu();
|
|
|
|
helpMenu = new wxMenu();
|
2015-03-31 22:52:12 -04:00
|
|
|
|
|
|
|
// Add items to top-level menus
|
2015-04-21 17:06:21 -04:00
|
|
|
fileMenu->Append(wxID_NEW, "&New\tCtrl+N", "Create a new file");
|
2015-03-31 22:52:12 -04:00
|
|
|
fileMenu->AppendSeparator();
|
2015-04-21 17:06:21 -04:00
|
|
|
fileMenu->Append(wxID_OPEN, "&Open\tCtrl+O", "Opens an existing file");
|
|
|
|
fileMenu->Append(wxID_SAVE, "&Save\tCtrl+S", "Save the content");
|
|
|
|
fileMenu->Append(wxID_SAVEAS, "Save &As...\tShift+Ctrl+S", "Save current file as...");
|
2015-03-31 22:52:12 -04:00
|
|
|
fileMenu->AppendSeparator();
|
2015-04-21 17:06:21 -04:00
|
|
|
fileMenu->Append(wxID_CLOSE, "&Close\tCtrl+W", "Close the current document");
|
2015-04-27 15:00:31 -04:00
|
|
|
fileMenu->Append(myID_CLOSE_ALL, "C&lose All\tShift+Ctrl+W", "Close all open documents.");
|
2015-04-21 17:06:21 -04:00
|
|
|
fileMenu->Append(wxID_EXIT, "&Quit\tCtrl+Q", "Quit the application");
|
2015-04-13 09:30:56 -04:00
|
|
|
|
2015-04-21 17:06:21 -04:00
|
|
|
editMenu->Append(wxID_UNDO, "&Undo\tCtrl+Z", "Undo last action");
|
|
|
|
editMenu->Append(wxID_REDO, "&Redo\tCtrl+Y", "Redo last action");
|
2015-03-31 22:52:12 -04:00
|
|
|
editMenu->AppendSeparator();
|
2015-04-21 17:06:21 -04:00
|
|
|
editMenu->Append(wxID_CUT, "Cu&t\tCtrl+X", "Cut selected text");
|
|
|
|
editMenu->Append(wxID_COPY, "&Copy\tCtrl+C", "Copy selected text");
|
|
|
|
editMenu->Append(wxID_PASTE, "&Paste\tCtrl+V", "Paste contents of clipboard");
|
|
|
|
editMenu->Append(wxID_CLEAR, "&Delete\tDel");
|
2015-04-08 22:37:19 -04:00
|
|
|
editMenu->AppendSeparator();
|
2015-04-21 17:06:21 -04:00
|
|
|
//editMenu->Append(wxID_FIND, "&Find\tCtrl+F");
|
|
|
|
//editMenu->Append(wxID_REPLACE, "&Replace\tCtrl+R");
|
|
|
|
//editMenu->AppendSeparator();
|
2015-04-28 14:58:52 -04:00
|
|
|
editMenu->Append(wxID_PREFERENCES, "&Preferences\tCtrl+P");
|
|
|
|
editMenu->AppendSeparator();
|
2015-04-23 16:40:59 -04:00
|
|
|
editMenu->Append(wxID_SELECTALL, "Select All\tCtrl+A", "Select all the text in the current document");
|
|
|
|
|
|
|
|
viewMenu->AppendCheckItem(myID_VIEW_WHITESPACE, "Show Invisible Characters\tCtrl+Shift+I", "Toggle visibility of white space characters");
|
2015-04-29 14:36:34 -04:00
|
|
|
viewMenu->AppendCheckItem(myID_LINE_WRAP, "Wrap Lines", "Toggle line wrapping");
|
2015-04-13 13:01:25 -04:00
|
|
|
|
2015-04-21 17:06:21 -04:00
|
|
|
helpMenu->Append(wxID_ABOUT, "&About...\tF1", "Show info about this application");
|
2015-03-31 22:52:12 -04:00
|
|
|
|
|
|
|
// Add the menus to the menubar
|
2015-04-23 16:40:59 -04:00
|
|
|
this->mbar->Append(fileMenu, "&File");
|
|
|
|
this->mbar->Append(editMenu, "&Edit");
|
|
|
|
this->mbar->Append(viewMenu, "&View");
|
|
|
|
this->mbar->Append(langMenu, "&Language");
|
|
|
|
this->mbar->Append(helpMenu, "&Help");
|
2015-03-30 14:50:10 -04:00
|
|
|
|
2015-03-30 16:01:24 -04:00
|
|
|
#ifdef __WXMAC__
|
2015-03-31 22:52:12 -04:00
|
|
|
wxMenuBar::MacSetCommonMenuBar(mbar);
|
2015-03-30 16:01:24 -04:00
|
|
|
#endif // __WXMAC__
|
2015-04-01 10:11:56 -04:00
|
|
|
SetMenuBar(mbar);
|
2015-03-30 14:50:10 -04:00
|
|
|
}
|
|
|
|
|
2015-04-21 17:06:21 -04:00
|
|
|
/**
|
|
|
|
* Bind event handlers
|
|
|
|
*
|
|
|
|
* @return void
|
|
|
|
*/
|
2015-04-09 11:45:19 -04:00
|
|
|
void MainFrame::BindEvents()
|
2015-03-31 10:19:34 -04:00
|
|
|
{
|
2015-04-09 11:45:19 -04:00
|
|
|
Bind(wxEVT_COMMAND_MENU_SELECTED, &MainFrame::OnNew, this, wxID_NEW);
|
2015-04-09 17:16:28 -04:00
|
|
|
Bind(wxEVT_COMMAND_MENU_SELECTED, &MainFrame::OnOpen, this, wxID_OPEN);
|
2015-04-13 16:48:41 -04:00
|
|
|
Bind(wxEVT_COMMAND_MENU_SELECTED, &MainFrame::OnSave, this, wxID_SAVE);
|
|
|
|
Bind(wxEVT_COMMAND_MENU_SELECTED, &MainFrame::OnSaveAs, this, wxID_SAVEAS);
|
2015-04-20 17:02:34 -04:00
|
|
|
Bind(wxEVT_AUINOTEBOOK_PAGE_CLOSE, &MainFrame::OnClose, this, wxID_ANY);
|
|
|
|
Bind(wxEVT_AUINOTEBOOK_PAGE_CLOSED, &MainFrame::OnClosed, this, wxID_ANY);
|
2015-04-16 17:03:27 -04:00
|
|
|
Bind(wxEVT_COMMAND_MENU_SELECTED, &MainFrame::OnCloseTab, this, wxID_CLOSE);
|
2015-04-27 15:00:31 -04:00
|
|
|
Bind(wxEVT_COMMAND_MENU_SELECTED, &MainFrame::OnCloseAll, this, myID_CLOSE_ALL);
|
2015-04-09 11:45:19 -04:00
|
|
|
Bind(wxEVT_COMMAND_MENU_SELECTED, &MainFrame::OnAbout, this, wxID_ABOUT);
|
|
|
|
Bind(wxEVT_COMMAND_MENU_SELECTED, &MainFrame::OnQuit, this, wxID_EXIT);
|
2015-04-09 13:27:30 -04:00
|
|
|
Bind(wxEVT_COMMAND_MENU_SELECTED, &MainFrame::OnEditCut, this, wxID_CUT);
|
|
|
|
Bind(wxEVT_COMMAND_MENU_SELECTED, &MainFrame::OnEditCopy, this, wxID_COPY);
|
|
|
|
Bind(wxEVT_COMMAND_MENU_SELECTED, &MainFrame::OnEditPaste, this, wxID_PASTE);
|
|
|
|
Bind(wxEVT_COMMAND_MENU_SELECTED, &MainFrame::OnEditSelectAll, this, wxID_SELECTALL);
|
2015-04-09 13:54:28 -04:00
|
|
|
Bind(wxEVT_COMMAND_MENU_SELECTED, &MainFrame::OnEditUndo, this, wxID_UNDO);
|
|
|
|
Bind(wxEVT_COMMAND_MENU_SELECTED, &MainFrame::OnEditRedo, this, wxID_REDO);
|
2015-04-23 16:40:59 -04:00
|
|
|
Bind(wxEVT_COMMAND_MENU_SELECTED, &MainFrame::OnToggleWhitespace, this, myID_VIEW_WHITESPACE);
|
2015-04-24 16:55:10 -04:00
|
|
|
Bind(wxEVT_AUINOTEBOOK_TAB_RIGHT_DOWN, &MainFrame::OnTabContextMenu, this, wxID_ANY);
|
2015-04-29 14:36:34 -04:00
|
|
|
Bind(wxEVT_COMMAND_MENU_SELECTED, &MainFrame::OnToggleLineWrap, this, myID_LINE_WRAP);
|
2015-03-31 10:19:34 -04:00
|
|
|
}
|
|
|
|
|
2015-04-09 17:16:28 -04:00
|
|
|
void MainFrame::OnNew(wxCommandEvent &WXUNUSED(event))
|
2015-03-30 14:50:10 -04:00
|
|
|
{
|
2015-04-13 16:48:41 -04:00
|
|
|
this->EnableEditControls();
|
2015-04-09 17:16:28 -04:00
|
|
|
notebook->AddTab();
|
2015-03-31 22:52:12 -04:00
|
|
|
}
|
|
|
|
|
2015-04-09 17:16:28 -04:00
|
|
|
void MainFrame::OnOpen(wxCommandEvent &WXUNUSED(event))
|
2015-04-02 18:00:50 -04:00
|
|
|
{
|
2015-04-23 16:40:59 -04:00
|
|
|
wxArrayString filelist;
|
|
|
|
int listcount;
|
2015-04-09 17:16:28 -04:00
|
|
|
|
2015-04-23 16:40:59 -04:00
|
|
|
wxFileDialog dlg (this, "Open file(s)", wxEmptyString, wxEmptyString,
|
|
|
|
TYRO_FILE_OPEN_WILDCARDS, wxFD_OPEN | wxFD_FILE_MUST_EXIST | wxFD_CHANGE_DIR | wxFD_MULTIPLE);
|
2015-04-09 17:16:28 -04:00
|
|
|
|
|
|
|
if (dlg.ShowModal() != wxID_OK) return;
|
|
|
|
|
2015-04-23 16:40:59 -04:00
|
|
|
dlg.GetPaths(filelist);
|
|
|
|
listcount = filelist.GetCount();
|
2015-04-09 17:16:28 -04:00
|
|
|
|
2015-04-23 16:40:59 -04:00
|
|
|
// Open a new tab for each file
|
|
|
|
for (int i = 0; i < listcount; i++)
|
|
|
|
{
|
|
|
|
notebook->AddTab(filelist[i]);
|
|
|
|
}
|
2015-04-13 16:48:41 -04:00
|
|
|
|
2015-04-23 16:40:59 -04:00
|
|
|
this->EnableEditControls(true);
|
2015-04-09 17:16:28 -04:00
|
|
|
}
|
|
|
|
|
2015-04-20 17:02:34 -04:00
|
|
|
void MainFrame::OnClose(wxAuiNotebookEvent &event)
|
|
|
|
{
|
|
|
|
int current_tab = notebook->GetSelection();
|
|
|
|
EditPane *editor = notebook->GetCurrentEditor();
|
|
|
|
|
|
|
|
// Sanity check
|
|
|
|
if (current_tab == -1) return;
|
|
|
|
|
|
|
|
if (editor->IsModified())
|
|
|
|
{
|
|
|
|
int Msgbox_Choice = wxMessageBox(
|
|
|
|
_T("File has not been saved, save file before closing?"),
|
|
|
|
_T("Modified File"),
|
|
|
|
wxYES_NO | wxCANCEL | wxICON_QUESTION,
|
|
|
|
this
|
|
|
|
);
|
|
|
|
|
|
|
|
if (Msgbox_Choice == wxCANCEL)
|
|
|
|
{
|
2015-04-21 10:21:02 -04:00
|
|
|
return event.Veto();
|
2015-04-20 17:02:34 -04:00
|
|
|
}
|
|
|
|
else if (Msgbox_Choice == wxYES)
|
|
|
|
{
|
|
|
|
editor->SaveFile();
|
|
|
|
if (editor->IsModified())
|
|
|
|
{
|
|
|
|
wxMessageBox(_("File could not be saved"), _("Error"), wxOK | wxICON_EXCLAMATION);
|
2015-04-21 10:21:02 -04:00
|
|
|
return event.Veto();
|
2015-04-20 17:02:34 -04:00
|
|
|
}
|
|
|
|
}
|
2015-04-21 10:21:02 -04:00
|
|
|
};
|
2015-04-20 17:02:34 -04:00
|
|
|
}
|
|
|
|
|
2015-04-23 16:40:59 -04:00
|
|
|
/**
|
|
|
|
* Event handler triggered after a tab is closed
|
|
|
|
*
|
|
|
|
* @param WXUNUSED
|
|
|
|
* @return void
|
|
|
|
*/
|
2015-04-20 17:02:34 -04:00
|
|
|
void MainFrame::OnClosed(wxAuiNotebookEvent &WXUNUSED(event))
|
|
|
|
{
|
|
|
|
if (notebook->GetPageCount() == 0)
|
|
|
|
{
|
2015-04-21 10:09:39 -04:00
|
|
|
this->EnableEditControls(false);
|
2015-04-20 17:02:34 -04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-04-16 17:03:27 -04:00
|
|
|
void MainFrame::OnCloseTab(wxCommandEvent &WXUNUSED(event))
|
2015-04-09 17:16:28 -04:00
|
|
|
{
|
2015-04-16 17:03:27 -04:00
|
|
|
int current_tab = notebook->GetSelection();
|
|
|
|
|
|
|
|
notebook->DeletePage(current_tab);
|
2015-04-21 10:21:02 -04:00
|
|
|
|
|
|
|
if (notebook->GetPageCount() == 0)
|
|
|
|
{
|
|
|
|
this->EnableEditControls(false);
|
|
|
|
}
|
2015-04-09 17:16:28 -04:00
|
|
|
}
|
|
|
|
|
2015-04-27 15:00:31 -04:00
|
|
|
void MainFrame::OnCloseAll(wxCommandEvent &WXUNUSED(event))
|
|
|
|
{
|
|
|
|
notebook->DeleteAllPages();
|
|
|
|
this->EnableEditControls(false);
|
|
|
|
}
|
|
|
|
|
2015-04-09 17:16:28 -04:00
|
|
|
void MainFrame::OnSave(wxCommandEvent &WXUNUSED(event))
|
|
|
|
{
|
2015-04-15 21:26:09 -04:00
|
|
|
EditPane *editor = notebook->GetCurrentEditor();
|
2015-04-17 12:48:00 -04:00
|
|
|
editor->SaveFile();
|
2015-04-09 17:16:28 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
void MainFrame::OnSaveAs(wxCommandEvent &WXUNUSED(event))
|
|
|
|
{
|
2015-04-17 16:55:48 -04:00
|
|
|
EditPane *editor = notebook->GetCurrentEditor();
|
|
|
|
|
|
|
|
// If the file hasn't been changed, just return
|
|
|
|
if ( ! editor->IsModified()) return;
|
|
|
|
|
|
|
|
wxFileDialog dlg(
|
|
|
|
this,
|
|
|
|
"Save as...",
|
|
|
|
wxEmptyString,
|
|
|
|
wxEmptyString,
|
|
|
|
TYRO_FILE_SAVE_WILDCARDS,
|
|
|
|
wxFD_SAVE | wxFD_OVERWRITE_PROMPT
|
|
|
|
);
|
|
|
|
|
|
|
|
// Return if the file isn't to be saved
|
|
|
|
if (dlg.ShowModal() != wxID_OK) return;
|
|
|
|
|
|
|
|
wxString filePath = dlg.GetPath();
|
|
|
|
|
|
|
|
// Save the file
|
|
|
|
if(editor->SaveFile(filePath))
|
|
|
|
{
|
|
|
|
wxFileName fileName(filePath);
|
|
|
|
const wxString fullPath = filePath;
|
|
|
|
const wxString caption= fileName.GetFullName();
|
|
|
|
|
|
|
|
// Update the name of the tab
|
|
|
|
notebook->SetPageToolTip(notebook->GetSelection(), fullPath);
|
|
|
|
notebook->SetPageText(notebook->GetSelection(), caption);
|
|
|
|
|
|
|
|
// Update the editor highlighting
|
|
|
|
editor->Highlight(filePath);
|
|
|
|
}
|
2015-04-13 13:01:25 -04:00
|
|
|
}
|
2015-04-02 18:00:50 -04:00
|
|
|
|
2015-04-02 11:01:21 -04:00
|
|
|
void MainFrame::OnQuit(wxCommandEvent &WXUNUSED(event))
|
2015-03-30 14:50:10 -04:00
|
|
|
{
|
2015-03-31 22:52:12 -04:00
|
|
|
Destroy();
|
2015-03-30 14:50:10 -04:00
|
|
|
}
|
|
|
|
|
2015-04-09 13:27:30 -04:00
|
|
|
void MainFrame::OnEditCut(wxCommandEvent &WXUNUSED(event))
|
|
|
|
{
|
|
|
|
notebook->GetCurrentEditor()->Cut();
|
|
|
|
}
|
|
|
|
|
|
|
|
void MainFrame::OnEditCopy(wxCommandEvent &WXUNUSED(event))
|
|
|
|
{
|
|
|
|
notebook->GetCurrentEditor()->Copy();
|
|
|
|
}
|
|
|
|
|
|
|
|
void MainFrame::OnEditPaste(wxCommandEvent &WXUNUSED(event))
|
|
|
|
{
|
2015-04-09 13:54:28 -04:00
|
|
|
if (notebook->GetCurrentEditor()->CanPaste())
|
|
|
|
{
|
|
|
|
notebook->GetCurrentEditor()->Paste();
|
|
|
|
}
|
2015-04-09 13:27:30 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
void MainFrame::OnEditSelectAll(wxCommandEvent &WXUNUSED(event))
|
|
|
|
{
|
|
|
|
notebook->GetCurrentEditor()->SelectAll();
|
|
|
|
}
|
|
|
|
|
2015-04-09 13:54:28 -04:00
|
|
|
void MainFrame::OnEditUndo(wxCommandEvent &WXUNUSED(event))
|
|
|
|
{
|
|
|
|
if (notebook->GetCurrentEditor()->CanUndo())
|
|
|
|
{
|
|
|
|
notebook->GetCurrentEditor()->Undo();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void MainFrame::OnEditRedo(wxCommandEvent &WXUNUSED(event))
|
|
|
|
{
|
|
|
|
if (notebook->GetCurrentEditor()->CanRedo())
|
|
|
|
{
|
|
|
|
notebook->GetCurrentEditor()->Redo();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-04-02 11:01:21 -04:00
|
|
|
void MainFrame::OnAbout(wxCommandEvent &WXUNUSED(event))
|
2015-03-30 14:50:10 -04:00
|
|
|
{
|
2015-04-09 17:16:28 -04:00
|
|
|
wxAboutDialogInfo info;
|
|
|
|
|
2015-04-17 12:48:00 -04:00
|
|
|
info.SetName(APP_NAME);
|
|
|
|
info.SetVersion(APP_VERSION, "Prerelease");
|
2015-04-09 17:16:28 -04:00
|
|
|
|
|
|
|
info.AddDeveloper("Tim Warren, Programmer");
|
2015-04-27 11:24:04 -04:00
|
|
|
info.AddArtist("Brian Smith, Icon");
|
2015-04-09 17:16:28 -04:00
|
|
|
|
|
|
|
info.SetDescription("Tyro, a text editor for all development");
|
2015-04-27 15:00:31 -04:00
|
|
|
info.SetCopyright(" (C) 2015");
|
2015-04-09 17:16:28 -04:00
|
|
|
|
2015-04-13 13:01:25 -04:00
|
|
|
wxAboutBox(info);
|
2015-03-30 14:50:10 -04:00
|
|
|
}
|
2015-04-13 16:48:41 -04:00
|
|
|
|
2015-04-23 16:40:59 -04:00
|
|
|
/**
|
|
|
|
* Toggle display of invisibles
|
|
|
|
*
|
|
|
|
* @param wxCommandEvent& event
|
|
|
|
* @return void
|
|
|
|
*/
|
|
|
|
void MainFrame::OnToggleWhitespace(wxCommandEvent& event)
|
|
|
|
{
|
2015-04-27 15:00:31 -04:00
|
|
|
EditPane *editor = notebook->GetCurrentEditor();
|
2015-04-23 16:40:59 -04:00
|
|
|
int flag = (event.IsChecked())
|
|
|
|
? wxSTC_WS_VISIBLEALWAYS
|
|
|
|
: wxSTC_WS_INVISIBLE;
|
|
|
|
|
2015-04-27 15:00:31 -04:00
|
|
|
editor->SetViewWhiteSpace(flag);
|
|
|
|
editor->SetViewEOL(event.IsChecked());
|
2015-04-23 16:40:59 -04:00
|
|
|
}
|
|
|
|
|
2015-04-29 14:36:34 -04:00
|
|
|
void MainFrame::OnFind(wxCommandEvent &WXUNUSED(event))
|
|
|
|
{
|
2015-04-28 14:58:52 -04:00
|
|
|
}
|
|
|
|
|
2015-04-29 14:36:34 -04:00
|
|
|
void MainFrame::OnFindNext(wxCommandEvent &WXUNUSED(event))
|
|
|
|
{
|
2015-04-28 14:58:52 -04:00
|
|
|
}
|
|
|
|
|
2015-04-29 14:36:34 -04:00
|
|
|
void MainFrame::OnReplace(wxCommandEvent &WXUNUSED(event))
|
|
|
|
{
|
2015-04-28 14:58:52 -04:00
|
|
|
}
|
|
|
|
|
2015-04-29 14:36:34 -04:00
|
|
|
void MainFrame::OnReplaceNext(wxCommandEvent &WXUNUSED(event))
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void MainFrame::OnToggleLineWrap(wxCommandEvent &event)
|
|
|
|
{
|
|
|
|
EditPane *editor = notebook->GetCurrentEditor();
|
|
|
|
int flag = (event.IsChecked())
|
|
|
|
? wxSTC_WRAP_WORD
|
|
|
|
: wxSTC_WRAP_NONE;
|
|
|
|
|
|
|
|
editor->SetWrapMode(flag);
|
2015-04-28 14:58:52 -04:00
|
|
|
}
|
|
|
|
|
2015-04-21 17:06:21 -04:00
|
|
|
/**
|
|
|
|
* Toggle enable/disable of document-specific controls
|
|
|
|
*
|
|
|
|
* @param bool enable
|
|
|
|
* @return void
|
|
|
|
*/
|
2015-04-21 10:09:39 -04:00
|
|
|
void MainFrame::EnableEditControls(bool enable)
|
2015-04-13 16:48:41 -04:00
|
|
|
{
|
2015-04-23 16:40:59 -04:00
|
|
|
this->fileMenu->Enable(wxID_SAVE, enable);
|
|
|
|
this->fileMenu->Enable(wxID_SAVEAS, enable);
|
|
|
|
this->fileMenu->Enable(wxID_CLOSE, enable);
|
2015-04-27 15:00:31 -04:00
|
|
|
this->fileMenu->Enable(myID_CLOSE_ALL, enable);
|
2015-04-16 11:23:08 -04:00
|
|
|
|
2015-04-23 16:40:59 -04:00
|
|
|
// Enable/disable top level menus
|
|
|
|
this->mbar->EnableTop(myEDIT_MENU, enable);
|
|
|
|
this->mbar->EnableTop(myVIEW_MENU, enable);
|
|
|
|
this->mbar->EnableTop(myLANG_MENU, enable);
|
2015-04-13 16:48:41 -04:00
|
|
|
|
2015-04-23 16:40:59 -04:00
|
|
|
this->toolBar->EnableTool(wxID_SAVE, enable);
|
|
|
|
this->toolBar->EnableTool(wxID_CLOSE, enable);
|
|
|
|
this->toolBar->EnableTool(wxID_COPY, enable);
|
|
|
|
this->toolBar->EnableTool(wxID_CUT, enable);
|
|
|
|
this->toolBar->EnableTool(wxID_PASTE, enable);
|
2015-04-21 10:09:39 -04:00
|
|
|
}
|
2015-04-24 16:55:10 -04:00
|
|
|
|
|
|
|
void MainFrame::OnTabContextMenu(wxAuiNotebookEvent &WXUNUSED(event))
|
|
|
|
{
|
|
|
|
// Create Menu
|
|
|
|
wxMenu *contextMenu = new wxMenu();
|
|
|
|
contextMenu->Append(wxID_CLOSE, "&Close\tCtrl+W", "Close the current tab");
|
2015-04-27 15:00:31 -04:00
|
|
|
contextMenu->Append(myID_CLOSE_ALL, "C&lose All\tShift+Ctrl+W", "Close all open documents.");
|
2015-04-24 16:55:10 -04:00
|
|
|
|
|
|
|
this->PopupMenu(contextMenu);
|
|
|
|
}
|