bool InReportView() const;
/**
- For report view mode (only), inserts a column. For more details, see SetItem().
+ For report view mode (only), inserts a column.
+
+ For more details, see SetItem(). Also see InsertColumn(long, const
+ wxString&, int, int) overload for a usually more convenient
+ alternative to this method and the description of how the item width
+ is interpreted by this method.
*/
- long InsertColumn(long col, wxListItem& info);
+ long InsertColumn(long col, const wxListItem& info);
/**
- For report view mode (only), inserts a column. For more details, see SetItem().
+ For report view mode (only), inserts a column.
+
+ Insert a new column in the list control in report view mode at the
+ given position specifying its most common attributes.
+
+ Notice that to set the image for the column you need to use
+ Insert(long, const wxListItem&) overload and specify ::wxLIST_MASK_IMAGE
+ in the item mask.
+
+ @param col
+ The index where the column should be inserted. Valid indices are
+ from 0 up to GetColumnCount() inclusive and the latter can be used
+ to append the new column after the last existing one.
+ @param heading
+ The string specifying the column heading.
+ @param format
+ The flags specifying the control heading text alignment.
+ @param width
+ If positive, the width of the column in pixels. Otherwise it can be
+ @c wxLIST_AUTOSIZE to choose the default size for the column or @c
+ wxLIST_AUTOSIZE_USEHEADER to fit the column width to @a heading or
+ to extend to fill all the remaining space for the last column.
+ Notice that in case of @c wxLIST_AUTOSIZE fixed width is used as
+ there are no items in this column to use for determining its best
+ size yet. If you want to fit the column to its contents, use
+ SetColumnWidth() after adding the items with values in this column.
+ @return
+ The index of the inserted column or -1 if adding it failed.
*/
long InsertColumn(long col, const wxString& heading,
int format = wxLIST_FORMAT_LEFT,
- int width = -1);
+ int width = wxLIST_AUTOSIZE);
/**
Inserts an item, returning the index of the new item if successful, -1 otherwise.
LV_COLUMN lvCol;
wxConvertToMSWListCol(GetHwnd(), col, item, lvCol);
- if ( !(lvCol.mask & LVCF_WIDTH) )
+ // LVSCW_AUTOSIZE_USEHEADER is not supported when inserting new column,
+ // we'll deal with it below instead. Plain LVSCW_AUTOSIZE is not supported
+ // neither but it doesn't need any special handling as we use fixed value
+ // for it here, both because we can't do anything else (there are no items
+ // with values in this column to compute the size from yet) and for
+ // compatibility as wxLIST_AUTOSIZE == -1 and -1 as InsertColumn() width
+ // parameter used to mean "arbitrary fixed width".
+ if ( !(lvCol.mask & LVCF_WIDTH) || lvCol.cx < 0 )
{
// always give some width to the new column: this one is compatible
// with the generic version
}
long n = ListView_InsertColumn(GetHwnd(), col, &lvCol);
- if ( n != -1 )
- {
- m_colCount++;
- }
- else // failed to insert?
+ if ( n == -1 )
{
wxLogDebug(wxT("Failed to insert the column '%s' into listview!"),
lvCol.pszText);
+ return -1;
+ }
+
+ m_colCount++;
+
+ // Now adjust the new column size.
+ if ( (item.GetMask() & wxLIST_MASK_WIDTH) &&
+ (item.GetWidth() == wxLIST_AUTOSIZE_USEHEADER) )
+ {
+ SetColumnWidth(n, wxLIST_AUTOSIZE_USEHEADER);
}
return n;