Add serialize option for the splitter window sash position.

This commit is contained in:
apoorv569 2021-11-16 10:35:10 +05:30
parent 1210b5e6ce
commit ccda509068
5 changed files with 106 additions and 2 deletions

View File

@ -86,10 +86,14 @@ wx_opts.add_cmake_defines({'CMAKE_POSITION_INDEPENDENT_CODE': 'ON',
'CMAKE_BUILD_TYPE': 'Release', 'CMAKE_BUILD_TYPE': 'Release',
'CMAKE_CXX_COMPILER': 'g++', 'CMAKE_CXX_COMPILER': 'g++',
'wxBUILD_SHARED': 'ON', 'wxBUILD_SHARED': 'ON',
'wxBUILD_MONOLITHIC': 'OFF',
'wxBUILD_BENCHMARKS': 'OFF',
'wxBUILD_PRECOMP': 'OFF',
'wxBUILD_TESTS': 'OFF', 'wxBUILD_TESTS': 'OFF',
'wxBUILD_SAMPLES': 'OFF', 'wxBUILD_SAMPLES': 'OFF',
'wxBUILD_DEMOS': 'OFF', 'wxBUILD_DEMOS': 'OFF',
'wxBUILD_COMPATIBILITY': '3.0', 'wxBUILD_COMPATIBILITY': '3.0',
'wxBUILD_TOOLKIT': 'gtk3',
'wxUSE_UNICODE': 'ON', 'wxUSE_UNICODE': 'ON',
'wxUSE_AUI': 'OFF', 'wxUSE_AUI': 'OFF',
'wxUSE_XML': 'OFF', 'wxUSE_XML': 'OFF',
@ -100,6 +104,7 @@ wx_opts.add_cmake_defines({'CMAKE_POSITION_INDEPENDENT_CODE': 'ON',
'wxUSE_RIBBON': 'OFF', 'wxUSE_RIBBON': 'OFF',
'wxUSE_MDI': 'OFF', 'wxUSE_MDI': 'OFF',
'wxUSE_MDI_ARCHITECTURE': 'OFF', 'wxUSE_MDI_ARCHITECTURE': 'OFF',
'wxUSE_POSTSCRIPT': 'ON',
'wxUSE_RICHTEXT': 'OFF', 'wxUSE_RICHTEXT': 'OFF',
'wxUSE_WEBVIEW': 'OFF', 'wxUSE_WEBVIEW': 'OFF',
'wxUSE_LIBSDL': 'OFF', 'wxUSE_LIBSDL': 'OFF',

View File

@ -426,6 +426,11 @@ MainFrame::MainFrame()
Bind(wxEVT_MENU, &MainFrame::OnSelectResetAppData, this, wxID_REFRESH); Bind(wxEVT_MENU, &MainFrame::OnSelectResetAppData, this, wxID_REFRESH);
Bind(wxEVT_MENU, &MainFrame::OnSelectAbout, this, wxID_ABOUT); Bind(wxEVT_MENU, &MainFrame::OnSelectAbout, this, wxID_ABOUT);
Bind(wxEVT_SPLITTER_SASH_POS_CHANGING, &MainFrame::OnTopSplitterSashPosChanged,
this, m_TopSplitter->GetId());
Bind(wxEVT_SPLITTER_SASH_POS_CHANGING, &MainFrame::OnBottomSplitterSashPosChanged,
this, m_BottomSplitter->GetId());
this->Connect(wxEVT_SIZE, wxSizeEventHandler(MainFrame::OnResizeFrame), NULL, this); this->Connect(wxEVT_SIZE, wxSizeEventHandler(MainFrame::OnResizeFrame), NULL, this);
m_StatusBar->Connect(wxEVT_SIZE, wxSizeEventHandler(MainFrame::OnResizeStatusBar), NULL, this); m_StatusBar->Connect(wxEVT_SIZE, wxSizeEventHandler(MainFrame::OnResizeStatusBar), NULL, this);
@ -3054,10 +3059,30 @@ void MainFrame::OnResizeFrame(wxSizeEvent& event)
event.Skip(); event.Skip();
} }
void MainFrame::OnTopSplitterSashPosChanged(wxSplitterEvent& event)
{
Serializer serializer;
SH_LOG_DEBUG("TopSplitter at {}", m_TopSplitter->GetSashPosition());
serializer.SerializeSplitterSashPos("top", m_TopSplitter->GetSashPosition());
}
void MainFrame::OnBottomSplitterSashPosChanged(wxSplitterEvent& event)
{
Serializer serializer;
SH_LOG_DEBUG("BottomSplitter at {}", m_BottomSplitter->GetSashPosition());
serializer.SerializeSplitterSashPos("bottom", m_BottomSplitter->GetSashPosition());
}
void MainFrame::SetAfterFrameCreate() void MainFrame::SetAfterFrameCreate()
{ {
m_TopSplitter->SetSashPosition(200); Serializer serializer;
m_BottomSplitter->SetSashPosition(300);
m_TopSplitter->SetSashPosition(serializer.DeserializeSplitterSashPos("top"));
m_BottomSplitter->SetSashPosition(serializer.DeserializeSplitterSashPos("bottom"));
} }
void MainFrame::OnRecieveLoopPoints(SampleHive::SH_LoopPointsEvent& event) void MainFrame::OnRecieveLoopPoints(SampleHive::SH_LoopPointsEvent& event)
@ -3146,5 +3171,9 @@ void MainFrame::PlaySample(const std::string& filepath, const std::string& sampl
MainFrame::~MainFrame() MainFrame::~MainFrame()
{ {
// Delete wxTimer
delete m_Timer;
// Delete wxFilesystemWatcher
delete m_FsWatcher; delete m_FsWatcher;
} }

View File

@ -262,6 +262,10 @@ class MainFrame : public wxFrame
// Frame resize event handler // Frame resize event handler
void OnResizeFrame(wxSizeEvent& event); void OnResizeFrame(wxSizeEvent& event);
// Splitter window sash pos event handler
void OnTopSplitterSashPosChanged(wxSplitterEvent& event);
void OnBottomSplitterSashPosChanged(wxSplitterEvent& event);
// ------------------------------------------------------------------- // -------------------------------------------------------------------
// Timer update event handler // Timer update event handler
void UpdateElapsedTime(wxTimerEvent& event); void UpdateElapsedTime(wxTimerEvent& event);

View File

@ -60,6 +60,8 @@ Serializer::Serializer()
m_Emitter << YAML::BeginMap; m_Emitter << YAML::BeginMap;
m_Emitter << YAML::Key << "Width" << YAML::Value << 1280; m_Emitter << YAML::Key << "Width" << YAML::Value << 1280;
m_Emitter << YAML::Key << "Height" << YAML::Value << 720; m_Emitter << YAML::Key << "Height" << YAML::Value << 720;
m_Emitter << YAML::Key << "TopSplitterSashPos" << YAML::Value << 200;
m_Emitter << YAML::Key << "BottomSplitterSashPos" << YAML::Value << 300;
m_Emitter << YAML::Key << "ShowMenuBar" << YAML::Value << true; m_Emitter << YAML::Key << "ShowMenuBar" << YAML::Value << true;
m_Emitter << YAML::Key << "ShowStatusBar" << YAML::Value << true; m_Emitter << YAML::Key << "ShowStatusBar" << YAML::Value << true;
m_Emitter << YAML::EndMap << YAML::Newline; m_Emitter << YAML::EndMap << YAML::Newline;
@ -225,6 +227,65 @@ bool Serializer::DeserializeShowMenuAndStatusBar(std::string key) const
return show; return show;
} }
void Serializer::SerializeSplitterSashPos(std::string key, int pos)
{
YAML::Emitter out;
try
{
YAML::Node config = YAML::LoadFile(static_cast<std::string>(CONFIG_FILEPATH));
if (auto sash = config["Window"])
{
if (key == "top")
sash["TopSplitterSashPos"] = pos;
if (key == "bottom")
sash["BottomSplitterSashPos"] = pos;
out << config;
std::ofstream ofstrm(static_cast<std::string>(CONFIG_FILEPATH));
ofstrm << out.c_str();
}
else
SH_LOG_ERROR("Error! Cannot store sash pos values.");
}
catch(const YAML::ParserException& ex)
{
SH_LOG_ERROR(ex.what());
}
}
int Serializer::DeserializeSplitterSashPos(std::string key) const
{
int pos = 0;
try
{
YAML::Node config = YAML::LoadFile(static_cast<std::string>(CONFIG_FILEPATH));
if (auto bar = config["Window"])
{
if (key == "top")
pos = bar["TopSplitterSashPos"].as<int>();
if (key == "bottom")
pos = bar["BottomSplitterSashPos"].as<int>();
}
else
{
SH_LOG_ERROR("Error! Cannot fetch sash pos values.");
}
}
catch(const YAML::ParserException& ex)
{
SH_LOG_ERROR(ex.what());
}
return pos;
}
void Serializer::SerializeMediaOptions(std::string key, bool value) void Serializer::SerializeMediaOptions(std::string key, bool value)
{ {
YAML::Emitter out; YAML::Emitter out;

View File

@ -63,6 +63,11 @@ class Serializer
void SerializeShowMenuAndStatusBar(std::string key, bool value); void SerializeShowMenuAndStatusBar(std::string key, bool value);
bool DeserializeShowMenuAndStatusBar(std::string key) const; bool DeserializeShowMenuAndStatusBar(std::string key) const;
// -------------------------------------------------------------------
// Splitter window sash pos
void SerializeSplitterSashPos(std::string key, int pos);
int DeserializeSplitterSashPos(std::string key) const;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
// Browser controls // Browser controls
void SerializeMediaOptions(std::string key, bool value); void SerializeMediaOptions(std::string key, bool value);