NEW: add plate name edit function

Change-Id: Ic2aacd8617856efd2f528bddab74e5881df28e01
(cherry picked from commit b0bd89928ed974aa77a0b2f4138c53899ae8ba93)
This commit is contained in:
zhou.xu 2023-06-29 16:26:43 +08:00 committed by Lane.Wei
parent e9f3ddb61b
commit e55aa34da0
11 changed files with 247 additions and 28 deletions

View File

@ -0,0 +1,3 @@
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.5131 3.11974L14.6335 3.23273C15.5708 4.16997 15.6083 5.66627 14.746 6.64825L14.6335 6.76825L6.87213 14.1673H3.3363V10.6315L11.0975 3.23227C12.0348 2.29498 13.5311 2.25748 14.5131 3.11974ZM16.6429 15.8337C17.1162 15.8337 17.5 16.2068 17.5 16.6671C17.5 17.1273 17.1162 17.5004 16.6429 17.5004H3.35714C2.88376 17.5004 2.5 17.1273 2.5 16.6671C2.5 16.2068 2.88376 15.8337 3.35714 15.8337H16.6429ZM12.2762 4.41124L12.3547 4.34192C12.6816 4.08778 13.1542 4.11088 13.4545 4.41124C13.7799 4.73663 13.7799 5.26418 13.4545 5.58957L6.1813 12.5006H5.00296V11.3223L12.2762 4.41124Z" fill="#00AE42"/>
</svg>

After

Width:  |  Height:  |  Size: 742 B

View File

@ -0,0 +1,3 @@
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.5131 3.11974L14.6335 3.23273C15.5708 4.16997 15.6083 5.66627 14.746 6.64825L14.6335 6.76825L6.87213 14.1673H3.3363V10.6315L11.0975 3.23227C12.0348 2.29498 13.5311 2.25748 14.5131 3.11974ZM16.6429 15.8337C17.1162 15.8337 17.5 16.2068 17.5 16.6671C17.5 17.1273 17.1162 17.5004 16.6429 17.5004H3.35714C2.88376 17.5004 2.5 17.1273 2.5 16.6671C2.5 16.2068 2.88376 15.8337 3.35714 15.8337H16.6429ZM12.2762 4.41124L12.3547 4.34192C12.6816 4.08778 13.1542 4.11088 13.4545 4.41124C13.7799 4.73663 13.7799 5.26418 13.4545 5.58957L6.1813 12.5006H5.00296V11.3223L12.2762 4.41124Z" fill="#00AE42"/>
</svg>

After

Width:  |  Height:  |  Size: 742 B

View File

@ -0,0 +1,4 @@
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.5131 3.11974L14.6335 3.23273C15.5708 4.16997 15.6083 5.66627 14.746 6.64825L14.6335 6.76825L6.87213 14.1673H3.3363V10.6315L11.0975 3.23227C12.0348 2.29498 13.5311 2.25748 14.5131 3.11974ZM16.6429 15.8337C17.1162 15.8337 17.5 16.2068 17.5 16.6671C17.5 17.1273 17.1162 17.5004 16.6429 17.5004H3.35714C2.88376 17.5004 2.5 17.1273 2.5 16.6671C2.5 16.2068 2.88376 15.8337 3.35714 15.8337H16.6429ZM12.2762 4.41124L12.3547 4.34192C12.6816 4.08778 13.1542 4.11088 13.4545 4.41124C13.7799 4.73663 13.7799 5.26418 13.4545 5.58957L6.1813 12.5006H5.00296V11.3223L12.2762 4.41124Z" fill="#00AE42"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.5131 3.11974L14.6335 3.23273C15.5708 4.16997 15.6083 5.66627 14.746 6.64825L14.6335 6.76825L6.87213 14.1673H3.3363V10.6315L11.0975 3.23227C12.0348 2.29498 13.5311 2.25748 14.5131 3.11974ZM16.6429 15.8337C17.1162 15.8337 17.5 16.2068 17.5 16.6671C17.5 17.1273 17.1162 17.5004 16.6429 17.5004H3.35714C2.88376 17.5004 2.5 17.1273 2.5 16.6671C2.5 16.2068 2.88376 15.8337 3.35714 15.8337H16.6429ZM12.2762 4.41124L12.3547 4.34192C12.6816 4.08778 13.1542 4.11088 13.4545 4.41124C13.7799 4.73663 13.7799 5.26418 13.4545 5.58957L6.1813 12.5006H5.00296V11.3223L12.2762 4.41124Z" fill="black" fill-opacity="0.2"/>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -0,0 +1,4 @@
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.5131 3.11974L14.6335 3.23273C15.5708 4.16997 15.6083 5.66627 14.746 6.64825L14.6335 6.76825L6.87213 14.1673H3.3363V10.6315L11.0975 3.23227C12.0348 2.29498 13.5311 2.25748 14.5131 3.11974ZM16.6429 15.8337C17.1162 15.8337 17.5 16.2068 17.5 16.6671C17.5 17.1273 17.1162 17.5004 16.6429 17.5004H3.35714C2.88376 17.5004 2.5 17.1273 2.5 16.6671C2.5 16.2068 2.88376 15.8337 3.35714 15.8337H16.6429ZM12.2762 4.41124L12.3547 4.34192C12.6816 4.08778 13.1542 4.11088 13.4545 4.41124C13.7799 4.73663 13.7799 5.26418 13.4545 5.58957L6.1813 12.5006H5.00296V11.3223L12.2762 4.41124Z" fill="#00AE42"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.5131 3.11974L14.6335 3.23273C15.5708 4.16997 15.6083 5.66627 14.746 6.64825L14.6335 6.76825L6.87213 14.1673H3.3363V10.6315L11.0975 3.23227C12.0348 2.29498 13.5311 2.25748 14.5131 3.11974ZM16.6429 15.8337C17.1162 15.8337 17.5 16.2068 17.5 16.6671C17.5 17.1273 17.1162 17.5004 16.6429 17.5004H3.35714C2.88376 17.5004 2.5 17.1273 2.5 16.6671C2.5 16.2068 2.88376 15.8337 3.35714 15.8337H16.6429ZM12.2762 4.41124L12.3547 4.34192C12.6816 4.08778 13.1542 4.11088 13.4545 4.41124C13.7799 4.73663 13.7799 5.26418 13.4545 5.58957L6.1813 12.5006H5.00296V11.3223L12.2762 4.41124Z" fill="white" fill-opacity="0.2"/>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -112,6 +112,7 @@ namespace GUI {
bool generate_from_text_string(const std::string& text_str, wxFont& font, wxColor background = *wxBLACK, wxColor foreground = *wxWHITE);
unsigned int get_id() const { return m_id; }
int get_original_width() const { return m_original_width; }
int get_width() const { return m_width; }
int get_height() const { return m_height; }

View File

@ -1657,7 +1657,7 @@ void MenuFactory::append_menu_item_fill_bed(wxMenu *menu)
}
void MenuFactory::append_menu_item_plate_name(wxMenu *menu)
{
wxString name= _L("Edit plate settings");
wxString name= _L("Edit Plate Name");
// Delete old menu item
const int item_id = menu->FindItem(name);
if (item_id != wxNOT_FOUND) menu->Destroy(item_id);

View File

@ -55,6 +55,7 @@ static const int PARTPLATE_ICON_GAP_Y = 5;
static const int PARTPLATE_TEXT_OFFSET_X1 = 3;
static const int PARTPLATE_TEXT_OFFSET_X2 = 1;
static const int PARTPLATE_TEXT_OFFSET_Y = 1;
static const int PARTPLATE_PLATENAME_OFFSET_Y = 10;
std::array<unsigned char, 4> PlateTextureForeground = {0x0, 0xae, 0x42, 0xff};
namespace Slic3r {
@ -423,11 +424,11 @@ void PartPlate::calc_vertex_for_plate_name(GLTexture &texture, GeometryBuffer &b
float offset_x = 1;
w = int(factor * (texture.get_width() * 16) / texture.get_height());
h = int(factor * 16);
Vec2d p = bed_ext[3] + Vec2d(0, 1 + h * texture.m_original_height / texture.get_height());
poly.contour.append({scale_(p(0) + PARTPLATE_ICON_GAP_LEFT + offset_x), scale_(p(1) - h + PARTPLATE_TEXT_OFFSET_Y)});
poly.contour.append({scale_(p(0) + PARTPLATE_ICON_GAP_LEFT + w - offset_x), scale_(p(1) - h + PARTPLATE_TEXT_OFFSET_Y)});
poly.contour.append({scale_(p(0) + PARTPLATE_ICON_GAP_LEFT + w - offset_x), scale_(p(1) - PARTPLATE_TEXT_OFFSET_Y)});
poly.contour.append({scale_(p(0) + PARTPLATE_ICON_GAP_LEFT + offset_x), scale_(p(1) - PARTPLATE_TEXT_OFFSET_Y)});
Vec2d p = bed_ext[3] + Vec2d(0, PARTPLATE_PLATENAME_OFFSET_Y + h * texture.m_original_height / texture.get_height());
poly.contour.append({scale_(p(0) + PARTPLATE_ICON_GAP_LEFT + offset_x), scale_(p(1) - h )});
poly.contour.append({scale_(p(0) + PARTPLATE_ICON_GAP_LEFT + w - offset_x), scale_(p(1) - h )});
poly.contour.append({scale_(p(0) + PARTPLATE_ICON_GAP_LEFT + w - offset_x), scale_(p(1) )});
poly.contour.append({scale_(p(0) + PARTPLATE_ICON_GAP_LEFT + offset_x), scale_(p(1) )});
auto triangles = triangulate_expolygon_2f(poly, NORMALS_UP);
if (!buffer.set_from_triangles(triangles, GROUND_Z)) BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << "Unable to generate geometry buffers for icons\n";
@ -439,6 +440,46 @@ void PartPlate::calc_vertex_for_plate_name(GLTexture &texture, GeometryBuffer &b
}
}
void PartPlate::calc_vertex_for_plate_name_edit_icon(GLTexture *texture, int index, GeometryBuffer &buffer) {
auto bed_ext = get_extents(m_shape);
auto factor = bed_ext.size()(1) / 200.0;
wxCoord w, h;
h = int(factor * 16);
ExPolygon poly;
Vec2d p = bed_ext[3];
float offset_x = 1;
const int plate_name_edit_icon_height = 12;
const int plate_name_edit_icon_width = 12;
h = plate_name_edit_icon_height;
p += Vec2d(0, PARTPLATE_PLATENAME_OFFSET_Y + h);
if (texture && texture->get_width() > 0 && texture->get_height()) {
w = int(factor * (texture->get_original_width() * 16) / texture->get_height()) + 1;
poly.contour.append({scale_(p(0) + PARTPLATE_ICON_GAP_LEFT + w), scale_(p(1) - h )});
poly.contour.append({scale_(p(0) + PARTPLATE_ICON_GAP_LEFT + w + plate_name_edit_icon_width), scale_(p(1) - h )});
poly.contour.append({scale_(p(0) + PARTPLATE_ICON_GAP_LEFT + w + plate_name_edit_icon_width), scale_(p(1) )});
poly.contour.append({scale_(p(0) + PARTPLATE_ICON_GAP_LEFT + w), scale_(p(1) )});
auto triangles = triangulate_expolygon_2f(poly, NORMALS_UP);
if (!buffer.set_from_triangles(triangles, GROUND_Z))
BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << "Unable to generate geometry buffers for icons\n";
} else {
poly.contour.append({scale_(p(0) + PARTPLATE_ICON_GAP_LEFT + offset_x ), scale_(p(1) - h )});
poly.contour.append({scale_(p(0) + PARTPLATE_ICON_GAP_LEFT + offset_x+ plate_name_edit_icon_width), scale_(p(1) - h )});
poly.contour.append({scale_(p(0) + PARTPLATE_ICON_GAP_LEFT + offset_x+ plate_name_edit_icon_width), scale_(p(1) )});
poly.contour.append({scale_(p(0) + PARTPLATE_ICON_GAP_LEFT + offset_x), scale_(p(1) )});
auto triangles = triangulate_expolygon_2f(poly, NORMALS_UP);
if (!buffer.set_from_triangles(triangles, GROUND_Z))
BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << "Unable to generate geometry buffers for icons\n";
}
if (m_plate_name_edit_vbo_id > 0) {
glsafe(::glDeleteBuffers(1, &m_plate_name_edit_vbo_id));
m_plate_name_edit_vbo_id = 0;
}
}
void PartPlate::calc_vertex_for_icons(int index, GeometryBuffer &buffer)
{
ExPolygon poly;
@ -795,12 +836,18 @@ void PartPlate::render_icon_texture(int position_id, int tex_coords_id, const Ge
void PartPlate::render_plate_name_texture(int position_id, int tex_coords_id)
{
if (m_name.length() == 0) {
if (m_name_change) {
m_name_change = false;
calc_vertex_for_plate_name_edit_icon(nullptr, 0, m_plate_name_edit_icon);
}
return;
}
if (m_name_texture.get_id() == 0 || m_name_change) {
m_name_change = false;
generate_plate_name_texture();
calc_vertex_for_plate_name(m_name_texture, m_plate_name_icon);
calc_vertex_for_plate_name_edit_icon(&m_name_texture, 0, m_plate_name_edit_icon);
}
if (m_plate_name_vbo_id == 0 && m_plate_name_icon.get_vertices_data_size() > 0) {
@ -871,7 +918,12 @@ void PartPlate::render_icons(bool bottom, bool only_body, int hover_id)
render_icon_texture(position_id, tex_coords_id, m_lock_icon, m_partplate_list->m_lockopen_texture, m_lock_vbo_id);
}
if (m_partplate_list->render_plate_settings) {
if (hover_id == 6)
render_icon_texture(position_id, tex_coords_id, m_plate_name_edit_icon, m_partplate_list->m_plate_name_edit_hovered_texture, m_plate_name_edit_vbo_id);
else
render_icon_texture(position_id, tex_coords_id, m_plate_name_edit_icon, m_partplate_list->m_plate_name_edit_texture, m_plate_name_edit_vbo_id);
if (m_partplate_list->render_plate_settings) {
if (hover_id == 5) {
if (get_bed_type() == BedType::btDefault && get_print_seq() == PrintSequence::ByDefault)
render_icon_texture(position_id, tex_coords_id, m_plate_settings_icon, m_partplate_list->m_plate_settings_hovered_texture, m_plate_settings_vbo_id);
@ -1223,6 +1275,14 @@ void PartPlate::on_render_for_picking() const {
m_grabber_color[3] = color[3];
if (m_partplate_list->render_plate_settings)
render_rectangle_for_picking(m_plate_settings_icon, m_grabber_color);
hover_id = 6;
color = picking_color_component(hover_id);
m_grabber_color[0] = color[0];
m_grabber_color[1] = color[1];
m_grabber_color[2] = color[2];
m_grabber_color[3] = color[3];
// render_left_arrow(m_grabber_color, false);
render_rectangle_for_picking(m_plate_name_edit_icon, m_grabber_color);
}
std::array<float, 4> PartPlate::picking_color_component(int idx) const
@ -1271,6 +1331,10 @@ void PartPlate::release_opengl_resource()
glsafe(::glDeleteBuffers(1, &m_plate_name_vbo_id));
m_plate_name_vbo_id = 0;
}
if (m_plate_name_edit_vbo_id > 0) {
glsafe(::glDeleteBuffers(1, &m_plate_name_edit_vbo_id));
m_plate_name_edit_vbo_id = 0;
}
}
std::vector<int> PartPlate::get_extruders(bool conside_custom_gcode) const
@ -2273,6 +2337,7 @@ bool PartPlate::set_shape(const Pointfs& shape, const Pointfs& exclude_areas, Ve
//calc_vertex_for_number(0, (m_plate_index < 9), m_plate_idx_icon);
calc_vertex_for_number(0, false, m_plate_idx_icon);
calc_vertex_for_plate_name(m_name_texture, m_plate_name_icon);//if (generate_plate_name_texture())
calc_vertex_for_plate_name_edit_icon(&m_name_texture, 0, m_plate_name_edit_icon);
}
calc_height_limit();
@ -2819,6 +2884,21 @@ void PartPlateList::generate_icon_textures()
}
}
// if (m_plate_name_edit_texture.get_id() == 0)
{
file_name = path + (m_is_dark ? "plate_name_edit_dark.svg" : "plate_name_edit.svg");
if (!m_plate_name_edit_texture.load_from_svg_file(file_name, true, false, false, icon_size)) {
BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(":load file %1% failed") % file_name;
}
}
// if (m_plate_name_edit_hovered_texture.get_id() == 0)
{
file_name = path + (m_is_dark ? "plate_name_edit_hover_dark.svg" : "plate_name_edit_hover.svg");
if (!m_plate_name_edit_hovered_texture.load_from_svg_file(file_name, true, false, false, icon_size)) {
BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(":load file %1% failed") % file_name;
}
}
auto is_font_suitable = [](std::string text_str, wxFont& font, int max_size) {
wxMemoryDC memDC;
wxCoord w, h;
@ -2878,7 +2958,8 @@ void PartPlateList::release_icon_textures()
m_plate_settings_texture.reset();
m_plate_settings_texture.reset();
m_plate_settings_hovered_texture.reset();
m_plate_name_edit_texture.reset();
m_plate_name_edit_hovered_texture.reset();
for (int i = 0;i < MAX_PLATE_COUNT; i++) {
m_idx_textures[i].reset();
}

View File

@ -125,6 +125,7 @@ private:
GeometryBuffer m_height_limit_bottom;
GeometryBuffer m_height_limit_top;
GeometryBuffer m_del_icon;
GeometryBuffer m_plate_name_edit_icon;
//GeometryBuffer m_del_and_background_icon;
mutable unsigned int m_del_vbo_id{ 0 };
GeometryBuffer m_arrange_icon;
@ -137,6 +138,7 @@ private:
mutable unsigned int m_plate_settings_vbo_id{ 0 };
GeometryBuffer m_plate_idx_icon;
mutable unsigned int m_plate_idx_vbo_id{ 0 };
mutable unsigned int m_plate_name_edit_vbo_id{0};
GLTexture m_texture;
mutable float m_grabber_color[4];
@ -167,6 +169,7 @@ private:
void calc_height_limit();
void calc_vertex_for_number(int index, bool one_number, GeometryBuffer &buffer);
void calc_vertex_for_plate_name(GLTexture& texture, GeometryBuffer &buffer);
void calc_vertex_for_plate_name_edit_icon(GLTexture *texture, int index, GeometryBuffer &buffer);
void calc_vertex_for_icons(int index, GeometryBuffer &buffer);
void calc_vertex_for_icons_background(int icon_count, GeometryBuffer &buffer);
void render_background(bool force_default_color = false) const;
@ -193,7 +196,8 @@ private:
public:
static const unsigned int PLATE_BASE_ID = 255 * 255 * 253;
static const unsigned int GRABBER_COUNT = 6;
static const unsigned int PLATE_NAME_HOVER_ID = 6;
static const unsigned int GRABBER_COUNT = 7;
static std::array<float, 4> SELECT_COLOR;
static std::array<float, 4> UNSELECT_COLOR;
@ -518,6 +522,8 @@ class PartPlateList : public ObjectBase
GLTexture m_plate_settings_changed_texture;
GLTexture m_plate_settings_hovered_texture;
GLTexture m_plate_settings_changed_hovered_texture;
GLTexture m_plate_name_edit_texture;
GLTexture m_plate_name_edit_hovered_texture;
GLTexture m_idx_textures[MAX_PLATE_COUNT];
// set render option
bool render_bedtype_logo = true;

View File

@ -43,13 +43,6 @@ PlateSettingsDialog::PlateSettingsDialog(wxWindow* parent, wxWindowID id, const
top_sizer->Add(m_print_seq_txt, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT |wxALL, FromDIP(5));
top_sizer->Add(m_print_seq_choice, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT |wxALL, FromDIP(5));
auto plate_name_txt = new wxStaticText(this, wxID_ANY, _L("Plate name"));
plate_name_txt->SetFont(Label::Body_14);
m_ti_plate_name = new TextInput(this, wxString::FromDouble(0.0), "", "", wxDefaultPosition, wxSize(FromDIP(240), -1), wxTE_PROCESS_ENTER);
top_sizer->Add(plate_name_txt, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT | wxALL, FromDIP(5));
top_sizer->Add(m_ti_plate_name, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxALL, FromDIP(5));
m_ti_plate_name->GetTextCtrl()->SetMaxLength(40);
m_sizer_main->Add(top_sizer, 0, wxEXPAND | wxALL, FromDIP(30));
auto sizer_button = new wxBoxSizer(wxHORIZONTAL);
@ -156,11 +149,101 @@ void PlateSettingsDialog::on_dpi_changed(const wxRect& suggested_rect)
m_button_cancel->Rescale();
}
wxString PlateSettingsDialog::get_plate_name() const { return m_ti_plate_name->GetTextCtrl()->GetValue();
//PlateNameEditDialog
PlateNameEditDialog::PlateNameEditDialog(wxWindow *parent, wxWindowID id, const wxString &title, const wxPoint &pos, const wxSize &size, long style)
: DPIDialog(parent, id, title, pos, size, style)
{
std::string icon_path = (boost::format("%1%/images/BambuStudioTitle.ico") % resources_dir()).str();
SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO));
SetBackgroundColour(*wxWHITE);
wxBoxSizer *m_sizer_main = new wxBoxSizer(wxVERTICAL);
auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(400), -1));
m_line_top->SetBackgroundColour(wxColour(166, 169, 170));
m_sizer_main->Add(m_line_top, 0, wxEXPAND, 0);
m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(5));
wxFlexGridSizer *top_sizer = new wxFlexGridSizer(0, 2, FromDIP(5), 0);
top_sizer->AddGrowableCol(0, 1);
top_sizer->SetFlexibleDirection(wxBOTH);
top_sizer->SetNonFlexibleGrowMode(wxFLEX_GROWMODE_SPECIFIED);
auto plate_name_txt = new wxStaticText(this, wxID_ANY, _L("Plate name"));
plate_name_txt->SetFont(Label::Body_14);
m_ti_plate_name = new TextInput(this, wxString::FromDouble(0.0), "", "", wxDefaultPosition, wxSize(FromDIP(240), -1), wxTE_PROCESS_ENTER);
top_sizer->Add(plate_name_txt, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT | wxALL, FromDIP(5));
top_sizer->Add(m_ti_plate_name, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxALL, FromDIP(5));
m_ti_plate_name->GetTextCtrl()->SetMaxLength(40);
m_sizer_main->Add(top_sizer, 0, wxEXPAND | wxALL, FromDIP(30));
auto sizer_button = new wxBoxSizer(wxHORIZONTAL);
StateColor btn_bg_green(std::pair<wxColour, int>(wxColour(27, 136, 68), StateColor::Pressed), std::pair<wxColour, int>(wxColour(61, 203, 115), StateColor::Hovered),
std::pair<wxColour, int>(wxColour(0, 174, 66), StateColor::Normal));
StateColor btn_bg_white(std::pair<wxColour, int>(wxColour(206, 206, 206), StateColor::Pressed), std::pair<wxColour, int>(wxColour(238, 238, 238), StateColor::Hovered),
std::pair<wxColour, int>(*wxWHITE, StateColor::Normal));
m_button_ok = new Button(this, _L("OK"));
m_button_ok->SetBackgroundColor(btn_bg_green);
m_button_ok->SetBorderColor(*wxWHITE);
m_button_ok->SetTextColor(wxColour("#FFFFFE"));
m_button_ok->SetFont(Label::Body_12);
m_button_ok->SetSize(wxSize(FromDIP(58), FromDIP(24)));
m_button_ok->SetMinSize(wxSize(FromDIP(58), FromDIP(24)));
m_button_ok->SetCornerRadius(FromDIP(12));
m_button_ok->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &e) {
wxCommandEvent evt(EVT_SET_BED_TYPE_CONFIRM, GetId());
e.SetEventObject(this);
GetEventHandler()->ProcessEvent(evt);
if (this->IsModal())
EndModal(wxID_YES);
else
this->Close();
});
m_button_cancel = new Button(this, _L("Cancel"));
m_button_cancel->SetBackgroundColor(btn_bg_white);
m_button_cancel->SetBorderColor(wxColour(38, 46, 48));
m_button_cancel->SetFont(Label::Body_12);
m_button_cancel->SetSize(wxSize(FromDIP(58), FromDIP(24)));
m_button_cancel->SetMinSize(wxSize(FromDIP(58), FromDIP(24)));
m_button_cancel->SetCornerRadius(FromDIP(12));
m_button_cancel->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &e) {
if (this->IsModal())
EndModal(wxID_NO);
else
this->Close();
});
sizer_button->AddStretchSpacer();
sizer_button->Add(m_button_ok, 0, wxALL, FromDIP(5));
sizer_button->Add(m_button_cancel, 0, wxALL, FromDIP(5));
sizer_button->Add(FromDIP(30), 0, 0, 0);
m_sizer_main->Add(sizer_button, 0, wxEXPAND, FromDIP(20));
SetSizer(m_sizer_main);
Layout();
m_sizer_main->Fit(this);
CenterOnParent();
wxGetApp().UpdateDlgDarkUI(this);
}
void PlateSettingsDialog::set_plate_name(const wxString &name) {
m_ti_plate_name->GetTextCtrl()->SetValue(name); }
PlateNameEditDialog::~PlateNameEditDialog() {}
void PlateNameEditDialog::on_dpi_changed(const wxRect &suggested_rect)
{
m_button_ok->Rescale();
m_button_cancel->Rescale();
}
wxString PlateNameEditDialog::get_plate_name() const { return m_ti_plate_name->GetTextCtrl()->GetValue(); }
void PlateNameEditDialog::set_plate_name(const wxString &name) { m_ti_plate_name->GetTextCtrl()->SetValue(name); }
}} // namespace Slic3r::GUI

View File

@ -49,17 +49,35 @@ public:
return choice;
};
wxString get_plate_name() const;
void set_plate_name(const wxString &name);
protected:
ComboBox* m_print_seq_choice { nullptr };
ComboBox* m_bed_type_choice { nullptr };
Button* m_button_ok;
Button* m_button_cancel;
TextInput *m_ti_plate_name;
};
class PlateNameEditDialog : public DPIDialog
{
public:
enum ButtonStyle { ONLY_CONFIRM = 0, CONFIRM_AND_CANCEL = 1, MAX_STYLE_NUM = 2 };
PlateNameEditDialog(wxWindow * parent,
wxWindowID id = wxID_ANY,
const wxString &title = wxEmptyString,
const wxPoint & pos = wxDefaultPosition,
const wxSize & size = wxDefaultSize,
long style = wxCLOSE_BOX | wxCAPTION);
~PlateNameEditDialog();
void on_dpi_changed(const wxRect &suggested_rect) override;
wxString get_plate_name() const;
void set_plate_name(const wxString &name);
protected:
Button * m_button_ok;
Button * m_button_cancel;
TextInput *m_ti_plate_name;
};
}} // namespace Slic3r::GUI
#endif

View File

@ -11808,7 +11808,7 @@ int Plater::select_plate_by_hover_id(int hover_id, bool right_click, bool isModi
int action, plate_index;
plate_index = hover_id / PartPlate::GRABBER_COUNT;
action = isModidyPlateName?5:hover_id % PartPlate::GRABBER_COUNT;
action = isModidyPlateName ? PartPlate::PLATE_NAME_HOVER_ID : hover_id % PartPlate::GRABBER_COUNT;
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": enter, hover_id %1%, plate_index %2%, action %3%")%hover_id % plate_index %action;
if (action == 0)
@ -11952,8 +11952,6 @@ int Plater::select_plate_by_hover_id(int hover_id, bool right_click, bool isModi
else
dlg.sync_print_seq(0);
wxString curr_plate_name = from_u8(curr_plate->get_plate_name());
dlg.set_plate_name(curr_plate_name);
dlg.Bind(EVT_SET_BED_TYPE_CONFIRM, [this, plate_index, &dlg](wxCommandEvent& e) {
PartPlate *curr_plate = p->partplate_list.get_curr_plate();
@ -11980,12 +11978,30 @@ int Plater::select_plate_by_hover_id(int hover_id, bool right_click, bool isModi
});
dlg.ShowModal();
this->schedule_background_process();
}
else {
BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << "can not select plate %1%" << plate_index;
ret = -1;
}
}
else if ((action == 6) && (!right_click)) {
// set the plate type
ret = select_plate(plate_index);
if (!ret) {
PlateNameEditDialog dlg(this, wxID_ANY, _L("Edit Plate Name"));
PartPlate * curr_plate = p->partplate_list.get_curr_plate();
wxString curr_plate_name = from_u8(curr_plate->get_plate_name());
dlg.set_plate_name(curr_plate_name);
dlg.ShowModal();
wxString dlg_plate_name = dlg.get_plate_name();
curr_plate->set_plate_name(dlg_plate_name.ToUTF8().data());
this->schedule_background_process();
}
else {
} else {
BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << "can not select plate %1%" << plate_index;
ret = -1;
}