OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
Slic3r::GUI::ParamsModel Class Reference

#include </home/runner/work/OrcaSlicer/OrcaSlicer/src/slic3r/GUI/EditGCodeDialog.hpp>

Inheritance diagram for Slic3r::GUI::ParamsModel:
Collaboration diagram for Slic3r::GUI::ParamsModel:

Public Member Functions

 ParamsModel ()
 ~ParamsModel () override=default
void SetAssociatedControl (wxDataViewCtrl *ctrl)
wxDataViewItem AppendGroup (const wxString &group_name, const std::string &icon_name)
wxDataViewItem AppendSubGroup (wxDataViewItem parent, const wxString &sub_group_name, const std::string &icon_name)
wxDataViewItem AppendParam (wxDataViewItem parent, ParamType param_type, const std::string &param_key)
wxDataViewItem Delete (const wxDataViewItem &item)
wxString GetParamName (wxDataViewItem item)
std::string GetParamKey (wxDataViewItem item)
std::string GetTopLevelCategory (wxDataViewItem item)
void RefreshSearch (const wxString &search_text)
void FinishSearch ()
void Clear ()
wxDataViewItem GetParent (const wxDataViewItem &item) const override
unsigned int GetChildren (const wxDataViewItem &parent, wxDataViewItemArray &array) const override
unsigned int GetColumnCount () const override
wxString GetColumnType (unsigned int col) const override
void GetValue (wxVariant &variant, const wxDataViewItem &item, unsigned int col) const override
bool SetValue (const wxVariant &variant, const wxDataViewItem &item, unsigned int col) override
bool IsContainer (const wxDataViewItem &item) const override
bool HasContainerColumns (const wxDataViewItem &WXUNUSED(item)) const override

Private Attributes

ParamsNodePtrArray m_group_nodes
wxDataViewCtrl * m_ctrl { nullptr }
bool m_currently_searching {false}

Detailed Description

Constructor & Destructor Documentation

◆ ParamsModel()

Slic3r::GUI::ParamsModel::ParamsModel ( )
587{
588}

◆ ~ParamsModel()

Slic3r::GUI::ParamsModel::~ParamsModel ( )
overridedefault

Member Function Documentation

◆ AppendGroup()

wxDataViewItem Slic3r::GUI::ParamsModel::AppendGroup ( const wxString & group_name,
const std::string & icon_name )
592{
593 m_group_nodes.emplace_back(std::make_unique<ParamsNode>(group_name, icon_name, m_ctrl));
594
595 wxDataViewItem parent(nullptr);
596 wxDataViewItem child((void*)m_group_nodes.back().get());
597
598 ItemAdded(parent, child);
599 m_ctrl->Expand(parent);
600 return child;
601}
ParamsNodePtrArray m_group_nodes
Definition EditGCodeDialog.hpp:179
wxDataViewCtrl * m_ctrl
Definition EditGCodeDialog.hpp:180

References m_ctrl, and m_group_nodes.

◆ AppendParam()

wxDataViewItem Slic3r::GUI::ParamsModel::AppendParam ( wxDataViewItem parent,
ParamType param_type,
const std::string & param_key )
621{
622 ParamsNode* parent_node = static_cast<ParamsNode*>(parent.GetID());
623 if (!parent_node)
624 return wxDataViewItem(0);
625
626 parent_node->Append(std::make_unique<ParamsNode>(parent_node, param_type, param_key, m_ctrl));
627
628 const wxDataViewItem child_item((void*)parent_node->GetChildren().back().get());
629
630 ItemAdded(parent, child_item);
631 return child_item;
632}

References Slic3r::GUI::ParamsNode::Append(), Slic3r::GUI::ParamsNode::GetChildren(), and m_ctrl.

Here is the call graph for this function:

◆ AppendSubGroup()

wxDataViewItem Slic3r::GUI::ParamsModel::AppendSubGroup ( wxDataViewItem parent,
const wxString & sub_group_name,
const std::string & icon_name )
606{
607 ParamsNode* parent_node = static_cast<ParamsNode*>(parent.GetID());
608 if (!parent_node)
609 return wxDataViewItem(0);
610
611 parent_node->Append(std::make_unique<ParamsNode>(parent_node, sub_group_name, icon_name, m_ctrl));
612 const wxDataViewItem sub_group_item((void*)parent_node->GetChildren().back().get());
613
614 ItemAdded(parent, sub_group_item);
615 return sub_group_item;
616}

References Slic3r::GUI::ParamsNode::Append(), Slic3r::GUI::ParamsNode::GetChildren(), and m_ctrl.

Here is the call graph for this function:

◆ Clear()

void Slic3r::GUI::ParamsModel::Clear ( )
739{
740 while (!m_group_nodes.empty())
741 Delete(wxDataViewItem(m_group_nodes.back().get()));
742}
wxDataViewItem Delete(const wxDataViewItem &item)
Definition EditGCodeDialog.cpp:692

References Delete(), and m_group_nodes.

Here is the call graph for this function:

◆ Delete()

wxDataViewItem Slic3r::GUI::ParamsModel::Delete ( const wxDataViewItem & item)
693{
694 auto ret_item = wxDataViewItem(nullptr);
695 ParamsNode* node = static_cast<ParamsNode*>(item.GetID());
696 if (!node) // happens if item.IsOk()==false
697 return ret_item;
698 const bool is_item_enabled = node->IsEnabled();
699
700 // first remove the node from the parent's array of children;
701 // NOTE: m_group_nodes is only a vector of _pointers_
702 // thus removing the node from it doesn't result in freeing it
703 ParamsNodePtrArray& children = node->GetChildren();
704 // Delete all children
705 while (!children.empty())
706 Delete(wxDataViewItem(children.back().get()));
707
708 auto node_parent = node->GetParent();
709
710 ParamsNodePtrArray& parents_children = node_parent ? node_parent->GetChildren() : m_group_nodes;
711 auto it = find_if(parents_children.begin(), parents_children.end(),
712 [node](std::unique_ptr<ParamsNode>& child) { return child.get() == node; });
713 assert(it != parents_children.end());
714 it = parents_children.erase(it);
715
716 if (it != parents_children.end())
717 ret_item = wxDataViewItem(it->get());
718
719 wxDataViewItem parent(node_parent);
720 // set m_container to FALSE if parent has no child
721 if (node_parent) {
722#ifndef __WXGTK__
723 if (node_parent->GetChildren().empty())
724 node_parent->SetContainer(false);
725#endif //__WXGTK__
726 ret_item = parent;
727 }
728
729 // Orca: notify enabled item only, because disabled items have already been removed from UI,
730 // so attempt to notify it cases a crash.
731 if (is_item_enabled) {
732 // notify control
733 ItemDeleted(parent, item);
734 }
735 return ret_item;
736}
std::vector< std::unique_ptr< ParamsNode > > ParamsNodePtrArray
Definition EditGCodeDialog.hpp:84

References Delete(), Slic3r::GUI::ParamsNode::GetChildren(), Slic3r::GUI::ParamsNode::GetParent(), Slic3r::GUI::ParamsNode::IsEnabled(), and m_group_nodes.

Referenced by Clear(), and Delete().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ FinishSearch()

void Slic3r::GUI::ParamsModel::FinishSearch ( )
682{
683 RefreshSearch("");
684 Cleared();
686 for (const auto& node : m_group_nodes)
687 node->FinishSearch();
688 m_currently_searching = false;
689 }
690}
bool m_currently_searching
Definition EditGCodeDialog.hpp:181
void RefreshSearch(const wxString &search_text)
Definition EditGCodeDialog.cpp:664

References m_currently_searching, m_group_nodes, and RefreshSearch().

Here is the call graph for this function:

◆ GetChildren()

unsigned int Slic3r::GUI::ParamsModel::GetChildren ( const wxDataViewItem & parent,
wxDataViewItemArray & array ) const
override
812{
813 ParamsNode* parent_node = (ParamsNode*)parent.GetID();
814
815 if (parent_node == nullptr) {
816 for (const auto& group : m_group_nodes)
817 if (group->IsEnabled())
818 array.Add(wxDataViewItem((void*)group.get()));
819 }
820 else {
821 const ParamsNodePtrArray& children = parent_node->GetChildren();
822 for (const std::unique_ptr<ParamsNode>& child : children)
823 if (child->IsEnabled())
824 array.Add(wxDataViewItem((void*)child.get()));
825 }
826
827 return array.Count();
828}

References Slic3r::GUI::ParamsNode::GetChildren(), and m_group_nodes.

Here is the call graph for this function:

◆ GetColumnCount()

unsigned int Slic3r::GUI::ParamsModel::GetColumnCount ( ) const
override
829{ return 1; }

◆ GetColumnType()

wxString Slic3r::GUI::ParamsModel::GetColumnType ( unsigned int col) const
override
830 {
831#ifdef __linux__
832 return wxT("wxDataViewIconText");
833#else
834 return wxT("DataViewBitmapText");
835#endif
836}

◆ GetParamKey()

std::string Slic3r::GUI::ParamsModel::GetParamKey ( wxDataViewItem item)
645{
646 if (item.IsOk()) {
647 ParamsNode* node = static_cast<ParamsNode*>(item.GetID());
648 return node->param_key;
649 }
650 return std::string();
651}

References Slic3r::GUI::ParamsNode::param_key.

◆ GetParamName()

wxString Slic3r::GUI::ParamsModel::GetParamName ( wxDataViewItem item)
635{
636 if (item.IsOk()) {
637 ParamsNode* node = static_cast<ParamsNode*>(item.GetID());
638 if (node->IsParamNode())
639 return node->text;
640 }
641 return wxEmptyString;
642}

References Slic3r::GUI::ParamsNode::IsParamNode(), and Slic3r::GUI::ParamsNode::text.

Here is the call graph for this function:

◆ GetParent()

wxDataViewItem Slic3r::GUI::ParamsModel::GetParent ( const wxDataViewItem & item) const
override
789{
790 // the invisible root node has no parent
791 if (!item.IsOk())
792 return wxDataViewItem(nullptr);
793
794 ParamsNode* node = static_cast<ParamsNode*>(item.GetID());
795
796 if (node->IsGroupNode())
797 return wxDataViewItem(nullptr);
798
799 return wxDataViewItem((void*)node->GetParent());
800}

References Slic3r::GUI::ParamsNode::GetParent(), and Slic3r::GUI::ParamsNode::IsGroupNode().

Here is the call graph for this function:

◆ GetTopLevelCategory()

std::string Slic3r::GUI::ParamsModel::GetTopLevelCategory ( wxDataViewItem item)
654{
655 if (item.IsOk()) {
656 ParamsNode* node = static_cast<ParamsNode*>(item.GetID());
657 while (!node->IsGroupNode())
658 node = node->GetParent();
659 return node->text.ToStdString();
660 }
661 return std::string();
662}

References Slic3r::GUI::ParamsNode::GetParent(), Slic3r::GUI::ParamsNode::IsGroupNode(), and Slic3r::GUI::ParamsNode::text.

Here is the call graph for this function:

◆ GetValue()

void Slic3r::GUI::ParamsModel::GetValue ( wxVariant & variant,
const wxDataViewItem & item,
unsigned int col ) const
override
745{
746 assert(item.IsOk());
747
748 ParamsNode* node = static_cast<ParamsNode*>(item.GetID());
749 if (col == (unsigned int)0)
750#ifdef __linux__
751// variant << wxDataViewIconText(node->GetFormattedText(), get_bmp_bundle(node->icon_name)->GetIconFor(m_ctrl->GetParent())); //TODO: update to bundle with wx update
752 {
753 wxIcon icon;
754 icon.CopyFromBitmap(create_scaled_bitmap(node->icon_name, m_ctrl->GetParent()));
755 variant << wxDataViewIconText(node->GetFormattedText(), icon);
756 }
757#else
758// variant << DataViewBitmapText(node->GetFormattedText(), get_bmp_bundle(node->icon_name)->GetBitmapFor(m_ctrl->GetParent())); //TODO: update to bundle with wx update
759 variant << DataViewBitmapText(node->GetFormattedText(), create_scaled_bitmap(node->icon_name, m_ctrl->GetParent()));
760#endif //__linux__
761 else
762 wxLogError("DiffModel::GetValue: wrong column %d", col);
763}
wxBitmap create_scaled_bitmap(const std::string &bmp_name_in, wxWindow *win, const int px_cnt, const bool grayscale, const std::string &new_color, const bool menu_bitmap, const bool resize, const bool bitmap2, const std::vector< std::string > &array_new_color)
Definition wxExtensions.cpp:448

References create_scaled_bitmap(), Slic3r::GUI::ParamsNode::GetFormattedText(), Slic3r::GUI::ParamsNode::icon_name, and m_ctrl.

Here is the call graph for this function:

◆ HasContainerColumns()

bool Slic3r::GUI::ParamsModel::HasContainerColumns ( const wxDataViewItem & WXUNUSEDitem) const
inlineoverride
223{ return true; }

◆ IsContainer()

bool Slic3r::GUI::ParamsModel::IsContainer ( const wxDataViewItem & item) const
override
803{
804 // the invisble root node can have children
805 if (!item.IsOk())
806 return true;
807
808 ParamsNode* node = static_cast<ParamsNode*>(item.GetID());
809 return node->IsContainer();
810}

References Slic3r::GUI::ParamsNode::IsContainer().

Here is the call graph for this function:

◆ RefreshSearch()

void Slic3r::GUI::ParamsModel::RefreshSearch ( const wxString & search_text)
665{
666 if (!m_currently_searching) { // if not currently searching, save expansion state for all items
667 for (const auto& node : m_group_nodes)
668 node->StartSearch();
670 }
671
672 for (const auto& node : m_group_nodes)
673 node->RefreshSearch(search_text); //Enable/Disable node based on search
674
675 Cleared(); //Reload the model into the control
676
677 for (const auto& node : m_group_nodes) // (re)expand all
678 m_ctrl->ExpandChildren(wxDataViewItem(node.get()));
679}

References m_ctrl, m_currently_searching, and m_group_nodes.

Referenced by FinishSearch().

Here is the caller graph for this function:

◆ SetAssociatedControl()

void Slic3r::GUI::ParamsModel::SetAssociatedControl ( wxDataViewCtrl * ctrl)
inline
188{ m_ctrl = ctrl; }

References m_ctrl.

◆ SetValue()

bool Slic3r::GUI::ParamsModel::SetValue ( const wxVariant & variant,
const wxDataViewItem & item,
unsigned int col )
override
766{
767 assert(item.IsOk());
768
769 ParamsNode* node = static_cast<ParamsNode*>(item.GetID());
770 if (col == (unsigned int)0) {
771#ifdef __linux__
772 wxDataViewIconText data;
773 data << variant;
774 node->icon = data.GetIcon();
775#else
776 DataViewBitmapText data;
777 data << variant;
778 node->icon = data.GetBitmap();
779#endif
780 node->text = data.GetText();
781 return true;
782 }
783
784 wxLogError("DiffModel::SetValue: wrong column");
785 return false;
786}
const wxBitmap & GetBitmap() const
Definition ExtraRenderers.hpp:52
wxString GetText() const
Definition ExtraRenderers.hpp:50

References Slic3r::GUI::ParamsNode::icon, and Slic3r::GUI::ParamsNode::text.

Member Data Documentation

◆ m_ctrl

wxDataViewCtrl* Slic3r::GUI::ParamsModel::m_ctrl { nullptr }
private

◆ m_currently_searching

bool Slic3r::GUI::ParamsModel::m_currently_searching {false}
private
181{false};

Referenced by FinishSearch(), and RefreshSearch().

◆ m_group_nodes

ParamsNodePtrArray Slic3r::GUI::ParamsModel::m_group_nodes
private

The documentation for this class was generated from the following files: