1 ///////////////////////////////////////////////////////////////////////////////
2 // Name: wx/msw/headerctrl.h
3 // Purpose: wxMSW native wxHeaderCtrl
4 // Author: Vadim Zeitlin
6 // Copyright: (c) 2008 Vadim Zeitlin <vadim@wxwidgets.org>
7 // Licence: wxWindows licence
8 ///////////////////////////////////////////////////////////////////////////////
10 #ifndef _WX_MSW_HEADERCTRL_H_
11 #define _WX_MSW_HEADERCTRL_H_
13 class WXDLLIMPEXP_FWD_CORE wxImageList
;
15 // ----------------------------------------------------------------------------
17 // ----------------------------------------------------------------------------
19 class WXDLLIMPEXP_CORE wxHeaderCtrl
: public wxHeaderCtrlBase
27 wxHeaderCtrl(wxWindow
*parent
,
28 wxWindowID id
= wxID_ANY
,
29 const wxPoint
& pos
= wxDefaultPosition
,
30 const wxSize
& size
= wxDefaultSize
,
31 long style
= wxHD_DEFAULT_STYLE
,
32 const wxString
& name
= wxHeaderCtrlNameStr
)
36 Create(parent
, id
, pos
, size
, style
, name
);
39 bool Create(wxWindow
*parent
,
40 wxWindowID id
= wxID_ANY
,
41 const wxPoint
& pos
= wxDefaultPosition
,
42 const wxSize
& size
= wxDefaultSize
,
43 long style
= wxHD_DEFAULT_STYLE
,
44 const wxString
& name
= wxHeaderCtrlNameStr
);
46 virtual ~wxHeaderCtrl();
50 // override wxWindow methods which must be implemented by a new control
51 virtual wxSize
DoGetBestSize() const;
52 virtual void DoSetSize(int x
, int y
,
53 int width
, int height
,
54 int sizeFlags
= wxSIZE_AUTO
);
57 // implement base class pure virtuals
58 virtual void DoSetCount(unsigned int count
);
59 virtual unsigned int DoGetCount() const;
60 virtual void DoUpdate(unsigned int idx
);
62 virtual void DoScrollHorz(int dx
);
64 virtual void DoSetColumnsOrder(const wxArrayInt
& order
);
65 virtual wxArrayInt
DoGetColumnsOrder() const;
67 // override MSW-specific methods needed for new control
68 virtual WXDWORD
MSWGetStyle(long style
, WXDWORD
*exstyle
) const;
69 virtual bool MSWOnNotify(int idCtrl
, WXLPARAM lParam
, WXLPARAM
*result
);
71 // common part of all ctors
74 // wrapper around Header_InsertItem(): insert the item using information
75 // from the given column at the given index
76 void DoInsertItem(const wxHeaderColumn
& col
, unsigned int idx
);
78 // get the number of currently visible items: this is also the total number
79 // of items contained in the native control
80 int GetShownColumnsCount() const;
82 // due to the discrepancy for the hidden columns which we know about but
83 // the native control does not, there can be a difference between the
84 // column indices we use and the ones used by the native control; these
85 // functions translate between them
87 // notice that MSWToNativeIdx() shouldn't be called for hidden columns and
88 // MSWFromNativeIdx() always returns an index of a visible column
89 int MSWToNativeIdx(int idx
);
90 int MSWFromNativeIdx(int item
);
92 // this is the same as above but for order, not index
93 int MSWToNativeOrder(int order
);
94 int MSWFromNativeOrder(int order
);
96 // get the event type corresponding to a click or double click event
97 // (depending on dblclk value) with the specified (using MSW convention)
99 wxEventType
GetClickEventType(bool dblclk
, int button
);
102 // the number of columns in the control, including the hidden ones (not
103 // taken into account by the native control, see comment in DoGetCount())
104 unsigned int m_numColumns
;
106 // this is a lookup table allowing us to check whether the column with the
107 // given index is currently shown in the native control, in which case the
108 // value of this array element with this index is 0, or hidden
110 // notice that this may be different from GetColumn(idx).IsHidden() and in
111 // fact we need this array precisely because it will be different from it
112 // in DoUpdate() when the column hidden flag gets toggled and we need it to
113 // handle this transition correctly
114 wxArrayInt m_isHidden
;
116 // the order of our columns: this array contains the index of the column
117 // shown at the position n as the n-th element
119 // this is necessary only to handle the hidden columns: the native control
120 // doesn't know about them and so we can't use Header_GetOrderArray()
121 wxArrayInt m_colIndices
;
123 // the image list: initially NULL, created on demand
124 wxImageList
*m_imageList
;
126 // the offset of the window used to emulate scrolling it
129 // actual column we are dragging or -1 if not dragging anything
130 int m_colBeingDragged
;
132 wxDECLARE_NO_COPY_CLASS(wxHeaderCtrl
);
135 #endif // _WX_MSW_HEADERCTRL_H_