// with wxHD_ALLOW_HIDE style
bool ShowColumnsMenu(const wxPoint& pt, const wxString& title = wxString());
+ // append the entries for all our columns to the given menu, with the
+ // currently visible columns being checked
+ //
+ // this is used by ShowColumnsMenu() but can also be used if you use your
+ // own custom columns menu but nevertheless want to show all the columns in
+ // it
+ //
+ // the ids of the items corresponding to the columns are consecutive and
+ // start from idColumnsBase
+ void AddColumnsItems(wxMenu& menu, int idColumnsBase = 0);
+
// show the columns customization dialog and return true if something was
// changed using it (in which case UpdateColumnVisibility() and/or
// UpdateColumnsOrder() will have been called)
*/
int ShowColumnsMenu(const wxPoint& pt, const wxString& title = wxString());
+ /**
+ Helper function appending the checkable items corresponding to all the
+ columns to the given menu.
+
+ This function is used by ShowColumnsMenu() but can also be used if you
+ show your own custom columns menu and still want all the columns shown
+ in it. It appends menu items with column labels as their text and
+ consecutive ids starting from @a idColumnsBase to the menu and checks
+ the items corresponding to the currently visible columns.
+
+ Example of use:
+ @code
+ wxMenu menu;
+ menu.Append(100, "Some custom command");
+ menu.AppendSeparator();
+ AddColumnsItems(menu, 200);
+ const int rc = GetPopupMenuSelectionFromUser(menu, pt);
+ if ( rc >= 200 )
+ ... toggle visibility of the column rc-200 ...
+ @endcode
+
+ @param menu
+ The menu to append the items to. It may be currently empty or not.
+ @param idColumnsBase
+ The id for the menu item corresponding to the first column, the
+ other ones are consecutive starting from it. It should be positive.
+ */
+ void AddColumnsItems(wxMenu& menu, int idColumnsBase = 0);
+
/**
Show the column customization dialog.
// wxHeaderCtrl extra UI
// ----------------------------------------------------------------------------
-bool wxHeaderCtrlBase::ShowColumnsMenu(const wxPoint& pt, const wxString& title)
+void wxHeaderCtrlBase::AddColumnsItems(wxMenu& menu, int idColumnsBase)
{
- // construct the menu with the entries for all columns
- wxMenu menu;
- if ( !title.empty() )
- menu.SetTitle(title);
-
const unsigned count = GetColumnCount();
for ( unsigned n = 0; n < count; n++ )
{
const wxHeaderColumn& col = GetColumn(n);
- menu.AppendCheckItem(n, col.GetTitle());
+ menu.AppendCheckItem(idColumnsBase + n, col.GetTitle());
if ( col.IsShown() )
menu.Check(n, true);
}
+}
+
+bool wxHeaderCtrlBase::ShowColumnsMenu(const wxPoint& pt, const wxString& title)
+{
+ // construct the menu with the entries for all columns
+ wxMenu menu;
+ if ( !title.empty() )
+ menu.SetTitle(title);
+
+ AddColumnsItems(menu);
// ... and an extra one to show the customization dialog if the user is
// allowed to reorder the columns too
+ const unsigned count = GetColumnCount();
if ( HasFlag(wxHD_ALLOW_REORDER) )
{
menu.AppendSeparator();