ab7ce33c56
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_
|