52 lines
1.4 KiB
C++
52 lines
1.4 KiB
C++
#include "stdafx.h"
|
|
|
|
#include "SnapSplitterWindow.h"
|
|
|
|
BEGIN_EVENT_TABLE(SnapSplitterWindow, wxSplitterWindow)
|
|
EVT_SPLITTER_SASH_POS_CHANGING(wxID_ANY, SnapSplitterWindow::OnSashPosChanging)
|
|
END_EVENT_TABLE()
|
|
|
|
SnapSplitterWindow::SnapSplitterWindow(wxWindow* parent, long style)
|
|
: wxSplitterWindow(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize,
|
|
style | wxSP_LIVE_UPDATE),
|
|
m_SnapTolerance(16)
|
|
{
|
|
// Set min size, to disable unsplitting
|
|
SetMinimumPaneSize(32);
|
|
|
|
}
|
|
|
|
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);
|
|
}
|
|
|
|
void SnapSplitterWindow::OnSashPosChanging(wxSplitterEvent& evt)
|
|
{
|
|
int defaultPos = ConvertSashPosition(m_DefaultSashPosition);
|
|
|
|
if (evt.GetSashPosition() >= defaultPos-m_SnapTolerance &&
|
|
evt.GetSashPosition() <= defaultPos+m_SnapTolerance)
|
|
{
|
|
evt.SetSashPosition(defaultPos);
|
|
}
|
|
}
|