You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
koffice/lib/kross/main/scriptguiclient.h

219 lines
8.2 KiB

/***************************************************************************
* scriptguiclient.h
* This file is part of the KDE project
* copyright (C) 2005 by Sebastian Sauer (mail@dipe.org)
*
* This program 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 program 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 program; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
***************************************************************************/
#ifndef KROSS_API_SCRIPTGUICLIENT_H
#define KROSS_API_SCRIPTGUICLIENT_H
#include "scriptcontainer.h"
#include "scriptaction.h"
#include <tqobject.h>
#include <tqdom.h>
#include <kurl.h>
#include <kxmlguiclient.h>
class TQWdiget;
namespace Kross { namespace Api {
// Forward declarations.
class ScriptAction;
class ScriptGUIClientPrivate;
/**
* The ScriptGUIClient class provides abstract access to
* scripting code used to extend an applications functionality.
*/
class KDE_EXPORT ScriptGUIClient
: public TQObject
, public KXMLGUIClient
{
Q_OBJECT
//TQ_PROPERTY(TQString configfile READ getConfigFile WRITE setConfigFile)
public:
/// List of KAction instances.
typedef TQPtrList<KAction> List;
/**
* Constructor.
*
* \param guiclient The KXMLGUIClient this \a ScriptGUIClient
* is a child of.
* \param parent The parent TQWidget. If defined TQt will handle
* freeing this \a ScriptGUIClient instance else the
* caller has to take care of freeing this instance
* if not needed any longer.
*/
explicit ScriptGUIClient(KXMLGUIClient* guiclient, TQWidget* parent = 0);
/**
* Destructor.
*/
virtual ~ScriptGUIClient();
/**
* \return true if this \a ScriptGUIClient has a \a ScriptActionCollection
* with the name \p name else false is returned.
*/
bool hasActionCollection(const TQString& name);
/**
* \return the \a ScriptActionCollection which has the name \p name
* or NULL if there exists no such \a ScriptActionCollection .
*/
ScriptActionCollection* getActionCollection(const TQString& name);
/**
* \return a map of all avaiable \a ScriptActionCollection instances
* this \a ScriptGUIClient knows about.
* Per default there are 2 collections avaiable;
* 1. "installedscripts" The installed collection of scripts.
* 2. "loadedscripts" The loaded scripts.
*/
TQMap<TQString, ScriptActionCollection*> getActionCollections();
/**
* Add a new \a ScriptActionCollection with the name \p name to
* our map of actioncollections.
*/
void addActionCollection(const TQString& name, ScriptActionCollection* collection);
/**
* Remove the \a ScriptActionCollection defined with name \p name.
*/
bool removeActionCollection(const TQString& name);
/**
* Reload the list of installed scripts.
*/
void reloadInstalledScripts();
/**
* Install the packagefile \p scriptpackagefile . Those
* packagefile should be a tar.gz-archive which will be
* extracted and to the users script-directory.
*/
bool installScriptPackage(const TQString& scriptpackagefile);
/**
* Uninstall the scriptpackage located in the path
* \p scriptpackagepath . This just deletes the whole
* directory.
*/
bool uninstallScriptPackage(const TQString& scriptpackagepath);
/**
* Load the scriptpackage's configurationfile
* \p scriptconfigfile and add the defined \a ScriptAction
* instances to the list of installed scripts.
*/
bool loadScriptConfigFile(const TQString& scriptconfigfile);
/**
* Load the \p document DOM-document from the scriptpackage's
* XML-configfile \p scriptconfigfile and add the defined
* \a ScriptAction instances to the list of installed scripts.
*/
bool loadScriptConfigDocument(const TQString& scriptconfigfile, const TQDomDocument &document);
/// KXMLGUIClient overloaded method to set the XML file.
virtual void setXMLFile(const TQString& file, bool merge = false, bool setXMLDoc = true);
/// KXMLGUIClient overloaded method to set the XML DOM-document.
virtual void setDOMDocument(const TQDomDocument &document, bool merge = false);
public slots:
/**
* A KFileDialog will be displayed to let the user choose
* a scriptfile. The choosen file will be returned as KURL.
*/
KURL openScriptFile(const TQString& caption = TQString());
/**
* A KFileDialog will be displayed to let the user choose
* a scriptfile that should be loaded.
* Those loaded \a ScriptAction will be added to the
* \a ScriptActionCollection of loaded scripts.
*/
bool loadScriptFile();
/**
* A KFileDialog will be displayed to let the user choose
* the scriptfile that should be executed.
* The executed \a ScriptAction will be added to the
* \a ScriptActionCollection of executed scripts.
*/
bool executeScriptFile();
/**
* Execute the scriptfile \p file . Internaly we try to use
* the defined filename to auto-detect the \a Interpreter which
* should be used for the execution.
*/
bool executeScriptFile(const TQString& file);
/**
* This method executes the \a ScriptAction \p action .
* Internaly we just call \a ScriptAction::activate and
* redirect the success/failed signals to our internal slots.
*/
bool executeScriptAction(ScriptAction::Ptr action);
/**
* The \a ScriptManagerGUI dialog will be displayed to
* let the user manage the scriptfiles.
*/
void showScriptManager();
private slots:
/**
* Called if execution of this \a ScriptAction failed and
* displays an errormessage-dialog.
*/
void executionFailed(const TQString& errormessage, const TQString& tracedetails);
/**
* Called if execution of this \a ScriptAction was
* successfully. The \a ScriptAction will be added
* to the history-collection of successfully executed
* \a ScriptAction instances.
*/
void successfullyExecuted();
signals:
/// Emitted if a \a ScriptActionCollection instances changed.
void collectionChanged(ScriptActionCollection*);
/// This signal is emited when the execution of a script is started
void executionStarted(const Kross::Api::ScriptAction* );
/// This signal is emited when the execution of a script is finished
void executionFinished(const Kross::Api::ScriptAction* );
private:
/// Internaly used private d-pointer.
ScriptGUIClientPrivate* d;
};
}}
#endif