FIX:fix three icons in dark mode not switching

jira: none
Change-Id: I0b49e3dc2e4d9ae7f53e45e456de830736f0acc8
This commit is contained in:
zhou.xu 2025-03-12 12:10:38 +08:00 committed by lane.wei
parent 19e3ceab84
commit 38abdcdcdc
6 changed files with 41 additions and 22 deletions

View File

@ -1373,7 +1373,7 @@ void ObjectList::list_manipulation(const wxPoint& mouse_pos, bool evt_context_me
toggle_printable_state();
else if (col_num == colSupportPaint) {
ObjectDataViewModelNode* node = (ObjectDataViewModelNode*)item.GetID();
if (node->HasSupportPainting()) {
if (node && node->HasSupportPainting()) {
GLGizmosManager& gizmos_mgr = wxGetApp().plater()->get_view3D_canvas3D()->get_gizmos_manager();
if (gizmos_mgr.get_current_type() != GLGizmosManager::EType::FdmSupports)
gizmos_mgr.open_gizmo(GLGizmosManager::EType::FdmSupports);
@ -1384,7 +1384,7 @@ void ObjectList::list_manipulation(const wxPoint& mouse_pos, bool evt_context_me
else if (col_num == colColorPaint) {
if (wxGetApp().plater()->get_current_canvas3D()->get_canvas_type() != GLCanvas3D::CanvasAssembleView) {
ObjectDataViewModelNode* node = (ObjectDataViewModelNode*)item.GetID();
if (node->HasColorPainting()) {
if (node && node->HasColorPainting()) {
GLGizmosManager& gizmos_mgr = wxGetApp().plater()->get_view3D_canvas3D()->get_gizmos_manager();
if (gizmos_mgr.get_current_type() != GLGizmosManager::EType::MmuSegmentation)
gizmos_mgr.open_gizmo(GLGizmosManager::EType::MmuSegmentation);
@ -3751,7 +3751,7 @@ void ObjectList::update_variable_layer_obj_num(ObjectDataViewModelNode* obj_node
}
}
void ObjectList::update_info_items(size_t obj_idx, wxDataViewItemArray* selections/* = nullptr*/, bool added_object/* = false*/)
void ObjectList::update_info_items(size_t obj_idx, wxDataViewItemArray *selections /* = nullptr*/, bool added_object /* = false*/, bool color_mode_changed /* = false*/)
{
// BBS
if (obj_idx >= m_objects->size())
@ -3809,6 +3809,9 @@ void ObjectList::update_info_items(size_t obj_idx, wxDataViewItemArray* selectio
else if (!shows && should_show) {
m_objects_model->SetSupportPaintState(true, item_obj);
}
if (color_mode_changed && shows) {
m_objects_model->SetSupportPaintState(true, item_obj,true);
}
}
{
@ -3824,6 +3827,9 @@ void ObjectList::update_info_items(size_t obj_idx, wxDataViewItemArray* selectio
else if (!shows && should_show) {
m_objects_model->SetColorPaintState(true, item_obj);
}
if (color_mode_changed && shows) {
m_objects_model->SetColorPaintState(true, item_obj, true);
}
}
{
@ -3836,6 +3842,9 @@ void ObjectList::update_info_items(size_t obj_idx, wxDataViewItemArray* selectio
else if (!shows && should_show) {
m_objects_model->SetSinkState(true, item_obj);
}
if (color_mode_changed && shows) {
m_objects_model->SetSinkState(true, item_obj, true);
}
}
{

View File

@ -421,7 +421,7 @@ public:
void update_and_show_object_settings_item();
void update_settings_item_and_selection(wxDataViewItem item, wxDataViewItemArray& selections);
void update_object_list_by_printer_technology();
void update_info_items(size_t obj_idx, wxDataViewItemArray* selections = nullptr, bool added_object = false);
void update_info_items(size_t obj_idx, wxDataViewItemArray *selections = nullptr, bool added_object = false, bool color_mode_changed = false);
void update_variable_layer_obj_num(ObjectDataViewModelNode* obj_node, size_t layer_data_count);
void instances_to_separated_object(const int obj_idx, const std::set<int>& inst_idx);

View File

@ -225,9 +225,9 @@ void ObjectDataViewModelNode::set_action_icon(bool enable)
}
// BBS
void ObjectDataViewModelNode::set_color_icon(bool enable)
void ObjectDataViewModelNode::set_color_icon(bool enable, bool force)
{
if (m_color_enable == enable)
if (!force && m_color_enable == enable)
return;
m_color_enable = enable;
if ((m_type & itObject) && enable)
@ -236,9 +236,9 @@ void ObjectDataViewModelNode::set_color_icon(bool enable)
m_color_icon = create_scaled_bitmap("dot");
}
void ObjectDataViewModelNode::set_support_icon(bool enable)
void ObjectDataViewModelNode::set_support_icon(bool enable, bool force)
{
if (m_support_enable == enable)
if (!force && m_support_enable == enable)
return;
m_support_enable = enable;
if ((m_type & itObject) && enable)
@ -247,9 +247,9 @@ void ObjectDataViewModelNode::set_support_icon(bool enable)
m_support_icon = create_scaled_bitmap("dot");
}
void ObjectDataViewModelNode::set_sinking_icon(bool enable)
void ObjectDataViewModelNode::set_sinking_icon(bool enable, bool force)
{
if (m_sink_enable == enable)
if (!force && m_sink_enable == enable)
return;
m_sink_enable = enable;
if ((m_type & itObject) && enable)
@ -2334,32 +2334,32 @@ bool ObjectDataViewModel::IsSinked(wxDataViewItem &item) const
return node->m_sink_enable;
}
void ObjectDataViewModel::SetColorPaintState(const bool painted, wxDataViewItem obj_item)
void ObjectDataViewModel::SetColorPaintState(const bool painted, wxDataViewItem obj_item, bool force)
{
ObjectDataViewModelNode* node = static_cast<ObjectDataViewModelNode*>(obj_item.GetID());
if (!node)
return;
node->set_color_icon(painted);
node->set_color_icon(painted, force);
ItemChanged(obj_item);
}
void ObjectDataViewModel::SetSupportPaintState(const bool painted, wxDataViewItem obj_item)
void ObjectDataViewModel::SetSupportPaintState(const bool painted, wxDataViewItem obj_item, bool force)
{
ObjectDataViewModelNode* node = static_cast<ObjectDataViewModelNode*>(obj_item.GetID());
if (!node)
return;
node->set_support_icon(painted);
node->set_support_icon(painted, force);
ItemChanged(obj_item);
}
void ObjectDataViewModel::SetSinkState(const bool painted, wxDataViewItem obj_item)
void ObjectDataViewModel::SetSinkState(const bool painted, wxDataViewItem obj_item, bool force)
{
ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode *>(obj_item.GetID());
if (!node) return;
node->set_sinking_icon(painted);
node->set_sinking_icon(painted, force);
ItemChanged(obj_item);
}

View File

@ -301,9 +301,9 @@ public:
void set_variable_height_icon(VaryHeightIndicator vari_height);
void set_action_icon(bool enable);
// BBS
void set_color_icon(bool enable);
void set_support_icon(bool enable);
void set_sinking_icon(bool enable);
void set_color_icon(bool enable, bool force = false);
void set_support_icon(bool enable,bool force = false);
void set_sinking_icon(bool enable, bool force = false);
// Set warning icon for node
void set_warning_icon(const std::string& warning_icon);
@ -509,9 +509,9 @@ public:
bool IsColorPainted(wxDataViewItem& item) const;
bool IsSupportPainted(wxDataViewItem &item) const;
bool IsSinked(wxDataViewItem &item) const;
void SetColorPaintState(const bool painted, wxDataViewItem obj_item);
void SetSupportPaintState(const bool painted, wxDataViewItem obj_item);
void SetSinkState(const bool painted, wxDataViewItem obj_item);
void SetColorPaintState(const bool painted, wxDataViewItem obj_item,bool force = false);
void SetSupportPaintState(const bool painted, wxDataViewItem obj_item,bool force = false);
void SetSinkState(const bool painted, wxDataViewItem obj_item,bool force = false);
void SetAssociatedControl(wxDataViewCtrl* ctrl) { m_ctrl = ctrl; }
// Rescale bitmaps for existing Items

View File

@ -1959,6 +1959,14 @@ Sidebar::Sidebar(Plater *parent)
Sidebar::~Sidebar() {}
void Sidebar::on_change_color_mode(bool is_dark) {
const ModelObjectPtrs &mos = wxGetApp().model().objects;
for (int i = 0; i < mos.size(); i++) {
wxGetApp().obj_list()->update_info_items(i,nullptr,false,true);
}
}
void Sidebar::create_printer_preset()
{
CreatePrinterPresetDialog dlg(wxGetApp().mainframe);
@ -9029,6 +9037,7 @@ void Plater::priv::on_apple_change_color_mode(wxSysColourChangedEvent& evt) {
void Plater::priv::on_change_color_mode(SimpleEvent& evt) {
m_is_dark = wxGetApp().app_config->get("dark_color_mode") == "1";
sidebar->on_change_color_mode(m_is_dark);
view3D->get_canvas3d()->on_change_color_mode(m_is_dark);
preview->get_canvas3d()->on_change_color_mode(m_is_dark);
assemble_view->get_canvas3d()->on_change_color_mode(m_is_dark);

View File

@ -139,6 +139,7 @@ public:
Sidebar &operator=(const Sidebar &) = delete;
~Sidebar();
void on_change_color_mode(bool is_dark);
void create_printer_preset();
void init_filament_combo(PlaterPresetComboBox **combo, const int filament_idx);
void remove_unused_filament_combos(const size_t current_extruder_count);