Cleaning up and fixing localization issues with AppController.
This commit is contained in:
parent
ae2b4dd01c
commit
ec3e1403b6
@ -267,11 +267,10 @@ add_library(libslic3r_gui STATIC
|
||||
${LIBDIR}/slic3r/Utils/Time.hpp
|
||||
${LIBDIR}/slic3r/Utils/HexFile.cpp
|
||||
${LIBDIR}/slic3r/Utils/HexFile.hpp
|
||||
${LIBDIR}/slic3r/IProgressIndicator.hpp
|
||||
${LIBDIR}/slic3r/ProgressIndicator.hpp
|
||||
${LIBDIR}/slic3r/AppController.hpp
|
||||
${LIBDIR}/slic3r/AppController.cpp
|
||||
${LIBDIR}/slic3r/AppControllerWx.cpp
|
||||
${LIBDIR}/slic3r/Strings.hpp
|
||||
)
|
||||
|
||||
add_library(admesh STATIC
|
||||
|
@ -43,15 +43,6 @@ namespace GUI {
|
||||
PresetBundle* get_preset_bundle();
|
||||
}
|
||||
|
||||
static const PrintObjectStep STEP_SLICE = posSlice;
|
||||
static const PrintObjectStep STEP_PERIMETERS = posPerimeters;
|
||||
static const PrintObjectStep STEP_PREPARE_INFILL = posPrepareInfill;
|
||||
static const PrintObjectStep STEP_INFILL = posInfill;
|
||||
static const PrintObjectStep STEP_SUPPORTMATERIAL = posSupportMaterial;
|
||||
static const PrintStep STEP_SKIRT = psSkirt;
|
||||
static const PrintStep STEP_BRIM = psBrim;
|
||||
static const PrintStep STEP_WIPE_TOWER = psWipeTower;
|
||||
|
||||
AppControllerBoilerplate::ProgresIndicatorPtr
|
||||
AppControllerBoilerplate::global_progress_indicator() {
|
||||
ProgresIndicatorPtr ret;
|
||||
@ -71,193 +62,8 @@ void AppControllerBoilerplate::global_progress_indicator(
|
||||
pri_data_->m.unlock();
|
||||
}
|
||||
|
||||
void PrintController::make_skirt()
|
||||
{
|
||||
assert(print_ != nullptr);
|
||||
|
||||
// prerequisites
|
||||
for(auto obj : print_->objects) make_perimeters(obj);
|
||||
for(auto obj : print_->objects) infill(obj);
|
||||
for(auto obj : print_->objects) gen_support_material(obj);
|
||||
|
||||
if(!print_->state.is_done(STEP_SKIRT)) {
|
||||
print_->state.set_started(STEP_SKIRT);
|
||||
print_->skirt.clear();
|
||||
if(print_->has_skirt()) print_->_make_skirt();
|
||||
|
||||
print_->state.set_done(STEP_SKIRT);
|
||||
}
|
||||
}
|
||||
|
||||
void PrintController::make_brim()
|
||||
{
|
||||
assert(print_ != nullptr);
|
||||
|
||||
// prerequisites
|
||||
for(auto obj : print_->objects) make_perimeters(obj);
|
||||
for(auto obj : print_->objects) infill(obj);
|
||||
for(auto obj : print_->objects) gen_support_material(obj);
|
||||
make_skirt();
|
||||
|
||||
if(!print_->state.is_done(STEP_BRIM)) {
|
||||
print_->state.set_started(STEP_BRIM);
|
||||
|
||||
// since this method must be idempotent, we clear brim paths *before*
|
||||
// checking whether we need to generate them
|
||||
print_->brim.clear();
|
||||
|
||||
if(print_->config.brim_width > 0) print_->_make_brim();
|
||||
|
||||
print_->state.set_done(STEP_BRIM);
|
||||
}
|
||||
}
|
||||
|
||||
void PrintController::make_wipe_tower()
|
||||
{
|
||||
assert(print_ != nullptr);
|
||||
|
||||
// prerequisites
|
||||
for(auto obj : print_->objects) make_perimeters(obj);
|
||||
for(auto obj : print_->objects) infill(obj);
|
||||
for(auto obj : print_->objects) gen_support_material(obj);
|
||||
make_skirt();
|
||||
make_brim();
|
||||
|
||||
if(!print_->state.is_done(STEP_WIPE_TOWER)) {
|
||||
print_->state.set_started(STEP_WIPE_TOWER);
|
||||
|
||||
// since this method must be idempotent, we clear brim paths *before*
|
||||
// checking whether we need to generate them
|
||||
print_->brim.clear();
|
||||
|
||||
if(print_->has_wipe_tower()) print_->_make_wipe_tower();
|
||||
|
||||
print_->state.set_done(STEP_WIPE_TOWER);
|
||||
}
|
||||
}
|
||||
|
||||
void PrintController::slice(PrintObject *pobj)
|
||||
{
|
||||
assert(pobj != nullptr && print_ != nullptr);
|
||||
|
||||
if(pobj->state.is_done(STEP_SLICE)) return;
|
||||
|
||||
pobj->state.set_started(STEP_SLICE);
|
||||
|
||||
pobj->_slice();
|
||||
|
||||
auto msg = pobj->_fix_slicing_errors();
|
||||
if(!msg.empty()) report_issue(IssueType::WARN, msg);
|
||||
|
||||
// simplify slices if required
|
||||
if (print_->config.resolution)
|
||||
pobj->_simplify_slices(scale_(print_->config.resolution));
|
||||
|
||||
|
||||
if(pobj->layers.empty())
|
||||
report_issue(IssueType::ERR,
|
||||
_(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);
|
||||
}
|
||||
|
||||
void PrintController::make_perimeters(PrintObject *pobj)
|
||||
{
|
||||
assert(pobj != nullptr);
|
||||
|
||||
slice(pobj);
|
||||
|
||||
if (!pobj->state.is_done(STEP_PERIMETERS)) {
|
||||
pobj->_make_perimeters();
|
||||
}
|
||||
}
|
||||
|
||||
void PrintController::infill(PrintObject *pobj)
|
||||
{
|
||||
assert(pobj != nullptr);
|
||||
|
||||
make_perimeters(pobj);
|
||||
|
||||
if (!pobj->state.is_done(STEP_PREPARE_INFILL)) {
|
||||
pobj->state.set_started(STEP_PREPARE_INFILL);
|
||||
|
||||
pobj->_prepare_infill();
|
||||
|
||||
pobj->state.set_done(STEP_PREPARE_INFILL);
|
||||
}
|
||||
|
||||
pobj->_infill();
|
||||
}
|
||||
|
||||
void PrintController::gen_support_material(PrintObject *pobj)
|
||||
{
|
||||
assert(pobj != nullptr);
|
||||
|
||||
// prerequisites
|
||||
slice(pobj);
|
||||
|
||||
if(!pobj->state.is_done(STEP_SUPPORTMATERIAL)) {
|
||||
pobj->state.set_started(STEP_SUPPORTMATERIAL);
|
||||
|
||||
pobj->clear_support_layers();
|
||||
|
||||
if((pobj->config.support_material || pobj->config.raft_layers > 0)
|
||||
&& pobj->layers.size() > 1) {
|
||||
pobj->_generate_support_material();
|
||||
}
|
||||
|
||||
pobj->state.set_done(STEP_SUPPORTMATERIAL);
|
||||
}
|
||||
}
|
||||
|
||||
void PrintController::slice(AppControllerBoilerplate::ProgresIndicatorPtr pri)
|
||||
{
|
||||
auto st = pri->state();
|
||||
|
||||
Slic3r::trace(3, "Starting the slicing process.");
|
||||
|
||||
pri->update(st+20, _(L("Generating perimeters")));
|
||||
for(auto obj : print_->objects) make_perimeters(obj);
|
||||
|
||||
pri->update(st+60, _(L("Infilling layers")));
|
||||
for(auto obj : print_->objects) infill(obj);
|
||||
|
||||
pri->update(st+70, _(L("Generating support material")));
|
||||
for(auto obj : print_->objects) gen_support_material(obj);
|
||||
|
||||
pri->message_fmt(_(L("Weight: %.1fg, Cost: %.1f")),
|
||||
print_->total_weight, print_->total_cost);
|
||||
pri->state(st+85);
|
||||
|
||||
|
||||
pri->update(st+88, _(L("Generating skirt")));
|
||||
make_skirt();
|
||||
|
||||
|
||||
pri->update(st+90, _(L("Generating brim")));
|
||||
make_brim();
|
||||
|
||||
pri->update(st+95, _(L("Generating wipe tower")));
|
||||
make_wipe_tower();
|
||||
|
||||
pri->update(st+100, _(L("Done")));
|
||||
|
||||
// time to make some statistics..
|
||||
|
||||
Slic3r::trace(3, _(L("Slicing process finished.")));
|
||||
}
|
||||
|
||||
void PrintController::slice()
|
||||
{
|
||||
auto pri = global_progress_indicator();
|
||||
if(!pri) pri = create_progress_indicator(100, L("Slicing"));
|
||||
slice(pri);
|
||||
}
|
||||
|
||||
void IProgressIndicator::message_fmt(
|
||||
const string &fmtstr, ...) {
|
||||
void ProgressIndicator::message_fmt(
|
||||
const std::string &fmtstr, ...) {
|
||||
std::stringstream ss;
|
||||
va_list args;
|
||||
va_start(args, fmtstr);
|
||||
@ -288,7 +94,6 @@ const PrintConfig &PrintController::config() const
|
||||
return print_->config;
|
||||
}
|
||||
|
||||
|
||||
void AppController::arrange_model()
|
||||
{
|
||||
auto ftr = std::async(
|
||||
@ -322,7 +127,7 @@ void AppController::arrange_model()
|
||||
for(auto& v : bedpoints)
|
||||
bed.append(Point::new_scale(v.x, v.y));
|
||||
|
||||
if(pind) pind->update(0, _(L("Arranging objects...")));
|
||||
if(pind) pind->update(0, L("Arranging objects..."));
|
||||
|
||||
try {
|
||||
arr::BedShapeHint hint;
|
||||
@ -336,20 +141,20 @@ void AppController::arrange_model()
|
||||
false, // create many piles not just one pile
|
||||
[pind, count](unsigned rem) {
|
||||
if(pind)
|
||||
pind->update(count - rem, _(L("Arranging objects...")));
|
||||
pind->update(count - rem, L("Arranging objects..."));
|
||||
});
|
||||
} catch(std::exception& e) {
|
||||
std::cerr << e.what() << std::endl;
|
||||
report_issue(IssueType::ERR,
|
||||
_(L("Could not arrange model objects! "
|
||||
"Some geometries may be invalid.")),
|
||||
_(L("Exception occurred")));
|
||||
L("Could not arrange model objects! "
|
||||
"Some geometries may be invalid."),
|
||||
L("Exception occurred"));
|
||||
}
|
||||
|
||||
// Restore previous max value
|
||||
if(pind) {
|
||||
pind->max(pmax);
|
||||
pind->update(0, _(L("Arranging done.")));
|
||||
pind->update(0, L("Arranging done."));
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
#include <atomic>
|
||||
#include <iostream>
|
||||
|
||||
#include "IProgressIndicator.hpp"
|
||||
#include "ProgressIndicator.hpp"
|
||||
|
||||
namespace Slic3r {
|
||||
|
||||
@ -15,7 +15,8 @@ class Model;
|
||||
class Print;
|
||||
class PrintObject;
|
||||
class PrintConfig;
|
||||
|
||||
class ProgressStatusBar;
|
||||
class DynamicPrintConfig;
|
||||
|
||||
/**
|
||||
* @brief A boilerplate class for creating application logic. It should provide
|
||||
@ -33,7 +34,7 @@ class AppControllerBoilerplate {
|
||||
public:
|
||||
|
||||
/// A Progress indicator object smart pointer
|
||||
using ProgresIndicatorPtr = std::shared_ptr<IProgressIndicator>;
|
||||
using ProgresIndicatorPtr = std::shared_ptr<ProgressIndicator>;
|
||||
|
||||
private:
|
||||
class PriData; // Some structure to store progress indication data
|
||||
@ -46,7 +47,7 @@ public:
|
||||
AppControllerBoilerplate();
|
||||
~AppControllerBoilerplate();
|
||||
|
||||
using Path = string;
|
||||
using Path = std::string;
|
||||
using PathList = std::vector<Path>;
|
||||
|
||||
/// Common runtime issue types
|
||||
@ -67,20 +68,20 @@ public:
|
||||
* @return Returns a list of paths choosed by the user.
|
||||
*/
|
||||
PathList query_destination_paths(
|
||||
const string& title,
|
||||
const std::string& title,
|
||||
const std::string& extensions) const;
|
||||
|
||||
/**
|
||||
* @brief Same as query_destination_paths but works for directories only.
|
||||
*/
|
||||
PathList query_destination_dirs(
|
||||
const string& title) const;
|
||||
const std::string& title) const;
|
||||
|
||||
/**
|
||||
* @brief Same as query_destination_paths but returns only one path.
|
||||
*/
|
||||
Path query_destination_path(
|
||||
const string& title,
|
||||
const std::string& title,
|
||||
const std::string& extensions,
|
||||
const std::string& hint = "") const;
|
||||
|
||||
@ -95,11 +96,11 @@ public:
|
||||
* title.
|
||||
*/
|
||||
bool report_issue(IssueType issuetype,
|
||||
const string& description,
|
||||
const string& brief);
|
||||
const std::string& description,
|
||||
const std::string& brief);
|
||||
|
||||
bool report_issue(IssueType issuetype,
|
||||
const string& description);
|
||||
const std::string& description);
|
||||
|
||||
/**
|
||||
* @brief Return the global progress indicator for the current controller.
|
||||
@ -150,12 +151,12 @@ protected:
|
||||
*/
|
||||
ProgresIndicatorPtr create_progress_indicator(
|
||||
unsigned statenum,
|
||||
const string& title,
|
||||
const string& firstmsg) const;
|
||||
const std::string& title,
|
||||
const std::string& firstmsg) const;
|
||||
|
||||
ProgresIndicatorPtr create_progress_indicator(
|
||||
unsigned statenum,
|
||||
const string& title) const;
|
||||
const std::string& title) const;
|
||||
|
||||
// This is a global progress indicator placeholder. In the Slic3r UI it can
|
||||
// contain the progress indicator on the statusbar.
|
||||
@ -167,24 +168,6 @@ protected:
|
||||
*/
|
||||
class PrintController: public AppControllerBoilerplate {
|
||||
Print *print_ = nullptr;
|
||||
protected:
|
||||
|
||||
void make_skirt();
|
||||
void make_brim();
|
||||
void make_wipe_tower();
|
||||
|
||||
void make_perimeters(PrintObject *pobj);
|
||||
void infill(PrintObject *pobj);
|
||||
void gen_support_material(PrintObject *pobj);
|
||||
|
||||
/**
|
||||
* @brief Slice one pront object.
|
||||
* @param pobj The print object.
|
||||
*/
|
||||
void slice(PrintObject *pobj);
|
||||
|
||||
void slice(ProgresIndicatorPtr pri);
|
||||
|
||||
public:
|
||||
|
||||
// Must be public for perl to use it
|
||||
@ -199,11 +182,6 @@ public:
|
||||
return PrintController::Ptr( new PrintController(print) );
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Slice the loaded print scene.
|
||||
*/
|
||||
void slice();
|
||||
|
||||
const PrintConfig& config() const;
|
||||
};
|
||||
|
||||
@ -248,7 +226,7 @@ public:
|
||||
* In perl we have a progress indicating status bar on the bottom of the
|
||||
* window which is defined and created in perl. We can pass the ID-s of the
|
||||
* gauge and the statusbar id and make a wrapper implementation of the
|
||||
* IProgressIndicator interface so we can use this GUI widget from C++.
|
||||
* ProgressIndicator interface so we can use this GUI widget from C++.
|
||||
*
|
||||
* This function should be called from perl.
|
||||
*
|
||||
|
@ -32,11 +32,11 @@ void AppControllerBoilerplate::process_events()
|
||||
|
||||
AppControllerBoilerplate::PathList
|
||||
AppControllerBoilerplate::query_destination_paths(
|
||||
const string &title,
|
||||
const std::string &title,
|
||||
const std::string &extensions) const
|
||||
{
|
||||
|
||||
wxFileDialog dlg(wxTheApp->GetTopWindow(), title );
|
||||
wxFileDialog dlg(wxTheApp->GetTopWindow(), _(title) );
|
||||
dlg.SetWildcard(extensions);
|
||||
|
||||
dlg.ShowModal();
|
||||
@ -52,11 +52,11 @@ AppControllerBoilerplate::query_destination_paths(
|
||||
|
||||
AppControllerBoilerplate::Path
|
||||
AppControllerBoilerplate::query_destination_path(
|
||||
const string &title,
|
||||
const std::string &title,
|
||||
const std::string &extensions,
|
||||
const std::string& hint) const
|
||||
{
|
||||
wxFileDialog dlg(wxTheApp->GetTopWindow(), title );
|
||||
wxFileDialog dlg(wxTheApp->GetTopWindow(), _(title) );
|
||||
dlg.SetWildcard(extensions);
|
||||
|
||||
dlg.SetFilename(hint);
|
||||
@ -71,8 +71,8 @@ AppControllerBoilerplate::query_destination_path(
|
||||
}
|
||||
|
||||
bool AppControllerBoilerplate::report_issue(IssueType issuetype,
|
||||
const string &description,
|
||||
const string &brief)
|
||||
const std::string &description,
|
||||
const std::string &brief)
|
||||
{
|
||||
auto icon = wxICON_INFORMATION;
|
||||
auto style = wxOK|wxCENTRE;
|
||||
@ -84,15 +84,15 @@ bool AppControllerBoilerplate::report_issue(IssueType issuetype,
|
||||
case IssueType::FATAL: icon = wxICON_ERROR;
|
||||
}
|
||||
|
||||
auto ret = wxMessageBox(description, brief, icon | style);
|
||||
auto ret = wxMessageBox(_(description), _(brief), icon | style);
|
||||
return ret != wxCANCEL;
|
||||
}
|
||||
|
||||
bool AppControllerBoilerplate::report_issue(
|
||||
AppControllerBoilerplate::IssueType issuetype,
|
||||
const string &description)
|
||||
const std::string &description)
|
||||
{
|
||||
return report_issue(issuetype, description, string());
|
||||
return report_issue(issuetype, description, std::string());
|
||||
}
|
||||
|
||||
wxDEFINE_EVENT(PROGRESS_STATUS_UPDATE_EVENT, wxCommandEvent);
|
||||
@ -104,10 +104,10 @@ namespace {
|
||||
* the main thread as well.
|
||||
*/
|
||||
class GuiProgressIndicator:
|
||||
public IProgressIndicator, public wxEvtHandler {
|
||||
public ProgressIndicator, public wxEvtHandler {
|
||||
|
||||
wxProgressDialog gauge_;
|
||||
using Base = IProgressIndicator;
|
||||
using Base = ProgressIndicator;
|
||||
wxString message_;
|
||||
int range_; wxString title_;
|
||||
bool is_asynch_ = false;
|
||||
@ -136,8 +136,8 @@ public:
|
||||
/// Get the mode of parallel operation.
|
||||
inline bool asynch() const { return is_asynch_; }
|
||||
|
||||
inline GuiProgressIndicator(int range, const string& title,
|
||||
const string& firstmsg) :
|
||||
inline GuiProgressIndicator(int range, const wxString& title,
|
||||
const wxString& firstmsg) :
|
||||
gauge_(title, firstmsg, range, wxTheApp->GetTopWindow(),
|
||||
wxPD_APP_MODAL | wxPD_AUTO_HIDE),
|
||||
message_(firstmsg),
|
||||
@ -151,11 +151,6 @@ public:
|
||||
this, id_);
|
||||
}
|
||||
|
||||
virtual void cancel() override {
|
||||
update(max(), "Abort");
|
||||
IProgressIndicator::cancel();
|
||||
}
|
||||
|
||||
virtual void state(float val) override {
|
||||
state(static_cast<unsigned>(val));
|
||||
}
|
||||
@ -170,26 +165,28 @@ public:
|
||||
} else _state(st);
|
||||
}
|
||||
|
||||
virtual void message(const string & msg) override {
|
||||
message_ = msg;
|
||||
virtual void message(const std::string & msg) override {
|
||||
message_ = _(msg);
|
||||
}
|
||||
|
||||
virtual void messageFmt(const string& fmt, ...) {
|
||||
virtual void messageFmt(const std::string& fmt, ...) {
|
||||
va_list arglist;
|
||||
va_start(arglist, fmt);
|
||||
message_ = wxString::Format(wxString(fmt), arglist);
|
||||
message_ = wxString::Format(_(fmt), arglist);
|
||||
va_end(arglist);
|
||||
}
|
||||
|
||||
virtual void title(const string & title) override {
|
||||
title_ = title;
|
||||
virtual void title(const std::string & title) override {
|
||||
title_ = _(title);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
AppControllerBoilerplate::ProgresIndicatorPtr
|
||||
AppControllerBoilerplate::create_progress_indicator(
|
||||
unsigned statenum, const string& title, const string& firstmsg) const
|
||||
unsigned statenum,
|
||||
const std::string& title,
|
||||
const std::string& firstmsg) const
|
||||
{
|
||||
auto pri =
|
||||
std::make_shared<GuiProgressIndicator>(statenum, title, firstmsg);
|
||||
@ -202,20 +199,20 @@ AppControllerBoilerplate::create_progress_indicator(
|
||||
}
|
||||
|
||||
AppControllerBoilerplate::ProgresIndicatorPtr
|
||||
AppControllerBoilerplate::create_progress_indicator(unsigned statenum,
|
||||
const string &title) const
|
||||
AppControllerBoilerplate::create_progress_indicator(
|
||||
unsigned statenum, const std::string &title) const
|
||||
{
|
||||
return create_progress_indicator(statenum, title, string());
|
||||
return create_progress_indicator(statenum, title, std::string());
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
// A wrapper progress indicator class around the statusbar created in perl.
|
||||
class Wrapper: public IProgressIndicator, public wxEvtHandler {
|
||||
class Wrapper: public ProgressIndicator, public wxEvtHandler {
|
||||
wxGauge *gauge_;
|
||||
wxStatusBar *stbar_;
|
||||
using Base = IProgressIndicator;
|
||||
std::string message_;
|
||||
using Base = ProgressIndicator;
|
||||
wxString message_;
|
||||
AppControllerBoilerplate& ctl_;
|
||||
|
||||
void showProgress(bool show = true) {
|
||||
@ -223,7 +220,7 @@ class Wrapper: public IProgressIndicator, public wxEvtHandler {
|
||||
}
|
||||
|
||||
void _state(unsigned st) {
|
||||
if( st <= IProgressIndicator::max() ) {
|
||||
if( st <= ProgressIndicator::max() ) {
|
||||
Base::state(st);
|
||||
|
||||
if(!gauge_->IsShown()) showProgress(true);
|
||||
@ -266,7 +263,7 @@ public:
|
||||
virtual void max(float val) override {
|
||||
if(val > 1.0) {
|
||||
gauge_->SetRange(static_cast<int>(val));
|
||||
IProgressIndicator::max(val);
|
||||
ProgressIndicator::max(val);
|
||||
}
|
||||
}
|
||||
|
||||
@ -280,18 +277,18 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
virtual void message(const string & msg) override {
|
||||
message_ = msg;
|
||||
virtual void message(const std::string & msg) override {
|
||||
message_ = _(msg);
|
||||
}
|
||||
|
||||
virtual void message_fmt(const string& fmt, ...) override {
|
||||
virtual void message_fmt(const std::string& fmt, ...) override {
|
||||
va_list arglist;
|
||||
va_start(arglist, fmt);
|
||||
message_ = wxString::Format(fmt, arglist);
|
||||
message_ = wxString::Format(_(fmt), arglist);
|
||||
va_end(arglist);
|
||||
}
|
||||
|
||||
virtual void title(const string & /*title*/) override {}
|
||||
virtual void title(const std::string & /*title*/) override {}
|
||||
|
||||
};
|
||||
}
|
||||
|
@ -3,16 +3,15 @@
|
||||
|
||||
#include <string>
|
||||
#include <functional>
|
||||
#include "Strings.hpp"
|
||||
|
||||
namespace Slic3r {
|
||||
|
||||
/**
|
||||
* @brief Generic progress indication interface.
|
||||
*/
|
||||
class IProgressIndicator {
|
||||
class ProgressIndicator {
|
||||
public:
|
||||
using CancelFn = std::function<void(void)>; // Cancel functio signature.
|
||||
using CancelFn = std::function<void(void)>; // Cancel function signature.
|
||||
|
||||
private:
|
||||
float state_ = .0f, max_ = 1.f, step_;
|
||||
@ -20,7 +19,7 @@ private:
|
||||
|
||||
public:
|
||||
|
||||
inline virtual ~IProgressIndicator() {}
|
||||
inline virtual ~ProgressIndicator() {}
|
||||
|
||||
/// Get the maximum of the progress range.
|
||||
float max() const { return max_; }
|
||||
@ -28,14 +27,14 @@ public:
|
||||
/// Get the current progress state
|
||||
float state() const { return state_; }
|
||||
|
||||
/// Set the maximum of hte progress range
|
||||
/// Set the maximum of the progress range
|
||||
virtual void max(float maxval) { max_ = maxval; }
|
||||
|
||||
/// Set the current state of the progress.
|
||||
virtual void state(float val) { state_ = val; }
|
||||
|
||||
/**
|
||||
* @brief Number of states int the progress. Can be used insted of giving a
|
||||
* @brief Number of states int the progress. Can be used instead of giving a
|
||||
* maximum value.
|
||||
*/
|
||||
virtual void states(unsigned statenum) {
|
||||
@ -43,25 +42,19 @@ public:
|
||||
}
|
||||
|
||||
/// Message shown on the next status update.
|
||||
virtual void message(const string&) = 0;
|
||||
virtual void message(const std::string&) = 0;
|
||||
|
||||
/// Title of the operaton.
|
||||
virtual void title(const string&) = 0;
|
||||
/// Title of the operation.
|
||||
virtual void title(const std::string&) = 0;
|
||||
|
||||
/// Formatted message for the next status update. Works just like sprinf.
|
||||
virtual void message_fmt(const string& fmt, ...);
|
||||
/// Formatted message for the next status update. Works just like sprintf.
|
||||
virtual void message_fmt(const std::string& fmt, ...);
|
||||
|
||||
/// Set up a cancel callback for the operation if feasible.
|
||||
inline void on_cancel(CancelFn func) { cancelfunc_ = func; }
|
||||
virtual void on_cancel(CancelFn func = CancelFn()) { cancelfunc_ = func; }
|
||||
|
||||
/**
|
||||
* Explicitly shut down the progress indicator and call the associated
|
||||
* callback.
|
||||
*/
|
||||
virtual void cancel() { cancelfunc_(); }
|
||||
|
||||
/// Convinience function to call message and status update in one function.
|
||||
void update(float st, const string& msg) {
|
||||
/// Convenience function to call message and status update in one function.
|
||||
void update(float st, const std::string& msg) {
|
||||
message(msg); state(st);
|
||||
}
|
||||
};
|
@ -1,10 +0,0 @@
|
||||
#ifndef STRINGS_HPP
|
||||
#define STRINGS_HPP
|
||||
|
||||
#include "GUI/GUI.hpp"
|
||||
|
||||
namespace Slic3r {
|
||||
using string = wxString;
|
||||
}
|
||||
|
||||
#endif // STRINGS_HPP
|
@ -8,10 +8,7 @@
|
||||
%}
|
||||
|
||||
%name{Slic3r::PrintController} class PrintController {
|
||||
|
||||
PrintController(Print *print);
|
||||
|
||||
void slice();
|
||||
};
|
||||
|
||||
%name{Slic3r::AppController} class AppController {
|
||||
|
Loading…
Reference in New Issue
Block a user