#include "MediaFilePanel.h" #include "ImageGrid.h" #include "I18N.hpp" #include "GUI_App.hpp" #include "Widgets/Button.hpp" #include "Widgets/SwitchButton.hpp" #include "Widgets/Label.hpp" #include "Printer/PrinterFileSystem.h" namespace Slic3r { namespace GUI { MediaFilePanel::MediaFilePanel(wxWindow * parent) : wxPanel(parent, wxID_ANY) , m_bmp_loading(this, "media_loading", 0) , m_bmp_failed(this, "media_failed", 0) , m_bmp_empty(this, "media_empty", 0) { SetBackgroundColour(0xEEEEEE); Hide(); wxBoxSizer * sizer = new wxBoxSizer(wxVERTICAL); wxBoxSizer * top_sizer = new wxBoxSizer(wxHORIZONTAL); top_sizer->SetMinSize({-1, 75 * em_unit(this) / 10}); // Time group m_time_panel = new ::StaticBox(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE); m_time_panel->SetBackgroundColor(StateColor()); m_button_year = new ::Button(m_time_panel, _L("Year"), "", wxBORDER_NONE); m_button_month = new ::Button(m_time_panel, _L("Month"), "", wxBORDER_NONE); m_button_all = new ::Button(m_time_panel, _L("All Files"), "", wxBORDER_NONE); m_button_year->SetToolTip(L("Group files by year, recent first.")); m_button_month->SetToolTip(L("Group files by month, recent first.")); m_button_all->SetToolTip(L("Show all files, recent first.")); m_button_all->SetFont(Label::Head_14); // sync with m_last_mode for (auto b : {m_button_year, m_button_month, m_button_all}) { b->SetBackgroundColor(StateColor()); b->SetTextColor(StateColor( std::make_pair(0x3B4446, (int) StateColor::Checked), std::make_pair(*wxLIGHT_GREY, (int) StateColor::Hovered), std::make_pair(0xABACAC, (int) StateColor::Normal) )); } wxBoxSizer *time_sizer = new wxBoxSizer(wxHORIZONTAL); time_sizer->Add(m_button_year, 0, wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT, 24); time_sizer->Add(m_button_month, 0, wxALIGN_CENTER_VERTICAL); time_sizer->Add(m_button_all, 0, wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT, 24); m_time_panel->SetSizer(time_sizer); top_sizer->Add(m_time_panel, 1, wxEXPAND); // File type StateColor background( std::make_pair(0xEEEEEE, (int) StateColor::Checked), std::make_pair(*wxLIGHT_GREY, (int) StateColor::Hovered), std::make_pair(*wxWHITE, (int) StateColor::Normal)); m_type_panel = new ::StaticBox(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE); m_type_panel->SetBackgroundColor(*wxWHITE); m_type_panel->SetCornerRadius(FromDIP(5)); m_type_panel->SetMinSize({-1, 48 * em_unit(this) / 10}); m_button_timelapse = new ::Button(m_type_panel, _L("Timelapse"), "", wxBORDER_NONE); m_button_timelapse->SetToolTip(L("Switch to timelapse files.")); m_button_video = new ::Button(m_type_panel, _L("Video"), "", wxBORDER_NONE); m_button_video->SetToolTip(L("Switch to video files.")); for (auto b : {m_button_timelapse, m_button_video} ) { b->SetBackgroundColor(background); b->SetCanFocus(false); } wxBoxSizer *type_sizer = new wxBoxSizer(wxHORIZONTAL); type_sizer->Add(m_button_timelapse, 0, wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT, 24); type_sizer->Add(m_button_video, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 24); m_type_panel->SetSizer(type_sizer); m_type_panel->Hide(); // top_sizer->Add(m_type_panel, 0, wxALIGN_CENTER_VERTICAL); // File management m_manage_panel = new ::StaticBox(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE); m_manage_panel->SetBackgroundColor(StateColor()); m_button_delete = new ::Button(m_manage_panel, _L("Delete")); m_button_delete->SetToolTip(L("Delete selected files from printer.")); m_button_download = new ::Button(m_manage_panel, _L("Download")); m_button_download->SetToolTip(L("Download selected files from printer.")); m_button_management = new ::Button(m_manage_panel, _L("Select")); m_button_management->SetToolTip(L("Batch manage files.")); for (auto b : {m_button_delete, m_button_download, m_button_management}) { b->SetFont(Label::Body_12); b->SetCornerRadius(12); b->SetPaddingSize({10, 6}); b->SetCanFocus(false); } m_button_delete->SetBorderColorNormal(wxColor("#FF6F00")); m_button_delete->SetTextColorNormal(wxColor("#FF6F00")); m_button_management->SetBorderWidth(0); m_button_management->SetBackgroundColorNormal(wxColor("#00AE42")); m_button_management->SetTextColorNormal(*wxWHITE); m_button_management->Enable(false); wxBoxSizer *manage_sizer = new wxBoxSizer(wxHORIZONTAL); manage_sizer->AddStretchSpacer(1); manage_sizer->Add(m_button_download, 0, wxALIGN_CENTER_VERTICAL)->Show(false); manage_sizer->Add(m_button_delete, 0, wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT, 24)->Show(false); manage_sizer->Add(m_button_management, 0, wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT, 24); m_manage_panel->SetSizer(manage_sizer); top_sizer->Add(m_manage_panel, 1, wxEXPAND); sizer->Add(top_sizer, 0, wxEXPAND); m_image_grid = new ImageGrid(this); m_image_grid->SetStatus(m_bmp_failed, _L("No printers.")); sizer->Add(m_image_grid, 1, wxEXPAND); SetSizer(sizer); // Time group auto time_button_clicked = [this](wxEvent &e) { auto mode = PrinterFileSystem::G_NONE; if (e.GetEventObject() == m_button_year) mode = PrinterFileSystem::G_YEAR; else if (e.GetEventObject() == m_button_month) mode = PrinterFileSystem::G_MONTH; m_image_grid->SetGroupMode(mode); }; m_button_year->Bind(wxEVT_COMMAND_BUTTON_CLICKED, time_button_clicked); m_button_month->Bind(wxEVT_COMMAND_BUTTON_CLICKED, time_button_clicked); m_button_all->Bind(wxEVT_COMMAND_BUTTON_CLICKED, time_button_clicked); m_button_all->SetValue(true); // File type auto type_button_clicked = [this](wxEvent &e) { auto type = PrinterFileSystem::F_TIMELAPSE; auto b = dynamic_cast