/////////////////////////////////////////////////////////////////////////////
-// Name: wxFoldPanelItem.h
-// Author: XX
-// Created: Tuesday, June 22, 2004 21:01:02
-// Copyright: XX
+// Name: foldpanelitem.h
+// Purpose: wxFoldPanel
+// Author: Jorgen Bodde
+// Modified by: ABX - 19/12/2004 : possibility of horizontal orientation
+// : wxWidgets coding standards
+// Created: 22/06/2004
+// RCS-ID: $Id$
+// Copyright: (c) Jorgen Bodde
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifndef __WXFOLDPANELITEM_H__
#define __WXFOLDPANELITEM_H__
-#ifndef WX_PRECOMP
- #include "wx/wx.h"
-#endif
+#include "wx/foldbar/captionbar.h"
-#include "captionbar.h"
-
-#define wxFPB_ALIGN_LEFT 0
+#define wxFPB_ALIGN_LEFT 0
#define wxFPB_ALIGN_WIDTH 1
#define wxFPB_DEFAULT_LEFTSPACING 5
#define wxFPB_DEFAULT_RIGHTSPACING 10
-#define wxFPB_DEFAULT_YSPACING 8
+#define wxFPB_DEFAULT_SPACING 8
#define wxFPB_DEFAULT_LEFTLINESPACING 2
#define wxFPB_DEFAULT_RIGHTLINESPACING 2
class wxFoldWindowItem
{
private:
- wxWindow *_wnd;
- int _type, _flags;
- int _leftSpacing,
- _rightSpacing,
- _ySpacing;
- int _lineWidth, _lineY;
- wxColour _sepLineColour;
+ wxWindow *m_wndItem;
+ int m_type, m_flags;
+ int m_leftSpacing,
+ m_rightSpacing,
+ m_Spacing;
+ int m_lineLength, m_lineY;
+ wxColour m_sepLineColour;
public:
- enum
- {
- WINDOW = 0,
- SEPARATOR
- };
-
- // wxWindow constructor. This initialises the class as a wxWindow type
- wxFoldWindowItem(wxWindow *wnd, int flags = wxFPB_ALIGN_WIDTH, int ySpacing = wxFPB_DEFAULT_YSPACING,
- int leftSpacing = wxFPB_DEFAULT_LEFTSPACING, int rightSpacing = wxFPB_DEFAULT_RIGHTSPACING)
- : _wnd(wnd)
- , _type(WINDOW)
- , _ySpacing(ySpacing)
- , _leftSpacing(leftSpacing)
- , _rightSpacing(rightSpacing)
- , _flags(flags)
- , _lineWidth(0)
- , _lineY(0)
- {
- };
-
- // separator constructor. This initialises the class as a separator type
- wxFoldWindowItem(int y, const wxColour &lineColor = *wxBLACK, int ySpacing = wxFPB_DEFAULT_YSPACING,
- int leftSpacing = wxFPB_DEFAULT_LEFTLINESPACING,
- int rightSpacing = wxFPB_DEFAULT_RIGHTLINESPACING)
- : _wnd(0)
- , _type(SEPARATOR)
- , _ySpacing(ySpacing)
- , _leftSpacing(leftSpacing)
- , _rightSpacing(rightSpacing)
- , _flags(wxFPB_ALIGN_WIDTH)
- , _sepLineColour(lineColor)
- , _lineWidth(0)
- , _lineY(y)
- {
- };
-
- // TODO: Make a c'tor for a captioned splitter
-
- int GetType() const {
- return _type;
- };
-
- int GetLineY() const {
- return _lineY;
- };
-
- int GetLineWidth() const {
- return _lineWidth;
- };
-
- const wxColour &GetLineColour() const {
- return _sepLineColour;
- };
-
- int GetLeftSpacing() const {
- return _leftSpacing;
- };
-
- int GetRightSpacing() const {
- return _rightSpacing;
- };
-
- int GetYSpacing() const {
- return _ySpacing;
- };
-
- // returns the window height if type is wxFoldWindowItem::WINDOW
- // and returns the total size plus the extra spacing
-
- int GetWindowHeight() const {
- int value = 0;
- if(_type == WINDOW)
- {
- wxCHECK(_wnd, 0);
- wxSize size = _wnd->GetSize();
- value = size.GetHeight() + _ySpacing;
- }
- else if(_type == SEPARATOR)
- value = 1 + _ySpacing;
-
- return value;
- };
-
- // resize the element, whatever it is. A separator or
- // line will be always alligned by width
-
- void ResizeItem(int width) {
- if((_flags & wxFPB_ALIGN_WIDTH))
- {
- // allign by taking full width
- int myWidth = width - _leftSpacing - _rightSpacing;
-
- if(myWidth < 0)
- myWidth = 10; // can't have negative width
-
- if(_type == SEPARATOR)
- _lineWidth = myWidth;
- else
- {
- wxCHECK2(_wnd, return);
- _wnd->SetSize(wxSize(myWidth, -1));
- }
- }
- };
+ enum
+ {
+ WINDOW = 0,
+ SEPARATOR
+ };
+
+ // wxWindow constructor. This initialises the class as a wxWindow type
+ wxFoldWindowItem(wxWindow *wnd, int flags = wxFPB_ALIGN_WIDTH, int Spacing = wxFPB_DEFAULT_SPACING,
+ int leftSpacing = wxFPB_DEFAULT_LEFTSPACING, int rightSpacing = wxFPB_DEFAULT_RIGHTSPACING)
+ : m_wndItem(wnd)
+ , m_type(WINDOW)
+ , m_flags(flags)
+ , m_leftSpacing(leftSpacing)
+ , m_rightSpacing(rightSpacing)
+ , m_Spacing(Spacing)
+ , m_lineLength(0)
+ , m_lineY(0)
+ {
+ };
+
+ // separator constructor. This initialises the class as a separator type
+ wxFoldWindowItem(int y, const wxColour &lineColor = *wxBLACK, int Spacing = wxFPB_DEFAULT_SPACING,
+ int leftSpacing = wxFPB_DEFAULT_LEFTLINESPACING,
+ int rightSpacing = wxFPB_DEFAULT_RIGHTLINESPACING)
+ : m_wndItem(NULL)
+ , m_type(SEPARATOR)
+ , m_flags(wxFPB_ALIGN_WIDTH)
+ , m_leftSpacing(leftSpacing)
+ , m_rightSpacing(rightSpacing)
+ , m_Spacing(Spacing)
+ , m_lineLength(0)
+ , m_lineY(y)
+ , m_sepLineColour(lineColor)
+ {
+ };
+
+ // TODO: Make a c'tor for a captioned splitter
+
+ int GetType() const {
+ return m_type;
+ };
+
+ int GetLineY() const {
+ return m_lineY;
+ };
+
+ int GetLineLength() const {
+ return m_lineLength;
+ };
+
+ const wxColour &GetLineColour() const {
+ return m_sepLineColour;
+ };
+
+ int GetLeftSpacing() const {
+ return m_leftSpacing;
+ };
+
+ int GetRightSpacing() const {
+ return m_rightSpacing;
+ };
+
+ int GetSpacing() const {
+ return m_Spacing;
+ };
+
+ // returns space needed by the window if type is wxFoldWindowItem::WINDOW
+ // and returns the total size plus the extra spacing
+
+ int GetWindowLength(bool vertical) const {
+ int value = 0;
+ if(m_type == WINDOW)
+ {
+ wxCHECK(m_wndItem, 0);
+ wxSize size = m_wndItem->GetSize();
+ value = ( vertical ? size.GetHeight() : size.GetWidth() ) + m_Spacing;
+ }
+ else if(m_type == SEPARATOR)
+ value = 1 + m_Spacing;
+
+ return value;
+ };
+
+ // resize the element, whatever it is. A separator or
+ // line will be always alligned by width or hight
+ // depending on orientation of the whole panel
+
+ void ResizeItem(int size, bool vertical) {
+ if(m_flags & wxFPB_ALIGN_WIDTH)
+ {
+ // allign by taking full width
+ int mySize = size - m_leftSpacing - m_rightSpacing;
+
+ if(mySize < 0)
+ mySize = 10; // can't have negative width
+
+ if(m_type == SEPARATOR)
+ m_lineLength = mySize;
+ else
+ {
+ wxCHECK2(m_wndItem, return);
+ m_wndItem->SetSize(vertical?mySize:wxDefaultCoord, vertical?wxDefaultCoord:mySize);
+ }
+ }
+ };
};
/** \wxFoldPanelItem
This class is a child sibling of the wxFoldPanelBar class. It will be containing a wxCaptionBar class
- for receiving of events, and a the rest of the area can be populated by a wxPanel derived class.
+ for receiving of events, and a the rest of the area can be populated by a wxPanel derived class.
*/
-class wxFoldPanelItem: public wxPanel
+class WXDLLIMPEXP_FOLDBAR wxFoldPanelItem: public wxPanel
{
private:
- wxCaptionBar *_captionBar;
+ wxCaptionBar *m_captionBar;
- bool _controlCreated;
- int _yUserSize,
- _yPanelSize,
- _yLastInsertPos;
- int _yPos;
- bool _userSized;
+ bool m_controlCreated;
+ int m_userSize,
+ m_panelSize,
+ m_lastInsertPos;
+ int m_itemPos;
+ bool m_userSized;
private:
DECLARE_CLASS( wxFoldPanelItem )
DECLARE_EVENT_TABLE()
-
+
private:
- wxFoldWindowItemArray _items;
+ wxFoldWindowItemArray m_items;
- void OnSize(wxSizeEvent &event);
- void OnPressCaption(wxCaptionBarEvent &event);
- void OnPaint(wxPaintEvent &event);
+ void OnSize(wxSizeEvent &event);
+ void OnPressCaption(wxCaptionBarEvent &event);
+ void OnPaint(wxPaintEvent &event);
public:
// constructors and destructors
- wxFoldPanelItem( wxWindow *parent, const wxString &caption, wxImageList *icons = 0, bool collapsedInitially = false,
- const wxCaptionBarStyle &style = wxEmptyCaptionBarStyle);
+ wxFoldPanelItem( wxWindow *parent, const wxString &caption, wxImageList *icons = 0, bool collapsedInitially = false,
+ const wxCaptionBarStyle &style = wxEmptyCaptionBarStyle);
virtual ~wxFoldPanelItem();
-
- /** Add a window item to the list of items on this panel. The flags are wxFPB_ALIGN_LEFT for a non sizing
- window element, and wxFPB_ALIGN_WIDTH for a width alligned item. The ySpacing parameter reserves a number
- of pixels before the window element, and leftSpacing is an indent. rightSpacing is only relevant when the
- style wxFPB_ALIGN_WIDTH is chosen. */
- void AddWindow(wxWindow *window, int flags, int ySpacing, int leftSpacing, int rightSpacing);
-
- void AddSeparator(const wxColour &color, int ySpacing, int leftSpacing, int rightSpacing);
-
- /** Repositions this wxFoldPanelBar and reports the height occupied for the next wxFoldPanelBar in the
- list */
- int Reposition(int y);
-
- void ResizePanel();
-
- /** Return expanded or collapsed status. If the panel is expanded, true is returned */
- bool IsExpanded() const {
- return !_captionBar->IsCollapsed();
- };
-
- /** Return Y pos */
-
- int GetY() const {
- return _yPos;
- };
-
- // this should not be called by the user, because it doesn't trigger the parent
- // to tell it that we are collapsed or expanded, it only changes visual state
- void Collapse() {
- _captionBar->Collapse();
- ResizePanel();
- };
-
- // this should not be called by the user, because it doesn't trigger the parent
- // to tell it that we are collapsed or expanded, it only changes visual state
- void Expand() {
- _captionBar->Expand();
- ResizePanel();
- };
-
- /* Return size of panel */
-
- int GetPanelHeight() const {
- if(_captionBar->IsCollapsed())
- return GetCaptionHeight();
- else if(_userSized)
- return _yUserSize;
- return _yPanelSize;
- };
-
- // returns height of caption only. This is for folding calulation
- // purposes
-
- int GetCaptionHeight() const {
- wxSize size = _captionBar->GetSize();
- return size.GetHeight();
- };
-
- void ApplyCaptionStyle(const wxCaptionBarStyle &style) {
- wxCHECK2(_captionBar, return);
- _captionBar->SetCaptionStyle(false, style);
- };
-
- wxCaptionBarStyle GetCaptionStyle() {
- wxCHECK(_captionBar, wxEmptyCaptionBarStyle);
- return _captionBar->GetCaptionStyle();
- };
+
+ /** Add a window item to the list of items on this panel. The flags are wxFPB_ALIGN_LEFT for a non sizing
+ window element, and wxFPB_ALIGN_WIDTH for a width alligned item. The ySpacing parameter reserves a number
+ of pixels before the window element, and leftSpacing is an indent. rightSpacing is only relevant when the
+ style wxFPB_ALIGN_WIDTH is chosen. */
+ void AddWindow(wxWindow *window, int flags, int ySpacing, int leftSpacing, int rightSpacing);
+
+ void AddSeparator(const wxColour &color, int ySpacing, int leftSpacing, int rightSpacing);
+
+ /** Repositions this wxFoldPanelBar and reports the length occupied for the next wxFoldPanelBar in the
+ list */
+ int Reposition(int pos);
+
+ void ResizePanel();
+
+ /** Return expanded or collapsed status. If the panel is expanded, true is returned */
+ bool IsExpanded() const {
+ return !m_captionBar->IsCollapsed();
+ };
+
+ /** Return Y pos */
+
+ int GetItemPos() const {
+ return m_itemPos;
+ };
+
+ // this should not be called by the user, because it doesn't trigger the parent
+ // to tell it that we are collapsed or expanded, it only changes visual state
+ void Collapse() {
+ m_captionBar->Collapse();
+ ResizePanel();
+ };
+
+ // this should not be called by the user, because it doesn't trigger the parent
+ // to tell it that we are collapsed or expanded, it only changes visual state
+ void Expand() {
+ m_captionBar->Expand();
+ ResizePanel();
+ };
+
+ /* Return size of panel */
+
+ int GetPanelLength() const {
+ if(m_captionBar->IsCollapsed())
+ return GetCaptionLength();
+ else if(m_userSized)
+ return m_userSize;
+ return m_panelSize;
+ };
+
+ bool IsVertical() const;
+
+ // returns space of caption only. This is for folding calulation
+ // purposes
+
+ int GetCaptionLength() const {
+ wxSize size = m_captionBar->GetSize();
+ return IsVertical() ? size.GetHeight() : size.GetWidth();
+ };
+
+ void ApplyCaptionStyle(const wxCaptionBarStyle &style) {
+ wxCHECK2(m_captionBar, return);
+ m_captionBar->SetCaptionStyle(false, style);
+ };
+
+ wxCaptionBarStyle GetCaptionStyle() {
+ wxCHECK(m_captionBar, wxEmptyCaptionBarStyle);
+ return m_captionBar->GetCaptionStyle();
+ };
};