}
// implement wxHeaderColumnBase methods
- virtual void SetTitle(const wxString& title) { m_title = title; }
+ virtual void SetTitle(const wxString& title) { m_title = title; UpdateDisplay(); }
virtual wxString GetTitle() const { return m_title; }
- virtual void SetWidth(int width) { m_width = width; }
+ virtual void SetWidth(int width) { m_width = width; UpdateDisplay(); }
virtual int GetWidth() const { return m_width; }
- virtual void SetMinWidth(int minWidth) { m_minWidth = minWidth; }
+ virtual void SetMinWidth(int minWidth) { m_minWidth = minWidth; UpdateDisplay(); }
virtual int GetMinWidth() const { return m_minWidth; }
- virtual void SetAlignment(wxAlignment align) { m_align = align; }
+ virtual void SetAlignment(wxAlignment align) { m_align = align; UpdateDisplay(); }
virtual wxAlignment GetAlignment() const { return m_align; }
- virtual void SetFlags(int flags) { m_flags = flags; }
+ virtual void SetFlags(int flags) { m_flags = flags; UpdateDisplay(); }
virtual int GetFlags() const { return m_flags; }
- virtual void SetAsSortKey(bool sort = true) { m_sort = sort; }
+ virtual void SetAsSortKey(bool sort = true) { m_sort = sort; UpdateDisplay(); }
virtual bool IsSortKey() const { return m_sort; }
- virtual void SetSortOrder(bool ascending) { m_sortAscending = ascending; }
+ virtual void SetSortOrder(bool ascending) { m_sortAscending = ascending; UpdateDisplay(); }
virtual bool IsSortOrderAscending() const { return m_sortAscending; }
+ virtual void SetBitmap( const wxBitmap& bitmap ) { wxDataViewColumnBase::SetBitmap(bitmap); UpdateDisplay(); }
+
+
private:
// common part of all ctors
- void Init(int width, wxAlignment align, int flags)
- {
- m_width = width == wxCOL_WIDTH_DEFAULT ? wxDVC_DEFAULT_WIDTH : width;
- m_minWidth = 0;
- m_align = align;
- m_flags = flags;
- m_sort = false;
- m_sortAscending = true;
- }
+ void Init(int width, wxAlignment align, int flags);
+
+ void UpdateDisplay();
wxString m_title;
int m_width,
void OnEditingDone( wxDataViewEvent &event );
void OnHeaderClick( wxDataViewEvent &event );
+ void OnAttrHeaderClick( wxDataViewEvent &event );
void OnHeaderRightClick( wxDataViewEvent &event );
void OnSorted( wxDataViewEvent &event );
void OnRightClick( wxMouseEvent &event );
void OnGoto( wxCommandEvent &event);
void OnAddMany( wxCommandEvent &event);
+ void OnHideAttributes( wxCommandEvent &event);
+ void OnShowAttributes( wxCommandEvent &event);
void OnBeginDrag( wxDataViewEvent &event );
void OnDropPossible( wxDataViewEvent &event );
// other data:
wxDataViewColumn* m_col;
+ wxDataViewColumn* m_attributes;
wxTextCtrl* m_log;
wxLog *m_logOld;
// control IDs
ID_MUSIC_CTRL = 50,
+ ID_ATTR_CTRL = 51,
ID_ADD_MOZART = 100,
ID_DELETE_MUSIC = 101,
ID_DELETE_LIST = 201,
ID_GOTO = 202,
ID_ADD_MANY = 203,
+ ID_HIDE_ATTRIBUTES = 204,
+ ID_SHOW_ATTRIBUTES = 205,
+
// Fourth page.
ID_DELETE_TREE_ITEM = 400,
ID_DELETE_ALL_TREE_ITEMS = 401,
EVT_BUTTON( ID_DELETE_LIST, MyFrame::OnDeleteList )
EVT_BUTTON( ID_GOTO, MyFrame::OnGoto)
EVT_BUTTON( ID_ADD_MANY, MyFrame::OnAddMany)
+ EVT_BUTTON( ID_HIDE_ATTRIBUTES, MyFrame::OnHideAttributes)
+ EVT_BUTTON( ID_SHOW_ATTRIBUTES, MyFrame::OnShowAttributes)
// Fourth page.
EVT_BUTTON( ID_DELETE_TREE_ITEM, MyFrame::OnDeleteTreeItem )
EVT_BUTTON( ID_DELETE_ALL_TREE_ITEMS, MyFrame::OnDeleteAllTreeItems )
EVT_DATAVIEW_ITEM_DROP( ID_MUSIC_CTRL, MyFrame::OnDrop )
EVT_RIGHT_UP(MyFrame::OnRightClick)
+
+ EVT_DATAVIEW_COLUMN_HEADER_CLICK(ID_ATTR_CTRL, MyFrame::OnAttrHeaderClick)
+
END_EVENT_TABLE()
MyFrame::MyFrame(wxFrame *frame, const wxString &title, int x, int y, int w, int h):
BuildDataViewCtrl(secondPanel, 1); // sets m_ctrl[1]
wxBoxSizer *button_sizer2 = new wxBoxSizer( wxHORIZONTAL );
- button_sizer2->Add( new wxButton( secondPanel, ID_PREPEND_LIST,"Prepend"), 0, wxALL, 10 );
- button_sizer2->Add( new wxButton( secondPanel, ID_DELETE_LIST, "Delete selected"), 0, wxALL, 10 );
- button_sizer2->Add( new wxButton( secondPanel, ID_GOTO, "Goto 50"), 0, wxALL, 10 );
- button_sizer2->Add( new wxButton( secondPanel, ID_ADD_MANY, "Add 1000"), 0, wxALL, 10 );
+ button_sizer2->Add( new wxButton( secondPanel, ID_PREPEND_LIST,"Prepend"), 0, wxALL, 10 );
+ button_sizer2->Add( new wxButton( secondPanel, ID_DELETE_LIST, "Delete selected"), 0, wxALL, 10 );
+ button_sizer2->Add( new wxButton( secondPanel, ID_GOTO, "Goto 50"), 0, wxALL, 10 );
+ button_sizer2->Add( new wxButton( secondPanel, ID_ADD_MANY, "Add 1000"), 0, wxALL, 10 );
+ button_sizer2->Add( new wxButton( secondPanel, ID_HIDE_ATTRIBUTES, "Hide attributes"), 0, wxALL, 10 );
+ button_sizer2->Add( new wxButton( secondPanel, ID_SHOW_ATTRIBUTES, "Show attributes"), 0, wxALL, 10 );
wxSizer *secondPanelSz = new wxBoxSizer( wxVERTICAL );
secondPanelSz->Add(m_ctrl[1], 1, wxGROW|wxALL, 5);
case 1:
{
wxASSERT(!m_ctrl[1] && !m_list_model);
- m_ctrl[1] = new wxDataViewCtrl( parent, wxID_ANY, wxDefaultPosition,
+ m_ctrl[1] = new wxDataViewCtrl( parent, ID_ATTR_CTRL, wxDefaultPosition,
wxDefaultSize, style );
m_list_model = new MyListModel;
m_ctrl[1]->AppendIconTextColumn("icon",
MyListModel::Col_IconText,
wxDATAVIEW_CELL_EDITABLE);
- m_ctrl[1]->AppendColumn(
+
+ m_attributes =
new wxDataViewColumn("attributes",
new wxDataViewTextRenderer,
- MyListModel::Col_TextWithAttr)
- );
+ MyListModel::Col_TextWithAttr,
+ 80,
+ wxALIGN_RIGHT,
+ wxDATAVIEW_COL_REORDERABLE | wxDATAVIEW_COL_RESIZABLE );
+ m_ctrl[1]->AppendColumn( m_attributes );
m_ctrl[1]->AppendColumn(
new wxDataViewColumn("custom renderer",
m_ctrl[0]->PopupMenu(&menu);
}
+void MyFrame::OnAttrHeaderClick( wxDataViewEvent &event )
+{
+ // we need to skip the event to let the default behaviour of sorting by
+ // this column when it is clicked to take place
+ event.Skip();
+
+ if (!m_log)
+ return;
+
+ int pos = m_ctrl[1]->GetColumnPosition( event.GetDataViewColumn() );
+
+ wxLogMessage( "wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_CLICK, Column position: %d", pos );
+ wxLogMessage( "Column title: %s Column width: %d", event.GetDataViewColumn()->GetTitle(), event.GetDataViewColumn()->GetWidth() );
+}
+
void MyFrame::OnHeaderClick( wxDataViewEvent &event )
{
// we need to skip the event to let the default behaviour of sorting by
m_list_model->AddMany();
}
+void MyFrame::OnHideAttributes(wxCommandEvent& WXUNUSED(event))
+{
+ m_attributes->SetHidden(true);
+}
+
+void MyFrame::OnShowAttributes(wxCommandEvent& WXUNUSED(event))
+{
+ m_attributes->SetHidden(false);
+}
+
// ----------------------------------------------------------------------------
// MyFrame - event handlers for the fourth page
// ----------------------------------------------------------------------------
// classes
//-----------------------------------------------------------------------------
+class wxDataViewColumn;
+class wxDataViewHeaderWindow;
class wxDataViewCtrl;
+//-----------------------------------------------------------------------------
+// classes
+//-----------------------------------------------------------------------------
+
static const int SCROLL_UNIT_X = 15;
// the cell padding on the left/right
static int g_column = -2;
static bool g_asending = true;
+//-----------------------------------------------------------------------------
+// wxDataViewColumn
+//-----------------------------------------------------------------------------
+
+void wxDataViewColumn::Init(int width, wxAlignment align, int flags)
+{
+ m_width = width == wxCOL_WIDTH_DEFAULT ? wxDVC_DEFAULT_WIDTH : width;
+ m_minWidth = 0;
+ m_align = align;
+ m_flags = flags;
+ m_sort = false;
+ m_sortAscending = true;
+}
+
+void wxDataViewColumn::UpdateDisplay()
+{
+ if (m_owner)
+ {
+ int idx = m_owner->GetColumnIndex( this );
+ m_owner->OnColumnChange( idx );
+ }
+}
+
//-----------------------------------------------------------------------------
// wxDataViewHeaderWindow
//-----------------------------------------------------------------------------
int wxDataViewCtrl::GetColumnPosition( const wxDataViewColumn *column ) const
{
+#if 1
+ unsigned int len = GetColumnCount();
+ for ( unsigned int i = 0; i < len; i++ )
+ {
+ wxDataViewColumn * col = GetColumnAt(i);
+ if (column==col)
+ return i;
+ }
+
+ return wxNOT_FOUND;
+#else
+ // This returns the position in pixels which is not what we want.
int ret = 0,
dummy = 0;
unsigned int len = GetColumnCount();
}
}
return ret;
+#endif
}
wxDataViewColumn *wxDataViewCtrl::GetSortingColumn() const