2015-04-02 18:00:50 -04:00
|
|
|
/**
|
|
|
|
* Main Application Frame
|
|
|
|
*/
|
2015-03-30 14:50:10 -04:00
|
|
|
|
|
|
|
#ifdef WX_PRECOMP
|
|
|
|
#include "wx_pch.h"
|
|
|
|
#endif
|
|
|
|
|
2015-04-07 17:08:28 -04:00
|
|
|
#include "MainFrame.h"
|
2015-03-30 14:50:10 -04:00
|
|
|
|
2015-04-02 11:01:21 -04:00
|
|
|
MainFrame::MainFrame(wxFrame *frame, const wxString& title)
|
2015-03-31 22:52:12 -04:00
|
|
|
: wxFrame(frame, -1, title)
|
2015-04-01 10:11:56 -04:00
|
|
|
{
|
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-09 13:27:30 -04:00
|
|
|
base_sizer->SetMinSize(600,400);
|
2015-04-01 10:11:56 -04:00
|
|
|
|
|
|
|
SetSizerAndFit(base_sizer);
|
2015-04-09 11:45:19 -04:00
|
|
|
|
2015-04-13 16:48:41 -04:00
|
|
|
this->DisableEditControls();
|
|
|
|
|
2015-04-09 11:45:19 -04:00
|
|
|
// Finally, bind events
|
|
|
|
this->BindEvents();
|
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-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"
|
|
|
|
#include "../../resources/xpm/close.xpm"
|
|
|
|
#include "../../resources/xpm/copy.xpm"
|
|
|
|
#include "../../resources/xpm/scissors.xpm"
|
|
|
|
#include "../../resources/xpm/clipboard.xpm"
|
2015-04-15 15:02:05 -04:00
|
|
|
#else
|
|
|
|
#include "../../resources/xpm/small/file_add.xpm"
|
|
|
|
#include "../../resources/xpm/small/folder.xpm"
|
|
|
|
#include "../../resources/xpm/small/diskette.xpm"
|
|
|
|
#include "../../resources/xpm/small/close.xpm"
|
|
|
|
#include "../../resources/xpm/small/copy.xpm"
|
|
|
|
#include "../../resources/xpm/small/scissors.xpm"
|
|
|
|
#include "../../resources/xpm/small/clipboard.xpm"
|
|
|
|
#endif
|
2015-04-02 11:01:21 -04:00
|
|
|
|
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-08 22:37:19 -04:00
|
|
|
vector<wxBitmap> bitmaps;
|
2015-04-02 14:20:35 -04:00
|
|
|
|
2015-04-15 12:17:25 -04:00
|
|
|
bitmaps.push_back(wxBitmap(file_add));
|
2015-04-08 22:37:19 -04:00
|
|
|
bitmaps.push_back(wxBitmap(folder));
|
2015-04-15 12:17:25 -04:00
|
|
|
bitmaps.push_back(wxBitmap(diskette));
|
|
|
|
bitmaps.push_back(wxBitmap(close));
|
|
|
|
bitmaps.push_back(wxBitmap(copy));
|
|
|
|
bitmaps.push_back(wxBitmap(scissors));
|
|
|
|
bitmaps.push_back(wxBitmap(clipboard));
|
2015-04-02 14:20:35 -04:00
|
|
|
|
|
|
|
toolBar->AddTool(wxID_NEW, "New", bitmaps[0], "New file");
|
|
|
|
toolBar->AddTool(wxID_OPEN, "Open", bitmaps[1], "Open file");
|
|
|
|
toolBar->AddTool(wxID_SAVE, "Save", bitmaps[2], "Save file");
|
2015-04-15 12:17:25 -04:00
|
|
|
toolBar->AddTool(wxID_CLOSE, "Close", bitmaps[3], "Close file");
|
|
|
|
toolBar->AddSeparator();
|
|
|
|
toolBar->AddTool(wxID_COPY, "Copy", bitmaps[4], "Copy");
|
|
|
|
toolBar->AddTool(wxID_CUT, "Cut", bitmaps[5], "Cut");
|
|
|
|
toolBar->AddTool(wxID_PASTE, "Paste", bitmaps[6], "Paste");
|
2015-04-09 11:45:19 -04:00
|
|
|
//toolBar->AddTool(wxID_ANY, "Settings", bitmaps[4], "Change Settings");
|
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-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-13 09:30:56 -04:00
|
|
|
mbar = new wxMenuBar();
|
2015-03-31 22:52:12 -04:00
|
|
|
|
|
|
|
// Create Base menus
|
2015-04-13 09:30:56 -04:00
|
|
|
fileMenu = new wxMenu(_T(""));
|
|
|
|
editMenu = new wxMenu(_T(""));
|
2015-04-13 13:01:25 -04:00
|
|
|
viewMenu = new wxMenu(_T(""));
|
2015-04-13 09:30:56 -04:00
|
|
|
helpMenu = new wxMenu(_T(""));
|
2015-03-31 22:52:12 -04:00
|
|
|
|
|
|
|
// Add items to top-level menus
|
|
|
|
fileMenu->Append(wxID_NEW, _T("&New\tCtrl+N"), _T("Create a new file"));
|
|
|
|
fileMenu->AppendSeparator();
|
2015-04-01 10:11:56 -04:00
|
|
|
fileMenu->Append(wxID_OPEN, _T("&Open\tCtrl+O"), _T("Opens an existing file"));
|
2015-03-31 22:52:12 -04:00
|
|
|
fileMenu->Append(wxID_SAVE, _T("&Save\tCtrl+S"), _T("Save the content"));
|
2015-04-08 22:37:19 -04:00
|
|
|
fileMenu->Append(wxID_SAVEAS, _T("Save &As...\tShift+Ctrl+S"), _T("Save current file as..."));
|
2015-03-31 22:52:12 -04:00
|
|
|
fileMenu->AppendSeparator();
|
2015-04-08 22:37:19 -04:00
|
|
|
fileMenu->Append(wxID_CLOSE, _T("&Close\tCtrl+W"), _T("Close the current document"));
|
2015-03-31 22:52:12 -04:00
|
|
|
fileMenu->Append(wxID_EXIT, _T("&Quit\tCtrl+Q"), _T("Quit the application"));
|
2015-04-13 09:30:56 -04:00
|
|
|
|
2015-03-31 22:52:12 -04:00
|
|
|
editMenu->Append(wxID_UNDO, _T("&Undo\tCtrl+Z"), _T("Undo last action"));
|
|
|
|
editMenu->Append(wxID_REDO, _T("&Redo\tCtrl+Y"), _T("Redo last action"));
|
|
|
|
editMenu->AppendSeparator();
|
|
|
|
editMenu->Append(wxID_CUT, _T("Cu&t\tCtrl+X"), _T("Cut selected text"));
|
|
|
|
editMenu->Append(wxID_COPY, _T("&Copy\tCtrl+C"), _T("Copy selected text"));
|
|
|
|
editMenu->Append(wxID_PASTE, _T("&Paste\tCtrl+V"), _T("Paste contents of clipboard"));
|
2015-04-10 15:11:15 -04:00
|
|
|
editMenu->Append(wxID_CLEAR, _T("&Delete\tDel"));
|
2015-04-08 22:37:19 -04:00
|
|
|
editMenu->AppendSeparator();
|
2015-04-13 09:30:56 -04:00
|
|
|
editMenu->Append (wxID_FIND, _("&Find\tCtrl+F"));
|
|
|
|
editMenu->AppendSeparator();
|
2015-04-13 16:48:41 -04:00
|
|
|
editMenu->Append(wxID_SELECTALL, _T("Select All\tCtrl+A"), _T("Select all the text in the current document"));
|
2015-04-13 13:01:25 -04:00
|
|
|
|
2015-03-31 22:52:12 -04:00
|
|
|
helpMenu->Append(wxID_ABOUT, _T("&About...\tF1"), _T("Show info about this application"));
|
|
|
|
|
|
|
|
// Add the menus to the menubar
|
2015-04-06 15:42:05 -04:00
|
|
|
mbar->Append(fileMenu, _T("&File"));
|
|
|
|
mbar->Append(editMenu, _T("&Edit"));
|
2015-04-13 13:01:25 -04:00
|
|
|
mbar->Append(viewMenu, _T("&View"));
|
2015-04-06 15:42:05 -04:00
|
|
|
mbar->Append(helpMenu, _T("&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-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-15 21:26:09 -04:00
|
|
|
Bind(wxEVT_CLOSE_WINDOW, &TabContainer::OnClose, notebook, wxID_CLOSE);
|
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-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-09 17:16:28 -04:00
|
|
|
wxString filename;
|
|
|
|
|
|
|
|
wxFileDialog dlg (this, _T("Open file"), wxEmptyString, wxEmptyString,
|
|
|
|
TYRO_FILE_OPEN_WILDCARDS, wxFD_OPEN | wxFD_FILE_MUST_EXIST | wxFD_CHANGE_DIR);
|
|
|
|
|
|
|
|
if (dlg.ShowModal() != wxID_OK) return;
|
|
|
|
|
|
|
|
filename = dlg.GetPath();
|
|
|
|
|
2015-04-13 16:48:41 -04:00
|
|
|
this->EnableEditControls();
|
|
|
|
|
2015-04-09 17:16:28 -04:00
|
|
|
notebook->AddTab(filename);
|
|
|
|
}
|
|
|
|
|
|
|
|
void MainFrame::OnFileClose(wxCommandEvent &WXUNUSED(event))
|
|
|
|
{
|
2015-04-13 13:01:25 -04:00
|
|
|
// @TODO Implement OnFileClose
|
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();
|
|
|
|
wxString file = editor->fileName;
|
|
|
|
|
|
|
|
editor->SetSavePoint();
|
|
|
|
editor->SaveFile(file);
|
2015-04-09 17:16:28 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
void MainFrame::OnSaveAs(wxCommandEvent &WXUNUSED(event))
|
|
|
|
{
|
2015-04-13 13:01:25 -04:00
|
|
|
// @TODO Implement OnSaveAs
|
|
|
|
}
|
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;
|
|
|
|
|
|
|
|
info.SetName("Tyro");
|
|
|
|
info.SetVersion("0.0.1", "Prerelease");
|
|
|
|
|
|
|
|
info.AddDeveloper("Tim Warren, Programmer");
|
|
|
|
|
|
|
|
info.SetDescription("Tyro, a text editor for all development");
|
|
|
|
info.SetCopyright(_T(" (C) 2015, Timothy J Warren"));
|
|
|
|
|
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
|
|
|
|
|
|
|
/**
|
|
|
|
* Enable file-specific controls
|
|
|
|
*/
|
|
|
|
void MainFrame::EnableEditControls()
|
|
|
|
{
|
|
|
|
fileMenu->Enable(wxID_SAVE, true);
|
|
|
|
fileMenu->Enable(wxID_SAVEAS, true);
|
|
|
|
fileMenu->Enable(wxID_CLOSE, true);
|
|
|
|
//editMenu->Enable(wxID_UNDO, false);
|
|
|
|
//editMenu->Enable(wxID_REDO, false);
|
|
|
|
editMenu->Enable(wxID_CUT, true);
|
|
|
|
editMenu->Enable(wxID_COPY, true);
|
|
|
|
editMenu->Enable(wxID_PASTE, true);
|
|
|
|
editMenu->Enable(wxID_CLEAR, true);
|
|
|
|
editMenu->Enable(wxID_FIND, true);
|
|
|
|
editMenu->Enable(wxID_SELECTALL, true);
|
|
|
|
|
|
|
|
toolBar->EnableTool(wxID_SAVE, true);
|
2015-04-15 12:17:25 -04:00
|
|
|
toolBar->EnableTool(wxID_CLOSE, true);
|
|
|
|
toolBar->EnableTool(wxID_COPY, true);
|
|
|
|
toolBar->EnableTool(wxID_CUT, true);
|
|
|
|
toolBar->EnableTool(wxID_PASTE, true);
|
2015-04-13 16:48:41 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Disables file-specific controls
|
|
|
|
*/
|
|
|
|
void MainFrame::DisableEditControls()
|
|
|
|
{
|
|
|
|
fileMenu->Enable(wxID_SAVE, false);
|
|
|
|
fileMenu->Enable(wxID_SAVEAS, false);
|
|
|
|
fileMenu->Enable(wxID_CLOSE, false);
|
|
|
|
|
|
|
|
editMenu->Enable(wxID_UNDO, false);
|
|
|
|
editMenu->Enable(wxID_REDO, false);
|
|
|
|
editMenu->Enable(wxID_CUT, false);
|
|
|
|
editMenu->Enable(wxID_COPY, false);
|
|
|
|
editMenu->Enable(wxID_PASTE, false);
|
|
|
|
editMenu->Enable(wxID_CLEAR, false);
|
|
|
|
editMenu->Enable(wxID_FIND, false);
|
|
|
|
editMenu->Enable(wxID_SELECTALL, false);
|
|
|
|
|
|
|
|
toolBar->EnableTool(wxID_SAVE, false);
|
2015-04-15 12:17:25 -04:00
|
|
|
toolBar->EnableTool(wxID_CLOSE, false);
|
|
|
|
toolBar->EnableTool(wxID_COPY, false);
|
|
|
|
toolBar->EnableTool(wxID_CUT, false);
|
|
|
|
toolBar->EnableTool(wxID_PASTE, false);
|
2015-04-13 16:48:41 -04:00
|
|
|
}
|