From 90e7bf2962a798a0a89c92a31a2141946221012a Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Sat, 14 Jul 2018 09:08:45 +0200 Subject: opentrack: move macros away from header file --- variant/default/main-window.cpp | 83 +++++++++++++++++++++++------------------ 1 file changed, 47 insertions(+), 36 deletions(-) (limited to 'variant/default/main-window.cpp') diff --git a/variant/default/main-window.cpp b/variant/default/main-window.cpp index 5e90d287..76a6d404 100644 --- a/variant/default/main-window.cpp +++ b/variant/default/main-window.cpp @@ -17,7 +17,9 @@ #include "compat/library-path.hpp" #include "compat/math.hpp" +#include #include +#include #include #include @@ -367,7 +369,7 @@ bool main_window::maybe_die_on_config_not_writable(const QString& current, QStri return false; const bool open = QFile(ini_combine(current)).open(QFile::ReadWrite); - const QStringList list = ini_list(); + QStringList list = ini_list(); if (!list.contains(current) || !open) { @@ -376,7 +378,7 @@ bool main_window::maybe_die_on_config_not_writable(const QString& current, QStri } if (ini_list_ != nullptr) - *ini_list_ = list; + *ini_list_ = std::move(list); return false; } @@ -692,53 +694,62 @@ void main_window::show_pose() display_pose(mapped, raw); } -template -bool main_window::mk_window_common(std::unique_ptr& d, F&& ctor) +template +bool mk_window(std::unique_ptr& place, Args&&... params) { - if (d) - { - d->show(); - d->raise(); + return mk_window_common(place, [&] { + return std::make_unique(params...); + }); +} - return false; - } - else if ((d = std::unique_ptr(ctor()))) - { - QWidget& w = *d; +template +bool mk_dialog(std::unique_ptr& place, const std::shared_ptr& lib) +{ + using u = std::unique_ptr; - w.setWindowFlags(Qt::MSWindowsFixedSizeDialogHint | w.windowFlags()); - w.setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + return mk_window_common(place, [&] { + if (lib && lib->Dialog) + return u{ (t*)lib->Dialog() }; + else + return u{}; + }); +} - w.show(); - w.adjustSize(); +template +bool mk_window_common(std::unique_ptr& d, F&& fun) +{ + bool fresh = false; - return true; - } + if (!d) + d = fun(), fresh = !!d; - return false; -} + if (d) + show_window(*d, fresh); -template -inline bool main_window::mk_window(std::unique_ptr& place, Args&&... params) -{ - return mk_window_common(place, [&] { return new t(params...); }); + return fresh; } -template -bool main_window::mk_dialog(const std::shared_ptr& lib, std::unique_ptr& d) +void show_window(QWidget& d, bool fresh) { - const bool just_created = mk_window_common(d, [&]() -> t* { - if (lib && lib->Dialog) - return (t*) lib->Dialog(); - return nullptr; - }); + if (fresh) + { + d.setWindowFlags(Qt::MSWindowsFixedSizeDialogHint | d.windowFlags()); + d.setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); - return just_created; + d.show(); + d.adjustSize(); + d.raise(); + } + else + { + d.show(); + d.raise(); + } } void main_window::show_tracker_settings() { - if (mk_dialog(current_tracker(), pTrackerDialog) && work && work->libs.pTracker) + if (mk_dialog(pTrackerDialog, current_tracker()) && work && work->libs.pTracker) pTrackerDialog->register_tracker(work->libs.pTracker.get()); if (pTrackerDialog) QObject::connect(pTrackerDialog.get(), &ITrackerDialog::closing, @@ -747,7 +758,7 @@ void main_window::show_tracker_settings() void main_window::show_proto_settings() { - if (mk_dialog(current_protocol(), pProtocolDialog) && work && work->libs.pProtocol) + if (mk_dialog(pProtocolDialog, current_protocol()) && work && work->libs.pProtocol) pProtocolDialog->register_protocol(work->libs.pProtocol.get()); if (pProtocolDialog) QObject::connect(pProtocolDialog.get(), &IProtocolDialog::closing, @@ -756,7 +767,7 @@ void main_window::show_proto_settings() void main_window::show_filter_settings() { - if (mk_dialog(current_filter(), pFilterDialog) && work && work->libs.pFilter) + if (mk_dialog(pFilterDialog, current_filter()) && work && work->libs.pFilter) pFilterDialog->register_filter(work->libs.pFilter.get()); if (pFilterDialog) QObject::connect(pFilterDialog.get(), &IFilterDialog::closing, -- cgit v1.2.3