diff options
Diffstat (limited to 'include/sfx2/itemconnect.hxx')
-rw-r--r-- | include/sfx2/itemconnect.hxx | 196 |
1 files changed, 0 insertions, 196 deletions
diff --git a/include/sfx2/itemconnect.hxx b/include/sfx2/itemconnect.hxx deleted file mode 100644 index 377a60eb7bd6..000000000000 --- a/include/sfx2/itemconnect.hxx +++ /dev/null @@ -1,196 +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_SFX2_ITEMCONNECT_HXX -#define INCLUDED_SFX2_ITEMCONNECT_HXX - -#include <sal/config.h> -#include <o3tl/typed_flags_set.hxx> -#include <sfx2/dllapi.h> -#include <sfx2/itemwrapper.hxx> -#include <sfx2/controlwrapper.hxx> -#include <svl/itemset.hxx> -#include <memory> - - -enum class ItemConnFlags -{ -/** No special state for the connection. */ - NONE = 0x0000, -/** Hide control(s), if the item is unknown. */ - HideUnknown = 0x0001, -}; -namespace o3tl -{ - template<> struct typed_flags<ItemConnFlags> : is_typed_flags<ItemConnFlags, 0x0001> {}; -} - -namespace sfx { - -// Base connection classes - - -/** A helper for SfxTabPages to connect controls to items. - - This is the base class of all control connection classes. Their purpose is - to connect one or more controls from an SfxTabPage with an item from an - item set. The goal is to omit any additional code in the virtual functions - Reset() and FillItemSet() in classes derived from SfxTabPage. - - Examples of connections: - - A check box with an SfxBoolItem, - - A metric (spin) field with an SfxInt32Item. - - A group of radio buttons with an SfxEnumItem. - - Each SfxTabPage will contain a list of connection objects (derived from - this class). The connection objects remember the item and control(s) they - have to work on. The SfxTabPage will call the DoApplyFlags(), DoReset(), - and DoFillItemSet() functions of all connection objects it knows. The code - to initialize control(s) from the item value and fill the item from - control(s) has to be written only once for each control type. - - Additional flags passed in the constructor allow to control the behaviour - of the control(s) if the item is supported/unsupported in the currently - used item set. For example, it is possible to specify that a control will - be disabled or hidden if the item is not supported. This is done before - each call of Reset(). - - The special flag ITEMCONN_CLONE_ITEM controls how to create new items in - the DoFillItemSet() function. The standard (and faster) method is to create - a temporary item on the stack and put it into the item set. But this does - not work if the item set expects a special item type derived from a common - item class, i.e. a Boolean item derived from SfxBoolItem providing special - item representation text. As this code does not know the item type, the - item cannot be created on the stack. For this case the flag specifies to - use the virtual Clone() method of the pool default item. This will create - an item of the correct type but can still be used in conjunction with i.e. - the standard BoolItemWrapper. - - How to use the item connection feature: - - A) Single item <-> single control connection - - Example: An SfxBoolItem and a check box. - - A1) Create a new item wrapper class derived from the SingleItemWrapper - template, or use the template directly, or use one of the - predefined item wrappers. See documentation of the - SingleItemWrapper template for details (itemwrapper.hxx). - A2) Create a new control wrapper class derived from the - SingleControlWrapper template and implement the abstract functions, - or use one of the predefined control wrappers. See documentation of - the SingleControlWrapper template for details (controlwrapper.hxx). - A3) Create a new connection class derived from one of the following - base classes, and implement the abstract functions, or use the - ItemControlConnection template directly, or use one of the - predefined connections. - A4) Create connection objects in the constructor of the tab page, and - insert them into the tab page with SfxTabPage::AddItemConnection(). - A5) Remove old code from the tab page's Reset() and FillItemSet() - functions, if necessary. - - B) Single item <-> multiple controls connections - - B1) See step A1. If the item contains multiple values (and not a - structure that contains all the values for the different controls), - the best way is to use the IdentItemWrapper template, that works - with the item itself. This way it is possible to provide a 'data - type' that contains the values for all controls. - B2) Create a new control wrapper class derived from the - MultiControlWrapper template. Add single control wrapper members - for all controls to this class and register them in the - constructor, using the RegisterControlWrapper() function. Implement - the abstract functions GetControlValue() and SetControlValue(). - These functions should call the respective functions of the own - single control wrappers and either fill a new data object (the item - itself in most cases, see step B1) with all the values from the - controls, or fill all the controls from the data object. - B3) Create a new connection class derived from ItemControlConnection, - or use the ItemControlConnection template directly. The multiple - control wrapper from step B2 acts like a single control, therefore - it is possible to use the ItemControlConnection. - B4) See steps A4 and A5. - - C) Multiple items <-> single control connections - - todo - - D) Multiple items <-> multiple controls connections - - todo - - The current tree of base classes/templates and standard connections: - - ItemConnectionBase - | - +- DummyItemConnection [1] - | - +- ItemControlConnection< ItemWrpT, ControlWrpT > - | | - | +- NumericConnection< ItemWrpT > [1] - | | | - | | +- [ValueType]NumericConnection [1] [2] - | | - | +- ListBoxConnection< ItemWrpT > [1] - | | - | +- [ValueType]ListBoxConnection [1] [2] - | - +- ItemConnectionArray [1] - - Notes: - [1] Standard connections ready to use. - [2] [ValueType] is one of Int16, UInt16, Int32, UInt32. - */ -class SFX2_DLLPUBLIC ItemConnectionBase -{ -public: - virtual ~ItemConnectionBase(); - - /** Calls the virtual ApplyFlags() function, if connection is active. */ - void DoApplyFlags( const SfxItemSet* pItemSet ); - /** Calls the virtual Reset() function, if connection is active. */ - void DoReset( const SfxItemSet* pItemSet ); - /** Calls the virtual FillItemSet() function, if connection is active. */ - bool DoFillItemSet( SfxItemSet& rDestSet, const SfxItemSet& rOldSet ); - -protected: - explicit ItemConnectionBase( ItemConnFlags nFlags ); - - /** Derived classes implement actions according to current flags here. */ - virtual void ApplyFlags( const SfxItemSet* pItemSet ) = 0; - /** Derived classes implement initializing controls from item sets here. */ - virtual void Reset( const SfxItemSet* pItemSet ) = 0; - /** Derived classes implement filling item sets from controls here. */ - virtual bool FillItemSet( SfxItemSet& rDestSet, const SfxItemSet& rOldSet ) = 0; - - /** Returns whether to show a control, according to current flags. */ - TriState GetShowState( bool bKnown ) const; - -private: - ItemConnectionBase( const ItemConnectionBase& ) = delete; - ItemConnectionBase& operator=( const ItemConnectionBase& ) = delete; - - ItemConnFlags mnFlags; /// Flags for additional options. -}; - -} // namespace sfx - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |