BambuStudio/slic3r/GUI/ParamsPanel.hpp

179 lines
5.6 KiB
C++

#ifndef slic3r_params_panel_hpp_
#define slic3r_params_panel_hpp_
#include <map>
#include <vector>
#include <memory>
#include <wx/artprov.h>
#include <wx/xrc/xmlres.h>
#include <wx/string.h>
#include <wx/stattext.h>
#include <wx/gdicmn.h>
#include <wx/font.h>
#include <wx/colour.h>
#include <wx/settings.h>
#include <wx/tglbtn.h>
#include <wx/bitmap.h>
#include <wx/image.h>
#include <wx/icon.h>
#include <wx/button.h>
#include <wx/sizer.h>
#include <wx/statline.h>
#include <wx/scrolwin.h>
#include <wx/timer.h>
#include <wx/panel.h>
#include <wx/wupdlock.h>
#include "wxExtensions.hpp"
#include "GUI_Utils.hpp"
#include "Widgets/Button.hpp"
class SwitchButton;
class StaticBox;
#define TIPS_DIALOG_BUTTON_SIZE wxSize(FromDIP(60), FromDIP(24))
namespace Slic3r {
namespace GUI {
///////////////////////////////////////////////////////////////////////////
class TipsDialog : public DPIDialog
{
private:
bool m_show_again{false};
std::string m_app_key;
public:
TipsDialog(wxWindow *parent, const wxString &title, const wxString &description, std::string app_key = "");
Button *m_confirm{nullptr};
Button *m_cancel{nullptr};
wxPanel *m_top_line{nullptr};
wxStaticText *m_msg;
protected:
void on_dpi_changed(const wxRect &suggested_rect) override;
void on_ok(wxMouseEvent &event);
wxBoxSizer *create_item_checkbox(wxString title, wxWindow *parent, wxString tooltip, std::string param);
};
///////////////////////////////////////////////////////////////////////////////
/// Class ParamsPanel
///////////////////////////////////////////////////////////////////////////////
class ParamsPanel : public wxPanel
{
#if __WXOSX__
wxWindow* m_tmp_panel;
int m_size_move = -1;
#endif // __WXOSX__
private:
void free_sizers();
void delete_subwindows();
void refresh_tabs();
protected:
wxBoxSizer* m_top_sizer { nullptr };
wxBoxSizer* m_left_sizer { nullptr };
wxBoxSizer* m_mode_sizer { nullptr };
// // BBS: new layout
StaticBox* m_top_panel{ nullptr };
ScalableButton* m_process_icon{ nullptr };
wxStaticText* m_title_label { nullptr };
SwitchButton* m_mode_region { nullptr };
ScalableButton *m_tips_arrow{nullptr};
bool m_tips_arror_blink{false};
wxStaticText* m_title_view { nullptr };
SwitchButton* m_mode_view { nullptr };
//wxBitmapButton* m_search_button { nullptr };
wxStaticLine* m_staticline_print { nullptr };
//wxBoxSizer* m_print_sizer { nullptr };
wxPanel* m_tab_print { nullptr };
wxPanel* m_tab_print_plate { nullptr };
wxPanel* m_tab_print_object { nullptr };
wxStaticLine* m_staticline_print_object { nullptr };
wxPanel* m_tab_print_part { nullptr };
wxPanel* m_tab_print_layer { nullptr };
wxStaticLine* m_staticline_print_part { nullptr };
wxStaticLine* m_staticline_filament { nullptr };
//wxBoxSizer* m_filament_sizer { nullptr };
wxPanel* m_tab_filament { nullptr };
wxStaticLine* m_staticline_printer { nullptr };
//wxBoxSizer* m_printer_sizer { nullptr };
wxPanel* m_tab_printer { nullptr };
wxStaticLine* m_staticline_config{ nullptr };
wxPanel* m_tab_config { nullptr };
//wxStaticLine* m_staticline_buttons { nullptr };
// BBS: new layout
wxBoxSizer* m_button_sizer { nullptr };
wxWindow* m_export_to_file { nullptr };
wxWindow* m_import_from_file { nullptr };
//wxStaticLine* m_staticline_middle{ nullptr };
//wxBoxSizer* m_right_sizer { nullptr };
wxScrolledWindow* m_page_view { nullptr };
wxBoxSizer* m_page_sizer { nullptr };
ScalableButton* m_setting_btn { nullptr };
ScalableButton* m_search_btn { nullptr };
ScalableButton* m_compare_btn { nullptr };
wxBitmap m_toggle_on_icon;
wxBitmap m_toggle_off_icon;
wxPanel* m_current_tab { nullptr };
bool m_has_object_config { false };
struct Highlighter
{
void set_timer_owner(wxEvtHandler *owner, int timerid = wxID_ANY);
void init(std::pair<wxWindow *, bool *>, wxWindow *parent = nullptr);
void blink();
void invalidate();
private:
wxWindow * m_bitmap{nullptr};
bool * m_show_blink_ptr{nullptr};
int m_blink_counter{0};
wxTimer m_timer;
wxWindow * m_parent { nullptr };
} m_highlighter;
void OnToggled(wxCommandEvent& event);
public:
ParamsPanel( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 1800,1080 ), long style = wxTAB_TRAVERSAL, const wxString& type = wxEmptyString );
~ParamsPanel();
void rebuild_panels();
void create_layout();
//clear the right page
void clear_page();
void OnActivate();
void set_active_tab(wxPanel*tab);
bool is_active_and_shown_tab(wxPanel*tab);
void update_mode();
void msw_rescale();
void switch_to_global();
void switch_to_object(bool with_tips = false);
void notify_object_config_changed();
void switch_to_object_if_has_object_configs();
StaticBox* get_top_panel() { return m_top_panel; }
wxPanel* filament_panel() { return m_tab_filament; }
wxScrolledWindow* get_paged_view() { return m_page_view;}
wxPanel* get_current_tab() { return m_current_tab; }
};
} // GUI
} // Slic3r
#endif //slic3r_params_panel_hpp_