]> git.saurik.com Git - wxWidgets.git/blob - contrib/samples/gizmos/dynsash/dynsash.cpp
Applied [ 872574 ] fix of fatal error of preview without printer
[wxWidgets.git] / contrib / samples / gizmos / dynsash / dynsash.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: dynsash.cpp
3 // Purpose: Test the wxDynamicSash class by creating a dynamic sash which
4 // contains an HTML view
5 // Author: Matt Kimball
6 // Modified by:
7 // Created: 7/15/2001
8 // RCS-ID: $Id$
9 // Copyright: (c) 2001 Matt Kimball
10 // Licence: wxWindows licence
11 /////////////////////////////////////////////////////////////////////////////
12
13 // For compilers that support precompilation, includes "wx/wx.h".
14 #include "wx/wxprec.h"
15
16 #ifdef __BORLANDC__
17 #pragma hdrstop
18 #endif
19
20 // for all others, include the necessary headers (this file is usually all you
21 // need because it includes almost all "standard" wxWindows headers)
22 #ifndef WX_PRECOMP
23 #include "wx/wx.h"
24 #endif
25
26 #include <wx/app.h>
27 #include <wx/frame.h>
28 #include <wx/gizmos/dynamicsash.h>
29 #include <wx/html/htmlwin.h>
30 #include <wx/image.h>
31 #include <wx/cmdline.h>
32
33 class Demo : public wxApp {
34 public:
35 bool OnInit();
36 };
37
38 class SashHtmlWindow : public wxHtmlWindow {
39 public:
40 SashHtmlWindow(wxWindow *parent, wxWindowID id = -1,
41 const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
42 long style = wxHW_SCROLLBAR_NEVER, const wxString& name = wxT("sashHtmlWindow"));
43
44 wxSize DoGetBestSize() const;
45
46 private:
47 void OnSplit(wxDynamicSashSplitEvent& event);
48
49 wxWindow *m_dyn_sash;
50 };
51
52 IMPLEMENT_APP(Demo)
53
54 wxChar *HTML_content =
55 wxT("<P><H1>wxDynamicSashWindow demo</H1>"
56 "<P>Here is an example of how you can use <TT>wxDynamicSashWindow</TT> to allow your users to "
57 "dynamically split and unify the views of your windows. Try dragging out a few splits "
58 "and then reunifying the window."
59 "<P>Also, see the <TT>dynsash_switch</TT> sample for an example of an application which "
60 "manages the scrollbars provided by <TT>wxDynamicSashWindow</TT> itself.");
61
62 bool Demo::OnInit() {
63 wxInitAllImageHandlers();
64
65 wxFrame *frame = new wxFrame(NULL, -1, wxT("Dynamic Sash Demo"));
66 frame->SetSize(480, 480);
67
68 wxDynamicSashWindow *sash = new wxDynamicSashWindow(frame, -1);
69 wxHtmlWindow *html = new SashHtmlWindow(sash, -1);
70 html->SetPage(HTML_content);
71
72 frame->Show();
73
74 return TRUE;
75 }
76
77
78 SashHtmlWindow::SashHtmlWindow(wxWindow *parent, wxWindowID id,
79 const wxPoint& pos, const wxSize& size, long style, const wxString& name) :
80 wxHtmlWindow(parent, id, pos, size, style, name) {
81 Connect(-1, wxEVT_DYNAMIC_SASH_SPLIT,
82 (wxObjectEventFunction)(wxCommandEventFunction)(wxDynamicSashSplitEventFunction) &SashHtmlWindow::OnSplit);
83
84 m_dyn_sash = parent;
85 }
86
87 wxSize SashHtmlWindow::DoGetBestSize() const {
88 wxHtmlContainerCell *cell = GetInternalRepresentation();
89 wxSize size = GetSize();
90
91 if (cell) {
92 cell->Layout(size.GetWidth());
93 return wxSize(cell->GetWidth(), cell->GetHeight());
94 } else
95 return wxHtmlWindow::GetBestSize();
96 }
97
98 void SashHtmlWindow::OnSplit(wxDynamicSashSplitEvent& event) {
99 wxHtmlWindow *html = new SashHtmlWindow(m_dyn_sash, -1);
100 html->SetPage(HTML_content);
101 }