From f08d476edba1c2a9c3205ca5027e8c19828eedb3 Mon Sep 17 00:00:00 2001 From: Steven Janzou Date: Tue, 8 Jul 2025 04:01:17 -0600 Subject: [PATCH 1/3] Update wxMetroDataViewTreeCtrl to handle notes icon for SAM issue 1552 --- include/wex/metro.h | 7 ++++--- src/metro.cpp | 15 +++++++++------ 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/include/wex/metro.h b/include/wex/metro.h index 9f95e37d..0ed0637e 100644 --- a/include/wex/metro.h +++ b/include/wex/metro.h @@ -589,7 +589,7 @@ class wxMetroDataViewTreeStore : public wxDataViewModel }; -class wxMetroDataViewTreeCtrl : public wxDataViewCtrl +class wxMetroDataViewTreeCtrl : public wxDataViewTreeCtrl { public: wxMetroDataViewTreeCtrl() { } @@ -609,7 +609,7 @@ class wxMetroDataViewTreeCtrl : public wxDataViewCtrl const wxSize& size = wxDefaultSize, long style = wxDV_NO_HEADER, const wxValidator& validator = wxDefaultValidator); - + /* wxMetroDataViewTreeStore* GetStore() { return (wxMetroDataViewTreeStore*)GetModel(); @@ -672,10 +672,11 @@ class wxMetroDataViewTreeCtrl : public wxDataViewCtrl void OnExpanded(wxDataViewEvent& event); void OnCollapsed(wxDataViewEvent& event); void OnSize(wxSizeEvent& event); - + */ private: wxDECLARE_EVENT_TABLE(); wxDECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxMetroDataViewTreeCtrl); + }; diff --git a/src/metro.cpp b/src/metro.cpp index 68153990..bb7066cb 100644 --- a/src/metro.cpp +++ b/src/metro.cpp @@ -2119,9 +2119,9 @@ wxMetroDataViewTreeStoreContainerNode* wxMetroDataViewTreeStore::FindContainerNo // wxMetroDataViewTreeCtrl //----------------------------------------------------------------------------- -wxIMPLEMENT_DYNAMIC_CLASS(wxMetroDataViewTreeCtrl, wxDataViewCtrl); +wxIMPLEMENT_DYNAMIC_CLASS(wxMetroDataViewTreeCtrl, wxDataViewTreeCtrl); -wxBEGIN_EVENT_TABLE(wxMetroDataViewTreeCtrl, wxDataViewCtrl) +wxBEGIN_EVENT_TABLE(wxMetroDataViewTreeCtrl, wxDataViewTreeCtrl) EVT_DATAVIEW_ITEM_EXPANDED(-1, wxMetroDataViewTreeCtrl::OnExpanded) EVT_DATAVIEW_ITEM_COLLAPSED(-1, wxMetroDataViewTreeCtrl::OnCollapsed) EVT_SIZE(wxMetroDataViewTreeCtrl::OnSize) @@ -2130,19 +2130,19 @@ wxEND_EVENT_TABLE() bool wxMetroDataViewTreeCtrl::Create(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxValidator& validator) { - if (!wxDataViewCtrl::Create(parent, id, pos, size, style, validator)) + if (!wxDataViewTreeCtrl::Create(parent, id, pos, size, style, validator)) return false; SetBackgroundStyle(wxBG_STYLE_CUSTOM); SetBackgroundColour(*wxWHITE); SetFont(wxMetroTheme::Font(wxMT_LIGHT, 15)); - + /* // create the standard model and a column in the tree wxMetroDataViewTreeStore* store = new wxMetroDataViewTreeStore; AssociateModel(store); store->DecRef(); - AppendTextColumn + AppendIconTextColumn ( wxString(), // no label (header is not shown anyhow) 0, // the only model column @@ -2151,10 +2151,12 @@ bool wxMetroDataViewTreeCtrl::Create(wxWindow* parent, wxWindowID id, wxALIGN_NOT, // and alignment 0 // not resizable ); - + */ return true; } + +/* wxDataViewItem wxMetroDataViewTreeCtrl::AppendItem(const wxDataViewItem& parent, const wxString& text, wxClientData* data) { @@ -2298,3 +2300,4 @@ void wxMetroDataViewTreeCtrl::OnSize(wxSizeEvent& event) #endif event.Skip(true); } +*/ \ No newline at end of file From cdead9434403a394fac08e4f41b2c2b265449a55 Mon Sep 17 00:00:00 2001 From: Steven Janzou Date: Wed, 9 Jul 2025 04:38:14 -0600 Subject: [PATCH 2/3] Make wxMetroDataViewTreeCtrl not editable - SAM issue #1552 --- include/wex/metro.h | 6 ++++++ src/metro.cpp | 6 ++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/include/wex/metro.h b/include/wex/metro.h index 0ed0637e..5ff0480a 100644 --- a/include/wex/metro.h +++ b/include/wex/metro.h @@ -609,6 +609,12 @@ class wxMetroDataViewTreeCtrl : public wxDataViewTreeCtrl const wxSize& size = wxDefaultSize, long style = wxDV_NO_HEADER, const wxValidator& validator = wxDefaultValidator); + + void OnItemStartEditing(wxDataViewEvent& event) + { + // prevent editing + event.Veto(); + } /* wxMetroDataViewTreeStore* GetStore() { diff --git a/src/metro.cpp b/src/metro.cpp index bb7066cb..2da4fbdf 100644 --- a/src/metro.cpp +++ b/src/metro.cpp @@ -2122,9 +2122,11 @@ wxMetroDataViewTreeStoreContainerNode* wxMetroDataViewTreeStore::FindContainerNo wxIMPLEMENT_DYNAMIC_CLASS(wxMetroDataViewTreeCtrl, wxDataViewTreeCtrl); wxBEGIN_EVENT_TABLE(wxMetroDataViewTreeCtrl, wxDataViewTreeCtrl) -EVT_DATAVIEW_ITEM_EXPANDED(-1, wxMetroDataViewTreeCtrl::OnExpanded) -EVT_DATAVIEW_ITEM_COLLAPSED(-1, wxMetroDataViewTreeCtrl::OnCollapsed) +EVT_DATAVIEW_ITEM_EXPANDED(wxID_ANY, wxMetroDataViewTreeCtrl::OnExpanded) +EVT_DATAVIEW_ITEM_COLLAPSED(wxID_ANY, wxMetroDataViewTreeCtrl::OnCollapsed) EVT_SIZE(wxMetroDataViewTreeCtrl::OnSize) +EVT_DATAVIEW_ITEM_START_EDITING(wxID_ANY, wxMetroDataViewTreeCtrl::OnItemStartEditing) + wxEND_EVENT_TABLE() bool wxMetroDataViewTreeCtrl::Create(wxWindow* parent, wxWindowID id, From ead8fc851a2e14b5b44796da8959c9d436e9d221 Mon Sep 17 00:00:00 2001 From: Steven Janzou Date: Fri, 11 Jul 2025 05:11:19 -0600 Subject: [PATCH 3/3] Update wxMetroDataViewTeeCtrl and address SAM issue 1552 --- include/wex/metro.h | 230 ------------------ src/metro.cpp | 551 -------------------------------------------- 2 files changed, 781 deletions(-) diff --git a/include/wex/metro.h b/include/wex/metro.h index 5ff0480a..1ce3a6c4 100644 --- a/include/wex/metro.h +++ b/include/wex/metro.h @@ -425,170 +425,6 @@ class wxMetroListBox : public wxScrolledWindow { DECLARE_EVENT_TABLE(); }; -//-------------------------------------------------------------------- -class wxMetroDataViewTreeStoreNode -{ -public: - wxMetroDataViewTreeStoreNode(wxMetroDataViewTreeStoreNode* parent, - const wxString& text, - wxClientData* data = NULL); - virtual ~wxMetroDataViewTreeStoreNode(); - - void SetText(const wxString& text) - { - m_text = text; - } - wxString GetText() const - { - return m_text; - } - void SetData(wxClientData* data) - { - delete m_data; m_data = data; - } - wxClientData* GetData() const - { - return m_data; - } - - wxDataViewItem GetItem() const - { - return wxDataViewItem(const_cast(static_cast(this))); - } - - virtual bool IsContainer() - { - return false; - } - - wxMetroDataViewTreeStoreNode* GetParent() - { - return m_parent; - } - -private: - wxMetroDataViewTreeStoreNode* m_parent; - wxString m_text; - wxClientData* m_data; -}; - -typedef wxVector wxMetroDataViewTreeStoreNodes; - -class wxMetroDataViewTreeStoreContainerNode : public wxMetroDataViewTreeStoreNode -{ -public: - wxMetroDataViewTreeStoreContainerNode(wxMetroDataViewTreeStoreNode* parent, - const wxString& text, - wxClientData* data = NULL); - virtual ~wxMetroDataViewTreeStoreContainerNode(); - - const wxMetroDataViewTreeStoreNodes& GetChildren() const - { - return m_children; - } - wxMetroDataViewTreeStoreNodes& GetChildren() - { - return m_children; - } - - wxMetroDataViewTreeStoreNodes::iterator FindChild(wxMetroDataViewTreeStoreNode* node); - - void SetExpanded(bool expanded = true) - { - m_isExpanded = expanded; - } - bool IsExpanded() const - { - return m_isExpanded; - } - - virtual bool IsContainer() override - { - return true; - } - - void DestroyChildren(); - -private: - wxMetroDataViewTreeStoreNodes m_children; - bool m_isExpanded; -}; - -//----------------------------------------------------------------------------- - -class wxMetroDataViewTreeStore : public wxDataViewModel -{ -public: - wxMetroDataViewTreeStore(); - ~wxMetroDataViewTreeStore(); - - wxDataViewItem AppendItem(const wxDataViewItem& parent, - const wxString& text, - wxClientData* data = NULL); - wxDataViewItem PrependItem(const wxDataViewItem& parent, - const wxString& text, - wxClientData* data = NULL); - wxDataViewItem InsertItem(const wxDataViewItem& parent, const wxDataViewItem& previous, - const wxString& text, - wxClientData* data = NULL); - - wxDataViewItem PrependContainer(const wxDataViewItem& parent, - const wxString& text, - wxClientData* data = NULL); - wxDataViewItem AppendContainer(const wxDataViewItem& parent, - const wxString& text, - wxClientData* data = NULL); - wxDataViewItem InsertContainer(const wxDataViewItem& parent, const wxDataViewItem& previous, - const wxString& text, - wxClientData* data = NULL); - - wxDataViewItem GetNthChild(const wxDataViewItem& parent, unsigned int pos) const; - int GetChildCount(const wxDataViewItem& parent) const; - - void SetItemText(const wxDataViewItem& item, const wxString& text); - wxString GetItemText(const wxDataViewItem& item) const; - void SetItemData(const wxDataViewItem& item, wxClientData* data); - wxClientData* GetItemData(const wxDataViewItem& item) const; - - void DeleteItem(const wxDataViewItem& item); - void DeleteChildren(const wxDataViewItem& item); - void DeleteAllItems(); - - // implement base methods - - virtual void GetValue(wxVariant& variant, - const wxDataViewItem& item, unsigned int col) const override; - virtual bool SetValue(const wxVariant& variant, - const wxDataViewItem& item, unsigned int col) override; - virtual wxDataViewItem GetParent(const wxDataViewItem& item) const override; - virtual bool IsContainer(const wxDataViewItem& item) const override; - virtual unsigned int GetChildren(const wxDataViewItem& item, wxDataViewItemArray& children) const override; - - virtual int Compare(const wxDataViewItem& item1, const wxDataViewItem& item2, - unsigned int column, bool ascending) const override; - - // virtual bool HasContainerColumns(const wxDataViewItem& item) const override; - // virtual bool IsEnabled(const wxDataViewItem& item, unsigned int col) const override; - - - virtual bool HasDefaultCompare() const override - { - return true; - } - - virtual unsigned int GetColumnCount() const override { return 1; } - virtual wxString GetColumnType(unsigned int) const override { return wxString(); } - - - wxMetroDataViewTreeStoreNode* FindNode(const wxDataViewItem& item) const; - wxMetroDataViewTreeStoreContainerNode* FindContainerNode(const wxDataViewItem& item) const; - wxMetroDataViewTreeStoreNode* GetRoot() const { return m_root; } - -public: - wxMetroDataViewTreeStoreNode* m_root; -}; - - class wxMetroDataViewTreeCtrl : public wxDataViewTreeCtrl { public: @@ -615,70 +451,6 @@ class wxMetroDataViewTreeCtrl : public wxDataViewTreeCtrl // prevent editing event.Veto(); } - /* - wxMetroDataViewTreeStore* GetStore() - { - return (wxMetroDataViewTreeStore*)GetModel(); - } - const wxMetroDataViewTreeStore* GetStore() const - { - return (const wxMetroDataViewTreeStore*)GetModel(); - } - - bool IsContainer(const wxDataViewItem& item) const - { - return GetStore()->IsContainer(item); - } - - wxDataViewItem AppendItem(const wxDataViewItem& parent, - const wxString& text, wxClientData* data = NULL); - wxDataViewItem PrependItem(const wxDataViewItem& parent, - const wxString& text, wxClientData* data = NULL); - wxDataViewItem InsertItem(const wxDataViewItem& parent, const wxDataViewItem& previous, - const wxString& text, wxClientData* data = NULL); - - wxDataViewItem PrependContainer(const wxDataViewItem& parent, - const wxString& text, wxClientData* data = NULL); - wxDataViewItem AppendContainer(const wxDataViewItem& parent, - const wxString& text, wxClientData* data = NULL); - wxDataViewItem InsertContainer(const wxDataViewItem& parent, const wxDataViewItem& previous, - const wxString& text, wxClientData* data = NULL); - - wxDataViewItem GetNthChild(const wxDataViewItem& parent, unsigned int pos) const - { - return GetStore()->GetNthChild(parent, pos); - } - int GetChildCount(const wxDataViewItem& parent) const - { - return GetStore()->GetChildCount(parent); - } - wxDataViewItem GetItemParent(wxDataViewItem item) const - { - return GetStore()->GetParent(item); - } - - void SetItemText(const wxDataViewItem& item, const wxString& text); - wxString GetItemText(const wxDataViewItem& item) const - { - return GetStore()->GetItemText(item); - } - void SetItemData(const wxDataViewItem& item, wxClientData* data) - { - GetStore()->SetItemData(item, data); - } - wxClientData* GetItemData(const wxDataViewItem& item) const - { - return GetStore()->GetItemData(item); - } - - void DeleteItem(const wxDataViewItem& item); - void DeleteChildren(const wxDataViewItem& item); - void DeleteAllItems(); - - void OnExpanded(wxDataViewEvent& event); - void OnCollapsed(wxDataViewEvent& event); - void OnSize(wxSizeEvent& event); - */ private: wxDECLARE_EVENT_TABLE(); wxDECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxMetroDataViewTreeCtrl); @@ -686,8 +458,6 @@ class wxMetroDataViewTreeCtrl : public wxDataViewTreeCtrl }; - - class wxMetroPopupMenu { public: wxMetroPopupMenu(long theme = 0 /* can be wxMT_LIGHTTHEME */); diff --git a/src/metro.cpp b/src/metro.cpp index 2da4fbdf..e53204fd 100644 --- a/src/metro.cpp +++ b/src/metro.cpp @@ -1724,396 +1724,6 @@ void wxMetroPopupMenu::Popup(wxWindow *parent, const wxPoint &pos, int origin) { menu->Popup(pos, origin); } -//------------------------------------------------------------------------------------ -wxMetroDataViewTreeStoreNode::wxMetroDataViewTreeStoreNode( - wxMetroDataViewTreeStoreNode* parent, - const wxString& text, wxClientData* data) - : m_text(text) -{ - m_parent = parent; - m_data = data; -} - -wxMetroDataViewTreeStoreNode::~wxMetroDataViewTreeStoreNode() -{ - delete m_data; -} - -wxMetroDataViewTreeStoreContainerNode::wxMetroDataViewTreeStoreContainerNode( - wxMetroDataViewTreeStoreNode* parent, const wxString& text, wxClientData* data) - : wxMetroDataViewTreeStoreNode(parent, text, data) -{ - m_isExpanded = false; -} - -wxMetroDataViewTreeStoreContainerNode::~wxMetroDataViewTreeStoreContainerNode() -{ - DestroyChildren(); -} - -wxMetroDataViewTreeStoreNodes::iterator -wxMetroDataViewTreeStoreContainerNode::FindChild(wxMetroDataViewTreeStoreNode* node) -{ - wxMetroDataViewTreeStoreNodes::iterator iter; - for (iter = m_children.begin(); iter != m_children.end(); ++iter) - { - if (*iter == node) - break; - } - - return iter; -} - -void wxMetroDataViewTreeStoreContainerNode::DestroyChildren() -{ - wxMetroDataViewTreeStoreNodes::const_iterator iter; - for (iter = m_children.begin(); iter != m_children.end(); ++iter) - { - delete* iter; - } - - m_children.clear(); -} - -//----------------------------------------------------------------------------- - -wxMetroDataViewTreeStore::wxMetroDataViewTreeStore() -{ - m_root = new wxMetroDataViewTreeStoreContainerNode(NULL, wxEmptyString); -} - -wxMetroDataViewTreeStore::~wxMetroDataViewTreeStore() -{ - delete m_root; -} - -wxDataViewItem wxMetroDataViewTreeStore::AppendItem(const wxDataViewItem& parent, - const wxString& text, wxClientData* data) -{ - wxMetroDataViewTreeStoreContainerNode* parent_node = FindContainerNode(parent); - if (!parent_node) return wxDataViewItem(0); - - wxMetroDataViewTreeStoreNode* node = - new wxMetroDataViewTreeStoreNode(parent_node, text, data); - parent_node->GetChildren().push_back(node); - - return node->GetItem(); -} - -wxDataViewItem wxMetroDataViewTreeStore::PrependItem(const wxDataViewItem& parent, - const wxString& text, wxClientData* data) -{ - wxMetroDataViewTreeStoreContainerNode* parent_node = FindContainerNode(parent); - if (!parent_node) return wxDataViewItem(0); - - wxMetroDataViewTreeStoreNode* node = - new wxMetroDataViewTreeStoreNode(parent_node, text, data); - wxMetroDataViewTreeStoreNodes& children = parent_node->GetChildren(); - children.insert(children.begin(), node); - - return node->GetItem(); -} - -wxDataViewItem -wxMetroDataViewTreeStore::InsertItem(const wxDataViewItem& parent, - const wxDataViewItem& previous, - const wxString& text, - wxClientData* data) -{ - wxMetroDataViewTreeStoreContainerNode* parent_node = FindContainerNode(parent); - if (!parent_node) return wxDataViewItem(0); - - wxMetroDataViewTreeStoreNode* previous_node = FindNode(previous); - wxMetroDataViewTreeStoreNodes& children = parent_node->GetChildren(); - const wxMetroDataViewTreeStoreNodes::iterator iter = parent_node->FindChild(previous_node); - if (iter == children.end()) return wxDataViewItem(0); - - wxMetroDataViewTreeStoreNode* node = - new wxMetroDataViewTreeStoreNode(parent_node, text, data); - children.insert(iter, node); - - return node->GetItem(); -} - -wxDataViewItem wxMetroDataViewTreeStore::PrependContainer(const wxDataViewItem& parent, - const wxString& text, wxClientData* data) -{ - wxMetroDataViewTreeStoreContainerNode* parent_node = FindContainerNode(parent); - if (!parent_node) return wxDataViewItem(0); - - wxMetroDataViewTreeStoreContainerNode* node = - new wxMetroDataViewTreeStoreContainerNode(parent_node, text, data); - wxMetroDataViewTreeStoreNodes& children = parent_node->GetChildren(); - children.insert(children.begin(), node); - - return node->GetItem(); -} - -wxDataViewItem -wxMetroDataViewTreeStore::AppendContainer(const wxDataViewItem& parent, - const wxString& text, - wxClientData* data) -{ - wxMetroDataViewTreeStoreContainerNode* parent_node = FindContainerNode(parent); - if (!parent_node) return wxDataViewItem(0); - - wxMetroDataViewTreeStoreContainerNode* node = - new wxMetroDataViewTreeStoreContainerNode(parent_node, text, data); - parent_node->GetChildren().push_back(node); - - return node->GetItem(); -} - -wxDataViewItem -wxMetroDataViewTreeStore::InsertContainer(const wxDataViewItem& parent, - const wxDataViewItem& previous, - const wxString& text, - wxClientData* data) -{ - wxMetroDataViewTreeStoreContainerNode* parent_node = FindContainerNode(parent); - if (!parent_node) return wxDataViewItem(0); - - wxMetroDataViewTreeStoreNode* previous_node = FindNode(previous); - wxMetroDataViewTreeStoreNodes& children = parent_node->GetChildren(); - const wxMetroDataViewTreeStoreNodes::iterator iter = parent_node->FindChild(previous_node); - if (iter == children.end()) return wxDataViewItem(0); - - wxMetroDataViewTreeStoreContainerNode* node = - new wxMetroDataViewTreeStoreContainerNode(parent_node, text, data); - children.insert(iter, node); - - return node->GetItem(); -} - -bool wxMetroDataViewTreeStore::IsContainer(const wxDataViewItem& item) const -{ - wxMetroDataViewTreeStoreNode* node = FindNode(item); - if (!node) return false; - - return node->IsContainer(); -} -/* -bool wxMetroDataViewTreeStore::HasContainerColumns(const wxDataViewItem& item) const -{ - if (IsContainer(item)) - return true; - else - return false; -} - -bool wxMetroDataViewTreeStore::IsEnabled(const wxDataViewItem& item, unsigned int col) const -{ - if (IsContainer(item)) - return false; - else - return true; - -} -*/ - -wxDataViewItem wxMetroDataViewTreeStore::GetNthChild(const wxDataViewItem& parent, unsigned int pos) const -{ - wxMetroDataViewTreeStoreContainerNode* parent_node = FindContainerNode(parent); - if (!parent_node) return wxDataViewItem(0); - - wxMetroDataViewTreeStoreNode* const node = parent_node->GetChildren()[pos]; - if (node) - return node->GetItem(); - - return wxDataViewItem(0); -} - -int wxMetroDataViewTreeStore::GetChildCount(const wxDataViewItem& parent) const -{ - wxMetroDataViewTreeStoreNode* node = FindNode(parent); - if (!node) return -1; - - if (!node->IsContainer()) - return 0; - - wxMetroDataViewTreeStoreContainerNode* container_node = (wxMetroDataViewTreeStoreContainerNode*)node; - return (int)container_node->GetChildren().size(); -} - -void wxMetroDataViewTreeStore::SetItemText(const wxDataViewItem& item, const wxString& text) -{ - wxMetroDataViewTreeStoreNode* node = FindNode(item); - if (!node) return; - - node->SetText(text); -} - -wxString wxMetroDataViewTreeStore::GetItemText(const wxDataViewItem& item) const -{ - wxMetroDataViewTreeStoreNode* node = FindNode(item); - if (!node) return wxEmptyString; - - return node->GetText(); -} - -void wxMetroDataViewTreeStore::SetItemData(const wxDataViewItem& item, wxClientData* data) -{ - wxMetroDataViewTreeStoreNode* node = FindNode(item); - if (!node) return; - - node->SetData(data); -} - -wxClientData* wxMetroDataViewTreeStore::GetItemData(const wxDataViewItem& item) const -{ - wxMetroDataViewTreeStoreNode* node = FindNode(item); - if (!node) return NULL; - - return node->GetData(); -} - -void wxMetroDataViewTreeStore::DeleteItem(const wxDataViewItem& item) -{ - if (!item.IsOk()) return; - - wxDataViewItem parent_item = GetParent(item); - - wxMetroDataViewTreeStoreContainerNode* parent_node = FindContainerNode(parent_item); - if (!parent_node) return; - - const wxMetroDataViewTreeStoreNodes::iterator - iter = parent_node->FindChild(FindNode(item)); - if (iter != parent_node->GetChildren().end()) - { - delete* iter; - parent_node->GetChildren().erase(iter); - } -} - -void wxMetroDataViewTreeStore::DeleteChildren(const wxDataViewItem& item) -{ - wxMetroDataViewTreeStoreContainerNode* node = FindContainerNode(item); - if (!node) return; - - node->DestroyChildren(); -} - -void wxMetroDataViewTreeStore::DeleteAllItems() -{ - DeleteChildren(wxDataViewItem(m_root)); -} - -void -wxMetroDataViewTreeStore::GetValue(wxVariant& variant, - const wxDataViewItem& item, - unsigned int WXUNUSED(col)) const -{ - // if (col != 0) return; - - wxMetroDataViewTreeStoreNode* node = FindNode(item); - if (!node) return; - - variant = node->GetText(); -} - -bool -wxMetroDataViewTreeStore::SetValue(const wxVariant& variant, - const wxDataViewItem& item, - unsigned int WXUNUSED(col)) -{ - // if (col != 0) return false; - - wxMetroDataViewTreeStoreNode* node = FindNode(item); - if (!node) return false; - - wxDataViewIconText data; - - data << variant; - - node->SetText(data.GetText()); - - return true; -} - -wxDataViewItem wxMetroDataViewTreeStore::GetParent(const wxDataViewItem& item) const -{ - wxMetroDataViewTreeStoreNode* node = FindNode(item); - if (!node) return wxDataViewItem(0); - - wxMetroDataViewTreeStoreNode* parent = node->GetParent(); - if (!parent) return wxDataViewItem(0); - - if (parent == m_root) - return wxDataViewItem(0); - - return parent->GetItem(); -} - -unsigned int wxMetroDataViewTreeStore::GetChildren(const wxDataViewItem& item, wxDataViewItemArray& children) const -{ - wxMetroDataViewTreeStoreContainerNode* node = FindContainerNode(item); - if (!node) return 0; - - wxMetroDataViewTreeStoreNodes::iterator iter; - for (iter = node->GetChildren().begin(); iter != node->GetChildren().end(); ++iter) - { - wxMetroDataViewTreeStoreNode* child = *iter; - children.Add(child->GetItem()); - } - - return node->GetChildren().size(); -} - -int wxMetroDataViewTreeStore::Compare(const wxDataViewItem& item1, const wxDataViewItem& item2, - unsigned int WXUNUSED(column), bool WXUNUSED(ascending)) const -{ - wxMetroDataViewTreeStoreNode* node1 = FindNode(item1); - wxMetroDataViewTreeStoreNode* node2 = FindNode(item2); - - if (!node1 || !node2 || (node1 == node2)) - return 0; - - wxMetroDataViewTreeStoreContainerNode* const parent = - (wxMetroDataViewTreeStoreContainerNode*)node1->GetParent(); - - wxCHECK_MSG(node2->GetParent() == parent, 0, - wxS("Comparing items with different parent.")); -/* - if (node1->IsContainer() && !node2->IsContainer()) - return -1; - - if (node2->IsContainer() && !node1->IsContainer()) - return 1; -*/ - wxMetroDataViewTreeStoreNodes::const_iterator iter; - for (iter = parent->GetChildren().begin(); iter != parent->GetChildren().end(); ++iter) - { - if (*iter == node1) - return -1; - - if (*iter == node2) - return 1; - } - - wxFAIL_MSG(wxS("Unreachable")); - return 0; -} - -wxMetroDataViewTreeStoreNode* wxMetroDataViewTreeStore::FindNode(const wxDataViewItem& item) const -{ - if (!item.IsOk()) - return m_root; - - return (wxMetroDataViewTreeStoreNode*)item.GetID(); -} - -wxMetroDataViewTreeStoreContainerNode* wxMetroDataViewTreeStore::FindContainerNode(const wxDataViewItem& item) const -{ - if (!item.IsOk()) - return (wxMetroDataViewTreeStoreContainerNode*)m_root; - - wxMetroDataViewTreeStoreNode* node = (wxMetroDataViewTreeStoreNode*)item.GetID(); - - if (!node->IsContainer()) - return NULL; - - return (wxMetroDataViewTreeStoreContainerNode*)node; -} //----------------------------------------------------------------------------- // wxMetroDataViewTreeCtrl @@ -2138,168 +1748,7 @@ bool wxMetroDataViewTreeCtrl::Create(wxWindow* parent, wxWindowID id, SetBackgroundStyle(wxBG_STYLE_CUSTOM); SetBackgroundColour(*wxWHITE); SetFont(wxMetroTheme::Font(wxMT_LIGHT, 15)); - /* - // create the standard model and a column in the tree - wxMetroDataViewTreeStore* store = new wxMetroDataViewTreeStore; - AssociateModel(store); - store->DecRef(); - - AppendIconTextColumn - ( - wxString(), // no label (header is not shown anyhow) - 0, // the only model column - wxDATAVIEW_CELL_INERT, - -1, // default width - wxALIGN_NOT, // and alignment - 0 // not resizable - ); - */ return true; } -/* -wxDataViewItem wxMetroDataViewTreeCtrl::AppendItem(const wxDataViewItem& parent, - const wxString& text, wxClientData* data) -{ - wxDataViewItem res = GetStore()-> - AppendItem(parent, text, data); - - GetStore()->ItemAdded(parent, res); - - return res; -} - -wxDataViewItem wxMetroDataViewTreeCtrl::PrependItem(const wxDataViewItem& parent, - const wxString& text, wxClientData* data) -{ - wxDataViewItem res = GetStore()-> - PrependItem(parent, text, data); - - GetStore()->ItemAdded(parent, res); - - return res; -} - -wxDataViewItem wxMetroDataViewTreeCtrl::InsertItem(const wxDataViewItem& parent, const wxDataViewItem& previous, - const wxString& text, wxClientData* data) -{ - wxDataViewItem res = GetStore()-> - InsertItem(parent, previous, text, data); - - GetStore()->ItemAdded(parent, res); - - return res; -} - -wxDataViewItem wxMetroDataViewTreeCtrl::PrependContainer(const wxDataViewItem& parent, - const wxString& text, wxClientData* data) -{ - wxDataViewItem res = GetStore()-> - PrependContainer(parent, text, data); - - GetStore()->ItemAdded(parent, res); - - return res; -} - -wxDataViewItem wxMetroDataViewTreeCtrl::AppendContainer(const wxDataViewItem& parent, - const wxString& text, wxClientData* data) -{ - wxDataViewItem res = GetStore()-> - AppendContainer(parent, text, data); - - GetStore()->ItemAdded(parent, res); - - return res; -} - -wxDataViewItem wxMetroDataViewTreeCtrl::InsertContainer(const wxDataViewItem& parent, const wxDataViewItem& previous, - const wxString& text, wxClientData* data) -{ - wxDataViewItem res = GetStore()-> - InsertContainer(parent, previous, text, data); - - GetStore()->ItemAdded(parent, res); - - return res; -} - -void wxMetroDataViewTreeCtrl::SetItemText(const wxDataViewItem& item, const wxString& text) -{ - GetStore()->SetItemText(item, text); - - // notify control - GetStore()->ValueChanged(item, 0); -} - - -void wxMetroDataViewTreeCtrl::DeleteItem(const wxDataViewItem& item) -{ - wxDataViewItem parent_item = GetStore()->GetParent(item); - - GetStore()->DeleteItem(item); - - // notify control - GetStore()->ItemDeleted(parent_item, item); -} - -void wxMetroDataViewTreeCtrl::DeleteChildren(const wxDataViewItem& item) -{ - wxMetroDataViewTreeStoreContainerNode* node = GetStore()->FindContainerNode(item); - if (!node) return; - - wxDataViewItemArray array; - wxMetroDataViewTreeStoreNodes::iterator iter; - for (iter = node->GetChildren().begin(); iter != node->GetChildren().end(); ++iter) - { - wxMetroDataViewTreeStoreNode* child = *iter; - array.Add(child->GetItem()); - } - - GetStore()->DeleteChildren(item); - - // notify control - GetStore()->ItemsDeleted(item, array); -} - -void wxMetroDataViewTreeCtrl::DeleteAllItems() -{ - GetStore()->DeleteAllItems(); - - GetStore()->Cleared(); -} - -void wxMetroDataViewTreeCtrl::OnExpanded(wxDataViewEvent& event) -{ - wxMetroDataViewTreeStoreContainerNode* container = GetStore()->FindContainerNode(event.GetItem()); - if (!container) return; - - container->SetExpanded(true); - - GetStore()->ItemChanged(event.GetItem()); -} - -void wxMetroDataViewTreeCtrl::OnCollapsed(wxDataViewEvent& event) -{ - wxMetroDataViewTreeStoreContainerNode* container = GetStore()->FindContainerNode(event.GetItem()); - if (!container) return; - - container->SetExpanded(false); - - GetStore()->ItemChanged(event.GetItem()); -} - -void wxMetroDataViewTreeCtrl::OnSize(wxSizeEvent& event) -{ -#if defined(wxHAS_GENERIC_DATAVIEWCTRL) - // automatically resize our only column to take the entire control width - if (GetColumnCount()) - { - wxSize size = GetClientSize(); - GetColumn(0)->SetWidth(size.x); - } -#endif - event.Skip(true); -} -*/ \ No newline at end of file