summaryrefslogtreecommitdiffstats
path: root/tdeui/kxmlguiclient.h
diff options
context:
space:
mode:
authorTimothy Pearson <kb9vqf@pearsoncomputing.net>2011-11-06 15:56:40 -0600
committerTimothy Pearson <kb9vqf@pearsoncomputing.net>2011-11-06 15:56:40 -0600
commite16866e072f94410321d70daedbcb855ea878cac (patch)
treeee3f52eabde7da1a0e6ca845fb9c2813cf1558cf /tdeui/kxmlguiclient.h
parenta58c20c1a7593631a1b50213c805507ebc16adaf (diff)
downloadtdelibs-e16866e072f94410321d70daedbcb855ea878cac.tar.gz
tdelibs-e16866e072f94410321d70daedbcb855ea878cac.zip
Actually move the kde files that were renamed in the last commit
Diffstat (limited to 'tdeui/kxmlguiclient.h')
-rw-r--r--tdeui/kxmlguiclient.h367
1 files changed, 367 insertions, 0 deletions
diff --git a/tdeui/kxmlguiclient.h b/tdeui/kxmlguiclient.h
new file mode 100644
index 000000000..f3f7393f4
--- /dev/null
+++ b/tdeui/kxmlguiclient.h
@@ -0,0 +1,367 @@
+/* This file is part of the KDE libraries
+ Copyright (C) 2000 Simon Hausmann <hausmann@kde.org>
+ Copyright (C) 2000 Kurt Granroth <granroth@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 version 2 as published by the Free Software Foundation.
+
+ 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 _KXMLGUICLIENT_H
+#define _KXMLGUICLIENT_H
+
+#include <tqdom.h>
+#include <tqptrlist.h>
+#include <tqmap.h>
+#include <tqstringlist.h>
+
+#include <kdelibs_export.h>
+
+class TQWidget;
+class KAction;
+class KActionCollection;
+class KInstance;
+class KXMLGUIClientPrivate;
+class KXMLGUIFactory;
+class KXMLGUIBuilder;
+
+/**
+ *
+ * A KXMLGUIClient can be used with KXMLGUIFactory to create a
+ * GUI from actions and an XML document, and can be dynamically merged
+ * with other KXMLGUIClients.
+ */
+class KDEUI_EXPORT KXMLGUIClient
+{
+ friend class KEditToolbarWidget; // for setXMLFile(3 args)
+public:
+ /**
+ * Constructs a KXMLGUIClient which can be used with a
+ * KXMLGUIFactory to create a GUI from actions and an XML document, and
+ * which can be dynamically merged with other KXMLGUIClients.
+ */
+ KXMLGUIClient();
+
+ /**
+ * Constructs a KXMLGUIClient which can be used with a KXMLGUIFactory
+ * to create a GUI from actions and an XML document,
+ * and which can be dynamically merged with other KXMLGUIClients.
+ *
+ * This constructor takes an additional @p parent argument, which makes
+ * the client a child client of the parent.
+ *
+ * Child clients are automatically added to the GUI if the parent is added.
+ *
+ */
+ KXMLGUIClient( KXMLGUIClient *parent );
+
+ /**
+ * Destructs the KXMLGUIClient.
+ */
+ virtual ~KXMLGUIClient();
+
+ /**
+ * Retrieves an action of the client by name. If not found, it looks in its child clients.
+ * This method is provided for convenience, as it uses actionCollection()
+ * to get the action object.
+ */
+ KAction* action( const char* name ) const;
+
+ /**
+ * Retrieves an action for a given TQDomElement. The default
+ * implementation uses the "name" attribute to query the action
+ * object via the other action() method.
+ */
+ virtual KAction *action( const TQDomElement &element ) const;
+
+ /**
+ * Retrieves the entire action collection for the GUI client. If
+ * you subclass KXMLGUIClient you should call
+ * KActionCollection::setWidget( TQWidget* ) with this object, or
+ * you will encounter subtle bugs with KAction keyboard shortcuts.
+ * This is not necessary if your KXMLGUIClient is a KMainWindow.
+ *
+ * @see KActionCollection::setWidget( TQWidget* )
+ */
+ virtual KActionCollection* actionCollection() const;
+
+ /**
+ * @return The instance ( KInstance ) for this GUI client.
+ */
+ virtual KInstance *instance() const;
+
+ /**
+ * @return The parsed XML in a TQDomDocument, set by
+ * setXMLFile() or setXML().
+ * This document describes the layout of the GUI.
+ */
+ virtual TQDomDocument domDocument() const;
+
+ /**
+ * This will return the name of the XML file as set by setXMLFile().
+ * If setXML() is used directly, then this will return NULL.
+ *
+ * The filename that this returns is obvious for components as each
+ * component has exactly one XML file. In non-components, however,
+ * there are usually two: the global file and the local file. This
+ * function doesn't really care about that, though. It will always
+ * return the last XML file set. This, in almost all cases, will
+ * be the local XML file.
+ *
+ * @return The name of the XML file or TQString::null
+ */
+ virtual TQString xmlFile() const;
+
+ virtual TQString localXMLFile() const;
+
+ /**
+ * @internal
+ */
+ void setXMLGUIBuildDocument( const TQDomDocument &doc );
+ /**
+ * @internal
+ */
+ TQDomDocument xmlguiBuildDocument() const;
+
+ /**
+ * This method is called by the KXMLGUIFactory as soon as the client
+ * is added to the KXMLGUIFactory's GUI.
+ */
+ void setFactory( KXMLGUIFactory *factory );
+ /**
+ * Retrieves a pointer to the KXMLGUIFactory this client is
+ * associated with (will return 0L if the client's GUI has not been built
+ * by a KXMLGUIFactory.
+ */
+ KXMLGUIFactory *factory() const;
+
+ /**
+ * KXMLGUIClients can form a simple child/parent object tree. This
+ * method returns a pointer to the parent client or 0L if it has no
+ * parent client assigned.
+ */
+ KXMLGUIClient *parentClient() const;
+
+ /**
+ * Use this method to make a client a child client of another client.
+ * Usually you don't need to call this method, as it is called
+ * automatically when using the second constructor, which takes a
+ * parent argument.
+ */
+ void insertChildClient( KXMLGUIClient *child );
+
+ /**
+ * Removes the given @p child from the client's children list.
+ */
+ void removeChildClient( KXMLGUIClient *child );
+
+ /**
+ * Retrieves a list of all child clients.
+ */
+ const TQPtrList<KXMLGUIClient> *childClients();
+
+ /**
+ * A client can have an own KXMLGUIBuilder.
+ * Use this method to assign your builder instance to the client (so that the
+ * KXMLGUIFactory can use it when building the client's GUI)
+ *
+ * Client specific guibuilders are useful if you want to create
+ * custom container widgets for your GUI.
+ */
+ void setClientBuilder( KXMLGUIBuilder *builder );
+
+ /**
+ * Retrieves the client's GUI builder or 0L if no client specific
+ * builder has been assigned via setClientBuilder()
+ */
+ KXMLGUIBuilder *clientBuilder() const;
+
+ /**
+ * Forces this client to re-read its XML resource file. This is
+ * intended to be used when you know that the resource file has
+ * changed and you will soon be rebuilding the GUI. It has no
+ * useful effect with non-KParts GUIs, so don't bother using it
+ * unless your app is component based.
+ */
+ void reloadXML();
+
+ /**
+ * ActionLists are a way for XMLGUI to support dynamic lists of
+ * actions. E.g. if you are writing a file manager, and there is a
+ * menu file whose contents depend on the mimetype of the file that
+ * is selected, then you can achieve this using ActionLists. It
+ * works as follows:
+ * In your xxxui.rc file ( the one that you set in setXMLFile()
+ * ), you put an <p>\<ActionList name="xxx"\></p> tag. E.g.
+ * \verbatim
+ * <kpartgui name="xxx_part" version="1">
+ * <MenuBar>
+ * <Menu name="file">
+ * ... <!-- some useful actions-->
+ * <ActionList name="xxx_file_actionlist" />
+ * ... <!-- even more useful actions-->
+ * </Menu>
+ * ...
+ * </MenuBar>
+ * </kpartgui>
+ * \endverbatim
+ *
+ * This tag will get expanded to a list of actions. In the example
+ * above ( a file manager with a dynamic file menu ), you would call
+ * \code
+ * TQPtrList<KAction> file_actions;
+ * for( ... )
+ * if( ... )
+ * file_actions.append( cool_action );
+ * unplugActionList( "xxx_file_actionlist" );
+ * plugActionList( "xxx_file_actionlist", file_actions );
+ * \endcode
+ * every time a file is selected, unselected or ...
+ *
+ * \note You should not call createGUI() after calling this
+ * function. In fact, that would remove the newly added
+ * actionlists again...
+ * \note Forgetting to call unplugActionList() before
+ * plugActionList() would leave the previous actions in the
+ * menu too..
+ */
+ void plugActionList( const TQString &name, const TQPtrList<KAction> &actionList );
+
+ /**
+ * The complement of plugActionList() ...
+ */
+ void unplugActionList( const TQString &name );
+
+ static TQString findMostRecentXMLFile( const TQStringList &files, TQString &doc );
+
+ void addStateActionEnabled(const TQString& state, const TQString& action);
+
+ void addStateActionDisabled(const TQString& state, const TQString& action);
+
+ enum ReverseStateChange { StateNoReverse, StateReverse };
+ struct StateChange
+ {
+ TQStringList actionsToEnable;
+ TQStringList actionsToDisable;
+ };
+
+ StateChange getActionsToChangeForState(const TQString& state);
+
+ /// @since 3.1
+ void beginXMLPlug( TQWidget * );
+ /// @since 3.1
+ void endXMLPlug();
+ /// @since 3.1
+ void prepareXMLUnplug( TQWidget * );
+
+protected:
+ /**
+ * Returns true if client was added to super client list.
+ * Returns false if client was already in list.
+ */
+ //bool addSuperClient( KXMLGUIClient * );
+
+ /**
+ * Sets the instance ( KInstance) for this part.
+ *
+ * Call this first in the inherited class constructor.
+ * (At least before setXMLFile().)
+ */
+ virtual void setInstance( KInstance *instance );
+
+ /**
+ * Sets the name of the rc file containing the XML for the part.
+ *
+ * Call this in the Part-inherited class constructor.
+ *
+ * @param file Either an absolute path for the file, or simply the
+ * filename, which will then be assumed to be installed
+ * in the "data" resource, under a directory named like
+ * the instance.
+ * @param merge Whether to merge with the global document.
+ * @param setXMLDoc Specify whether to call setXML. Default is true.
+ * and the DOM document at once.
+ **/
+ virtual void setXMLFile( const TQString& file, bool merge = false, bool setXMLDoc = true );
+
+ virtual void setLocalXMLFile( const TQString &file );
+
+ /**
+ * Sets the XML for the part.
+ *
+ * Call this in the Part-inherited class constructor if you
+ * don't call setXMLFile().
+ **/
+ virtual void setXML( const TQString &document, bool merge = false );
+
+ /**
+ * Sets the Document for the part, describing the layout of the GUI.
+ *
+ * Call this in the Part-inherited class constructor if you don't call
+ * setXMLFile or setXML .
+ */
+ virtual void setDOMDocument( const TQDomDocument &document, bool merge = false );
+
+ /**
+ * This function will attempt to give up some memory after the GUI
+ * is built. It should never be used in apps where the GUI may be
+ * rebuilt at some later time (components, for instance).
+ */
+ virtual void conserveMemory();
+
+ /**
+ * Actions can collectively be assigned a "State". To accomplish this
+ * the respective actions are tagged as \<enable\> or \<disable\> in
+ * a \<State\> \</State\> group of the XMLfile. During program execution the
+ * programmer can call stateChanged() to set actions to a defined state.
+ *
+ * @param newstate Name of a State in the XMLfile.
+ * @param reverse If the flag reverse is set to StateReverse, the State is reversed.
+ * (actions to be enabled will be disabled and action to be disabled will be enabled)
+ * Default is reverse=false.
+ */
+ virtual void stateChanged(const TQString &newstate, ReverseStateChange reverse = StateNoReverse);
+
+ // Use this one for KDE 4.0
+ //virtual void stateChanged(const TQString &newstate, bool reverse = false);
+
+private:
+ struct DocStruct
+ {
+ TQString file;
+ TQString data;
+ };
+
+ bool mergeXML( TQDomElement &base, const TQDomElement &additive,
+ KActionCollection *actionCollection );
+
+ TQDomElement findMatchingElement( const TQDomElement &base,
+ const TQDomElement &additive );
+
+ typedef TQMap<TQString, TQMap<TQString, TQString> > ActionPropertiesMap;
+
+ static ActionPropertiesMap extractActionProperties( const TQDomDocument &doc );
+
+ static void storeActionProperties( TQDomDocument &doc, const ActionPropertiesMap &properties );
+
+ static TQString findVersionNumber( const TQString &_xml );
+
+ // Actions to enable/disable on a state change
+ TQMap<TQString,StateChange> m_actionsStateMap;
+
+protected:
+ virtual void virtual_hook( int id, void* data );
+private:
+ KXMLGUIClientPrivate *d;
+};
+
+#endif