RelayFile/UserInterface/UserInterface.cxx

87 lines
2.8 KiB
C++

#include "UserInterface.h"
#include <Util.h>
#include <filesystem>
#include <wx/fileconf.h>
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<ControlManager>(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;
}