120b33746a
Due to lack of support for horizontal scrolling in the native control, scrolling it was implementing by offsetting the entire control window. However this didn't work correctly when the window was not positioned at the leftmost border of its parent window, as the part of it that was scrolled off could still be visible in this case, and this is exactly what happened when the native header was used in wxGrid: scrolling it overwrote the corner part of wxGrid. Fix this by embedding the actual native control inside an outer wxWindow, to ensure that the scrolled off part is clipped by the parent window. Note that this commit is best viewed with "git show --color-moved" as most of the code was just moved from the header into the implementation file and is not really new.
88 lines
2.6 KiB
C++
88 lines
2.6 KiB
C++
///////////////////////////////////////////////////////////////////////////////
|
|
// Name: wx/msw/headerctrl.h
|
|
// Purpose: wxMSW native wxHeaderCtrl
|
|
// Author: Vadim Zeitlin
|
|
// Created: 2008-12-01
|
|
// Copyright: (c) 2008 Vadim Zeitlin <vadim@wxwidgets.org>
|
|
// Licence: wxWindows licence
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef _WX_MSW_HEADERCTRL_H_
|
|
#define _WX_MSW_HEADERCTRL_H_
|
|
|
|
#include "wx/compositewin.h"
|
|
|
|
class wxMSWHeaderCtrl;
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// wxHeaderCtrl
|
|
// ----------------------------------------------------------------------------
|
|
|
|
class WXDLLIMPEXP_CORE wxHeaderCtrl : public wxCompositeWindow<wxHeaderCtrlBase>
|
|
{
|
|
public:
|
|
wxHeaderCtrl()
|
|
{
|
|
Init();
|
|
}
|
|
|
|
wxHeaderCtrl(wxWindow *parent,
|
|
wxWindowID id = wxID_ANY,
|
|
const wxPoint& pos = wxDefaultPosition,
|
|
const wxSize& size = wxDefaultSize,
|
|
long style = wxHD_DEFAULT_STYLE,
|
|
const wxString& name = wxHeaderCtrlNameStr)
|
|
{
|
|
Init();
|
|
|
|
Create(parent, id, pos, size, style, name);
|
|
}
|
|
|
|
bool Create(wxWindow *parent,
|
|
wxWindowID id = wxID_ANY,
|
|
const wxPoint& pos = wxDefaultPosition,
|
|
const wxSize& size = wxDefaultSize,
|
|
long style = wxHD_DEFAULT_STYLE,
|
|
const wxString& name = wxHeaderCtrlNameStr);
|
|
|
|
// Window style handling.
|
|
virtual void SetWindowStyleFlag(long style) wxOVERRIDE;
|
|
|
|
protected:
|
|
// Override wxWindow methods which must be implemented by a new control.
|
|
virtual wxSize DoGetBestSize() const wxOVERRIDE;
|
|
|
|
private:
|
|
// Implement base class pure virtuals.
|
|
virtual void DoSetCount(unsigned int count) wxOVERRIDE;
|
|
virtual unsigned int DoGetCount() const wxOVERRIDE;
|
|
virtual void DoUpdate(unsigned int idx) wxOVERRIDE;
|
|
|
|
virtual void DoScrollHorz(int dx) wxOVERRIDE;
|
|
|
|
virtual void DoSetColumnsOrder(const wxArrayInt& order) wxOVERRIDE;
|
|
virtual wxArrayInt DoGetColumnsOrder() const wxOVERRIDE;
|
|
|
|
// Pure virtual method inherited from wxCompositeWindow.
|
|
virtual wxWindowList GetCompositeWindowParts() const wxOVERRIDE;
|
|
|
|
// Common part of all ctors.
|
|
void Init();
|
|
|
|
// Events.
|
|
void OnSize(wxSizeEvent& event);
|
|
|
|
// Style flag helper function.
|
|
long ApplyHeaderReorderFlagToStyle(long style);
|
|
|
|
|
|
// The native header control.
|
|
wxMSWHeaderCtrl* m_nativeControl;
|
|
friend class wxMSWHeaderCtrl;
|
|
|
|
wxDECLARE_NO_COPY_CLASS(wxHeaderCtrl);
|
|
};
|
|
|
|
#endif // _WX_MSW_HEADERCTRL_H_
|
|
|