]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/msw/headerctrl.h
Fix wxPropertyGrid::GetPropertyRect when the last item is collapsed.
[wxWidgets.git] / include / wx / msw / headerctrl.h
index 9a67856a8597afe06adc6a8c712ddc54e4941e2e..db702c5a1906c33cfaa23a1bfbe79bf8ae4ccc49 100644 (file)
@@ -3,7 +3,6 @@
 // Purpose:     wxMSW native wxHeaderCtrl
 // Author:      Vadim Zeitlin
 // Created:     2008-12-01
 // Purpose:     wxMSW native wxHeaderCtrl
 // Author:      Vadim Zeitlin
 // Created:     2008-12-01
-// RCS-ID:      $Id$
 // Copyright:   (c) 2008 Vadim Zeitlin <vadim@wxwidgets.org>
 // Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
 // Copyright:   (c) 2008 Vadim Zeitlin <vadim@wxwidgets.org>
 // Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
@@ -46,7 +45,14 @@ public:
 
     virtual ~wxHeaderCtrl();
 
 
     virtual ~wxHeaderCtrl();
 
-
+    
+protected:
+    // override wxWindow methods which must be implemented by a new control
+    virtual wxSize DoGetBestSize() const;
+    virtual void DoSetSize(int x, int y,
+                           int width, int height,
+                           int sizeFlags = wxSIZE_AUTO);
+    
 private:
     // implement base class pure virtuals
     virtual void DoSetCount(unsigned int count);
 private:
     // implement base class pure virtuals
     virtual void DoSetCount(unsigned int count);
@@ -58,9 +64,6 @@ private:
     virtual void DoSetColumnsOrder(const wxArrayInt& order);
     virtual wxArrayInt DoGetColumnsOrder() const;
 
     virtual void DoSetColumnsOrder(const wxArrayInt& order);
     virtual wxArrayInt DoGetColumnsOrder() const;
 
-    // override wxWindow methods which must be implemented by a new control
-    virtual wxSize DoGetBestSize() const;
-
     // override MSW-specific methods needed for new control
     virtual WXDWORD MSWGetStyle(long style, WXDWORD *exstyle) const;
     virtual bool MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result);
     // override MSW-specific methods needed for new control
     virtual WXDWORD MSWGetStyle(long style, WXDWORD *exstyle) const;
     virtual bool MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result);
@@ -68,9 +71,27 @@ private:
     // common part of all ctors
     void Init();
 
     // common part of all ctors
     void Init();
 
-    // wrapper around Header_InsertItem(): insert the item by using information
-    // from GetColumn(idx) and at the given display position if order != -1
-    void DoInsertItem(unsigned int idx, int order);
+    // wrapper around Header_InsertItem(): insert the item using information
+    // from the given column at the given index
+    void DoInsertItem(const wxHeaderColumn& col, unsigned int idx);
+
+    // get the number of currently visible items: this is also the total number
+    // of items contained in the native control
+    int GetShownColumnsCount() const;
+
+    // due to the discrepancy for the hidden columns which we know about but
+    // the native control does not, there can be a difference between the
+    // column indices we use and the ones used by the native control; these
+    // functions translate between them
+    //
+    // notice that MSWToNativeIdx() shouldn't be called for hidden columns and
+    // MSWFromNativeIdx() always returns an index of a visible column
+    int MSWToNativeIdx(int idx);
+    int MSWFromNativeIdx(int item);
+
+    // this is the same as above but for order, not index
+    int MSWToNativeOrder(int order);
+    int MSWFromNativeOrder(int order);
 
     // get the event type corresponding to a click or double click event
     // (depending on dblclk value) with the specified (using MSW convention)
 
     // get the event type corresponding to a click or double click event
     // (depending on dblclk value) with the specified (using MSW convention)
@@ -78,10 +99,37 @@ private:
     wxEventType GetClickEventType(bool dblclk, int button);
 
 
     wxEventType GetClickEventType(bool dblclk, int button);
 
 
+    // the number of columns in the control, including the hidden ones (not
+    // taken into account by the native control, see comment in DoGetCount())
+    unsigned int m_numColumns;
+
+    // this is a lookup table allowing us to check whether the column with the
+    // given index is currently shown in the native control, in which case the
+    // value of this array element with this index is 0, or hidden
+    //
+    // notice that this may be different from GetColumn(idx).IsHidden() and in
+    // fact we need this array precisely because it will be different from it
+    // in DoUpdate() when the column hidden flag gets toggled and we need it to
+    // handle this transition correctly
+    wxArrayInt m_isHidden;
+
+    // the order of our columns: this array contains the index of the column
+    // shown at the position n as the n-th element
+    //
+    // this is necessary only to handle the hidden columns: the native control
+    // doesn't know about them and so we can't use Header_GetOrderArray()
+    wxArrayInt m_colIndices;
+
     // the image list: initially NULL, created on demand
     wxImageList *m_imageList;
 
     // the image list: initially NULL, created on demand
     wxImageList *m_imageList;
 
-    DECLARE_NO_COPY_CLASS(wxHeaderCtrl)
+    // the offset of the window used to emulate scrolling it
+    int m_scrollOffset;
+
+    // actual column we are dragging or -1 if not dragging anything
+    int m_colBeingDragged;
+
+    wxDECLARE_NO_COPY_CLASS(wxHeaderCtrl);
 };
 
 #endif // _WX_MSW_HEADERCTRL_H_
 };
 
 #endif // _WX_MSW_HEADERCTRL_H_