178 lines
4.6 KiB
C
178 lines
4.6 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
|
||
|
|
||
|
// 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);
|
||
|
|
||
|
//// Helpers
|
||
|
void HideVScrollbar();
|
||
|
|
||
|
// Calculate the tree overall size so we can set the scrollbar
|
||
|
// correctly
|
||
|
void CalcTreeSize(wxRect& rect);
|
||
|
void CalcTreeSize(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);
|
||
|
|
||
|
DECLARE_EVENT_TABLE()
|
||
|
protected:
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
* 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_
|