Skip to content
Snippets Groups Projects
Select Git revision
  • b1bc886c24924c8895e7da5074397c2d5aa9c33b
  • master default protected
  • release/202005
  • release/202001
  • release/201912
  • release/201911
  • release/releaseWindowsTestOne
  • release/windowsReleaseTest
  • release/releaseTest
  • release/releaseWindowsTest
  • release/201910
  • release/qt/201910
  • release/windows-test/201910
  • release/201908
  • release/201906
  • release/201905
  • release/201904
  • release/201903
  • release/201902
  • release/201901
  • release/201812
  • 4.0.0
  • 2.2.0
  • 2.1.0
  • 2.0.1
  • 2.0.0
  • 1.4.1
  • 1.4.0
  • 1.3.0
  • 1.2.0
  • 1.1.0
31 results

smartools.h

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    globalinstances.h 4.84 KiB
    /****************************************************************************
     *   Copyright (C) 2015-2016 by Savoir-faire Linux                               *
     *   Author : Stepan Salenikovich <stepan.salenikovich@savoirfairelinux.com>*
     *                                                                          *
     *   This library is free software; you can redistribute it and/or          *
     *   modify it under the terms of the GNU Lesser General Public             *
     *   License as published by the Free Software Foundation; either           *
     *   version 2.1 of the License, or (at your option) any later version.     *
     *                                                                          *
     *   This library is distributed in the hope that it will be useful,        *
     *   but WITHOUT ANY WARRANTY; without even the implied warranty of         *
     *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU      *
     *   Lesser General Public License for more details.                        *
     *                                                                          *
     *   You should have received a copy of the GNU General Public License      *
     *   along with this program.  If not, see <http://www.gnu.org/licenses/>.  *
     ***************************************************************************/
    #pragma once
    
    #include <typedefs.h>
    
    #include <memory>
    
    namespace Interfaces {
    class AccountListColorizerI;
    class ContactMethodSelectorI;
    class DBusErrorHandlerI;
    class ItemModelStateSerializerI;
    class PixmapManipulatorI;
    class PresenceSerializerI;
    class ShortcutCreatorI;
    class ActionExtenderI;
    } // namespace Interfaces
    
    /**
     * Use these functions to get and set the global instance of the implementation of each interface.
     *
     * The setter functions demand an std::unique_ptr because they become the object owners.
     *
     * Note that certain interfaces do not have a default implementation in LRC, in this case the getter
     * function will throw an exception if no instance has been set by the client.
     */
    namespace GlobalInstances {
    
    LIB_EXPORT Interfaces::AccountListColorizerI& accountListColorizer();
    void LIB_EXPORT setAccountListColorizer(std::unique_ptr<Interfaces::AccountListColorizerI> instance);
    
    /**
     * LRC does not provide a default implementation of this interface, thus an exception will be thrown
     * if this getter is called without an instance being set by the client
     */
    LIB_EXPORT Interfaces::ContactMethodSelectorI& contactMethodSelector();
    void LIB_EXPORT setContactMethodSelector(std::unique_ptr<Interfaces::ContactMethodSelectorI> instance);
    
    LIB_EXPORT Interfaces::DBusErrorHandlerI& dBusErrorHandler();
    void setDBusErrorHandler(std::unique_ptr<Interfaces::DBusErrorHandlerI> instance);
    
    /**
     * LRC does not provide a default implementation of this interface, thus an exception will be thrown
     * if this getter is called without an instance being set by the client
     */
    LIB_EXPORT Interfaces::ItemModelStateSerializerI& itemModelStateSerializer();
    void LIB_EXPORT setItemModelStateSerializer(std::unique_ptr<Interfaces::ItemModelStateSerializerI> instance);
    
    LIB_EXPORT Interfaces::PixmapManipulatorI& pixmapManipulator();
    void LIB_EXPORT setPixmapManipulator(std::unique_ptr<Interfaces::PixmapManipulatorI> instance);
    
    LIB_EXPORT Interfaces::PresenceSerializerI& presenceSerializer();
    void LIB_EXPORT setPresenceSerializer(std::unique_ptr<Interfaces::PresenceSerializerI> instance);
    
    LIB_EXPORT Interfaces::ShortcutCreatorI& shortcutCreator();
    void LIB_EXPORT setShortcutCreator(std::unique_ptr<Interfaces::ShortcutCreatorI> instance);
    
    LIB_EXPORT Interfaces::ActionExtenderI& actionExtender();
    void LIB_EXPORT setActionExtender(std::unique_ptr<Interfaces::ActionExtenderI> instance);
    
    
    
    //Private use only
    void setInterfaceInternal(Interfaces::AccountListColorizerI    *);
    void setInterfaceInternal(Interfaces::ContactMethodSelectorI   *);
    void setInterfaceInternal(Interfaces::DBusErrorHandlerI        *);
    void setInterfaceInternal(Interfaces::ItemModelStateSerializerI*);
    void setInterfaceInternal(Interfaces::PixmapManipulatorI       *);
    void setInterfaceInternal(Interfaces::PresenceSerializerI      *);
    void setInterfaceInternal(Interfaces::ShortcutCreatorI         *);
    void setInterfaceInternal(Interfaces::ActionExtenderI          *);
    
    /**
     * Generic interface setter. This metamethod can set any type of interface
     * dynamically using variadic template, compile time type deduction and
     * the macro subsystem. Passing an invalid interface should trigger compile
     * time errors.
     *
     * The interface object is created internally and additional parameters
     * can be passed.
     */
    template<class I, typename ...Ts>
    void LIB_EXPORT setInterface(Ts... args)
    {
       try {
          auto i = new I(args...);
          setInterfaceInternal(i);
       }
       catch(void* e) { //TODO define some kind of object for errors like this
          qDebug() << "Interface could not be set";
       }
    }
    
    } // namespace GlobalInstances