home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / wxos2240.zip / wxWindows-2.4.0 / contrib / samples / gizmos / dynsash / dynsash.cpp next >
C/C++ Source or Header  |  2002-03-07  |  3KB  |  103 lines

  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: dynsash.cpp,v 1.3 2002/03/07 10:06:22 JS Exp $
  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 = "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. char *HTML_content =
  55. "<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.  
  63. bool Demo::OnInit() {
  64.     wxInitAllImageHandlers();
  65.  
  66.     wxFrame *frame = new wxFrame(NULL, -1, "Dynamic Sash Demo");
  67.     frame->SetSize(480, 480);
  68.  
  69.     wxDynamicSashWindow *sash = new wxDynamicSashWindow(frame, -1);
  70.     wxHtmlWindow *html = new SashHtmlWindow(sash, -1);
  71.     html->SetPage(HTML_content);
  72.  
  73.     frame->Show();
  74.  
  75.     return TRUE;
  76. }
  77.  
  78.  
  79. SashHtmlWindow::SashHtmlWindow(wxWindow *parent, wxWindowID id,
  80.                                const wxPoint& pos, const wxSize& size, long style, const wxString& name) :
  81.                                     wxHtmlWindow(parent, id, pos, size, style, name) {
  82.     Connect(-1, wxEVT_DYNAMIC_SASH_SPLIT,
  83.         (wxObjectEventFunction)(wxCommandEventFunction)(wxDynamicSashSplitEventFunction) &SashHtmlWindow::OnSplit);
  84.  
  85.     m_dyn_sash = parent;
  86. }
  87.  
  88. wxSize SashHtmlWindow::DoGetBestSize() const {
  89.     wxHtmlContainerCell *cell = GetInternalRepresentation();
  90.     wxSize size = GetSize();
  91.  
  92.     if (cell) {
  93.         cell->Layout(size.GetWidth());
  94.         return wxSize(cell->GetWidth(), cell->GetHeight());
  95.     } else
  96.         return wxHtmlWindow::GetBestSize();
  97. }
  98.  
  99. void SashHtmlWindow::OnSplit(wxDynamicSashSplitEvent& event) {
  100.     wxHtmlWindow *html = new SashHtmlWindow(m_dyn_sash, -1);
  101.     html->SetPage(HTML_content);
  102. }
  103.