Skip to content

Commit

Permalink
A bunch of tab fixes (SoftFever#6551)
Browse files Browse the repository at this point in the history
* Make sure the speed tab is properly hidden when toggle off advance mode

* Clear each page before clearing the parent, otherwise the child pages will be destroyed twice

* Fix crash if current selected tab is positioned after the removed tab

* Fix issue that sometimes the printer config first page is not displayed

* Fix issue that the wrong tab item get bold if the number of tabs changed
  • Loading branch information
Noisyfox authored Aug 26, 2024
1 parent 2bf5487 commit 3757295
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 17 deletions.
13 changes: 8 additions & 5 deletions src/slic3r/GUI/OG_CustomCtrl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -492,13 +492,16 @@ bool OG_CustomCtrl::update_visibility(ConfigOptionMode mode)
wxCoord h_pos2 = get_title_width() * m_em_unit;
wxCoord v_pos = 0;

size_t invisible_lines = 0;
bool has_visible_lines = false;
for (CtrlLine& line : ctrl_lines) {
line.update_visibility(mode);
if (line.is_visible)
if (line.is_visible) {
v_pos += (wxCoord)line.height;
else
invisible_lines++;

if (!line.is_separator()) { // Ignore separators
has_visible_lines = true;
}
}
}
// BBS: multi-line title
SetFont(Label::Head_16);
Expand All @@ -513,7 +516,7 @@ bool OG_CustomCtrl::update_visibility(ConfigOptionMode mode)

this->SetMinSize(wxSize(h_pos, v_pos));

return invisible_lines != ctrl_lines.size();
return has_visible_lines;
}

// BBS: call by Tab/Page
Expand Down
4 changes: 3 additions & 1 deletion src/slic3r/GUI/PresetComboBoxes.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -799,8 +799,10 @@ bool PlaterPresetComboBox::switch_to_tab()
//BBS Select NoteBook Tab params
if (tab->GetParent() == wxGetApp().params_panel())
wxGetApp().mainframe->select_tab(MainFrame::tp3DEditor);
else
else {
wxGetApp().params_dialog()->Popup();
tab->OnActivate();
}
tab->restore_last_select_item();

const Preset* selected_filament_preset = nullptr;
Expand Down
11 changes: 2 additions & 9 deletions src/slic3r/GUI/Tab.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -468,14 +468,7 @@ void Tab::create_preset_tab()
// so that the cursor jumps to the last item.
// BBS: bold selection
m_tabctrl->Bind(wxEVT_TAB_SEL_CHANGING, [this](wxCommandEvent& event) {
if (m_disable_tree_sel_changed_event)
return;
const auto sel_item = m_tabctrl->GetSelection();
//OutputDebugStringA("wxEVT_TAB_SEL_CHANGING ");
//OutputDebugStringA(m_title.c_str());
//const auto selection = sel_item >= 0 ? m_tabctrl->GetItemText(sel_item) : "";
//OutputDebugString(selection);
//OutputDebugStringA("\n");
m_tabctrl->SetItemBold(sel_item, false);
});
m_tabctrl->Bind(wxEVT_TAB_SEL_CHANGED, [this](wxCommandEvent& event) {
Expand Down Expand Up @@ -5282,10 +5275,10 @@ bool Tab::update_current_page_in_background(int& item)

// clear pages from the controlls
// BBS: fix after new layout, clear page in backgroud
if (m_parent->is_active_and_shown_tab((wxPanel*)this))
m_parent->clear_page();
for (auto p : m_pages)
p->clear();
if (m_parent->is_active_and_shown_tab((wxPanel*)this))
m_parent->clear_page();

update_undo_buttons();

Expand Down
12 changes: 10 additions & 2 deletions src/slic3r/GUI/Widgets/TabCtrl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -120,16 +120,24 @@ bool TabCtrl::DeleteItem(int item)
if (item < 0 || item >= btns.size()) {
return false;
}
const bool selection_changed = sel >= item;

if (selection_changed) {
sendTabCtrlEvent(true);
}

Button* btn = btns[item];
btn->Destroy();
btns.erase(btns.begin() + item);
sizer->Remove(item * 2);
if (btns.size() > 1)
sizer->GetItem(sizer->GetItemCount() - 1)->SetMinSize({0, 0});

if (selection_changed) {
sel--; // `relayout()` uses `sel` so we need to update this before calling `relayout()`
}
relayout();
if (sel >= item) {
sel--;
if (selection_changed) {
sendTabCtrlEvent();
}

Expand Down

0 comments on commit 3757295

Please sign in to comment.