- dataview_left->AppendToggleColumn( wxT("fourth"), 3, wxDATAVIEW_CELL_INERT, -1,
- DEFAULT_ALIGN );
-
- MyCustomRenderer *custom_renderer = new MyCustomRenderer;
- column = new wxDataViewColumn( wxT("custom"), custom_renderer, 4, -1, DEFAULT_ALIGN );
- dataview_left->AppendColumn( column );
-
- dataview_left->AppendProgressColumn( wxT("progress"), 5, wxDATAVIEW_CELL_INERT, -1,
- DEFAULT_ALIGN );
-
- dataview_left->AppendDateColumn( wxT("date"), 6, wxDATAVIEW_CELL_INERT, -1, DEFAULT_ALIGN );
-
- // Right wxDataViewCtrl using the same model
- dataview_right = new wxDataViewCtrl( m_panelRight, wxID_ANY );
- dataview_right->AssociateModel( model.get() );
-
- text_renderer = new wxDataViewTextRenderer( wxT("string"), wxDATAVIEW_CELL_EDITABLE );
- column = new wxDataViewColumn( wxT("editable"), text_renderer, 2 );
- dataview_right->AppendColumn( column );
- dataview_right->AppendTextColumn( wxT("first"), 0 );
- dataview_right->AppendTextColumn( wxT("second"), 1 );
- wxDataViewToggleRenderer *toggle_renderer =
- new wxDataViewToggleRenderer( wxT("bool"), wxDATAVIEW_CELL_ACTIVATABLE );
- column = new wxDataViewColumn( wxT("bool"), toggle_renderer, 3, 30 );
- dataview_right->AppendColumn( column );
-
- dataview_right->AppendDateColumn( wxT("date"), 6 );
-
-
- // layout the new dataview controls
- if (old1)
- {
- m_panelLeft->GetSizer()->Replace(old1, dataview_left);
- delete old1;
-
- m_panelLeft->Layout();
- }
-
- if (old2)
- {
- m_panelRight->GetSizer()->Replace(old2, dataview_right);
- delete old2;
-
- m_panelRight->Layout();
- }
-}
-
-void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event) )
-{
- Close(true);
-}
-
-void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event) )
-{
- wxAboutDialogInfo info;
- info.SetName(_("DataView sample"));
- info.SetDescription(_("This sample demonstrates the dataview control handling"));
- info.SetCopyright(_T("(C) 2007 Robert Roebling"));
-
- wxAboutBox(info);
-}
-
-void MyFrame::OnNewSortingFrame(wxCommandEvent& WXUNUSED(event) )
-{
- MySortingFrame *frame2 =
- new MySortingFrame(NULL, wxT("wxDataViewCtrl sorting test"), 10, 150, 600, 500);
- frame2->Show(true);
-}
-
-void MyFrame::OnStyleChange(wxCommandEvent& WXUNUSED(event) )
-{
- // recreate the wxDataViewCtrl:
- CreateDataViewControls();
-}
-
-void MyFrame::OnColumnSetting(wxCommandEvent& event)
-{
- wxArrayInt columns;
- int flag = 0;
- bool header = false, minwidth = false;
- wxString msg;
-
- switch (event.GetId())
- {
- case ID_RESIZEABLE_COLUMNS:
- flag = wxDATAVIEW_COL_RESIZABLE;
- columns = GetFlaggedColumns(flag);
- break;
- case ID_SORTABLE_COLUMNS:
- flag = wxDATAVIEW_COL_SORTABLE;
- columns = GetFlaggedColumns(flag);
- break;
- case ID_HIDDEN_COLUMNS:
- flag = wxDATAVIEW_COL_HIDDEN;
- columns = GetFlaggedColumns(flag);
- break;
-
- case ID_CHOOSE_COLUMN_ALIGNMENT:
- msg = wxT("Select the columns whose headers' alignment will be modified.");
- header = true;
- break;
- case ID_CHOOSE_CONTENTS_ALIGNMENT:
- msg = wxT("Select the columns whose contents' alignment will be modified.");
- header = false;
- break;
-
- case ID_SET_MINWIDTH:
- msg = wxT("Please provide the new minimal width:");
- minwidth = true;
- break;
- case ID_SET_WIDTH:
- msg = wxT("Please provide the new width:");
- minwidth = false;
- break;
- }
-
- // get column titles:
-
- wxArrayString choices;
- for (size_t i=0; i<dataview_left->GetColumnCount(); i++)
- choices.Add(dataview_left->GetColumn(i)->GetTitle());
-
- // ask the user
- wxGetMultipleChoices(
- columns,
- wxT("Choose the columns to which apply the change."),
- wxT("Choose the column"),
- choices,
- this);
-
- switch (event.GetId())
- {
- case ID_RESIZEABLE_COLUMNS:
- case ID_SORTABLE_COLUMNS:
- case ID_HIDDEN_COLUMNS:
- SetFlag(columns, flag);
- break;
-
- case ID_CHOOSE_COLUMN_ALIGNMENT:
- case ID_CHOOSE_CONTENTS_ALIGNMENT:
- SetAlignment(columns, header, ChooseAlign(msg, header));
- break;
-
- case ID_SET_MINWIDTH:
- case ID_SET_WIDTH:
- {
- int def = minwidth ? wxDVC_DEFAULT_MINWIDTH : wxDVC_DEFAULT_WIDTH;
-
- msg << wxT("\nNOTE: all non-selected columns will be reset to a width of ")
- << def << wxT(" pixels.");
-
- long ret =
- wxGetNumberFromUser(msg, wxT("New value:"), wxT("Modify width"),
- def, 0, 300, this);
-
- if (ret != -1)
- SetWidth(columns, minwidth, ret);
- }
- break;
- }
-
- dataview_left->Refresh();
-}
-
-wxAlignment MyFrame::ChooseAlign(const wxString &msg, bool onlyHorizontal)
-{
- const wxString choices[] =
- {
- wxT("Left"),
- wxT("Center horizontally"),
- wxT("Right"),
- wxT("Top"),
- wxT("Center vertically"),
- wxT("Bottom"),
- wxT("Center")
- };
-
- wxAlignment flags[] =
- {
- wxALIGN_LEFT,
- wxALIGN_CENTER_HORIZONTAL,
- wxALIGN_RIGHT,
- wxALIGN_TOP,
- wxALIGN_CENTER_VERTICAL,
- wxALIGN_BOTTOM,
- wxALIGN_CENTER
- };
-
- int n = WXSIZEOF(choices);
- if (onlyHorizontal)
- n = 3; // show only the first three choices
-
- int choice = wxGetSingleChoiceIndex(
- msg + wxT("\nNOTE: _all_ non-selected column's alignment will be reset to wxALIGN_LEFT!"),
- wxT("Alignment"),
- n, choices,
- this);
-
- if (choice == wxNOT_FOUND)
- return wxALIGN_LEFT;
-
- return flags[choice];
-}
-
-void MyFrame::SetFlag(const wxArrayInt &idx, int toadd)
-{
- for (size_t i=0; i<dataview_left->GetColumnCount(); i++)
- {
- int current = dataview_left->GetColumn(i)->GetFlags();
-
- if (idx.Index(i) != wxNOT_FOUND)
- dataview_left->GetColumn(i)->SetFlags(current | toadd);
- else
- dataview_left->GetColumn(i)->SetFlags(current & ~toadd);
- }
-}
-
-wxArrayInt MyFrame::GetFlaggedColumns(int flag)
-{
- wxArrayInt ret;
- for (size_t i=0; i<dataview_left->GetColumnCount(); i++)
- if (dataview_left->GetColumn(i)->GetFlags() & flag)
- ret.Add(i);
- return ret;
-}
-
-void MyFrame::SetAlignment(const wxArrayInt &idx, bool header, wxAlignment align)
-{
- // set to DEFAULT_ALIGN all columns except those
- // contained in 'idx' which are set to 'align'
-
- for (size_t i=0; i<dataview_left->GetColumnCount(); i++)
- {
- wxAlignment toset = DEFAULT_ALIGN;
- if (idx.Index(i) != wxNOT_FOUND)
- toset = align;
-
- if (header)
- dataview_left->GetColumn(i)->SetAlignment(toset);
- else
- dataview_left->GetColumn(i)->GetRenderer()->SetAlignment(toset);
- }
-}
-
-void MyFrame::SetWidth(const wxArrayInt &idx, bool minwidth, int width)
-{
- // set to wxDVC_DEFAULT_WIDTH wide all columns except those
- // contained in 'idx' which are set to 'width'
-
- for (size_t i=0; i<dataview_left->GetColumnCount(); i++)
- {
- int toset = minwidth ? wxDVC_DEFAULT_MINWIDTH : wxDVC_DEFAULT_WIDTH;
- if (idx.Index(i) != wxNOT_FOUND)
- toset = width;
-
- if (minwidth)
- dataview_left->GetColumn(i)->SetMinWidth(toset);
- else
- dataview_left->GetColumn(i)->SetWidth(toset);
- }
-}
-
-
-// -------------------------------------
-// MySortingFrame
-// -------------------------------------
-
-BEGIN_EVENT_TABLE(MySortingFrame,wxFrame)
- EVT_BUTTON( ID_APPEND_ROW_LEFT, MySortingFrame::OnAppendRowLeft )
- EVT_BUTTON( ID_PREPEND_ROW_LEFT, MySortingFrame::OnPrependRowLeft )
- EVT_BUTTON( ID_INSERT_ROW_LEFT, MySortingFrame::OnInsertRowLeft )
- EVT_BUTTON( ID_DELETE_ROW_LEFT, MySortingFrame::OnDeleteRowLeft )
- EVT_BUTTON( ID_SELECT, MySortingFrame::OnSelect )
- EVT_BUTTON( ID_UNSELECT_ALL, MySortingFrame::OnUnselectAll )
- EVT_DATAVIEW_ROW_SELECTED( ID_SORTED, MySortingFrame::OnSelectedSorted )
- EVT_DATAVIEW_ROW_SELECTED( ID_UNSORTED, MySortingFrame::OnSelectedUnsorted )
- EVT_DATAVIEW_ROW_ACTIVATED( ID_UNSORTED, MySortingFrame::OnActivatedUnsorted )
- EVT_DATAVIEW_COLUMN_HEADER_CLICK( ID_SORTED, MySortingFrame::OnHeaderClickSorted )
- EVT_DATAVIEW_COLUMN_HEADER_CLICK( ID_UNSORTED, MySortingFrame::OnHeaderClickUnsorted )
-END_EVENT_TABLE()
-
-MySortingFrame::MySortingFrame(wxFrame *frame, wxChar *title, int x, int y, int w, int h):
- wxFrame(frame, wxID_ANY, title, wxPoint(x, y), wxSize(w, h))
-{
- m_logOld = NULL;