#include "wxsheaders.h"
#include "wxssplitterwindow.h"
#include <wx/sizer.h>
#define MIN_MARGIN 20
#include <manager.h>
#include <messagemanager.h>
#include <configmanager.h>
static const wxWindowID SplitterId = wxNewId();
wxsSplitterWindowEx::wxsSplitterWindowEx(wxWindow* Parent):
wxPanel(Parent)
{
wxBoxSizer* Sizer = new wxBoxSizer(wxVERTICAL);
Sizer->Add( Splitter = new wxSplitterWindow(this,SplitterId), 1, wxGROW|wxALL );
SetSizer(Sizer);
SplitPosition = ConfigManager::Get()->Read(_T("/wxsmith/res_panel_split"),Splitter->GetSize().GetHeight()/2);
}
wxsSplitterWindowEx::~wxsSplitterWindowEx()
{
}
void wxsSplitterWindowEx::Split(wxWindow* Top,wxWindow* Bottom,int SashPosition)
{
if ( Top ) Top->SetParent(Splitter);
if ( Bottom ) Bottom->SetParent(Splitter);
if ( SashPosition ) SplitPosition = SashPosition;
Splitter->SplitHorizontally(Top,Bottom,SplitterFixup(SplitPosition));
}
void wxsSplitterWindowEx::OnSize(wxSizeEvent& event)
{
Splitter->SetSashPosition(SplitterFixup(SplitPosition));
event.Skip();
}
void wxsSplitterWindowEx::OnSplitterChanging(wxSplitterEvent& event)
{
SplitPosition = event.GetSashPosition();
event.SetSashPosition(SplitterFixup(SplitPosition));
}
void wxsSplitterWindowEx::OnSplitterChanged(wxSplitterEvent& event)
{
// We use value which was previously set through OnSplitterChanging()
// This will avoid hiding top panel when docking managment window
event.SetSashPosition(SplitterFixup(SplitPosition));
ConfigManager::Get()->Write(_T("/wxsmith/res_panel_split"),SplitPosition);
}
int wxsSplitterWindowEx::SplitterFixup(int Position)
{
int Height = GetSize().GetHeight();
int MinMargin = Height / 2;
if ( MinMargin > MIN_MARGIN ) MinMargin = MIN_MARGIN;
if ( Position < MinMargin ) Position = MinMargin;
if ( Position > Height - MinMargin ) Position = Height - MinMargin;
return Position;
}
BEGIN_EVENT_TABLE(wxsSplitterWindowEx,wxPanel)
EVT_SIZE(wxsSplitterWindowEx::OnSize)
EVT_SPLITTER_SASH_POS_CHANGING(SplitterId,wxsSplitterWindowEx::OnSplitterChanging)
EVT_SPLITTER_SASH_POS_CHANGED(SplitterId,wxsSplitterWindowEx::OnSplitterChanged)
END_EVENT_TABLE()
syntax highlighted by Code2HTML, v. 0.9.1