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
|
#include "Splitter.h"
#include "registry/registry.h"
#include <wx/event.h>
namespace wxutil
{
Splitter::Splitter(wxWindow* parent, const std::string& registryKey, long style,
const wxString& name)
: wxSplitterWindow(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, style, name),
_registryKey(registryKey)
{
SetMinimumPaneSize(1); // disallow unsplitting
SetSashGravity(0.5);
}
int Splitter::sashPositionMax()
{
// In wxWidgets parlance "split vertically" means drawing the sash
// vertically, with the content panes on the left and right.
wxSize size = GetSize();
return GetSplitMode() == wxSPLIT_VERTICAL ? size.GetWidth()
: size.GetHeight();
}
void Splitter::connectToRegistry()
{
float sashPosition = registry::getValue<float>(_registryKey, 0.5) * sashPositionMax();
SetSashPosition(int(sashPosition));
Bind(wxEVT_SPLITTER_SASH_POS_CHANGED, &Splitter::onPositionChange, this);
}
void Splitter::onPositionChange(wxSplitterEvent& e)
{
e.Skip();
float position = GetSashPosition() * 1.0f / sashPositionMax();
registry::setValue(_registryKey, position);
}
}
|