2005-06-28 01:04:34 +02:00
|
|
|
#include "stdafx.h"
|
|
|
|
|
|
|
|
#include "SnapSplitterWindow.h"
|
|
|
|
|
|
|
|
BEGIN_EVENT_TABLE(SnapSplitterWindow, wxSplitterWindow)
|
|
|
|
EVT_SPLITTER_SASH_POS_CHANGING(wxID_ANY, SnapSplitterWindow::OnSashPosChanging)
|
|
|
|
END_EVENT_TABLE()
|
|
|
|
|
2005-09-12 22:04:26 +02:00
|
|
|
SnapSplitterWindow::SnapSplitterWindow(wxWindow* parent, long style)
|
2005-06-28 01:04:34 +02:00
|
|
|
: wxSplitterWindow(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize,
|
2005-09-12 22:04:26 +02:00
|
|
|
style | wxSP_LIVE_UPDATE),
|
2005-06-28 01:04:34 +02:00
|
|
|
m_SnapTolerance(16)
|
|
|
|
{
|
|
|
|
// Set min size, to disable unsplitting
|
|
|
|
SetMinimumPaneSize(32);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2005-11-03 04:49:57 +01:00
|
|
|
void SnapSplitterWindow::SetDefaultSashPosition(int sashPosition)
|
|
|
|
{
|
|
|
|
m_DefaultSashPosition = sashPosition;
|
|
|
|
|
|
|
|
// Set gravity so that the unspecified-size window is resized
|
|
|
|
if (sashPosition < 0)
|
|
|
|
SetSashGravity(1.0);
|
|
|
|
else if (sashPosition == 0)
|
|
|
|
SetSashGravity(0.5);
|
|
|
|
else
|
|
|
|
SetSashGravity(0.0);
|
|
|
|
}
|
|
|
|
|
|
|
|
bool SnapSplitterWindow::SplitVertically(wxWindow *window1, wxWindow *window2)
|
|
|
|
{
|
|
|
|
return wxSplitterWindow::SplitVertically(window1, window2, m_DefaultSashPosition);
|
|
|
|
}
|
|
|
|
|
|
|
|
bool SnapSplitterWindow::SplitHorizontally(wxWindow *window1, wxWindow *window2)
|
|
|
|
{
|
|
|
|
return wxSplitterWindow::SplitHorizontally(window1, window2, m_DefaultSashPosition);
|
|
|
|
}
|
2005-06-28 01:04:34 +02:00
|
|
|
|
|
|
|
void SnapSplitterWindow::OnSashPosChanging(wxSplitterEvent& evt)
|
|
|
|
{
|
2005-11-03 04:49:57 +01:00
|
|
|
int defaultPos = ConvertSashPosition(m_DefaultSashPosition);
|
|
|
|
|
|
|
|
if (evt.GetSashPosition() >= defaultPos-m_SnapTolerance &&
|
|
|
|
evt.GetSashPosition() <= defaultPos+m_SnapTolerance)
|
2005-06-28 01:04:34 +02:00
|
|
|
{
|
2005-11-03 04:49:57 +01:00
|
|
|
evt.SetSashPosition(defaultPos);
|
2005-06-28 01:04:34 +02:00
|
|
|
}
|
|
|
|
}
|