GNU compiler included with Mac OS X 10.2 (Jaguar) as well as August Developer Tools update contain a bug concerning #pragma interface handling that can only be worked around by not using them (and they are not necessary anyways) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@17039 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			228 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			228 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /////////////////////////////////////////////////////////////////////////////
 | |
| // Name:        splittree.h
 | |
| // Purpose:     Classes to achieve a remotely-scrolled tree in a splitter
 | |
| //              window that can be scrolled by a scrolled window higher in the
 | |
| //              hierarchy
 | |
| // Author:      Julian Smart
 | |
| // Modified by:
 | |
| // Created:     8/7/2000
 | |
| // RCS-ID:      $Id$
 | |
| // Copyright:   (c) Julian Smart
 | |
| // Licence:     wxWindows licence
 | |
| /////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| #ifndef _WX_SPLITTREE_H_
 | |
| #define _WX_SPLITTREE_H_
 | |
| 
 | |
| #if defined(__GNUG__) && !defined(__APPLE__)
 | |
| 	#pragma interface "splittree.h"
 | |
| #endif
 | |
| 
 | |
| // Set this to 1 to use generic tree control (doesn't yet work properly)
 | |
| #define USE_GENERIC_TREECTRL 0
 | |
| 
 | |
| #include "wx/wx.h"
 | |
| #include "wx/treectrl.h"
 | |
| #include "wx/splitter.h"
 | |
| #include "wx/scrolwin.h"
 | |
| 
 | |
| #if USE_GENERIC_TREECTRL
 | |
| #include "wx/generic/treectlg.h"
 | |
| #ifndef wxTreeCtrl
 | |
| #define wxTreeCtrl wxGenericTreeCtrl
 | |
| #define sm_classwxTreeCtrl sm_classwxGenericTreeCtrl
 | |
| #endif
 | |
| #endif
 | |
| 
 | |
| class wxRemotelyScrolledTreeCtrl;
 | |
| class wxThinSplitterWindow;
 | |
| class wxSplitterScrolledWindow;
 | |
| 
 | |
| /*
 | |
|  * wxRemotelyScrolledTreeCtrl
 | |
|  *
 | |
|  * This tree control disables its vertical scrollbar and catches scroll
 | |
|  * events passed by a scrolled window higher in the hierarchy.
 | |
|  * It also updates the scrolled window vertical scrollbar as appropriate.
 | |
|  */
 | |
| 
 | |
| class wxRemotelyScrolledTreeCtrl: public wxTreeCtrl
 | |
| {
 | |
| 	DECLARE_CLASS(wxRemotelyScrolledTreeCtrl)
 | |
| public:
 | |
|     wxRemotelyScrolledTreeCtrl(wxWindow* parent, wxWindowID id, const wxPoint& pt = wxDefaultPosition,
 | |
|         const wxSize& sz = wxDefaultSize, long style = wxTR_HAS_BUTTONS);
 | |
| 	~wxRemotelyScrolledTreeCtrl();
 | |
| 
 | |
| //// Events
 | |
| 	void OnSize(wxSizeEvent& event);
 | |
| 	void OnExpand(wxTreeEvent& event);
 | |
|     void OnScroll(wxScrollWinEvent& event);
 | |
| 
 | |
| //// Overrides
 | |
|     // Override this in case we're using the generic tree control.
 | |
|     // Calls to this should disable the vertical scrollbar.
 | |
| 
 | |
|     // Number of pixels per user unit (0 or -1 for no scrollbar)
 | |
|     // Length of virtual canvas in user units
 | |
|     // Length of page in user units
 | |
|     virtual void SetScrollbars(int pixelsPerUnitX, int pixelsPerUnitY,
 | |
|                              int noUnitsX, int noUnitsY,
 | |
|                              int xPos = 0, int yPos = 0,
 | |
|                              bool noRefresh = FALSE );
 | |
| 
 | |
|     // In case we're using the generic tree control.
 | |
|     // Get the view start
 | |
|     virtual void GetViewStart(int *x, int *y) const;
 | |
| 
 | |
|     // In case we're using the generic tree control.
 | |
|     virtual void PrepareDC(wxDC& dc);
 | |
| 
 | |
|     // In case we're using the generic tree control.
 | |
|     virtual int GetScrollPos(int orient) const;
 | |
| 
 | |
| //// Helpers
 | |
| 	void HideVScrollbar();
 | |
| 
 | |
| 	// Calculate the tree overall size so we can set the scrollbar
 | |
| 	// correctly
 | |
| 	void CalcTreeSize(wxRect& rect);
 | |
| 	void CalcTreeSize(const wxTreeItemId& id, wxRect& rect);
 | |
| 
 | |
| 	// Adjust the containing wxScrolledWindow's scrollbars appropriately
 | |
| 	void AdjustRemoteScrollbars();
 | |
| 
 | |
| 	// Find the scrolled window that contains this control
 | |
| 	wxScrolledWindow* GetScrolledWindow() const;
 | |
| 
 | |
|     // Scroll to the given line (in scroll units where each unit is
 | |
|     // the height of an item)
 | |
|     void ScrollToLine(int posHoriz, int posVert);
 | |
| 
 | |
| //// Accessors
 | |
| 
 | |
| 	// The companion window is one which will get notified when certain
 | |
| 	// events happen such as node expansion
 | |
| 	void SetCompanionWindow(wxWindow* companion) { m_companionWindow = companion; }
 | |
| 	wxWindow* GetCompanionWindow() const { return m_companionWindow; }
 | |
| 
 | |
| 
 | |
|     DECLARE_EVENT_TABLE()
 | |
| protected:
 | |
| 	wxWindow*	m_companionWindow;
 | |
| };
 | |
| 
 | |
| /*
 | |
|  * wxTreeCompanionWindow
 | |
|  *
 | |
|  * A window displaying values associated with tree control items.
 | |
|  */
 | |
| 
 | |
| class wxTreeCompanionWindow: public wxWindow
 | |
| {
 | |
| public:
 | |
|     DECLARE_CLASS(wxTreeCompanionWindow)
 | |
| 
 | |
|     wxTreeCompanionWindow(wxWindow* parent, wxWindowID id = -1,
 | |
|       const wxPoint& pos = wxDefaultPosition,
 | |
|       const wxSize& sz = wxDefaultSize,
 | |
|       long style = 0);
 | |
| 
 | |
| //// Overrides
 | |
| 	virtual void DrawItem(wxDC& dc, wxTreeItemId id, const wxRect& rect);
 | |
| 
 | |
| //// Events
 | |
| 	void OnPaint(wxPaintEvent& event);    
 | |
|     void OnScroll(wxScrollWinEvent& event);
 | |
| 	void OnExpand(wxTreeEvent& event);
 | |
| 
 | |
| //// Operations
 | |
| 
 | |
| //// Accessors
 | |
| 	wxRemotelyScrolledTreeCtrl* GetTreeCtrl() const { return m_treeCtrl; };
 | |
| 	void SetTreeCtrl(wxRemotelyScrolledTreeCtrl* treeCtrl) { m_treeCtrl = treeCtrl; }
 | |
| 
 | |
| //// Data members
 | |
| protected:
 | |
| 	wxRemotelyScrolledTreeCtrl*	m_treeCtrl;
 | |
| 
 | |
|     DECLARE_EVENT_TABLE()
 | |
| };
 | |
| 
 | |
| 
 | |
| /*
 | |
|  * wxThinSplitterWindow
 | |
|  *
 | |
|  * Implements a splitter with a less obvious sash
 | |
|  * than the usual one.
 | |
|  */
 | |
| 
 | |
| class wxThinSplitterWindow: public wxSplitterWindow
 | |
| {
 | |
| public:
 | |
|     DECLARE_DYNAMIC_CLASS(wxThinSplitterWindow)
 | |
| 
 | |
|     wxThinSplitterWindow(wxWindow* parent, wxWindowID id = -1,
 | |
|       const wxPoint& pos = wxDefaultPosition,
 | |
|       const wxSize& sz = wxDefaultSize,
 | |
|       long style = wxSP_3D | wxCLIP_CHILDREN);
 | |
| 
 | |
| //// Overrides
 | |
| 
 | |
|     void SizeWindows();
 | |
|     // Tests for x, y over sash. Overriding this allows us to increase
 | |
|     // the tolerance.
 | |
|     bool SashHitTest(int x, int y, int tolerance = 2);
 | |
| 	void DrawSash(wxDC& dc);
 | |
| 
 | |
| //// Events
 | |
|     
 | |
|     void OnSize(wxSizeEvent& event);
 | |
| 
 | |
| //// Operations
 | |
| 
 | |
| //// Accessors
 | |
| 
 | |
| //// Data members
 | |
| protected:
 | |
|     DECLARE_EVENT_TABLE()
 | |
| };
 | |
| 
 | |
| /*
 | |
|  * wxSplitterScrolledWindow
 | |
|  *
 | |
|  * This scrolled window is aware of the fact that one of its
 | |
|  * children is a splitter window. It passes on its scroll events
 | |
|  * (after some processing) to both splitter children for them
 | |
|  * scroll appropriately.
 | |
|  */
 | |
| 
 | |
| class wxSplitterScrolledWindow: public wxScrolledWindow
 | |
| {
 | |
| public:
 | |
|     DECLARE_DYNAMIC_CLASS(wxSplitterScrolledWindow)
 | |
| 
 | |
|     wxSplitterScrolledWindow(wxWindow* parent, wxWindowID id = -1,
 | |
|       const wxPoint& pos = wxDefaultPosition,
 | |
|       const wxSize& sz = wxDefaultSize,
 | |
|       long style = 0);
 | |
| 
 | |
| //// Overrides
 | |
| 
 | |
| //// Events
 | |
|     
 | |
|     void OnScroll(wxScrollWinEvent& event);
 | |
|     void OnSize(wxSizeEvent& event);
 | |
| 
 | |
| //// Operations
 | |
| 
 | |
| //// Accessors
 | |
| 
 | |
| //// Data members
 | |
| public:
 | |
|     DECLARE_EVENT_TABLE()
 | |
| };
 | |
| 
 | |
| #endif
 | |
|         // _SPLITTREE_H_
 |