#include "UserInterface.h" #include #include #include namespace fs = std::filesystem; UserInterface::UserInterface(const wxString& title) : wxFrame(nullptr, wxID_ANY, title, wxDefaultPosition, wxSize(800, 600)) { mgr_.SetManagedWindow(this); InitMenu(); InitUI(); InitData(); TryRestoreLayout(); controlMgr_->log_->AddLog(wxT("Welcome to RelayFile.")); } UserInterface::~UserInterface() { mgr_.UnInit(); } void UserInterface::InitUI() { // Add Panel controlMgr_ = std::make_shared(this); mgr_.AddPane(controlMgr_->header_, wxAuiPaneInfo().Name("header").Caption(_("header")).CloseButton(false).Floatable(false).MinSize(-1, 40)); mgr_.AddPane(controlMgr_->log_, wxAuiPaneInfo().Name("log").Caption(_("log")).CloseButton(false).BestSize(300, 400)); mgr_.AddPane(controlMgr_->local_, wxAuiPaneInfo().Name("local").Caption(_("local")).CloseButton(false).BestSize(300, 400).Bottom()); mgr_.AddPane(controlMgr_->remote_, wxAuiPaneInfo().Name("remote").Caption(_("remote")).CloseButton(false).BestSize(300, 400).Bottom()); mgr_.AddPane(controlMgr_->task_, wxAuiPaneInfo().Name("task").Caption(_("task")).CloseButton(false).BestSize(300, 400).CenterPane()); mgr_.AddPane(controlMgr_->online_, wxAuiPaneInfo().Name("online").Caption(_("online")).CloseButton(false).BestSize(300, 400).Right()); // update mgr_.Update(); } void UserInterface::InitMenu() { menuBar_ = new wxMenuBar(); wxMenu* auimenu = new wxMenu(); auimenu->Append(ID_SaveLayout, "&SaveLayout\tCtrl-S", _("Save Layout")); menuBar_->Append(auimenu, "&Aui"); SetMenuBar(menuBar_); Bind(wxEVT_MENU, &UserInterface::OnSaveLayout, this, ID_SaveLayout); } void UserInterface::InitData() { auto configDir = wxUtil::GetConfigDir(); wxUtil::CreateConfigDir(configDir, wxT("RelayFile"), configDir_); configPath_ = configDir_ + wxT("/RelayFile.ini"); } void UserInterface::TryRestoreLayout() { fs::path path(configPath_.ToStdString()); if (!fs::exists(path)) { return; } auto* config = new wxFileConfig(wxEmptyString, wxEmptyString, configPath_); wxString perspective = config->Read("perspective"); if (!perspective.IsEmpty()) { mgr_.LoadPerspective(perspective); } delete config; } void UserInterface::OnSaveLayout(wxCommandEvent& event) { auto perspective = mgr_.SavePerspective(); auto* config = new wxFileConfig(wxEmptyString, wxEmptyString, configPath_); if (config->Write("perspective", perspective)) { config->Flush(); wxMessageBox(_("Save Layout Success"), _("Save Layout"), wxOK | wxICON_INFORMATION); } else { wxMessageBox(_("Save Layout Failed"), _("Save Layout"), wxOK | wxICON_ERROR); } delete config; }