From 65ff90690f447c70dd5618d4d82be3827dc32f20 Mon Sep 17 00:00:00 2001 From: tao wang Date: Thu, 8 Dec 2022 10:56:18 +0800 Subject: [PATCH] NEW:optimize text wrap and tips for sending prints Change-Id: I6e1aa8eba4d7bf948068126cd25216e8dbc68413 --- src/slic3r/GUI/BBLStatusBarSend.cpp | 55 +++++++++++++++-------------- src/slic3r/GUI/BBLStatusBarSend.hpp | 2 +- src/slic3r/GUI/Jobs/PrintJob.cpp | 2 +- 3 files changed, 30 insertions(+), 29 deletions(-) diff --git a/src/slic3r/GUI/BBLStatusBarSend.cpp b/src/slic3r/GUI/BBLStatusBarSend.cpp index 3ca178d67..16d58c939 100644 --- a/src/slic3r/GUI/BBLStatusBarSend.cpp +++ b/src/slic3r/GUI/BBLStatusBarSend.cpp @@ -26,16 +26,12 @@ BBLStatusBarSend::BBLStatusBarSend(wxWindow *parent, int id) wxBoxSizer *m_sizer_body = new wxBoxSizer(wxVERTICAL); wxBoxSizer *m_sizer_bottom = new wxBoxSizer(wxHORIZONTAL); - m_status_text = new wxStaticText(m_self, wxID_ANY, "", wxDefaultPosition, wxSize(m_self->FromDIP(280), -1), 0); + m_status_text = new wxStaticText(m_self, wxID_ANY, wxEmptyString); m_status_text->SetForegroundColour(wxColour(107, 107, 107)); m_status_text->SetFont(::Label::Body_13); - m_status_text->Wrap(m_self->FromDIP(280)); m_status_text->SetSize(wxSize(m_self->FromDIP(280), m_self->FromDIP(46))); m_status_text->SetMaxSize(wxSize(m_self->FromDIP(280), m_self->FromDIP(46))); - //m_status_text->SetSize() - - m_prog = new wxGauge(m_self, wxID_ANY, 100, wxDefaultPosition, wxSize(-1, m_self->FromDIP(6)), wxGA_HORIZONTAL); m_prog->SetValue(0); @@ -201,38 +197,43 @@ bool BBLStatusBarSend::is_english_text(wxString str) return true; } -wxString BBLStatusBarSend::format_text(wxStaticText* st, wxString str, int warp) +bool BBLStatusBarSend::format_text(wxStaticText* dc, int width, const wxString& text, wxString& multiline_text) { - int index = 0; - if (!str.empty()) { - while ((index = str.find('\n', index)) != string::npos) { - str.erase(index, 1); + bool multiline = false; + multiline_text = text; + if (width > 0 && dc->GetTextExtent(text).x > width) { + size_t start = 0; + while (true) { + size_t idx = size_t(-1); + for (size_t i = start; i < multiline_text.Len(); i++) { + if (multiline_text[i] == ' ') { + if (dc->GetTextExtent(multiline_text.SubString(start, i)).x < width) + idx = i; + else { + if (idx == size_t(-1)) idx = i; + break; + } + } + } + if (idx == size_t(-1)) break; + multiline = true; + multiline_text[idx] = '\n'; + start = idx + 1; + if (dc->GetTextExtent(multiline_text.Mid(start)).x < width) break; } } - - wxString out_txt = str; - wxString count_txt = ""; - int new_line_pos = 0; - - for (int i = 0; i < str.length(); i++) { - auto text_size = st->GetTextExtent(count_txt); - if (text_size.x < warp) { - count_txt += str[i]; - } - else { - out_txt.insert(i - 1, '\n'); - count_txt = ""; - } - } - return out_txt; + return multiline; + //return dc->GetTextExtent(multiline_text); } + void BBLStatusBarSend::set_status_text(const wxString& txt) { //auto txtss = "Sending the printing task has timed out.\nPlease try again!"; //auto txtss = "The printing project is being uploaded... 25%%"; //m_status_text->SetLabelText(txtss); - wxString str = format_text(m_status_text,txt,280); + wxString str; + format_text(m_status_text, m_self->FromDIP(280), txt, str); m_status_text->SetLabelText(str); //if (is_english_text(str)) m_status_text->Wrap(m_self->FromDIP(280)); } diff --git a/src/slic3r/GUI/BBLStatusBarSend.hpp b/src/slic3r/GUI/BBLStatusBarSend.hpp index 75b5cbeab..1abe97ee7 100644 --- a/src/slic3r/GUI/BBLStatusBarSend.hpp +++ b/src/slic3r/GUI/BBLStatusBarSend.hpp @@ -58,7 +58,7 @@ public: inline void reset_cancel_callback() { set_cancel_callback(); } wxPanel * get_panel(); bool is_english_text(wxString str); - wxString format_text(wxStaticText* st, wxString str, int warp); + bool format_text(wxStaticText* dc, int width, const wxString& text, wxString& multiline_text); void set_status_text(const wxString& txt); void set_percent_text(const wxString &txt); void msw_rescale(); diff --git a/src/slic3r/GUI/Jobs/PrintJob.cpp b/src/slic3r/GUI/Jobs/PrintJob.cpp index e5a5f59cf..cf827856b 100644 --- a/src/slic3r/GUI/Jobs/PrintJob.cpp +++ b/src/slic3r/GUI/Jobs/PrintJob.cpp @@ -215,7 +215,7 @@ void PrintJob::process() } } else if (stage == BBL::SendingPrintJobStage::PrintingStageFinished) { - msg = wxString::Format(_L("Successfully sent. Will automatically jump to the device page in %s s"), info); + msg = wxString::Format(_L("Successfully sent. Will automatically jump to the device page in %ss"), info); this->update_percent_finish(); } else { if (this->connection_type == "lan") {