Proper localization of AppController
This commit is contained in:
parent
4f27f6c6dc
commit
478dd2a93f
@ -270,6 +270,7 @@ add_library(libslic3r_gui STATIC
|
||||
${LIBDIR}/slic3r/AppController.hpp
|
||||
${LIBDIR}/slic3r/AppController.cpp
|
||||
${LIBDIR}/slic3r/AppControllerWx.cpp
|
||||
${LIBDIR}/slic3r/Strings.hpp
|
||||
)
|
||||
|
||||
add_library(admesh STATIC
|
||||
|
@ -61,12 +61,21 @@ void AppControllerBoilerplate::progress_indicator(
|
||||
}
|
||||
|
||||
void AppControllerBoilerplate::progress_indicator(unsigned statenum,
|
||||
const std::string &title,
|
||||
const std::string &firstmsg)
|
||||
const string &title,
|
||||
const string &firstmsg)
|
||||
{
|
||||
progressind_->m.lock();
|
||||
progressind_->store[std::this_thread::get_id()] =
|
||||
create_progress_indicator(statenum, title, firstmsg);;
|
||||
create_progress_indicator(statenum, title, firstmsg);
|
||||
progressind_->m.unlock();
|
||||
}
|
||||
|
||||
void AppControllerBoilerplate::progress_indicator(unsigned statenum,
|
||||
const string &title)
|
||||
{
|
||||
progressind_->m.lock();
|
||||
progressind_->store[std::this_thread::get_id()] =
|
||||
create_progress_indicator(statenum, title);
|
||||
progressind_->m.unlock();
|
||||
}
|
||||
|
||||
@ -173,8 +182,8 @@ void PrintController::slice(PrintObject *pobj)
|
||||
|
||||
if(pobj->layers.empty())
|
||||
report_issue(IssueType::ERR,
|
||||
"No layers were detected. You might want to repair your "
|
||||
"STL file(s) or check their size or thickness and retry"
|
||||
_(L("No layers were detected. You might want to repair your "
|
||||
"STL file(s) or check their size or thickness and retry"))
|
||||
);
|
||||
|
||||
pobj->state.set_done(STEP_SLICE);
|
||||
@ -237,37 +246,35 @@ void PrintController::slice(AppControllerBoilerplate::ProgresIndicatorPtr pri)
|
||||
|
||||
Slic3r::trace(3, "Starting the slicing process.");
|
||||
|
||||
pri->update(st+20, "Generating perimeters");
|
||||
pri->update(st+20, _(L("Generating perimeters")));
|
||||
for(auto obj : print_->objects) make_perimeters(obj);
|
||||
|
||||
pri->update(st+60, "Infilling layers");
|
||||
pri->update(st+60, _(L("Infilling layers")));
|
||||
for(auto obj : print_->objects) infill(obj);
|
||||
|
||||
pri->update(st+70, "Generating support material");
|
||||
pri->update(st+70, _(L("Generating support material")));
|
||||
for(auto obj : print_->objects) gen_support_material(obj);
|
||||
|
||||
pri->message_fmt("Weight: %.1fg, Cost: %.1f",
|
||||
print_->total_weight,
|
||||
print_->total_cost);
|
||||
|
||||
pri->message_fmt(_(L("Weight: %.1fg, Cost: %.1f")),
|
||||
print_->total_weight, print_->total_cost);
|
||||
pri->state(st+85);
|
||||
|
||||
|
||||
pri->update(st+88, "Generating skirt");
|
||||
pri->update(st+88, _(L("Generating skirt")));
|
||||
make_skirt();
|
||||
|
||||
|
||||
pri->update(st+90, "Generating brim");
|
||||
pri->update(st+90, _(L("Generating brim")));
|
||||
make_brim();
|
||||
|
||||
pri->update(st+95, "Generating wipe tower");
|
||||
pri->update(st+95, _(L("Generating wipe tower")));
|
||||
make_wipe_tower();
|
||||
|
||||
pri->update(st+100, "Done");
|
||||
pri->update(st+100, _(L("Done")));
|
||||
|
||||
// time to make some statistics..
|
||||
|
||||
Slic3r::trace(3, "Slicing process finished.");
|
||||
Slic3r::trace(3, _(L("Slicing process finished.")));
|
||||
}
|
||||
|
||||
|
||||
@ -322,23 +329,21 @@ void PrintController::slice_to_png()
|
||||
unscale(print_bb.size().y) > exd.height_mm) {
|
||||
std::stringstream ss;
|
||||
|
||||
ss << _("Print will not fit and will be truncated!") << "\n"
|
||||
<< _("Width needed: ") << unscale(print_bb.size().x) << " mm\n"
|
||||
<< _("Height needed: ") << unscale(print_bb.size().y) << " mm\n";
|
||||
ss << _(L("Print will not fit and will be truncated!")) << "\n"
|
||||
<< _(L("Width needed: ")) << unscale(print_bb.size().x) << " mm\n"
|
||||
<< _(L("Height needed: ")) << unscale(print_bb.size().y) << " mm\n";
|
||||
|
||||
report_issue(IssueType::WARN, ss.str(), "Warning");
|
||||
}
|
||||
|
||||
// std::async(supports_asynch()? std::launch::async : std::launch::deferred,
|
||||
// [this, exd, correction]()
|
||||
// {
|
||||
auto pri = create_progress_indicator(200, "Slicing to zipped png files...");
|
||||
auto pri = create_progress_indicator(
|
||||
200, _(L("Slicing to zipped png files...")));
|
||||
|
||||
try {
|
||||
pri->update(0, "Slicing...");
|
||||
pri->update(0, _(L("Slicing...")));
|
||||
slice(pri);
|
||||
} catch (std::exception& e) {
|
||||
report_issue(IssueType::ERR, e.what(), "Exception");
|
||||
report_issue(IssueType::ERR, e.what(), _(L("Exception occured")));
|
||||
pri->cancel();
|
||||
return;
|
||||
}
|
||||
@ -353,7 +358,7 @@ void PrintController::slice_to_png()
|
||||
exd.exp_time_s, exd.exp_time_first_s);
|
||||
|
||||
} catch (std::exception& e) {
|
||||
report_issue(IssueType::ERR, e.what(), "Exception");
|
||||
report_issue(IssueType::ERR, e.what(), _(L("Exception occured")));
|
||||
pri->cancel();
|
||||
}
|
||||
|
||||
@ -370,12 +375,11 @@ void PrintController::slice_to_png()
|
||||
}
|
||||
|
||||
print_->progressindicator = pbak;
|
||||
// });
|
||||
|
||||
}
|
||||
|
||||
void IProgressIndicator::message_fmt(
|
||||
const std::string &fmtstr, ...) {
|
||||
const string &fmtstr, ...) {
|
||||
std::stringstream ss;
|
||||
va_list args;
|
||||
va_start(args, fmtstr);
|
||||
|
@ -44,7 +44,7 @@ public:
|
||||
AppControllerBoilerplate();
|
||||
~AppControllerBoilerplate();
|
||||
|
||||
using Path = std::string;
|
||||
using Path = string;
|
||||
using PathList = std::vector<Path>;
|
||||
|
||||
/// Common runtime issue types
|
||||
@ -65,20 +65,20 @@ public:
|
||||
* @return Returns a list of paths choosed by the user.
|
||||
*/
|
||||
PathList query_destination_paths(
|
||||
const std::string& title,
|
||||
const string& title,
|
||||
const std::string& extensions) const;
|
||||
|
||||
/**
|
||||
* @brief Same as query_destination_paths but works for directories only.
|
||||
*/
|
||||
PathList query_destination_dirs(
|
||||
const std::string& title) const;
|
||||
const string& title) const;
|
||||
|
||||
/**
|
||||
* @brief Same as query_destination_paths but returns only one path.
|
||||
*/
|
||||
Path query_destination_path(
|
||||
const std::string& title,
|
||||
const string& title,
|
||||
const std::string& extensions,
|
||||
const std::string& hint = "") const;
|
||||
|
||||
@ -93,8 +93,11 @@ public:
|
||||
* title.
|
||||
*/
|
||||
bool report_issue(IssueType issuetype,
|
||||
const std::string& description,
|
||||
const std::string& brief = "");
|
||||
const string& description,
|
||||
const string& brief);
|
||||
|
||||
bool report_issue(IssueType issuetype,
|
||||
const string& description);
|
||||
|
||||
/**
|
||||
* @brief Set up a progress indicator for the current thread.
|
||||
@ -109,8 +112,11 @@ public:
|
||||
* @param firstmsg The message for the first subtask to be displayed.
|
||||
*/
|
||||
void progress_indicator(unsigned statenum,
|
||||
const std::string& title,
|
||||
const std::string& firstmsg = "");
|
||||
const string& title,
|
||||
const string& firstmsg);
|
||||
|
||||
void progress_indicator(unsigned statenum,
|
||||
const string& title);
|
||||
|
||||
/**
|
||||
* @brief Return the progress indicator set up for the current thread. This
|
||||
@ -160,8 +166,12 @@ protected:
|
||||
*/
|
||||
ProgresIndicatorPtr create_progress_indicator(
|
||||
unsigned statenum,
|
||||
const std::string& title,
|
||||
const std::string& firstmsg = "") const;
|
||||
const string& title,
|
||||
const string& firstmsg) const;
|
||||
|
||||
ProgresIndicatorPtr create_progress_indicator(
|
||||
unsigned statenum,
|
||||
const string& title) const;
|
||||
|
||||
// This is a global progress indicator placeholder. In the Slic3r UI it can
|
||||
// contain the progress indicator on the statusbar.
|
||||
@ -234,8 +244,6 @@ public:
|
||||
*/
|
||||
void slice_to_png();
|
||||
|
||||
|
||||
void slice_to_png(std::string dirpath);
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -33,11 +33,11 @@ void AppControllerBoilerplate::process_events()
|
||||
|
||||
AppControllerBoilerplate::PathList
|
||||
AppControllerBoilerplate::query_destination_paths(
|
||||
const std::string &title,
|
||||
const string &title,
|
||||
const std::string &extensions) const
|
||||
{
|
||||
|
||||
wxFileDialog dlg(wxTheApp->GetTopWindow(), wxString(title) );
|
||||
wxFileDialog dlg(wxTheApp->GetTopWindow(), title );
|
||||
dlg.SetWildcard(extensions);
|
||||
|
||||
dlg.ShowModal();
|
||||
@ -53,7 +53,7 @@ AppControllerBoilerplate::query_destination_paths(
|
||||
|
||||
AppControllerBoilerplate::Path
|
||||
AppControllerBoilerplate::query_destination_path(
|
||||
const std::string &title,
|
||||
const string &title,
|
||||
const std::string &extensions,
|
||||
const std::string& hint) const
|
||||
{
|
||||
@ -72,8 +72,8 @@ AppControllerBoilerplate::query_destination_path(
|
||||
}
|
||||
|
||||
bool AppControllerBoilerplate::report_issue(IssueType issuetype,
|
||||
const std::string &description,
|
||||
const std::string &brief)
|
||||
const string &description,
|
||||
const string &brief)
|
||||
{
|
||||
auto icon = wxICON_INFORMATION;
|
||||
auto style = wxOK|wxCENTRE;
|
||||
@ -89,6 +89,13 @@ bool AppControllerBoilerplate::report_issue(IssueType issuetype,
|
||||
return ret != wxCANCEL;
|
||||
}
|
||||
|
||||
bool AppControllerBoilerplate::report_issue(
|
||||
AppControllerBoilerplate::IssueType issuetype,
|
||||
const string &description)
|
||||
{
|
||||
return report_issue(issuetype, description, string());
|
||||
}
|
||||
|
||||
wxDEFINE_EVENT(PROGRESS_STATUS_UPDATE_EVENT, wxCommandEvent);
|
||||
|
||||
namespace {
|
||||
@ -104,7 +111,6 @@ class GuiProgressIndicator:
|
||||
using Base = IProgressIndicator;
|
||||
wxString message_;
|
||||
int range_; wxString title_;
|
||||
// unsigned prc_ = 0;
|
||||
bool is_asynch_ = false;
|
||||
|
||||
const int id_ = wxWindow::NewControlId();
|
||||
@ -118,20 +124,9 @@ class GuiProgressIndicator:
|
||||
|
||||
// Status update implementation
|
||||
void _state( unsigned st) {
|
||||
// if(st < max()) {
|
||||
if(!gauge_.IsShown()) gauge_.ShowModal();
|
||||
Base::state(st);
|
||||
gauge_.Update(static_cast<int>(st), message_);
|
||||
// }
|
||||
|
||||
// if(st == max()) {
|
||||
// prc_++;
|
||||
// if(prc_ == Base::procedure_count()) {
|
||||
// //gauge_.reset();
|
||||
// gauge_.Update(static_cast<int>(st), message_);
|
||||
// prc_ = 0;
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
public:
|
||||
@ -142,12 +137,12 @@ public:
|
||||
/// Get the mode of parallel operation.
|
||||
inline bool asynch() const { return is_asynch_; }
|
||||
|
||||
inline GuiProgressIndicator(int range, const std::string& title,
|
||||
const std::string& firstmsg) :
|
||||
inline GuiProgressIndicator(int range, const string& title,
|
||||
const string& firstmsg) :
|
||||
gauge_(title, firstmsg, range, wxTheApp->GetTopWindow(),
|
||||
wxPD_APP_MODAL | wxPD_AUTO_HIDE),
|
||||
message_(_(firstmsg)),
|
||||
range_(range), title_(_(title))
|
||||
message_(firstmsg),
|
||||
range_(range), title_(title)
|
||||
{
|
||||
Base::max(static_cast<float>(range));
|
||||
Base::states(static_cast<unsigned>(range));
|
||||
@ -163,7 +158,7 @@ public:
|
||||
}
|
||||
|
||||
virtual void state(float val) override {
|
||||
/*if( val >= 1.0) */state(static_cast<unsigned>(val));
|
||||
state(static_cast<unsigned>(val));
|
||||
}
|
||||
|
||||
void state(unsigned st) {
|
||||
@ -176,27 +171,26 @@ public:
|
||||
} else _state(st);
|
||||
}
|
||||
|
||||
virtual void message(const std::string & msg) override {
|
||||
message_ = _(msg);
|
||||
virtual void message(const string & msg) override {
|
||||
message_ = msg;
|
||||
}
|
||||
|
||||
virtual void messageFmt(const std::string& fmt, ...) {
|
||||
virtual void messageFmt(const string& fmt, ...) {
|
||||
va_list arglist;
|
||||
va_start(arglist, fmt);
|
||||
message_ = wxString::Format(_(fmt), arglist);
|
||||
message_ = wxString::Format(wxString(fmt), arglist);
|
||||
va_end(arglist);
|
||||
}
|
||||
|
||||
virtual void title(const std::string & title) override {
|
||||
title_ = _(title);
|
||||
virtual void title(const string & title) override {
|
||||
title_ = title;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
AppControllerBoilerplate::ProgresIndicatorPtr
|
||||
AppControllerBoilerplate::create_progress_indicator(
|
||||
unsigned statenum, const std::string& title,
|
||||
const std::string& firstmsg) const
|
||||
unsigned statenum, const string& title, const string& firstmsg) const
|
||||
{
|
||||
auto pri =
|
||||
std::make_shared<GuiProgressIndicator>(statenum, title, firstmsg);
|
||||
@ -208,6 +202,13 @@ AppControllerBoilerplate::create_progress_indicator(
|
||||
return pri;
|
||||
}
|
||||
|
||||
AppControllerBoilerplate::ProgresIndicatorPtr
|
||||
AppControllerBoilerplate::create_progress_indicator(unsigned statenum,
|
||||
const string &title) const
|
||||
{
|
||||
return create_progress_indicator(statenum, title, string());
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
// A wrapper progress indicator class around the statusbar created in perl.
|
||||
@ -271,18 +272,18 @@ public:
|
||||
} else _state(st);
|
||||
}
|
||||
|
||||
virtual void message(const std::string & msg) override {
|
||||
virtual void message(const string & msg) override {
|
||||
message_ = msg;
|
||||
}
|
||||
|
||||
virtual void message_fmt(const std::string& fmt, ...) override {
|
||||
virtual void message_fmt(const string& fmt, ...) override {
|
||||
va_list arglist;
|
||||
va_start(arglist, fmt);
|
||||
message_ = wxString::Format(_(fmt), arglist);
|
||||
message_ = wxString::Format(wxString(fmt), arglist);
|
||||
va_end(arglist);
|
||||
}
|
||||
|
||||
virtual void title(const std::string & /*title*/) override {}
|
||||
virtual void title(const string & /*title*/) override {}
|
||||
|
||||
};
|
||||
}
|
||||
@ -396,8 +397,8 @@ PrintController::PngExportData PrintController::query_png_export_data()
|
||||
|
||||
if(wxFileName(filepick_ctl_->GetPath()).Exists())
|
||||
if(!ctl_.report_issue(PrintController::IssueType::WARN_Q,
|
||||
"File already exists. Overwrite?",
|
||||
"Warning")) ret = wxID_CANCEL;
|
||||
_(L("File already exists. Overwrite?")),
|
||||
_(L("Warning")))) ret = wxID_CANCEL;
|
||||
EndModal(ret);
|
||||
}
|
||||
};
|
||||
|
@ -3,6 +3,7 @@
|
||||
|
||||
#include <string>
|
||||
#include <functional>
|
||||
#include "Strings.hpp"
|
||||
|
||||
namespace Slic3r {
|
||||
|
||||
@ -42,13 +43,13 @@ public:
|
||||
}
|
||||
|
||||
/// Message shown on the next status update.
|
||||
virtual void message(const std::string&) = 0;
|
||||
virtual void message(const string&) = 0;
|
||||
|
||||
/// Title of the operaton.
|
||||
virtual void title(const std::string&) = 0;
|
||||
virtual void title(const string&) = 0;
|
||||
|
||||
/// Formatted message for the next status update. Works just like sprinf.
|
||||
virtual void message_fmt(const std::string& fmt, ...);
|
||||
virtual void message_fmt(const string& fmt, ...);
|
||||
|
||||
/// Set up a cancel callback for the operation if feasible.
|
||||
inline void on_cancel(CancelFn func) { cancelfunc_ = func; }
|
||||
@ -60,7 +61,7 @@ public:
|
||||
virtual void cancel() { cancelfunc_(); }
|
||||
|
||||
/// Convinience function to call message and status update in one function.
|
||||
void update(float st, const std::string& msg) {
|
||||
void update(float st, const string& msg) {
|
||||
message(msg); state(st);
|
||||
}
|
||||
};
|
||||
|
10
xs/src/slic3r/Strings.hpp
Normal file
10
xs/src/slic3r/Strings.hpp
Normal file
@ -0,0 +1,10 @@
|
||||
#ifndef STRINGS_HPP
|
||||
#define STRINGS_HPP
|
||||
|
||||
#include "GUI/GUI.hpp"
|
||||
|
||||
namespace Slic3r {
|
||||
using string = wxString;
|
||||
}
|
||||
|
||||
#endif // STRINGS_HPP
|
Loading…
Reference in New Issue
Block a user