Added gizmos hierarchy

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@8116 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Julian Smart
2000-08-17 11:53:48 +00:00
parent 08c6402af6
commit 58580a7e3c
46 changed files with 3417 additions and 0 deletions

View File

@@ -0,0 +1,167 @@
/////////////////////////////////////////////////////////////////////////////
// Name: multicell.h
// Purpose: provide two new classes for layout, wxMultiCellSizer and wxMultiCellCanvas
// Author: Jonathan Bayer
// Modified by:
// Created:
// RCS-ID: $Id:
// Copyright: (c) Jonathan Bayer
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// This was inspired by the gbsizer class written by Alex Andruschak
#ifndef __WX_MULTICELL_H__
#define __WX_MULTICELL_H__
#ifdef __GNUG__
#pragma interface "multicell.h"
#endif
// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------
// The classes are derived from wxSizer
#include "wx/sizer.h"
// ----------------------------------------------------------------------------
// constants
// ----------------------------------------------------------------------------
enum wxResizable
{
wxNOT_RESIZABLE = 0x00,
wxHORIZENTAL_RESIZABLE = 0x01,
wxVERTICAL_RESIZABLE = 0x10,
wxRESIZABLE = 0x11
};
//---------------------------------------------------------------------------
// classes
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
// wxMultiCellItemHandle
//---------------------------------------------------------------------------
class WXDLLEXPORT wxMultiCellItemHandle: public wxObject
{
DECLARE_CLASS(wxMultiCellItemHandle);
protected:
int m_column;
int m_row;
int m_width;
int m_height;
wxResizable m_style;
wxSize m_fixedSize;
int m_alignment;
wxSize m_weight;
public:
wxMultiCellItemHandle( int row, int column, int height = 1, int width = 1, wxSize size = wxDefaultSize, wxResizable style = wxNOT_RESIZABLE, wxSize weight = wxSize(1,1), int align = wxALIGN_NOT);
wxMultiCellItemHandle( int row, int column, wxSize size, wxResizable style = wxNOT_RESIZABLE, wxSize weight = wxSize(1,1), int align = wxALIGN_NOT);
wxMultiCellItemHandle( int row, int column, wxResizable style, wxSize weight = wxSize(1,1), int align = wxALIGN_NOT);
wxMultiCellItemHandle( int row, int column, int align);
int GetColumn();
int GetRow();
int GetWidth();
int GetHeight();
wxResizable GetStyle();
wxSize GetLocalSize();
int GetAlignment();
wxSize GetWeight();
private:
void Initialize( int row, int column, int height = 1, int width = 1, wxSize size = wxDefaultSize, wxResizable style = wxNOT_RESIZABLE, wxSize weight = wxSize(1,1), int align = wxALIGN_NOT);
};
//---------------------------------------------------------------------------
// wxMultiCellSizer
//---------------------------------------------------------------------------
class WXDLLEXPORT wxMultiCellSizer : virtual public wxSizer
{
DECLARE_CLASS(wxMultiCellSizer);
protected:
wxSize m_cell_count;
public:
wxMultiCellSizer(wxSize & size);
wxMultiCellSizer(int rows, int cols);
~wxMultiCellSizer();
virtual void RecalcSizes();
virtual wxSize CalcMin();
bool SetDefaultCellSize(wxSize size);
bool SetColumnWidth(int column, int colSize = 5, bool expandable = FALSE);
bool SetRowHeight(int row, int rowSize = 5, bool expandable = FALSE);
bool EnableGridLines(wxWindow *win);
bool SetGridPen(wxPen *pen);
void OnPaint(wxDC& dc);
private:
void GetMinimums();
int Sum(int *array, int x);
private:
int *m_maxHeight;
int *m_maxWidth;
int *m_rowStretch;
int *m_colStretch;
wxSize **m_weights;
wxSize **m_minSizes;
int m_maxWeights;
wxSize m_defaultCellSize;
wxWindow *m_win; // usually used for debugging
wxPen *m_pen;
void DrawGridLines(wxDC& dc);
void Initialize(wxSize size);
};
// wxCell is used internally, so we don't need to declare it here
class wxCell;
//---------------------------------------------------------------------------
// wxMultiCellCanvas
//---------------------------------------------------------------------------
class wxMultiCellCanvas : public wxFlexGridSizer
{
public:
wxMultiCellCanvas(wxWindow *parent, int numRows = 2, int numCols = 2);
void Add(wxWindow *win, unsigned int row, unsigned int col);
void Resize(int numRows, int numCols);
int MaxRows()
{
return m_maxRows;
};
int MaxCols()
{
return m_maxCols;
};
void CalculateConstraints();
void SetMinCellSize(const wxSize size)
{
m_minCellSize = size;
};
private:
wxWindow *m_parent;
unsigned int m_maxRows, m_maxCols;
wxSize m_minCellSize;
wxCell **m_cells;
};
#endif
/*** End of File ***/

View File

@@ -0,0 +1,178 @@
/////////////////////////////////////////////////////////////////////////////
// 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 OnPaint(wxPaintEvent& 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_