diff options
author | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2011-11-06 15:56:40 -0600 |
---|---|---|
committer | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2011-11-06 15:56:40 -0600 |
commit | e16866e072f94410321d70daedbcb855ea878cac (patch) | |
tree | ee3f52eabde7da1a0e6ca845fb9c2813cf1558cf /tdeui/kxmlguifactory_p.h | |
parent | a58c20c1a7593631a1b50213c805507ebc16adaf (diff) | |
download | tdelibs-e16866e072f94410321d70daedbcb855ea878cac.tar.gz tdelibs-e16866e072f94410321d70daedbcb855ea878cac.zip |
Actually move the kde files that were renamed in the last commit
Diffstat (limited to 'tdeui/kxmlguifactory_p.h')
-rw-r--r-- | tdeui/kxmlguifactory_p.h | 254 |
1 files changed, 254 insertions, 0 deletions
diff --git a/tdeui/kxmlguifactory_p.h b/tdeui/kxmlguifactory_p.h new file mode 100644 index 000000000..1877a295f --- /dev/null +++ b/tdeui/kxmlguifactory_p.h @@ -0,0 +1,254 @@ +/* This file is part of the KDE libraries + Copyright (C) 2001 Simon Hausmann <hausmann@kde.org> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ +#ifndef __kxmlguifactory_p_h__ +#define __kxmlguifactory_p_h__ + +#include <tqstringlist.h> +#include <tqmap.h> +#include <tqdom.h> +#include <tqvaluestack.h> + +#include <kaction.h> + +class TQWidget; +class KXMLGUIClient; +class KXMLGUIBuilder; +class KXMLGUIFactory; + +namespace KXMLGUI +{ + +struct BuildState; + +class KDEUI_EXPORT ActionList : public TQPtrList<KAction> +{ +public: + ActionList() {} + ActionList( const TQPtrList<KAction> &rhs ) + : TQPtrList<KAction>( rhs ) + {} + ActionList &operator=( const TQPtrList<KAction> &rhs ) + { TQPtrList<KAction>::operator=( rhs ); return *this; } + + void plug( TQWidget *container, int index ) const; + void unplug( TQWidget *container ) const; +}; + +typedef TQPtrListIterator<KAction> ActionListIt; +typedef TQMap< TQString, ActionList > ActionListMap; + +/* + * This structure is used to know to which client certain actions and custom elements + * (i.e. menu separators) belong. + * We do not only use a ContainerClient per GUIClient but also per merging group. + * + * groupName : Used for grouped merging. Specifies the group name to which these actions/elements + * belong to. + * actionLists : maps from action list name to action list. + * mergingName : The (named) merging point. + * + * A ContainerClient always belongs to a ContainerNode. + */ +struct ContainerClient +{ + KXMLGUIClient *client; + ActionList actions; + TQValueList<int> customElements; + TQString groupName; //is empty if no group client + ActionListMap actionLists; + TQString mergingName; +}; +typedef TQPtrList<ContainerClient> ContainerClientList; +typedef TQPtrListIterator<ContainerClient> ContainerClientListIt; + +struct ContainerNode; + +struct MergingIndex +{ + int value; // the actual index value, used as index for plug() or createContainer() calls + TQString mergingName; // the name of the merging index (i.e. the name attribute of the + // Merge or DefineGroup tag) + TQString clientName; // the name of the client that defined this index +}; +typedef TQValueList<MergingIndex> MergingIndexList; + +/* + * Here we store detailed information about a container, its clients (client=a guiclient having actions + * plugged into the container), child nodes, naming information (tagname and name attribute) and + * merging index information, to plug/insert new actions/items a the correct position. + * + * The builder variable is needed for using the proper GUIBuilder for destruction ( to use the same for + * con- and destruction ). The builderCustomTags and builderContainerTags variables are cached values + * of what the corresponding methods of the GUIBuilder which built the container return. The stringlists + * is shared all over the place, so there's no need to worry about memory consumption for these + * variables :-) + * + * The mergingIndices list contains the merging indices ;-) , as defined by <Merge>, <DefineGroup> + * or by <ActionList> tags. The order of these index structures within the mergingIndices list + * is (and has to be) identical with the order in the DOM tree. + * + * Beside the merging indices we have the "real" index of the container. It points to the next free + * position. + * (used when no merging index is used for a certain action, custom element or sub-container) + */ +struct KDEUI_EXPORT ContainerNode +{ + ContainerNode( TQWidget *_container, const TQString &_tagName, const TQString &_name, + ContainerNode *_parent = 0L, KXMLGUIClient *_client = 0L, + KXMLGUIBuilder *_builder = 0L, int id = -1, + const TQString &_mergingName = TQString::null, + const TQString &groupName = TQString::null, + const TQStringList &customTags = TQStringList(), + const TQStringList &containerTags = TQStringList() ); + + ContainerNode *parent; + KXMLGUIClient *client; + KXMLGUIBuilder *builder; + TQStringList builderCustomTags; + TQStringList builderContainerTags; + TQWidget *container; + int containerId; + + TQString tagName; + TQString name; + + TQString groupName; //is empty if the container is in no group + + ContainerClientList clients; + TQPtrList<ContainerNode> children; + + int index; + MergingIndexList mergingIndices; + + TQString mergingName; + + void clearChildren() { children.clear(); } + void removeChild( ContainerNode *child ); + + MergingIndexList::Iterator findIndex( const TQString &name ); + ContainerNode *findContainerNode( TQWidget *container ); + ContainerNode *findContainer( const TQString &_name, bool tag ); + ContainerNode *findContainer( const TQString &name, const TQString &tagName, + const TQPtrList<TQWidget> *excludeList, + KXMLGUIClient *currClient ); + + ContainerClient *findChildContainerClient( KXMLGUIClient *currentGUIClient, + const TQString &groupName, + const MergingIndexList::Iterator &mergingIdx ); + + void plugActionList( BuildState &state ); + void plugActionList( BuildState &state, const MergingIndexList::Iterator &mergingIdxIt ); + + void unplugActionList( BuildState &state ); + void unplugActionList( BuildState &state, const MergingIndexList::Iterator &mergingIdxIt ); + + void adjustMergingIndices( int offset, const MergingIndexList::Iterator &it ); + + bool destruct( TQDomElement element, BuildState &state ); + void destructChildren( const TQDomElement &element, BuildState &state ); + static TQDomElement findElementForChild( const TQDomElement &baseElement, + ContainerNode *childNode ); + void unplugActions( BuildState &state ); + void unplugClient( ContainerClient *client ); + + void reset(); + + int calcMergingIndex( const TQString &mergingName, + MergingIndexList::Iterator &it, + BuildState &state, + bool ignoreDefaultMergingIndex ); +}; + +typedef TQPtrList<ContainerNode> ContainerNodeList; +typedef TQPtrListIterator<ContainerNode> ContainerNodeListIt; + +class KDEUI_EXPORT BuildHelper +{ +public: + BuildHelper( BuildState &state, + ContainerNode *node ); + + void build( const TQDomElement &element ); + +private: + void processElement( const TQDomElement &element ); + + void processActionOrCustomElement( const TQDomElement &e, bool isActionTag ); + bool processActionElement( const TQDomElement &e, int idx ); + bool processCustomElement( const TQDomElement &e, int idx ); + + void processStateElement( const TQDomElement &element ); + + void processMergeElement( const TQString &tag, const TQString &name, const TQDomElement &e ); + + void processContainerElement( const TQDomElement &e, const TQString &tag, + const TQString &name ); + + + TQWidget *createContainer( TQWidget *parent, int index, const TQDomElement &element, + int &id, KXMLGUIBuilder **builder ); + + int calcMergingIndex( const TQDomElement &element, MergingIndexList::Iterator &it, TQString &group ); + + TQStringList customTags; + TQStringList containerTags; + + TQPtrList<TQWidget> containerList; + + ContainerClient *containerClient; + + bool ignoreDefaultMergingIndex; + + BuildState &m_state; + + ContainerNode *parentNode; +}; + +struct KDEUI_EXPORT BuildState +{ + BuildState() : guiClient( 0 ), builder( 0 ), clientBuilder( 0 ) {} + + void reset(); + + TQString clientName; + + TQString actionListName; + ActionList actionList; + + KXMLGUIClient *guiClient; + + MergingIndexList::Iterator currentDefaultMergingIt; + MergingIndexList::Iterator currentClientMergingIt; + + KXMLGUIBuilder *builder; + TQStringList builderCustomTags; + TQStringList builderContainerTags; + + KXMLGUIBuilder *clientBuilder; + TQStringList clientBuilderCustomTags; + TQStringList clientBuilderContainerTags; +}; + +typedef TQValueStack<BuildState> BuildStateStack; + +} + +#endif +/* vim: et sw=4 + */ |