From 970047bbc386a8778077a9f09dbe9ebed6bfe40f Mon Sep 17 00:00:00 2001 From: Julian Smart Date: Thu, 13 Apr 2000 16:18:00 +0000 Subject: [PATCH] Gave the sash and splitter windows Create and Init methods git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_2_BRANCH@7154 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- docs/latex/wx/boxsizer.tex | 2 +- include/wx/generic/laywin.h | 16 ++++++- include/wx/generic/sashwin.h | 19 +++++++-- include/wx/generic/splitter.h | 22 +++++++++- samples/splitter/splitter.cpp | 10 ++--- src/generic/laywin.cpp | 10 +++-- src/generic/sashwin.cpp | 35 +++++----------- src/generic/splitter.cpp | 78 +++++++++++++---------------------- 8 files changed, 103 insertions(+), 89 deletions(-) diff --git a/docs/latex/wx/boxsizer.tex b/docs/latex/wx/boxsizer.tex index ca0fb13595..f171048c9b 100644 --- a/docs/latex/wx/boxsizer.tex +++ b/docs/latex/wx/boxsizer.tex @@ -3,7 +3,7 @@ The basic idea behind a box sizer is that windows will most often be laid out in rather simple basic geomerty, typically in a row or a column or several hierachies of either. -As an exmaple, we will construct a dialog that will contain a text field at the top and +As an example, we will construct a dialog that will contain a text field at the top and two buttons at the bottom. This can be seen as a top-hierarchy column with the text at the top and buttons at the bottom and a low-hierchary row with an OK button to the left and a Cancel button to the right. In many cases (particulary dialogs under Unix and diff --git a/include/wx/generic/laywin.h b/include/wx/generic/laywin.h index bc6f743951..8a705fbff5 100644 --- a/include/wx/generic/laywin.h +++ b/include/wx/generic/laywin.h @@ -141,7 +141,18 @@ class WXDLLEXPORT wxSashLayoutWindow: public wxSashWindow { DECLARE_CLASS(wxSashLayoutWindow) public: + wxSashLayoutWindow() + { + Init(); + } + wxSashLayoutWindow(wxWindow *parent, wxWindowID id = -1, const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, long style = wxSW_3D|wxCLIP_CHILDREN, const wxString& name = "layoutWindow") + { + Create(parent, id, pos, size, style, name); + } + + bool Create(wxWindow *parent, wxWindowID id = -1, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxSW_3D|wxCLIP_CHILDREN, const wxString& name = "layoutWindow"); // Accessors @@ -161,7 +172,10 @@ public: // Called by layout algorithm to retrieve information about the window. void OnQueryLayoutInfo(wxQueryLayoutInfoEvent& event); -protected: + +private: + void Init(); + wxLayoutAlignment m_alignment; wxLayoutOrientation m_orientation; wxSize m_defaultSize; diff --git a/include/wx/generic/sashwin.h b/include/wx/generic/sashwin.h index d1dfdbfefb..6c98fbc7fa 100644 --- a/include/wx/generic/sashwin.h +++ b/include/wx/generic/sashwin.h @@ -74,13 +74,24 @@ public: // Public API // Default constructor - wxSashWindow(); + wxSashWindow() + { + Init(); + } // Normal constructor wxSashWindow(wxWindow *parent, wxWindowID id = -1, const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, long style = wxSW_3D|wxCLIP_CHILDREN, const wxString& name = "sashWindow"); + const wxSize& size = wxDefaultSize, long style = wxSW_3D|wxCLIP_CHILDREN, const wxString& name = "sashWindow") + { + Init(); + Create(parent, id, pos, size, style, name); + } + ~wxSashWindow(); + bool Create(wxWindow *parent, wxWindowID id = -1, const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, long style = wxSW_3D|wxCLIP_CHILDREN, const wxString& name = "sashWindow"); + // Set whether there's a sash in this position void SetSashVisible(wxSashEdgePosition edge, bool sash); @@ -151,7 +162,9 @@ public: // Initialize colours void InitColours(); -protected: +private: + void Init(); + wxSashEdge m_sashes[4]; int m_dragMode; wxSashEdgePosition m_draggingEdge; diff --git a/include/wx/generic/splitter.h b/include/wx/generic/splitter.h index 4bdd5ace6a..5596739302 100644 --- a/include/wx/generic/splitter.h +++ b/include/wx/generic/splitter.h @@ -60,16 +60,30 @@ public: // Public API // Default constructor - wxSplitterWindow(); + wxSplitterWindow() + { + Init(); + } // Normal constructor wxSplitterWindow(wxWindow *parent, wxWindowID id = -1, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxSP_3D|wxCLIP_CHILDREN, - const wxString& name = "splitter"); + const wxString& name = "splitter") + { + Init(); + Create(parent, id, pos, size, style, name); + } + ~wxSplitterWindow(); + bool Create(wxWindow *parent, wxWindowID id = -1, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxSP_3D|wxCLIP_CHILDREN, + const wxString& name = "splitter"); + // Gets the only or left/top pane wxWindow *GetWindow1() const { return m_windowOne; } @@ -191,6 +205,10 @@ protected: void SendUnsplitEvent(wxWindow *winRemoved); +private: + void Init(); + + int m_splitMode; bool m_permitUnsplitAlways; bool m_needUpdating; // when in live mode, set the to TRUE to resize children in idle diff --git a/samples/splitter/splitter.cpp b/samples/splitter/splitter.cpp index 054e799a9c..c28422a5a8 100644 --- a/samples/splitter/splitter.cpp +++ b/samples/splitter/splitter.cpp @@ -90,7 +90,7 @@ DECLARE_EVENT_TABLE() class MyCanvas: public wxScrolledWindow { public: - MyCanvas(wxWindow* parent, wxWindowID id, int x, int y, int w, int h, const wxString &name); + MyCanvas(wxWindow* parent, wxWindowID id = -1, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, const wxString& name = ""); virtual ~MyCanvas(); virtual void OnDraw(wxDC& dc); @@ -170,12 +170,12 @@ MyFrame::MyFrame(wxFrame* frame, const wxString& title, const wxPoint& pos, cons wxSize sz( m_splitter->GetSize() ); wxLogMessage( "Initial splitter size: %d %d\n", (int)sz.x, (int)sz.y ); - m_leftCanvas = new MyCanvas(m_splitter, CANVAS1, 0, 0, 400, 400, "Test1" ); + m_leftCanvas = new MyCanvas(m_splitter, CANVAS1, wxPoint(0, 0), wxSize(400, 400), "Test1" ); m_leftCanvas->SetBackgroundColour(*wxRED); m_leftCanvas->SetScrollbars(20, 20, 50, 50); m_leftCanvas->SetCursor(wxCursor(wxCURSOR_MAGNIFIER)); - m_rightCanvas = new MyCanvas(m_splitter, CANVAS2, 0, 0, 400, 400, "Test2" ); + m_rightCanvas = new MyCanvas(m_splitter, CANVAS2, wxPoint(0, 0), wxSize(400, 400), "Test2" ); m_rightCanvas->SetBackgroundColour(*wxCYAN); m_rightCanvas->SetScrollbars(20, 20, 50, 50); m_rightCanvas->Show(FALSE); @@ -256,8 +256,8 @@ void MyFrame::UpdatePosition() SetStatusText(str); } -MyCanvas::MyCanvas(wxWindow* parent, wxWindowID id, int x, int y, int w, int h, const wxString &name ) : - wxScrolledWindow(parent, id, wxPoint(x, y), wxSize(w, h), 0, name ) +MyCanvas::MyCanvas(wxWindow* parent, wxWindowID id, const wxPoint& point, const wxSize& size, const wxString &name ) : + wxScrolledWindow(parent, id, point, size, 0, name ) { } diff --git a/src/generic/laywin.cpp b/src/generic/laywin.cpp index 2c9afa2c7d..978af59834 100644 --- a/src/generic/laywin.cpp +++ b/src/generic/laywin.cpp @@ -41,9 +41,13 @@ BEGIN_EVENT_TABLE(wxSashLayoutWindow, wxSashWindow) EVT_QUERY_LAYOUT_INFO(wxSashLayoutWindow::OnQueryLayoutInfo) END_EVENT_TABLE() -wxSashLayoutWindow::wxSashLayoutWindow(wxWindow *parent, wxWindowID id, const wxPoint& pos, - const wxSize& size, long style, const wxString& name): - wxSashWindow(parent, id, pos, size, style, name) +bool wxSashLayoutWindow::Create(wxWindow *parent, wxWindowID id, const wxPoint& pos, + const wxSize& size, long style, const wxString& name) +{ + return wxSashWindow::Create(parent, id, pos, size, style, name); +} + +void wxSashLayoutWindow::Init() { m_orientation = wxLAYOUT_HORIZONTAL; m_alignment = wxLAYOUT_TOP; diff --git a/src/generic/sashwin.cpp b/src/generic/sashwin.cpp index 160dcb158b..2e9a78c738 100644 --- a/src/generic/sashwin.cpp +++ b/src/generic/sashwin.cpp @@ -45,28 +45,19 @@ BEGIN_EVENT_TABLE(wxSashWindow, wxWindow) EVT_MOUSE_EVENTS(wxSashWindow::OnMouseEvent) END_EVENT_TABLE() -wxSashWindow::wxSashWindow() +bool wxSashWindow::Create(wxWindow *parent, wxWindowID id, const wxPoint& pos, + const wxSize& size, long style, const wxString& name) { - m_draggingEdge = wxSASH_NONE; - m_dragMode = wxSASH_DRAG_NONE; - m_oldX = 0; - m_oldY = 0; - m_firstX = 0; - m_firstY = 0; - m_borderSize = 3 ; - m_extraBorderSize = 0; - m_sashCursorWE = NULL; - m_sashCursorNS = NULL; - - m_minimumPaneSizeX = 0; - m_minimumPaneSizeY = 0; - m_maximumPaneSizeX = 10000; - m_maximumPaneSizeY = 10000; + return wxWindow::Create(parent, id, pos, size, style, name); } -wxSashWindow::wxSashWindow(wxWindow *parent, wxWindowID id, const wxPoint& pos, - const wxSize& size, long style, const wxString& name) - :wxWindow(parent, id, pos, size, style, name) +wxSashWindow::~wxSashWindow() +{ + delete m_sashCursorWE; + delete m_sashCursorNS; +} + +void wxSashWindow::Init() { m_draggingEdge = wxSASH_NONE; m_dragMode = wxSASH_DRAG_NONE; @@ -87,12 +78,6 @@ wxSashWindow::wxSashWindow(wxWindow *parent, wxWindowID id, const wxPoint& pos, InitColours(); } -wxSashWindow::~wxSashWindow() -{ - delete m_sashCursorWE; - delete m_sashCursorNS; -} - void wxSashWindow::OnPaint(wxPaintEvent& WXUNUSED(event)) { wxPaintDC dc(this); diff --git a/src/generic/splitter.cpp b/src/generic/splitter.cpp index 71eb3741c4..cfacabff65 100644 --- a/src/generic/splitter.cpp +++ b/src/generic/splitter.cpp @@ -53,42 +53,39 @@ BEGIN_EVENT_TABLE(wxSplitterWindow, wxWindow) EVT_SPLITTER_UNSPLIT(-1, wxSplitterWindow::OnUnsplitEvent) END_EVENT_TABLE() -wxSplitterWindow::wxSplitterWindow() -{ - m_splitMode = wxSPLIT_VERTICAL; - m_permitUnsplitAlways = FALSE; - m_windowOne = (wxWindow *) NULL; - m_windowTwo = (wxWindow *) NULL; - m_dragMode = wxSPLIT_DRAG_NONE; - m_oldX = 0; - m_oldY = 0; - m_firstX = 0; - m_firstY = 0; - m_sashSize = 7; - m_borderSize = 2; - m_sashPosition = 0; - m_sashCursorWE = (wxCursor *) NULL; - m_sashCursorNS = (wxCursor *) NULL; - m_sashTrackerPen = (wxPen *) NULL; - m_lightShadowPen = (wxPen *) NULL; - m_mediumShadowPen = (wxPen *) NULL; - m_darkShadowPen = (wxPen *) NULL; - m_faceBrush = (wxBrush *) NULL; - m_facePen = (wxPen *) NULL; - m_hilightPen = (wxPen *) NULL; - m_minimumPaneSize = 0; - m_needUpdating = FALSE; -} - -wxSplitterWindow::wxSplitterWindow(wxWindow *parent, wxWindowID id, +bool wxSplitterWindow::Create(wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name) - : wxWindow(parent, id, pos, size, style, name) +{ + if (!wxWindow::Create(parent, id, pos, size, style, name)) + return FALSE; + + m_permitUnsplitAlways = (style & wxSP_PERMIT_UNSPLIT) != 0; + + if ( style & wxSP_3D ) + { + m_borderSize = 2; + m_sashSize = 7; + } + else if ( style & wxSP_BORDER ) + { + m_borderSize = 1; + m_sashSize = 3; + } + else + { + m_borderSize = 0; + m_sashSize = 3; + } + return TRUE; +} + +void wxSplitterWindow::Init() { m_splitMode = wxSPLIT_VERTICAL; - m_permitUnsplitAlways = (style & wxSP_PERMIT_UNSPLIT) != 0; + m_permitUnsplitAlways = TRUE; m_windowOne = (wxWindow *) NULL; m_windowTwo = (wxWindow *) NULL; m_dragMode = wxSPLIT_DRAG_NONE; @@ -110,28 +107,11 @@ wxSplitterWindow::wxSplitterWindow(wxWindow *parent, wxWindowID id, m_facePen = (wxPen *) NULL; m_hilightPen = (wxPen *) NULL; - if ( style & wxSP_3D ) - { - m_borderSize = 2; - m_sashSize = 7; - } - else if ( style & wxSP_BORDER ) - { - m_borderSize = 1; - m_sashSize = 3; - } - else - { - m_borderSize = 0; - m_sashSize = 3; - } + m_borderSize = 0; + m_sashSize = 3; - // Eventually, we'll respond to colour change messages InitColours(); - // For debugging purposes, to see the background. -// SetBackground(wxBLUE_BRUSH); - m_needUpdating = FALSE; }