Implement best size calculation for report mode wxListCtrl.
Use the column labels to determine the minimal width required by the control to show them all in full. Also declare all image list and column-related wxListCtrl methods in wxListCtrlBase now as we need some of them in DoGetBestClientSize() implementation. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70282 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -14,8 +14,6 @@
|
||||
#include "wx/scrolwin.h"
|
||||
#include "wx/textctrl.h"
|
||||
|
||||
class WXDLLIMPEXP_FWD_CORE wxImageList;
|
||||
|
||||
#if wxUSE_DRAG_AND_DROP
|
||||
class WXDLLIMPEXP_FWD_CORE wxDropTarget;
|
||||
#endif
|
||||
@@ -66,7 +64,7 @@ public:
|
||||
const wxString &name = wxListCtrlNameStr);
|
||||
|
||||
bool GetColumn( int col, wxListItem& item ) const;
|
||||
bool SetColumn( int col, wxListItem& item );
|
||||
bool SetColumn( int col, const wxListItem& item );
|
||||
int GetColumnWidth( int col ) const;
|
||||
bool SetColumnWidth( int col, int width);
|
||||
int GetCountPerPage() const; // not the same in wxGLC as in Windows, I think
|
||||
@@ -134,9 +132,6 @@ public:
|
||||
long InsertItem( long index, const wxString& label );
|
||||
long InsertItem( long index, int imageIndex );
|
||||
long InsertItem( long index, const wxString& label, int imageIndex );
|
||||
long InsertColumn( long col, wxListItem& info );
|
||||
long InsertColumn( long col, const wxString& heading,
|
||||
int format = wxLIST_FORMAT_LEFT, int width = -1 );
|
||||
bool ScrollList( int dx, int dy );
|
||||
bool SortItems( wxListCtrlCompare fn, wxIntPtr data );
|
||||
|
||||
@@ -208,6 +203,10 @@ public:
|
||||
wxListMainWindow *m_mainWin;
|
||||
|
||||
protected:
|
||||
// Implement base class pure virtual methods.
|
||||
long DoInsertColumn(long col, const wxListItem& info);
|
||||
|
||||
|
||||
virtual bool DoPopupMenu( wxMenu *menu, int x, int y );
|
||||
|
||||
// take into account the coordinates difference between the container
|
||||
|
@@ -581,7 +581,7 @@ public:
|
||||
void SetItemSpacing( int spacing, bool isSmall = false );
|
||||
int GetItemSpacing( bool isSmall = false );
|
||||
|
||||
void SetColumn( int col, wxListItem &item );
|
||||
void SetColumn( int col, const wxListItem &item );
|
||||
void SetColumnWidth( int col, int width );
|
||||
void GetColumn( int col, wxListItem &item ) const;
|
||||
int GetColumnWidth( int col ) const;
|
||||
@@ -645,7 +645,7 @@ public:
|
||||
long FindItem( const wxPoint& pt );
|
||||
long HitTest( int x, int y, int &flags ) const;
|
||||
void InsertItem( wxListItem &item );
|
||||
void InsertColumn( long col, wxListItem &item );
|
||||
void InsertColumn( long col, const wxListItem &item );
|
||||
int GetItemWidthWithImage(wxListItem * item);
|
||||
void SortItems( wxListCtrlCompare fn, wxIntPtr data );
|
||||
|
||||
|
@@ -17,6 +17,8 @@
|
||||
#include "wx/gdicmn.h"
|
||||
#include "wx/event.h"
|
||||
|
||||
class WXDLLIMPEXP_FWD_CORE wxImageList;
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// types
|
||||
// ----------------------------------------------------------------------------
|
||||
@@ -384,9 +386,72 @@ class WXDLLIMPEXP_CORE wxListCtrlBase : public wxControl
|
||||
public:
|
||||
wxListCtrlBase() { }
|
||||
|
||||
// Image list methods.
|
||||
// -------------------
|
||||
|
||||
// Associate the given (possibly NULL to indicate that no images will be
|
||||
// used) image list with the control. The ownership of the image list
|
||||
// passes to the control, i.e. it will be deleted when the control itself
|
||||
// is destroyed.
|
||||
//
|
||||
// The value of "which" must be one of wxIMAGE_LIST_{NORMAL,SMALL,STATE}.
|
||||
virtual void AssignImageList(wxImageList* imageList, int which) = 0;
|
||||
|
||||
// Same as AssignImageList() but the control does not delete the image list
|
||||
// so it can be shared among several controls.
|
||||
virtual void SetImageList(wxImageList* imageList, int which) = 0;
|
||||
|
||||
// Return the currently used image list, may be NULL.
|
||||
virtual wxImageList* GetImageList(int which) const = 0;
|
||||
|
||||
|
||||
// Column-related methods.
|
||||
// -----------------------
|
||||
|
||||
// All these methods can only be used in report view mode.
|
||||
|
||||
// Add a new column to the control at the position "col".
|
||||
//
|
||||
// Returns the index of the newly inserted column or -1 on error.
|
||||
long InsertColumn(long col, const wxListItem& info);
|
||||
long InsertColumn(long col,
|
||||
const wxString& heading,
|
||||
int format = wxLIST_FORMAT_LEFT,
|
||||
int width = -1);
|
||||
|
||||
// Delete the given or all columns.
|
||||
virtual bool DeleteColumn(int col) = 0;
|
||||
virtual bool DeleteAllColumns() = 0;
|
||||
|
||||
// Return the current number of columns.
|
||||
virtual int GetColumnCount() const = 0;
|
||||
|
||||
// Get or update information about the given column. Set item mask to
|
||||
// indicate the fields to retrieve or change.
|
||||
//
|
||||
// Returns false on error, e.g. if the column index is invalid.
|
||||
virtual bool GetColumn(int col, wxListItem& item) const = 0;
|
||||
virtual bool SetColumn(int col, const wxListItem& item) = 0;
|
||||
|
||||
// Convenient wrappers for the above methods which get or update just the
|
||||
// column width.
|
||||
virtual int GetColumnWidth(int col) const = 0;
|
||||
virtual bool SetColumnWidth(int col, int width) = 0;
|
||||
|
||||
|
||||
// Other miscellaneous accessors.
|
||||
// ------------------------------
|
||||
|
||||
// Convenient functions for testing the list control mode:
|
||||
bool InReportView() const { return HasFlag(wxLC_REPORT); }
|
||||
bool IsVirtual() const { return HasFlag(wxLC_VIRTUAL); }
|
||||
|
||||
protected:
|
||||
// Real implementations methods to which our public forwards.
|
||||
virtual long DoInsertColumn(long col, const wxListItem& info) = 0;
|
||||
|
||||
// Overridden methods of the base class.
|
||||
virtual wxSize DoGetBestClientSize() const;
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
@@ -16,7 +16,6 @@
|
||||
#include "wx/dynarray.h"
|
||||
#include "wx/vector.h"
|
||||
|
||||
class WXDLLIMPEXP_FWD_CORE wxImageList;
|
||||
class wxMSWListItemData;
|
||||
|
||||
// define this symbol to indicate the availability of SetColumnsOrder() and
|
||||
@@ -320,14 +319,6 @@ public:
|
||||
// Insert an image/string item
|
||||
long InsertItem(long index, const wxString& label, int imageIndex);
|
||||
|
||||
// For list view mode (only), inserts a column.
|
||||
long InsertColumn(long col, const wxListItem& info);
|
||||
|
||||
long InsertColumn(long col,
|
||||
const wxString& heading,
|
||||
int format = wxLIST_FORMAT_LEFT,
|
||||
int width = -1);
|
||||
|
||||
// set the number of items in a virtual list control
|
||||
void SetItemCount(long count);
|
||||
|
||||
@@ -393,6 +384,9 @@ protected:
|
||||
// common part of all ctors
|
||||
void Init();
|
||||
|
||||
// Implement base class pure virtual methods.
|
||||
long DoInsertColumn(long col, const wxListItem& info);
|
||||
|
||||
// free memory taken by all internal data
|
||||
void FreeAllInternalData();
|
||||
|
||||
|
@@ -252,12 +252,6 @@ class WXDLLIMPEXP_CORE wxListCtrl: public wxListCtrlBase
|
||||
// Insert an image/string item
|
||||
long InsertItem(long index, const wxString& label, int imageIndex);
|
||||
|
||||
// For list view mode (only), inserts a column.
|
||||
long InsertColumn(long col, wxListItem& info);
|
||||
|
||||
long InsertColumn(long col, const wxString& heading, int format = wxLIST_FORMAT_LEFT,
|
||||
int width = -1);
|
||||
|
||||
// Scrolls the list control. If in icon, small icon or report view mode,
|
||||
// x specifies the number of pixels to scroll. If in list view mode, x
|
||||
// specifies the number of columns to scroll.
|
||||
@@ -371,14 +365,14 @@ class WXDLLIMPEXP_CORE wxListCtrl: public wxListCtrlBase
|
||||
GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL);
|
||||
|
||||
protected:
|
||||
// Implement base class pure virtual methods.
|
||||
long DoInsertColumn(long col, const wxListItem& info);
|
||||
|
||||
// protected overrides needed for pimpl approach
|
||||
virtual void DoSetSize(int x, int y,
|
||||
int width, int height,
|
||||
int sizeFlags = wxSIZE_AUTO);
|
||||
|
||||
virtual wxSize DoGetBestSize() const;
|
||||
|
||||
long m_current;
|
||||
wxListCtrlTextCtrlWrapper *m_textctrlWrapper;
|
||||
wxListCtrlRenameTimer *m_renameTimer;
|
||||
|
Reference in New Issue
Block a user