mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-07-30 22:32:07 +00:00
NEW: Official filament color selection approved
- Add a filament picker dialog for official color selection - Enable displaying multiple filament colors in the picker dialog and preview sidebar - Introduce two new config options: - `filament_multi_colors` - `filament_color_types` to both the application config and the 3MF config jira: STUDIO-12346 Change-Id: I66f8c1ec9147df4f5948c8a329c1737551280e63 (cherry picked from commit 522dc0bbca49033a1ba9725ca7f6c3ea729691a6)
This commit is contained in:
89
src/slic3r/GUI/FilamentPickerDialog.hpp
Normal file
89
src/slic3r/GUI/FilamentPickerDialog.hpp
Normal file
@@ -0,0 +1,89 @@
|
||||
#ifndef slic3r_GUI_FilamentPickerDialog_hpp_
|
||||
#define slic3r_GUI_FilamentPickerDialog_hpp_
|
||||
|
||||
#include "GUI_App.hpp"
|
||||
#include "GUI.hpp"
|
||||
#include "GUI_Utils.hpp"
|
||||
#include "FilamentBitmapUtils.hpp"
|
||||
#include "Widgets/Button.hpp"
|
||||
#include "EncodedFilament.hpp"
|
||||
#include <wx/dialog.h>
|
||||
#include <wx/wx.h>
|
||||
#include <wx/scrolwin.h>
|
||||
#include <wx/bitmap.h>
|
||||
#include <wx/region.h>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
namespace Slic3r { namespace GUI {
|
||||
|
||||
class FilamentPickerDialog : public DPIDialog
|
||||
{
|
||||
public:
|
||||
FilamentPickerDialog(wxWindow *parent, const wxString &fila_id, const FilamentColor &fila_color, const std::string &fila_type);
|
||||
virtual ~FilamentPickerDialog();
|
||||
|
||||
// Public interface methods
|
||||
bool IsDataLoaded() const { return m_is_data_loaded; }
|
||||
wxColour GetSelectedColour() const;
|
||||
const FilamentColor& GetSelectedFilamentColor() const { return m_current_filament_color; }
|
||||
|
||||
protected:
|
||||
void on_dpi_changed(const wxRect &suggested_rect) override;
|
||||
|
||||
// Event handlers
|
||||
#ifdef __WXGTK__
|
||||
void OnWindowCreate(wxWindowCreateEvent& event);
|
||||
#endif
|
||||
void OnMouseLeftDown(wxMouseEvent& event);
|
||||
void OnMouseMove(wxMouseEvent& event);
|
||||
void OnMouseLeftUp(wxMouseEvent& event);
|
||||
void OnButtonPaint(wxPaintEvent& event);
|
||||
|
||||
private:
|
||||
// UI creation methods
|
||||
wxBoxSizer* CreatePreviewPanel(const FilamentColor& fila_color, const std::string& fila_type);
|
||||
wxScrolledWindow* CreateColorGrid();
|
||||
wxBoxSizer* CreateSeparatorLine();
|
||||
wxBoxSizer* CreateButtonPanel();
|
||||
void BindEvents();
|
||||
|
||||
// UI update methods
|
||||
void UpdatePreview(const FilamentColorCode& filament);
|
||||
void UpdateButtonStates(wxBitmapButton* selected_btn);
|
||||
|
||||
// Shaped window methods
|
||||
void SetWindowShape();
|
||||
void CreateShapedBitmap();
|
||||
|
||||
// Data loading
|
||||
bool LoadFilamentData(const wxString& fila_id);
|
||||
|
||||
// UI elements
|
||||
wxStaticBitmap* m_color_demo{nullptr};
|
||||
wxStaticText* m_label_preview_color{nullptr};
|
||||
wxStaticText* m_label_preview_idx{nullptr};
|
||||
wxStaticText* m_label_preview_type{nullptr};
|
||||
wxButton* m_more_btn{nullptr};
|
||||
Button* m_ok_btn{nullptr};
|
||||
Button* m_cancel_btn{nullptr};
|
||||
wxString* m_cur_color_name{nullptr};
|
||||
|
||||
// Data members
|
||||
FilamentColorCodeQuery* m_color_query{nullptr};
|
||||
FilamentColorCodes* m_current_color_codes{nullptr};
|
||||
bool m_is_data_loaded{false};
|
||||
wxBitmapButton* m_currently_selected_btn{nullptr};
|
||||
FilamentColor m_current_filament_color;
|
||||
|
||||
// Shaped window members
|
||||
wxBitmap m_shape_bmp;
|
||||
int m_corner_radius{8};
|
||||
|
||||
// Mouse drag members
|
||||
wxPoint m_drag_delta;
|
||||
};
|
||||
|
||||
}} // namespace Slic3r::GUI
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user