summaryrefslogtreecommitdiffhomepage
path: root/logic/work.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'logic/work.cpp')
-rw-r--r--logic/work.cpp66
1 files changed, 25 insertions, 41 deletions
diff --git a/logic/work.cpp b/logic/work.cpp
index 11ec9912..8c6a3a62 100644
--- a/logic/work.cpp
+++ b/logic/work.cpp
@@ -1,6 +1,8 @@
#include "work.hpp"
#include "compat/library-path.hpp"
+#include <utility>
+
#include <QObject>
#include <QMessageBox>
#include <QFileDialog>
@@ -16,9 +18,9 @@ QString Work::browse_datalogging_file(main_settings &s)
Since the freeze is apparently random, I'm not sure it helped.
*/
QString newfilename = QFileDialog::getSaveFileName(nullptr,
- otr_tr("Select filename"),
+ tr("Select filename"),
filename,
- otr_tr("CSV File (*.csv)"),
+ tr("CSV File (*.csv)"),
nullptr);
if (!newfilename.isEmpty())
{
@@ -29,67 +31,46 @@ QString Work::browse_datalogging_file(main_settings &s)
return newfilename;
}
-std::shared_ptr<TrackLogger> Work::make_logger(main_settings &s)
+std::unique_ptr<TrackLogger> Work::make_logger(main_settings &s)
{
if (s.tracklogging_enabled)
{
QString filename = browse_datalogging_file(s);
- if (filename.isEmpty())
- {
- // The user probably canceled the file dialog. In this case we don't want to do anything.
- }
- else
+
+ if (!filename.isEmpty())
{
- auto logger = std::make_shared<TrackLoggerCSV>(s.tracklogging_filename);
+ auto logger = std::make_unique<TrackLoggerCSV>(*s.tracklogging_filename);
+
if (!logger->is_open())
{
- logger = nullptr;
QMessageBox::warning(nullptr,
- otr_tr("Logging error"),
- otr_tr("Unable to open file '%1'. Proceeding without logging.").arg(s.tracklogging_filename),
+ tr("Logging error"),
+ tr("Unable to open file '%1'. Proceeding without logging.").arg(s.tracklogging_filename),
QMessageBox::Ok, QMessageBox::NoButton);
}
else
- {
return logger;
- }
}
}
- return std::make_shared<TrackLogger>();
-}
-
-
-Work::Work(Mappings& m, event_handler& ev, QFrame* frame, std::shared_ptr<dylib> tracker_, std::shared_ptr<dylib> filter_, std::shared_ptr<dylib> proto_) :
- libs(frame, tracker_, filter_, proto_),
- logger(make_logger(s)),
- tracker(std::make_shared<pipeline>(m, libs, ev, *logger)),
- sc(std::make_shared<Shortcuts>()),
- keys {
- key_tuple(s.key_center1, [&](bool) { tracker->set_center(); }, true),
- key_tuple(s.key_center2, [&](bool) { tracker->set_center(); }, true),
- key_tuple(s.key_toggle1, [&](bool) { tracker->toggle_enabled(); }, true),
- key_tuple(s.key_toggle2, [&](bool) { tracker->toggle_enabled(); }, true),
-
- key_tuple(s.key_zero1, [&](bool) { tracker->toggle_zero(); }, true),
- key_tuple(s.key_zero2, [&](bool) { tracker->toggle_zero(); }, true),
+ return std::make_unique<TrackLogger>();
+}
- key_tuple(s.key_toggle_press1, [&](bool x) { tracker->set_enabled(!x); }, false),
- key_tuple(s.key_toggle_press2, [&](bool x) { tracker->set_enabled(!x); }, false),
- key_tuple(s.key_zero_press1, [&](bool x) { tracker->set_zero(x); }, false),
- key_tuple(s.key_zero_press2, [&](bool x) { tracker->set_zero(x); }, false),
- }
+Work::Work(const Mappings& m, QFrame* frame,
+ const dylibptr& tracker, const dylibptr& filter, const dylibptr& proto) :
+ libs(frame, tracker, filter, proto),
+ pipeline_{ m, libs, *logger }
{
if (!is_ok())
return;
reload_shortcuts();
- tracker->start();
+ pipeline_.start();
}
void Work::reload_shortcuts()
{
- sc->reload(keys);
+ sc.reload(keys);
}
bool Work::is_ok() const
@@ -97,10 +78,13 @@ bool Work::is_ok() const
return libs.correct;
}
+// TODO member dtor order looks fine, check valgrind -sh 20180706
+#if 0
Work::~Work()
{
// order matters, otherwise use-after-free -sh
- sc = nullptr;
- tracker = nullptr;
- libs = runtime_libraries();
+ //sc = nullptr;
+ //pipeline = nullptr;
+ //libs = runtime_libraries();
}
+#endif