1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
|
#include "MainFrame.h"
#include "SettingsDlg.h"
#include "wxTerminalCtrl.h"
#include "wxTerminalOptions.h"
#include <wx/aboutdlg.h>
#include <wx/msgdlg.h>
MainFrame::MainFrame(wxWindow* parent)
: MainFrameBaseClass(parent)
{
wxTerminalOptions& options = wxTerminalOptions::Get();
options.Load();
m_terminal = new wxTerminalCtrl(GetMainPanel());
m_terminal->SetWorkingDirectory(options.GetWorkingDirectory());
m_terminal->SetPauseOnExit(options.IsWaitOnExit());
m_terminal->SetPrintTTY(options.IsPrintTTY(), options.GetTtyfile());
m_terminal->SetLogfile(options.GetLogfile());
m_terminal->Start(options.GetCommand());
GetMainPanel()->GetSizer()->Add(m_terminal, 1, wxEXPAND);
GetSizer()->Fit(this);
SetLabel(options.GetTitle().IsEmpty() ? "codelite-terminal" : options.GetTitle());
m_terminal->Bind(wxEVT_TERMINAL_CTRL_DONE, &MainFrame::OnTerminalExit, this);
m_terminal->Bind(wxEVT_TERMINAL_CTRL_SET_TITLE, &MainFrame::OnSetTitle, this);
m_terminal->CallAfter(&wxTerminalCtrl::Focus);
PostSizeEvent();
// ensure that this window is raised on startup
CallAfter(&wxFrame::Raise);
}
MainFrame::~MainFrame() {}
void MainFrame::OnExit(wxCommandEvent& event)
{
Hide();
CallAfter(&MainFrame::DoClose);
}
void MainFrame::OnAbout(wxCommandEvent& event)
{
wxUnusedVar(event);
wxAboutDialogInfo info;
info.SetName("codelite-terminal");
info.AddDeveloper("Eran Ifrah");
info.SetLicence(_("GPL v2 or later"));
info.SetDescription(_("CodeLite built-in terminal emulator"));
::wxAboutBox(info);
}
void MainFrame::OnTerminalExit(clCommandEvent& event)
{
Hide();
CallAfter(&MainFrame::DoClose);
}
void MainFrame::DoClose()
{
const wxTerminalHistory& history = m_terminal->GetHistory();
wxTerminalOptions::Get().SetHistory(history.GetCommands());
wxTerminalOptions::Get().Save();
wxTheApp->ExitMainLoop();
}
void MainFrame::OnSettings(wxCommandEvent& event)
{
SettingsDlg dlg(this);
if(dlg.ShowModal() == wxID_OK) {
dlg.Save();
m_terminal->ReloadSettings();
m_terminal->ClearScreen();
}
}
void MainFrame::OnClose(wxCloseEvent& event)
{
Hide();
CallAfter(&MainFrame::DoClose);
}
void MainFrame::OnSetTitle(clCommandEvent& event) { SetLabel(event.GetString()); }
void MainFrame::OnClearScreen(wxCommandEvent& event) { m_terminal->ClearScreen(); }
void MainFrame::OnButton93ButtonClicked(wxCommandEvent& event) {}
|