]> git.saurik.com Git - wxWidgets.git/commitdiff
Better support for flat lists in wxTreeListCtrl.
authorVadim Zeitlin <vadim@wxwidgets.org>
Tue, 30 Aug 2011 13:40:44 +0000 (13:40 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Tue, 30 Aug 2011 13:40:44 +0000 (13:40 +0000)
Override wxDataViewModel::IsListModel() to return true if wxTreeListCtrl
doesn't have any depth. This results in better display when using the generic
implementation of wxDataViewCtrl as no space is reserved for the (unnecessary)
expanders in this case.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68961 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

samples/treelist/treelist.cpp
src/generic/treelist.cpp

index 4ee77cc33d1f7f8eda5bfd91b60f9aab827a7241..13894529afed999003fcfaf152a2b8c6ea3f05fa 100644 (file)
@@ -56,6 +56,7 @@
 enum
 {
     Id_MultiSelect = 100,
+    Id_FlatList,
 
     Id_Checkboxes_Start,
     Id_NoCheckboxes = Id_Checkboxes_Start,
@@ -94,6 +95,7 @@ public:
 private:
     // Event handlers for the menu and wxTreeListCtrl events.
     void OnMultiSelect(wxCommandEvent& event);
+    void OnFlatList(wxCommandEvent& event);
     void OnCheckboxes(wxCommandEvent& event);
     void OnDumpSelection(wxCommandEvent& event);
     void OnCheckHTMLDocs(wxCommandEvent& event);
@@ -142,6 +144,8 @@ private:
 
     wxLog* m_oldLogTarget;
 
+    bool m_isFlat;
+
     wxDECLARE_EVENT_TABLE();
 };
 
@@ -171,6 +175,7 @@ bool MyApp::OnInit()
 
 BEGIN_EVENT_TABLE(MyFrame, wxFrame)
     EVT_MENU(Id_MultiSelect, MyFrame::OnMultiSelect)
+    EVT_MENU(Id_FlatList, MyFrame::OnFlatList)
     EVT_MENU_RANGE(Id_Checkboxes_Start, Id_Checkboxes_End,
                    MyFrame::OnCheckboxes)
 
@@ -194,6 +199,8 @@ MyFrame::MyFrame()
        : wxFrame(NULL, wxID_ANY, "wxWidgets tree/list control sample",
                  wxDefaultPosition, wxSize(600, 450))
 {
+    m_isFlat = false;
+
     // Create menus and status bar.
     SetIcon(wxICON(sample));
 
@@ -211,6 +218,8 @@ MyFrame::MyFrame()
                                "&3-state checkboxes\tCtrl-3");
     treeStyle->AppendRadioItem(Id_CheckboxesUser3State,
                                "&User-settable 3-state checkboxes\tCtrl-4");
+    treeStyle->AppendSeparator();
+    treeStyle->AppendCheckItem(Id_FlatList, "&Flat list");
 
     wxMenu* treeOper = new wxMenu;
     treeOper->Append(Id_DumpSelection, "&Dump selection\tCtrl-D");
@@ -312,7 +321,8 @@ wxTreeListCtrl* MyFrame::CreateTreeListCtrl(long style)
 
     // Define a shortcut to save on typing here.
     #define ADD_ITEM(item, parent, files, size) \
-        wxTreeListItem item = tree->AppendItem(parent, #item, \
+        wxTreeListItem item = tree->AppendItem(m_isFlat ? root : parent, \
+                                               #item, \
                                                Icon_FolderClosed, \
                                                Icon_FolderOpened); \
         tree->SetItemText(item, Col_Files, files); \
@@ -367,6 +377,13 @@ void MyFrame::OnMultiSelect(wxCommandEvent& event)
     RecreateTreeListCtrl(style);
 }
 
+void MyFrame::OnFlatList(wxCommandEvent& event)
+{
+    m_isFlat = event.IsChecked();
+
+    RecreateTreeListCtrl(m_treelist->GetWindowStyle());
+}
+
 void MyFrame::OnCheckboxes(wxCommandEvent& event)
 {
     long style = m_treelist->GetWindowStyle();
index 21a490552984549119c0fa5730009fa0de0c2922..123a49836591b3bba636aa5a67948470d607740c 100644 (file)
@@ -342,6 +342,7 @@ public:
     virtual bool HasContainerColumns(const wxDataViewItem& item) const;
     virtual unsigned GetChildren(const wxDataViewItem& item,
                                  wxDataViewItemArray& children) const;
+    virtual bool IsListModel() const { return m_isFlat; }
 
 private:
     // The control we're associated with.
@@ -352,6 +353,11 @@ private:
 
     // Number of columns we maintain.
     unsigned m_numColumns;
+
+    // Set to false as soon as we have more than one level, i.e. as soon as any
+    // items with non-root item as parent are added (and currently never reset
+    // after this).
+    bool m_isFlat;
 };
 
 // ============================================================================
@@ -554,6 +560,7 @@ wxTreeListModel::wxTreeListModel(wxTreeListCtrl* treelist)
       m_root(new Node(NULL))
 {
     m_numColumns = 0;
+    m_isFlat = true;
 }
 
 wxTreeListModel::~wxTreeListModel()
@@ -590,6 +597,12 @@ wxTreeListModel::InsertItem(Node* parent,
     wxCHECK_MSG( previous, NULL,
                  "Must have a valid previous item (maybe wxTLI_FIRST/LAST?)" );
 
+    if ( m_isFlat && parent != m_root )
+    {
+        // Not flat any more, this is a second level child.
+        m_isFlat = false;
+    }
+
     wxScopedPtr<Node>
         newItem(new Node(parent, text, imageClosed, imageOpened, data));