add:添加布局保存恢复。
This commit is contained in:
parent
57f10b86af
commit
c5fe1e349f
@ -29,5 +29,5 @@ ControlManager.cxx
|
||||
)
|
||||
|
||||
add_executable(RelayFile ${MSOURCES})
|
||||
target_link_libraries(RelayFile PRIVATE wx::base wx::core wx::aui)
|
||||
target_link_libraries(RelayFile PRIVATE wx::base wx::core wx::aui Util)
|
||||
set_target_properties(RelayFile PROPERTIES WIN32_EXECUTABLE TRUE)
|
@ -9,4 +9,6 @@ void ControlManager::Init()
|
||||
{
|
||||
header_ = new HeaderControl(parent_);
|
||||
local_ = new LocalControl(parent_);
|
||||
remote_ = new RemoteControl(parent_);
|
||||
task_ = new TaskControl(parent_);
|
||||
}
|
@ -3,6 +3,8 @@
|
||||
|
||||
#include "HeaderControl.h"
|
||||
#include "LocalControl.h"
|
||||
#include "RemoteControl.h"
|
||||
#include "TaskControl.h"
|
||||
#include <memory>
|
||||
|
||||
class ControlManager
|
||||
@ -20,6 +22,8 @@ private:
|
||||
public:
|
||||
HeaderControl* header_;
|
||||
LocalControl* local_;
|
||||
RemoteControl* remote_;
|
||||
TaskControl* task_;
|
||||
};
|
||||
|
||||
#endif // CONTROL_MANAGER_H
|
@ -1,6 +1,8 @@
|
||||
#ifndef INTERFACEDEFINE_HPP
|
||||
#define INTERFACEDEFINE_HPP
|
||||
|
||||
#include <wx/wx.h>
|
||||
|
||||
#define gBorder (5)
|
||||
|
||||
#endif // INTERFACEDEFINE_HPP
|
@ -2,8 +2,18 @@
|
||||
|
||||
LocalControl::LocalControl(wxWindow* parent) : wxPanel(parent)
|
||||
{
|
||||
Init();
|
||||
}
|
||||
|
||||
LocalControl::~LocalControl()
|
||||
{
|
||||
}
|
||||
|
||||
void LocalControl::Init()
|
||||
{
|
||||
auto* topSizer = new wxBoxSizer(wxVERTICAL);
|
||||
dirCtrl_ = new wxGenericDirCtrl(this, wxID_ANY);
|
||||
topSizer->Add(dirCtrl_, 1, wxEXPAND);
|
||||
SetSizer(topSizer);
|
||||
Layout();
|
||||
}
|
||||
|
@ -1,13 +1,20 @@
|
||||
#ifndef LOCALCONTROL_H
|
||||
#define LOCALCONTROL_H
|
||||
|
||||
#include <wx/wx.h>
|
||||
#include "InterfaceDefine.hpp"
|
||||
#include <wx/dirctrl.h>
|
||||
|
||||
class LocalControl : public wxPanel
|
||||
{
|
||||
public:
|
||||
LocalControl(wxWindow* parent);
|
||||
~LocalControl() override;
|
||||
|
||||
private:
|
||||
void Init();
|
||||
|
||||
public:
|
||||
wxGenericDirCtrl* dirCtrl_;
|
||||
};
|
||||
|
||||
#endif // LOCALCONTROL_H
|
@ -2,8 +2,35 @@
|
||||
|
||||
RemoteControl::RemoteControl(wxWindow* parent) : wxPanel(parent)
|
||||
{
|
||||
Init();
|
||||
SetGrid();
|
||||
}
|
||||
|
||||
RemoteControl::~RemoteControl()
|
||||
{
|
||||
}
|
||||
|
||||
void RemoteControl::Init()
|
||||
{
|
||||
grid_ = new wxGrid(this, wxID_ANY);
|
||||
auto* topSizer = new wxBoxSizer(wxVERTICAL);
|
||||
topSizer->Add(grid_, 1, wxEXPAND);
|
||||
SetSizer(topSizer);
|
||||
Layout();
|
||||
}
|
||||
|
||||
void RemoteControl::SetGrid()
|
||||
{
|
||||
grid_->CreateGrid(10, 5);
|
||||
grid_->SetColLabelValue(0, _("FullPath"));
|
||||
grid_->SetColLabelValue(1, _("FileSize"));
|
||||
grid_->SetColLabelValue(2, _("FileType"));
|
||||
grid_->SetColLabelValue(3, _("LastModified"));
|
||||
grid_->SetColLabelValue(4, _("Permissions"));
|
||||
|
||||
grid_->SetColSize(0, 200);
|
||||
grid_->SetColSize(1, 100);
|
||||
grid_->SetColSize(2, 100);
|
||||
grid_->SetColSize(3, 150);
|
||||
grid_->SetColSize(4, 100);
|
||||
}
|
||||
|
@ -1,13 +1,21 @@
|
||||
#ifndef REMOTECONTROL_H
|
||||
#define REMOTECONTROL_H
|
||||
|
||||
#include <wx/wx.h>
|
||||
#include "InterfaceDefine.hpp"
|
||||
#include <wx/grid.h>
|
||||
|
||||
class RemoteControl : public wxPanel
|
||||
{
|
||||
public:
|
||||
RemoteControl(wxWindow* parent);
|
||||
~RemoteControl() override;
|
||||
|
||||
private:
|
||||
void Init();
|
||||
void SetGrid();
|
||||
|
||||
public:
|
||||
wxGrid* grid_;
|
||||
};
|
||||
|
||||
#endif // REMOTECONTROL_H
|
@ -2,8 +2,29 @@
|
||||
|
||||
TaskControl::TaskControl(wxWindow* parent) : wxPanel(parent)
|
||||
{
|
||||
Init();
|
||||
SetGrid();
|
||||
}
|
||||
|
||||
TaskControl::~TaskControl()
|
||||
{
|
||||
}
|
||||
|
||||
void TaskControl::Init()
|
||||
{
|
||||
grid_ = new wxGrid(this, wxID_ANY);
|
||||
auto* topSizer = new wxBoxSizer(wxVERTICAL);
|
||||
topSizer->Add(grid_, 1, wxEXPAND);
|
||||
SetSizer(topSizer);
|
||||
Layout();
|
||||
}
|
||||
|
||||
void TaskControl::SetGrid()
|
||||
{
|
||||
grid_->CreateGrid(10, 5);
|
||||
grid_->SetColLabelValue(0, _("id"));
|
||||
grid_->SetColLabelValue(1, _("LocalPurpose"));
|
||||
grid_->SetColLabelValue(2, _("LocalType"));
|
||||
grid_->SetColLabelValue(3, _("RemtoePurpose"));
|
||||
grid_->SetColLabelValue(4, _("RemtoeType"));
|
||||
}
|
@ -1,13 +1,21 @@
|
||||
#ifndef TASKCONTROL_H
|
||||
#define TASKCONTROL_H
|
||||
|
||||
#include <wx/wx.h>
|
||||
#include "InterfaceDefine.hpp"
|
||||
#include <wx/grid.h>
|
||||
|
||||
class TaskControl : public wxPanel
|
||||
{
|
||||
public:
|
||||
TaskControl(wxWindow* parent);
|
||||
~TaskControl() override;
|
||||
|
||||
private:
|
||||
void Init();
|
||||
void SetGrid();
|
||||
|
||||
public:
|
||||
wxGrid* grid_;
|
||||
};
|
||||
|
||||
#endif // TASKCONTROL_H
|
@ -1,10 +1,17 @@
|
||||
#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();
|
||||
}
|
||||
|
||||
UserInterface::~UserInterface()
|
||||
@ -16,15 +23,58 @@ 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_->local_, wxAuiPaneInfo().Name("local").Caption(_("local")).CloseButton(false).BestSize(300, 400));
|
||||
mgr_.AddPane(controlMgr_->remote_, wxAuiPaneInfo().Name("remote").Caption(_("remote")).CloseButton(false).BestSize(300, 400));
|
||||
mgr_.AddPane(controlMgr_->task_,
|
||||
wxAuiPaneInfo().Name("task").Caption(_("task")).CloseButton(false).BestSize(300, 400).CenterPane());
|
||||
|
||||
// update
|
||||
mgr_.Update();
|
||||
}
|
||||
|
||||
void UserInterface::InitMenu()
|
||||
{
|
||||
menuBar_ = new wxMenuBar();
|
||||
wxMenu* auimenu = new wxMenu();
|
||||
auimenu->Append(ID_SaveLayout, "&SaveLayou\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;
|
||||
}
|
||||
|
@ -7,6 +7,10 @@
|
||||
|
||||
#include "ControlManager.h"
|
||||
|
||||
enum MenuID {
|
||||
ID_SaveLayout = 1000,
|
||||
};
|
||||
|
||||
class UserInterface final : public wxFrame
|
||||
{
|
||||
public:
|
||||
@ -15,10 +19,20 @@ public:
|
||||
|
||||
private:
|
||||
void InitUI();
|
||||
void InitMenu();
|
||||
void InitData();
|
||||
|
||||
private:
|
||||
void TryRestoreLayout();
|
||||
|
||||
private:
|
||||
void OnSaveLayout(wxCommandEvent& event);
|
||||
|
||||
private:
|
||||
wxAuiManager mgr_;
|
||||
wxMenuBar* menuBar_;
|
||||
wxString configDir_;
|
||||
wxString configPath_;
|
||||
std::shared_ptr<ControlManager> controlMgr_;
|
||||
};
|
||||
|
||||
|
@ -1,5 +1,9 @@
|
||||
#include "Util.h"
|
||||
#include <algorithm>
|
||||
#include <filesystem>
|
||||
#include <wx/stdpaths.h>
|
||||
|
||||
namespace fs = std::filesystem;
|
||||
|
||||
TranUtil::TranUtil()
|
||||
{
|
||||
@ -44,4 +48,23 @@ void MutBuffer::Clear()
|
||||
const char* MutBuffer::GetData() const
|
||||
{
|
||||
return buffer_.data();
|
||||
}
|
||||
}
|
||||
|
||||
wxString wxUtil::GetConfigDir()
|
||||
{
|
||||
auto userDir = wxGetUserHome();
|
||||
fs::path path(userDir.ToStdString());
|
||||
path.append(".config");
|
||||
return wxString::FromUTF8(path.string());
|
||||
}
|
||||
|
||||
bool wxUtil::CreateConfigDir(const wxString& dir, const wxString& name, wxString& fullPath)
|
||||
{
|
||||
fs::path path(dir.ToStdString());
|
||||
path.append(name.ToStdString());
|
||||
if (fs::exists(path)) {
|
||||
return true;
|
||||
}
|
||||
fullPath = wxString::FromUTF8(path.string());
|
||||
return fs::create_directories(path);
|
||||
}
|
||||
|
@ -3,6 +3,7 @@
|
||||
|
||||
#include <mutex>
|
||||
#include <vector>
|
||||
#include <wx/wx.h>
|
||||
|
||||
constexpr int MAX_BUFFER_SIZE = 1024 * 1024 * 10;
|
||||
|
||||
@ -29,4 +30,11 @@ private:
|
||||
std::vector<char> buffer_;
|
||||
};
|
||||
|
||||
class wxUtil
|
||||
{
|
||||
public:
|
||||
static wxString GetConfigDir();
|
||||
static bool CreateConfigDir(const wxString& dir, const wxString& name, wxString& fullPath);
|
||||
};
|
||||
|
||||
#endif // REMOTE_TRAN_UTIL
|
Loading…
x
Reference in New Issue
Block a user