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
|
#include "PanedPosition.h"
#include "string/convert.h"
#include "registry/registry.h"
#include <wx/splitter.h>
#include "string/predicate.h"
namespace
{
constexpr int DEFAULT_POSITION = 200;
}
namespace wxutil
{
PanedPosition::PanedPosition(const std::string& name) :
_name(name),
_position(DEFAULT_POSITION)
{}
PanedPosition::~PanedPosition()
{
disconnect();
}
void PanedPosition::connect(wxSplitterWindow* paned)
{
if (_paned != nullptr)
{
disconnect();
}
_paned = paned;
_paned->Bind(wxEVT_SPLITTER_SASH_POS_CHANGED, &PanedPosition::onPositionChange, this);
}
void PanedPosition::disconnect()
{
if (_paned)
{
_paned->Unbind(wxEVT_SPLITTER_SASH_POS_CHANGED, &PanedPosition::onPositionChange, this);
_paned.Release();
}
}
void PanedPosition::setPosition(int position)
{
_position = position;
if (_paned)
{
_paned->SetSashPosition(_position, true);
}
}
void PanedPosition::saveToPath(const std::string& path)
{
GlobalRegistry().setAttribute(registry::combinePath(path, _name), "position", string::to_string(_position));
}
void PanedPosition::loadFromPath(const std::string& path)
{
setPosition(string::convert<int>(GlobalRegistry().getAttribute(registry::combinePath(path, _name), "position")));
}
void PanedPosition::onPositionChange(wxSplitterEvent& ev)
{
if (_paned)
{
_position = _paned->GetSashPosition();
}
}
} // namespace
|