mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-09-27 10:51:22 +00:00
Micro-refactor
This commit is contained in:
+51
-135
@@ -3,11 +3,11 @@
|
||||
|
||||
//#ifdef _WIN32
|
||||
|
||||
#include <initializer_list>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <wx/bookctrl.h>
|
||||
#include <wx/imaglist.h>
|
||||
#include <wx/bitmap.h>
|
||||
#include <wx/sizer.h>
|
||||
|
||||
class ScalableButton;
|
||||
@@ -27,11 +27,9 @@ public:
|
||||
void SetSelection(int sel);
|
||||
void UpdateMode();
|
||||
void Rescale();
|
||||
bool InsertPage(size_t n, const wxString &text, bool bSelect = false, const std::string &bmp_name = "", int imageId = wxBookCtrlBase::NO_IMAGE);
|
||||
bool InsertPage(size_t n, const wxString &text, bool bSelect = false, const std::string &bmp_name = "", const wxBitmap &bmp = wxNullBitmap);
|
||||
void RemovePage(size_t n);
|
||||
bool SetPageImage(size_t n, const std::string& bmp_name) const;
|
||||
bool SetPageImage(size_t n, int imageId);
|
||||
void SetImageList(wxImageList* imageList) { m_imageList = imageList; }
|
||||
void SetPageText(size_t n, const wxString& strText);
|
||||
void SetCompact(size_t n, bool compact); // ORCA
|
||||
wxString GetPageText(size_t n) const;
|
||||
@@ -49,23 +47,12 @@ private:
|
||||
int m_btn_margin;
|
||||
int m_line_margin;
|
||||
std::vector<wxString> m_pageLabels; // ORCA
|
||||
wxImageList* m_imageList{nullptr};
|
||||
wxWindow* m_overflow_button{nullptr}; // ORCA
|
||||
};
|
||||
|
||||
class Notebook : public wxBookCtrlBase
|
||||
{
|
||||
public:
|
||||
// Negative values below wxBookCtrlBase::NO_IMAGE are reserved for the built-in
|
||||
// tabs. Nonnegative values are wxImageList indices supplied by plugin pages.
|
||||
static constexpr int PAGE_HOME = -2;
|
||||
static constexpr int PAGE_PREPARE = -3;
|
||||
static constexpr int PAGE_PREVIEW = -4;
|
||||
static constexpr int PAGE_MONITOR = -5;
|
||||
static constexpr int PAGE_MULTI_DEVICE = -6;
|
||||
static constexpr int PAGE_PROJECT = -7;
|
||||
static constexpr int PAGE_CALIBRATION = -8;
|
||||
|
||||
Notebook(wxWindow * parent,
|
||||
wxWindowID winid = wxID_ANY,
|
||||
const wxPoint & pos = wxDefaultPosition,
|
||||
@@ -156,83 +143,58 @@ public:
|
||||
|
||||
// Implement base class pure virtual methods.
|
||||
|
||||
// Page management. Every insertion funnels through the InsertPage() below; `id` is the
|
||||
// stable page name FindPageByName() resolves. Built-in tabs name a resource bitmap,
|
||||
// plugin pages hand over a ready wxBitmap; wx's own imageId overloads carry neither.
|
||||
bool AddPage(const wxString& id,
|
||||
wxWindow* page,
|
||||
const wxString& text,
|
||||
const std::string& bmp_name = "",
|
||||
bool bSelect = false)
|
||||
{
|
||||
DoInvalidateBestSize();
|
||||
return InsertPage(GetPageCount(), id, page, text, bmp_name, bSelect);
|
||||
}
|
||||
|
||||
bool AddPage(wxWindow* page, const wxString& text, bool bSelect = false, int imageId = NO_IMAGE) override
|
||||
{
|
||||
DoInvalidateBestSize();
|
||||
return InsertPage(GetPageCount(), page, text, bSelect, imageId);
|
||||
}
|
||||
|
||||
// Page management
|
||||
virtual bool InsertPage(size_t n,
|
||||
wxWindow * page,
|
||||
const wxString & text,
|
||||
bool bSelect = false,
|
||||
int imageId = NO_IMAGE) override
|
||||
{
|
||||
wxString page_name;
|
||||
std::string bmp_name;
|
||||
const bool is_fixed_page = get_fixed_page_info(imageId, page_name, bmp_name);
|
||||
const int stored_image_id = is_fixed_page ? NO_IMAGE : imageId;
|
||||
|
||||
if (!wxBookCtrlBase::InsertPage(n, page, text, bSelect, stored_image_id))
|
||||
return false;
|
||||
|
||||
m_pageNames.insert(m_pageNames.begin() + n, page_name);
|
||||
m_pageImageIds.insert(m_pageImageIds.begin() + n, stored_image_id);
|
||||
GetBtnsListCtrl()->InsertPage(n, text, bSelect, bmp_name, stored_image_id);
|
||||
|
||||
if (!DoSetSelectionAfterInsertion(n, bSelect))
|
||||
page->Hide();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool InsertPage(size_t n,
|
||||
const wxString& id,
|
||||
wxWindow* page,
|
||||
const wxString& text,
|
||||
int imageId,
|
||||
bool bSelect = false)
|
||||
{
|
||||
if (!wxBookCtrlBase::InsertPage(n, page, text, bSelect, imageId))
|
||||
return false;
|
||||
|
||||
m_pageNames.insert(m_pageNames.begin() + n, id);
|
||||
m_pageImageIds.insert(m_pageImageIds.begin() + n, imageId);
|
||||
GetBtnsListCtrl()->InsertPage(n, text, bSelect, "", imageId);
|
||||
|
||||
if (!DoSetSelectionAfterInsertion(n, bSelect))
|
||||
page->Hide();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool InsertPage(size_t n,
|
||||
const wxString& id,
|
||||
wxWindow * page,
|
||||
const wxString & text,
|
||||
const std::string& bmp_name = "",
|
||||
bool bSelect = false)
|
||||
bool bSelect = false,
|
||||
const wxBitmap& bmp = wxNullBitmap)
|
||||
{
|
||||
if (!wxBookCtrlBase::InsertPage(n, page, text, bSelect))
|
||||
return false;
|
||||
|
||||
m_pageNames.insert(m_pageNames.begin() + n, id);
|
||||
m_pageImageIds.insert(m_pageImageIds.begin() + n, NO_IMAGE);
|
||||
GetBtnsListCtrl()->InsertPage(n, text, bSelect, bmp_name);
|
||||
GetBtnsListCtrl()->InsertPage(n, text, bSelect, bmp_name, bmp);
|
||||
|
||||
// wxBookCtrlBase::InsertPage() only inserts into the page list and sizes the
|
||||
// new page to the current page's rect — it never touches visibility. A freshly
|
||||
// constructed page defaults to shown, so without this it renders on top of
|
||||
// whatever page is currently selected until the next SetSelection() call hides
|
||||
// it. Mirrors the pure-virtual InsertPage() override above, which already does
|
||||
// this correctly.
|
||||
// wxBookCtrlBase::InsertPage() only inserts into the page list and sizes the new
|
||||
// page to the current page's rect — it never touches visibility, and a freshly
|
||||
// constructed page defaults to shown. Without this it renders on top of whatever
|
||||
// page is currently selected until the next SetSelection() call hides it.
|
||||
if (!DoSetSelectionAfterInsertion(n, bSelect))
|
||||
page->Hide();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
virtual bool InsertPage(size_t n,
|
||||
wxWindow * page,
|
||||
const wxString & text,
|
||||
bool bSelect = false,
|
||||
int WXUNUSED(imageId) = NO_IMAGE) override
|
||||
{
|
||||
return InsertPage(n, wxString(), page, text, "", bSelect);
|
||||
}
|
||||
|
||||
virtual int SetSelection(size_t n) override
|
||||
{
|
||||
int ret = DoSetSelection(n, SetSelection_SendEvent);
|
||||
@@ -262,7 +224,8 @@ public:
|
||||
return DoSetSelection(n);
|
||||
}
|
||||
|
||||
// Labels are stored by the custom button list; page images use the wx image-list IDs below.
|
||||
// Labels are stored by the custom button list; wx's image-list API is unused — tab icons
|
||||
// are set directly on the buttons, either from a resource name or a ready wxBitmap.
|
||||
virtual bool SetPageText(size_t n, const wxString & strText) override
|
||||
{
|
||||
wxCHECK_MSG(n < GetPageCount(), false, wxS("Invalid page"));
|
||||
@@ -278,27 +241,14 @@ public:
|
||||
return GetBtnsListCtrl()->GetPageText(n);
|
||||
}
|
||||
|
||||
virtual bool SetPageImage(size_t n, int imageId) override
|
||||
virtual bool SetPageImage(size_t WXUNUSED(n), int WXUNUSED(imageId)) override
|
||||
{
|
||||
if (n >= m_pageImageIds.size())
|
||||
return false;
|
||||
|
||||
if (!GetBtnsListCtrl()->SetPageImage(n, imageId))
|
||||
return false;
|
||||
|
||||
m_pageImageIds[n] = imageId;
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
virtual int GetPageImage(size_t n) const override
|
||||
virtual int GetPageImage(size_t WXUNUSED(n)) const override
|
||||
{
|
||||
return n < m_pageImageIds.size() ? m_pageImageIds[n] : NO_IMAGE;
|
||||
}
|
||||
|
||||
void SetImageList(wxImageList* imageList)
|
||||
{
|
||||
m_imageList = imageList;
|
||||
GetBtnsListCtrl()->SetImageList(imageList);
|
||||
return NO_IMAGE;
|
||||
}
|
||||
|
||||
bool SetPageImage(size_t n, const std::string& bmp_name)
|
||||
@@ -314,22 +264,27 @@ public:
|
||||
page->SetFocus();
|
||||
}
|
||||
|
||||
// wxBookCtrlBase::DeleteAllPages() clears its page list directly rather than
|
||||
// going through DoRemovePage() per page, so it would otherwise leave
|
||||
// m_pageNames desynchronized (a mutation path outside the four this class
|
||||
// already keeps in sync). Not currently called on a Notebook anywhere in
|
||||
// this codebase, but kept correct for the same reason the rest of this
|
||||
// bookkeeping exists.
|
||||
// The base clears its page list directly instead of calling DoRemovePage() per page,
|
||||
// which would leave m_pageNames behind. No caller today; kept in sync regardless.
|
||||
virtual bool DeleteAllPages() override
|
||||
{
|
||||
m_pageNames.clear();
|
||||
m_pageImageIds.clear();
|
||||
return wxBookCtrlBase::DeleteAllPages();
|
||||
}
|
||||
|
||||
ButtonsListCtrl* GetBtnsListCtrl() const { return static_cast<ButtonsListCtrl*>(m_bookctrl); }
|
||||
void SetOverflowButton(wxWindow* button) { GetBtnsListCtrl()->SetOverflowButton(button); }
|
||||
|
||||
// Insertion index just past the first of `ids` that is present, or the end of the bar
|
||||
// if none is — lets call sites state tab order as "after X" instead of re-deriving it.
|
||||
size_t PositionAfter(std::initializer_list<const char*> ids) const
|
||||
{
|
||||
for (const char* id : ids)
|
||||
if (const int idx = FindPageByName(id); idx != wxNOT_FOUND)
|
||||
return static_cast<size_t>(idx) + 1;
|
||||
return GetPageCount();
|
||||
}
|
||||
|
||||
int FindPageByName(const wxString& id) const
|
||||
{
|
||||
if (id.empty())
|
||||
@@ -485,7 +440,6 @@ protected:
|
||||
if (win)
|
||||
{
|
||||
m_pageNames.erase(m_pageNames.begin() + page);
|
||||
m_pageImageIds.erase(m_pageImageIds.begin() + page);
|
||||
GetBtnsListCtrl()->RemovePage(page);
|
||||
DoSetSelectionAfterRemoval(page);
|
||||
}
|
||||
@@ -509,47 +463,9 @@ protected:
|
||||
}
|
||||
|
||||
private:
|
||||
static bool get_fixed_page_info(int imageId, wxString& page_name, std::string& bmp_name)
|
||||
{
|
||||
switch (imageId) {
|
||||
case PAGE_HOME:
|
||||
page_name = wxS("home");
|
||||
bmp_name = "tab_home_active";
|
||||
return true;
|
||||
case PAGE_PREPARE:
|
||||
page_name = wxS("prepare");
|
||||
bmp_name = "tab_3d_active";
|
||||
return true;
|
||||
case PAGE_PREVIEW:
|
||||
page_name = wxS("preview");
|
||||
bmp_name = "tab_preview_active";
|
||||
return true;
|
||||
case PAGE_MONITOR:
|
||||
page_name = wxS("monitor");
|
||||
bmp_name = "tab_monitor_active";
|
||||
return true;
|
||||
case PAGE_MULTI_DEVICE:
|
||||
page_name = wxS("multi_device");
|
||||
bmp_name = "tab_multi_active";
|
||||
return true;
|
||||
case PAGE_PROJECT:
|
||||
page_name = wxS("project");
|
||||
bmp_name = "tab_auxiliary_active";
|
||||
return true;
|
||||
case PAGE_CALIBRATION:
|
||||
page_name = wxS("calibration");
|
||||
bmp_name = "tab_calibration_active";
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
void Init();
|
||||
|
||||
std::vector<wxString> m_pageNames; // index-parallel to wxBookCtrlBase::m_pages
|
||||
std::vector<int> m_pageImageIds; // index-parallel to wxBookCtrlBase::m_pages
|
||||
wxImageList* m_imageList{nullptr};
|
||||
std::vector<wxString> m_pageNames; // index-parallel to wxBookCtrlBase::m_pages
|
||||
|
||||
wxShowEffect m_showEffect,
|
||||
m_hideEffect;
|
||||
|
||||
Reference in New Issue
Block a user