X-Git-Url: https://git.kernelconcepts.de/?p=karo-tx-redboot.git;a=blobdiff_plain;f=tools%2Fsrc%2Ftools%2Fconfigtool%2Fstandalone%2Fwxwin%2Fsplittree.h;fp=tools%2Fsrc%2Ftools%2Fconfigtool%2Fstandalone%2Fwxwin%2Fsplittree.h;h=455705d1ce7ede6b59e858be146a270a519317db;hp=0000000000000000000000000000000000000000;hb=2b5bec7716c03d42cfb16d8c98c9cea573bf6722;hpb=47412fc4bd1aefc0d5498bcb3860a9d727196f16 diff --git a/tools/src/tools/configtool/standalone/wxwin/splittree.h b/tools/src/tools/configtool/standalone/wxwin/splittree.h new file mode 100644 index 00000000..455705d1 --- /dev/null +++ b/tools/src/tools/configtool/standalone/wxwin/splittree.h @@ -0,0 +1,243 @@ +///////////////////////////////////////////////////////////////////////////// +// 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 +// +// This program is part of the eCos host tools. +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along with +// this program; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +///////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_SPLITTREE_H_ +#define _WX_SPLITTREE_H_ + +#ifdef __GNUG__ + #pragma interface "splittree.cpp" +#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 "ecscrolwin.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 + ecScrolledWindow* 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 ecScrolledWindow +{ +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_