added wxHeaderCtrlSimple::GetBestFittingWidth() for even more automatic column resizing

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57187 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2008-12-08 12:28:41 +00:00
parent 3bfaa5a7e4
commit e5a1635371
3 changed files with 39 additions and 0 deletions

View File

@ -224,7 +224,17 @@ public:
void RemoveSortIndicator();
protected:
// implement/override base class methods
virtual wxHeaderColumnBase& GetColumn(unsigned int idx);
virtual bool UpdateColumnWidthToFit(unsigned int idx, int widthTitle);
// and define another one to be overridden in the derived classes: it
// should return the best width for the given column contents or -1 if not
// implemented, we use it to implement UpdateColumnWidthToFit()
virtual int GetBestFittingWidth(unsigned int WXUNUSED(idx)) const
{
return -1;
}
private:
// functions implementing our public API

View File

@ -356,6 +356,22 @@ public:
The column to remove sort indicator for.
*/
void RemoveSortIndicator(unsigned int idx);
protected:
/**
This function can be overridden in the classes deriving from this
control instead of overriding UpdateColumnWidthToFit().
To implement automatic column resizing to fit its contents width when
the column divider is double clicked, you need to simply return the
fitting width for the given column @a idx from this method, the control
will automatically use the biggest value between the one returned from
here and the one needed for the display of the column title itself.
The base class version returns -1 indicating that this function is not
implemented.
*/
virtual int GetBestFittingWidth(unsigned int idx) const;
};
/**

View File

@ -149,6 +149,19 @@ void wxHeaderCtrlSimple::RemoveSortIndicator()
}
}
bool
wxHeaderCtrlSimple::UpdateColumnWidthToFit(unsigned int idx, int widthTitle)
{
const int widthContents = GetBestFittingWidth(idx);
if ( widthContents == -1 )
return false;
m_cols[idx].SetWidth(wxMax(widthContents, widthTitle));
UpdateColumn(idx);
return true;
}
// ============================================================================
// wxHeaderCtrlEvent implementation
// ============================================================================