NEW: add plate name edit function
Change-Id: Ic2aacd8617856efd2f528bddab74e5881df28e01 (cherry picked from commit b0bd89928ed974aa77a0b2f4138c53899ae8ba93)
This commit is contained in:
parent
e9f3ddb61b
commit
e55aa34da0
|
@ -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 |
|
@ -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 |
|
@ -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 |
|
@ -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 |
|
@ -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; }
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
|
@ -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
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue