7f60145d85
is used, but prevents the base class from seeing the flag so they won't be drawn twice with possibly different colours. Also changed all tabs to spaces, so the diffs will show a lot of whitespace-only changes. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@12881 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
236 lines
6.2 KiB
C++
236 lines
6.2 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_
|
|
|
|
#ifdef __GNUG__
|
|
#pragma interface "splittree.h"
|
|
#endif
|
|
|
|
#ifdef GIZMOISDLL
|
|
#define GIZMODLLEXPORT WXDLLEXPORT
|
|
#else
|
|
#define GIZMODLLEXPORT
|
|
#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 GIZMODLLEXPORT 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);
|
|
void OnPaint(wxPaintEvent& 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;
|
|
bool m_drawRowLines;
|
|
};
|
|
|
|
/*
|
|
* wxTreeCompanionWindow
|
|
*
|
|
* A window displaying values associated with tree control items.
|
|
*/
|
|
|
|
class GIZMODLLEXPORT 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 GIZMODLLEXPORT 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 GIZMODLLEXPORT 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_
|