diff options
| author | Stanislaw Halik <sthalik@misaki.pl> | 2018-11-03 06:48:51 +0100 | 
|---|---|---|
| committer | Stanislaw Halik <sthalik@misaki.pl> | 2018-11-03 06:48:51 +0100 | 
| commit | 310ca879118282f25b6cb2ae681627934278607a (patch) | |
| tree | 71221b30269f84ceb75610960af8f963df94a7ed | |
| parent | 0148a75d4b5301d279dd8c29ecbaeb9c85cf9efb (diff) | |
fix some mixin stuff, still not done
| -rw-r--r-- | main-window/mixin-traits.cpp | 19 | ||||
| -rw-r--r-- | main-window/mixin-traits.hpp | 13 | ||||
| -rw-r--r-- | main-window/module-mixin.cpp | 35 | ||||
| -rw-r--r-- | main-window/module-mixin.hpp | 22 | ||||
| -rw-r--r-- | main-window/tracking-mixin.cpp | 5 | ||||
| -rw-r--r-- | main-window/tracking-mixin.hpp | 19 | 
6 files changed, 36 insertions, 77 deletions
| diff --git a/main-window/mixin-traits.cpp b/main-window/mixin-traits.cpp index 5dc2efd8..b74a6f7a 100644 --- a/main-window/mixin-traits.cpp +++ b/main-window/mixin-traits.cpp @@ -43,16 +43,17 @@ void test1()      struct W : C, A {};      struct Q : virtual W, virtual D {}; -#if 0 -    (void)impl<Q, W>();     // W not a mixin -    (void)impl<V, A>();     // A -    (void)impl<V, D>();     // D => C => A -    (void)impl<V, D>();     // D => C => A -    (void)impl<W, C, B>();  // B +//#define SHOULD_NOT_COMPILE +#ifdef SHOULD_NOT_COMPILE +    (void)impl<Q, W>{};     // W not a mixin +    (void)impl<V, A>{};     // A +    (void)impl<V, D>{};     // D => C => A +    (void)impl<V, D>{};     // D => C => A +    (void)impl<W, C, B>{};  // B  #else -    (void)impl<U, B>(); -    (void)impl<W, C>(); -    (void)impl<Q, D, A>(); +    (void)impl<U, B>{}; +    (void)impl<W, C>{}; +    (void)impl<Q, D, A>{};  #endif  } diff --git a/main-window/mixin-traits.hpp b/main-window/mixin-traits.hpp index 6a0206fc..45df7fdb 100644 --- a/main-window/mixin-traits.hpp +++ b/main-window/mixin-traits.hpp @@ -13,11 +13,7 @@ namespace mixins::traits_detail {      template<typename t>      struct mixin_traits {          // implement this! -        using depends = tuple<>; - -        // unconditional but at instantiation time -        static_assert(sizeof(t) < sizeof(char), -                      "must specialize mixin_traits"); +        //using depends = tuple<>;      };      template<typename klass, typename...> struct check_depends_; @@ -31,7 +27,7 @@ namespace mixins::traits_detail {      struct check_depends_<klass, x, xs...> :              std::bool_constant<                  std::is_base_of_v<x, klass> && -                lift<check_depends_, cons<klass, typename mixin_traits<x>::depends>>::value && +                lift_v<check_depends_, cons<klass, typename mixin_traits<x>::depends>> &&                  check_depends_<klass, xs...>::value              >      { @@ -40,8 +36,7 @@ namespace mixins::traits_detail {      template<typename klass, typename... xs>      struct impl      { -        static constexpr bool class_must_inherit_dependent_mixins = -                lift<check_depends_, tuple<klass, xs...>>::value; -        static_assert(class_must_inherit_dependent_mixins); +        static_assert(lift<check_depends_, tuple<klass, xs...>>::value, +                      "class must inherit dependent mixins");      };  } // ns mixins::traits_detail diff --git a/main-window/module-mixin.cpp b/main-window/module-mixin.cpp index 8d36cb0d..18b2867d 100644 --- a/main-window/module-mixin.cpp +++ b/main-window/module-mixin.cpp @@ -62,7 +62,7 @@ static bool mk_dialog(std::unique_ptr<t>& place, const std::shared_ptr<dylib>& l          if (lib && lib->Dialog)              return u{ (t*)lib->Dialog() };          else -            return nullptr; +            return u{};      });  } @@ -84,39 +84,34 @@ dylib_ptr module_mixin::current_filter()      return ptr;  } -void module_mixin::show_tracker_settings() +void module_mixin::show_tracker_settings_()  { -#if 0 -    if (mk_dialog(tracker_dialog, current_tracker()) && work && work->libs.pTracker) -        tracker_dialog->register_tracker(work->libs.pTracker.get()); +    if (mk_dialog(tracker_dialog, current_tracker()) && state.work && state.work->libs.pTracker) +        tracker_dialog->register_tracker(state.work->libs.pTracker.get());      if (tracker_dialog)          QObject::connect(tracker_dialog.get(), &ITrackerDialog::closing, -                         this, [this] { tracker_dialog = nullptr; }); -#endif +                         &fuzz, [this] { tracker_dialog = nullptr; });  } -void module_mixin::show_proto_settings() +void module_mixin::show_proto_settings_()  { -#if 0 -    if (mk_dialog(proto_dialog, current_protocol()) && work && work->libs.pProtocol) -        proto_dialog->register_protocol(work->libs.pProtocol.get()); +    if (mk_dialog(proto_dialog, current_protocol()) && state.work && state.work->libs.pProtocol) +        proto_dialog->register_protocol(state.work->libs.pProtocol.get());      if (proto_dialog)          QObject::connect(proto_dialog.get(), &IProtocolDialog::closing, -                         this, [this] { proto_dialog = nullptr; }); -#endif +                         &fuzz, [this] { proto_dialog = nullptr; });  } -void module_mixin::show_filter_settings() +void module_mixin::show_filter_settings_()  { -#if 0 -    if (mk_dialog(filter_dialog, current_filter()) && work && work->libs.pFilter) -        filter_dialog->register_filter(work->libs.pFilter.get()); +    if (mk_dialog(filter_dialog, current_filter()) && state.work && state.work->libs.pFilter) +        filter_dialog->register_filter(state.work->libs.pFilter.get());      if (filter_dialog)          QObject::connect(filter_dialog.get(), &IFilterDialog::closing, -                         this, [this] { filter_dialog = nullptr; }); -#endif +                         &fuzz, [this] { filter_dialog = nullptr; });  } +// this template function must go to a separate function like "options_mixin".  template<typename t, typename... Args>  static bool mk_window(std::unique_ptr<t>& place, Args&&... params)  { @@ -128,6 +123,4 @@ static bool mk_window(std::unique_ptr<t>& place, Args&&... params)  module_mixin::module_mixin() = default;  module_mixin::~module_mixin() = default; -module_settings::module_settings() = default; -  } // ns diff --git a/main-window/module-mixin.hpp b/main-window/module-mixin.hpp index 307d79b8..cde0484c 100644 --- a/main-window/module-mixin.hpp +++ b/main-window/module-mixin.hpp @@ -4,13 +4,13 @@  #include "compat/library-path.hpp"  #include "api/plugin-api.hpp"  #include "logic/extensions.hpp" -#include "logic/work.hpp" +#include "logic/state.hpp" +#include "logic/main-settings.hpp"  #include <memory>  #include <utility>  #include <QObject> -#include <QString>  namespace OTR_MIXIN_NS(module_mixin) { @@ -19,15 +19,6 @@ using namespace options;  using dylib_ptr = Modules::dylib_ptr;  using dylib_list = Modules::dylib_list; -struct OTR_MAIN_EXPORT module_settings final -{ -    bundle b { make_bundle("modules") }; -    value<QString> tracker_dll { b, "tracker-dll", "pt" }, -                   filter_dll { b, "filter-dll", "accela" }, -                   protocol_dll { b, "protocol-dll", "freetrack" }; -    module_settings(); -}; -  struct OTR_MAIN_EXPORT module_mixin  {      module_mixin(); @@ -43,14 +34,17 @@ struct OTR_MAIN_EXPORT module_mixin      dylib_ptr current_protocol();      dylib_ptr current_filter(); -    void show_tracker_settings(); -    void show_proto_settings(); -    void show_filter_settings(); +    void show_tracker_settings_(); +    void show_proto_settings_(); +    void show_filter_settings_();  private:      Modules modules { OPENTRACK_BASE_PATH + OPENTRACK_LIBRARY_PATH };      event_handler ev { modules.extensions() };      module_settings s; +    State state { OPENTRACK_BASE_PATH + OPENTRACK_LIBRARY_PATH }; + +    QObject fuzz;  };  } diff --git a/main-window/tracking-mixin.cpp b/main-window/tracking-mixin.cpp deleted file mode 100644 index 1ec6f3d5..00000000 --- a/main-window/tracking-mixin.cpp +++ /dev/null @@ -1,5 +0,0 @@ -#include "tracking-mixin.hpp" - -using namespace OTR_MIXIN_NS(tracking_mixin); - -has_work::has_work::~has_work() = default; diff --git a/main-window/tracking-mixin.hpp b/main-window/tracking-mixin.hpp deleted file mode 100644 index e48ca630..00000000 --- a/main-window/tracking-mixin.hpp +++ /dev/null @@ -1,19 +0,0 @@ -#pragma once - -#include "mixins.hpp" - -#include "logic/work.hpp" - -#include <memory> - -namespace OTR_MIXIN_NS(tracking_mixin) { - -using work_ptr = std::shared_ptr<Work>; - -struct OTR_MAIN_EXPORT has_work { -    virtual explicit operator work_ptr() = 0; -    inline has_work() = default; -    virtual ~has_work(); -}; - -} | 
