home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / wxos2233.zip / wxOS2-2_3_3.zip / wxWindows-2.3.3 / contrib / utils / wxrcedit / splittree.h < prev    next >
C/C++ Source or Header  |  2002-09-08  |  6KB  |  228 lines

  1. /////////////////////////////////////////////////////////////////////////////
  2. // Name:        splittree.h
  3. // Purpose:     Classes to achieve a remotely-scrolled tree in a splitter
  4. //              window that can be scrolled by a scrolled window higher in the
  5. //              hierarchy
  6. // Author:      Julian Smart
  7. // Modified by:
  8. // Created:     8/7/2000
  9. // RCS-ID:      $Id: splittree.h,v 1.3 2002/09/07 12:15:24 GD Exp $
  10. // Copyright:   (c) Julian Smart
  11. // Licence:     wxWindows licence
  12. /////////////////////////////////////////////////////////////////////////////
  13.  
  14. #ifndef _WX_SPLITTREE_H_
  15. #define _WX_SPLITTREE_H_
  16.  
  17. #if defined(__GNUG__) && !defined(__APPLE__)
  18.     #pragma interface "splittree.h"
  19. #endif
  20.  
  21. // Set this to 1 to use generic tree control (doesn't yet work properly)
  22. #define USE_GENERIC_TREECTRL 0
  23.  
  24. #include "wx/wx.h"
  25. #include "wx/treectrl.h"
  26. #include "wx/splitter.h"
  27. #include "wx/scrolwin.h"
  28.  
  29. #if USE_GENERIC_TREECTRL
  30. #include "wx/generic/treectlg.h"
  31. #ifndef wxTreeCtrl
  32. #define wxTreeCtrl wxGenericTreeCtrl
  33. #define sm_classwxTreeCtrl sm_classwxGenericTreeCtrl
  34. #endif
  35. #endif
  36.  
  37. class wxRemotelyScrolledTreeCtrl;
  38. class wxThinSplitterWindow;
  39. class wxSplitterScrolledWindow;
  40.  
  41. /*
  42.  * wxRemotelyScrolledTreeCtrl
  43.  *
  44.  * This tree control disables its vertical scrollbar and catches scroll
  45.  * events passed by a scrolled window higher in the hierarchy.
  46.  * It also updates the scrolled window vertical scrollbar as appropriate.
  47.  */
  48.  
  49. class wxRemotelyScrolledTreeCtrl: public wxTreeCtrl
  50. {
  51.     DECLARE_CLASS(wxRemotelyScrolledTreeCtrl)
  52. public:
  53.     wxRemotelyScrolledTreeCtrl(wxWindow* parent, wxWindowID id, const wxPoint& pt = wxDefaultPosition,
  54.         const wxSize& sz = wxDefaultSize, long style = wxTR_HAS_BUTTONS);
  55.     ~wxRemotelyScrolledTreeCtrl();
  56.  
  57. //// Events
  58.     void OnSize(wxSizeEvent& event);
  59.     void OnExpand(wxTreeEvent& event);
  60.     void OnScroll(wxScrollWinEvent& event);
  61.  
  62. //// Overrides
  63.     // Override this in case we're using the generic tree control.
  64.     // Calls to this should disable the vertical scrollbar.
  65.  
  66.     // Number of pixels per user unit (0 or -1 for no scrollbar)
  67.     // Length of virtual canvas in user units
  68.     // Length of page in user units
  69.     virtual void SetScrollbars(int pixelsPerUnitX, int pixelsPerUnitY,
  70.                              int noUnitsX, int noUnitsY,
  71.                              int xPos = 0, int yPos = 0,
  72.                              bool noRefresh = FALSE );
  73.  
  74.     // In case we're using the generic tree control.
  75.     // Get the view start
  76.     virtual void GetViewStart(int *x, int *y) const;
  77.  
  78.     // In case we're using the generic tree control.
  79.     virtual void PrepareDC(wxDC& dc);
  80.  
  81.     // In case we're using the generic tree control.
  82.     virtual int GetScrollPos(int orient) const;
  83.  
  84. //// Helpers
  85.     void HideVScrollbar();
  86.  
  87.     // Calculate the tree overall size so we can set the scrollbar
  88.     // correctly
  89.     void CalcTreeSize(wxRect& rect);
  90.     void CalcTreeSize(const wxTreeItemId& id, wxRect& rect);
  91.  
  92.     // Adjust the containing wxScrolledWindow's scrollbars appropriately
  93.     void AdjustRemoteScrollbars();
  94.  
  95.     // Find the scrolled window that contains this control
  96.     wxScrolledWindow* GetScrolledWindow() const;
  97.  
  98.     // Scroll to the given line (in scroll units where each unit is
  99.     // the height of an item)
  100.     void ScrollToLine(int posHoriz, int posVert);
  101.  
  102. //// Accessors
  103.  
  104.     // The companion window is one which will get notified when certain
  105.     // events happen such as node expansion
  106.     void SetCompanionWindow(wxWindow* companion) { m_companionWindow = companion; }
  107.     wxWindow* GetCompanionWindow() const { return m_companionWindow; }
  108.  
  109.  
  110.     DECLARE_EVENT_TABLE()
  111. protected:
  112.     wxWindow*    m_companionWindow;
  113. };
  114.  
  115. /*
  116.  * wxTreeCompanionWindow
  117.  *
  118.  * A window displaying values associated with tree control items.
  119.  */
  120.  
  121. class wxTreeCompanionWindow: public wxWindow
  122. {
  123. public:
  124.     DECLARE_CLASS(wxTreeCompanionWindow)
  125.  
  126.     wxTreeCompanionWindow(wxWindow* parent, wxWindowID id = -1,
  127.       const wxPoint& pos = wxDefaultPosition,
  128.       const wxSize& sz = wxDefaultSize,
  129.       long style = 0);
  130.  
  131. //// Overrides
  132.     virtual void DrawItem(wxDC& dc, wxTreeItemId id, const wxRect& rect);
  133.  
  134. //// Events
  135.     void OnPaint(wxPaintEvent& event);    
  136.     void OnScroll(wxScrollWinEvent& event);
  137.     void OnExpand(wxTreeEvent& event);
  138.  
  139. //// Operations
  140.  
  141. //// Accessors
  142.     wxRemotelyScrolledTreeCtrl* GetTreeCtrl() const { return m_treeCtrl; };
  143.     void SetTreeCtrl(wxRemotelyScrolledTreeCtrl* treeCtrl) { m_treeCtrl = treeCtrl; }
  144.  
  145. //// Data members
  146. protected:
  147.     wxRemotelyScrolledTreeCtrl*    m_treeCtrl;
  148.  
  149.     DECLARE_EVENT_TABLE()
  150. };
  151.  
  152.  
  153. /*
  154.  * wxThinSplitterWindow
  155.  *
  156.  * Implements a splitter with a less obvious sash
  157.  * than the usual one.
  158.  */
  159.  
  160. class wxThinSplitterWindow: public wxSplitterWindow
  161. {
  162. public:
  163.     DECLARE_DYNAMIC_CLASS(wxThinSplitterWindow)
  164.  
  165.     wxThinSplitterWindow(wxWindow* parent, wxWindowID id = -1,
  166.       const wxPoint& pos = wxDefaultPosition,
  167.       const wxSize& sz = wxDefaultSize,
  168.       long style = wxSP_3D | wxCLIP_CHILDREN);
  169.  
  170. //// Overrides
  171.  
  172.     void SizeWindows();
  173.     // Tests for x, y over sash. Overriding this allows us to increase
  174.     // the tolerance.
  175.     bool SashHitTest(int x, int y, int tolerance = 2);
  176.     void DrawSash(wxDC& dc);
  177.  
  178. //// Events
  179.     
  180.     void OnSize(wxSizeEvent& event);
  181.  
  182. //// Operations
  183.  
  184. //// Accessors
  185.  
  186. //// Data members
  187. protected:
  188.     DECLARE_EVENT_TABLE()
  189. };
  190.  
  191. /*
  192.  * wxSplitterScrolledWindow
  193.  *
  194.  * This scrolled window is aware of the fact that one of its
  195.  * children is a splitter window. It passes on its scroll events
  196.  * (after some processing) to both splitter children for them
  197.  * scroll appropriately.
  198.  */
  199.  
  200. class wxSplitterScrolledWindow: public wxScrolledWindow
  201. {
  202. public:
  203.     DECLARE_DYNAMIC_CLASS(wxSplitterScrolledWindow)
  204.  
  205.     wxSplitterScrolledWindow(wxWindow* parent, wxWindowID id = -1,
  206.       const wxPoint& pos = wxDefaultPosition,
  207.       const wxSize& sz = wxDefaultSize,
  208.       long style = 0);
  209.  
  210. //// Overrides
  211.  
  212. //// Events
  213.     
  214.     void OnScroll(wxScrollWinEvent& event);
  215.     void OnSize(wxSizeEvent& event);
  216.  
  217. //// Operations
  218.  
  219. //// Accessors
  220.  
  221. //// Data members
  222. public:
  223.     DECLARE_EVENT_TABLE()
  224. };
  225.  
  226. #endif
  227.         // _SPLITTREE_H_
  228.