diff options
author | Noel Grandin <noel.grandin@collabora.co.uk> | 2019-02-08 11:55:18 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2019-02-11 07:00:35 +0100 |
commit | 7df04009b98165f89c89f1e506ebafd2fecc8f5a (patch) | |
tree | 5629b360bd669d458dcfa0e3da7e7ce44c194363 /include/svtools | |
parent | eb5e2dea18835df78872a8b0e3446e604f749645 (diff) |
remove ControlDependencyManager
and just use our normal handlers, instead of this weird magic
Change-Id: I8245787bec2a755ce6aba31ed681577771537ca1
Reviewed-on: https://gerrit.libreoffice.org/67534
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'include/svtools')
-rw-r--r-- | include/svtools/dialogcontrolling.hxx | 265 |
1 files changed, 0 insertions, 265 deletions
diff --git a/include/svtools/dialogcontrolling.hxx b/include/svtools/dialogcontrolling.hxx deleted file mode 100644 index a3915a3d40b3..000000000000 --- a/include/svtools/dialogcontrolling.hxx +++ /dev/null @@ -1,265 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef INCLUDED_SVTOOLS_DIALOGCONTROLLING_HXX -#define INCLUDED_SVTOOLS_DIALOGCONTROLLING_HXX - -#include <svtools/svtdllapi.h> - -#include <tools/link.hxx> -#include <vcl/button.hxx> -#include <vcl/vclevent.hxx> - -#include <memory> - -namespace svt -{ - - - //= IWindowOperator - - /** an abstract interface for operating on a ->Window - */ - class SVT_DLLPUBLIC SAL_NO_VTABLE IWindowOperator - { - public: - /** called when an event happened which should be reacted to - - @param _rTrigger - the event which triggered the call. If the Id of the event is 0, then this is the initial - call which is made when ->_rOperateOn is added to the responsibility of the DialogController. - @param _rOperateOn - the window on which to operate - */ - virtual void operateOn( const VclWindowEvent& _rTrigger, vcl::Window& _rOperateOn ) const = 0; - - virtual ~IWindowOperator(); - }; - typedef std::shared_ptr< IWindowOperator > PWindowOperator; - - - //= IWindowEventFilter - - /** an abstract interface for deciding whether a ->VclWindowEvent - is worth paying attention to - */ - class SVT_DLLPUBLIC SAL_NO_VTABLE IWindowEventFilter - { - public: - virtual bool payAttentionTo( const VclWindowEvent& _rEvent ) const = 0; - - virtual ~IWindowEventFilter(); - }; - typedef std::shared_ptr< IWindowEventFilter > PWindowEventFilter; - - - //= DialogController - - struct DialogController_Data; - /** a class controlling interactions between dialog controls - - An instance of this class listens to all events fired by a certain - ->Control (more precise, a ->Window), the so-called instigator. - - Additionally, the ->DialogController maintains a list of windows which - are affected by changes in the instigator window. Let's call those the - dependent windows. - - Now, by help of an owner-provided ->IWindowEventFilter, the ->DialogController - decides which events are worth attention. By help of an owner-provided - ->IWindowOperator, it handles those events for all dependent windows. - */ - class SVT_DLLPUBLIC DialogController - { - private: - ::std::unique_ptr< DialogController_Data > m_pImpl; - - public: - DialogController( vcl::Window& _rInstigator, const PWindowEventFilter& _pEventFilter, const PWindowOperator& _pOperator ); - virtual ~DialogController(); - - /** adds a window to the list of dependent windows - - @param _rWindow - The window to add to the list of dependent windows. - - The caller is responsible for life-time control: The given window - must live at least as long as the ->DialogController instance does. - */ - void addDependentWindow( vcl::Window& _rWindow ); - - /** resets the controller so that no actions happened anymore. - - The instances is disfunctional after this method has been called. - */ - void reset(); - - private: - void impl_update( const VclWindowEvent& _rTriggerEvent, vcl::Window& _rWindow ); - - DECL_LINK( OnWindowEvent, VclWindowEvent&, void ); - - private: - DialogController( const DialogController& ) = delete; - DialogController& operator=( const DialogController& ) = delete; - }; - - //= ControlDependencyManager - - struct ControlDependencyManager_Data; - /** helper class for managing control dependencies - - Instances of this class are intended to be held as members of a dialog/tabpage/whatever - class, with easy administration of inter-control dependencies (such as "Enable - control X if and only if checkbox Y is checked). - */ - class SVT_DLLPUBLIC ControlDependencyManager - { - private: - ::std::unique_ptr< ControlDependencyManager_Data > m_pImpl; - - public: - ControlDependencyManager(); - ~ControlDependencyManager(); - - /** ensures that a given window is enabled or disabled, according to the check state - of a given radio button - @param _rRadio - denotes the radio button whose check state is to observe - @param _rDependentWindow - denotes the window which should be enabled when ->_rRadio is checked, and - disabled when it's unchecked - */ - void enableOnRadioCheck( RadioButton& _rRadio, vcl::Window& _rDependentWindow ); - void enableOnRadioCheck( RadioButton& _rRadio, vcl::Window& _rDependentWindow1, vcl::Window& _rDependentWindow2 ); - void enableOnRadioCheck( RadioButton& _rRadio, vcl::Window& _rDependentWindow1, vcl::Window& _rDependentWindow2, vcl::Window& _rDependentWindow3 ); - void enableOnRadioCheck( RadioButton& _rRadio, vcl::Window& _rDependentWindow1, vcl::Window& _rDependentWindow2, vcl::Window& _rDependentWindow3, vcl::Window& _rDependentWindow4, vcl::Window& _rDependentWindow5 ); - - /** adds a non-standard controller whose functionality is not covered by the other methods - - @param _pController - the controller to add to the manager. Must not be <NULL/>. - */ - void addController( const std::shared_ptr<DialogController>& _pController ); - - private: - ControlDependencyManager( const ControlDependencyManager& ) = delete; - ControlDependencyManager& operator=( const ControlDependencyManager& ) = delete; - }; - - - //= EnableOnCheck - - /** a helper class implementing the ->IWindowOperator interface, - which enables a dependent window depending on the check state of - an instigator window. - - @see DialogController - */ - template< class CHECKABLE > - class SVT_DLLPUBLIC EnableOnCheck : public IWindowOperator - { - public: - typedef CHECKABLE SourceType; - - private: - SourceType& m_rCheckable; - - public: - /** constructs the instance - - @param _rCheckable - a ->Window instance which supports a boolean method IsChecked. Usually - a ->RadioButton or ->CheckBox - */ - EnableOnCheck( SourceType& _rCheckable ) - :m_rCheckable( _rCheckable ) - { - } - - virtual void operateOn( const VclWindowEvent& /*_rTrigger*/, vcl::Window& _rOperateOn ) const override - { - _rOperateOn.Enable( m_rCheckable.IsChecked() ); - } - }; - - - //= FilterForRadioOrCheckToggle - - /** a helper class implementing the ->IWindowEventFilter interface, - which filters for radio buttons or check boxes being toggled. - - Technically, the class simply filters for the ->VclEventId::RadiobuttonToggle - and the ->VclEventId::CheckboxToggle event. - */ - class SVT_DLLPUBLIC FilterForRadioOrCheckToggle : public IWindowEventFilter - { - const vcl::Window& m_rWindow; - public: - FilterForRadioOrCheckToggle( const vcl::Window& _rWindow ) - :m_rWindow( _rWindow ) - { - } - - bool payAttentionTo( const VclWindowEvent& _rEvent ) const override - { - if ( ( _rEvent.GetWindow() == &m_rWindow ) - && ( ( _rEvent.GetId() == VclEventId::RadiobuttonToggle ) - || ( _rEvent.GetId() == VclEventId::CheckboxToggle ) - ) - ) - return true; - return false; - } - }; - - - //= RadioDependentEnabler - - /** a ->DialogController derivee which enables or disables its dependent windows, - depending on the check state of a radio button. - - The usage of this class is as simple as - <code> - pController = new RadioDependentEnabler( m_aOptionSelectSomething ); - pController->addDependentWindow( m_aLabelSelection ); - pController->addDependentWindow( m_aListSelection ); - </code> - - With this, both <code>m_aLabelSelection</code> and <code>m_aListSelection</code> will - be disabled if and only <code>m_aOptionSelectSomething</code> is checked. - */ - class SVT_DLLPUBLIC RadioDependentEnabler : public DialogController - { - public: - RadioDependentEnabler( RadioButton& _rButton ) - :DialogController( _rButton, - PWindowEventFilter( new FilterForRadioOrCheckToggle( _rButton ) ), - PWindowOperator( new EnableOnCheck< RadioButton >( _rButton ) ) ) - { - } - }; - - -} // namespace svt - - -#endif // INCLUDED_SVTOOLS_DIALOGCONTROLLING_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |