summaryrefslogtreecommitdiffstats
path: root/src/modules/toolbar/libkvitoolbar.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/toolbar/libkvitoolbar.cpp')
-rw-r--r--src/modules/toolbar/libkvitoolbar.cpp602
1 files changed, 602 insertions, 0 deletions
diff --git a/src/modules/toolbar/libkvitoolbar.cpp b/src/modules/toolbar/libkvitoolbar.cpp
new file mode 100644
index 00000000..a72949ca
--- /dev/null
+++ b/src/modules/toolbar/libkvitoolbar.cpp
@@ -0,0 +1,602 @@
+//=============================================================================//
+//
+// File : libkvitoolbar.cpp
+// Creation date : Wed 6 Nov 22:51:59 2002 GMT by Szymon Stefanek
+//
+// This toolbar is part of the KVirc irc client distribution
+// Copyright (C) 2002-2004 Szymon Stefanek (pragma at kvirc dot net)
+//
+// This program is FREE software. You can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your opinion) 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 General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, write to the Free Software Foundation,
+// Inc. ,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+//=============================================================================
+
+#include "kvi_module.h"
+
+#include "kvi_locale.h"
+
+#include "kvi_window.h"
+#include "kvi_app.h"
+#include "kvi_error.h"
+#include "kvi_cmdformatter.h"
+#include "kvi_customtoolbar.h"
+#include "kvi_customtoolbardescriptor.h"
+#include "kvi_customtoolbarmanager.h"
+#include "kvi_actionmanager.h"
+#include "kvi_kvs_useraction.h"
+
+/*
+ @doc: toolbar.create
+ @type:
+ command
+ @title:
+ toolbar.create
+ @keyterms:
+ Creating toolbars
+ @short:
+ Creates a toolbar
+ @syntax:
+ toolbar.create [-p] <id:string> <label:string> [icon_id:string]
+ @switches:
+ !sw: -p | --preserve
+ Preserve the existing toolbar, if any
+ @description:
+ Creates a toolbar with the specified <id> and with the visible <label> (caption).[br]
+ If a toolbar with the same <id> already exists then this command is equivalent to the
+ sequence of [cmd]toolbar.hide[/cmd], [cmd]toolbar.clear[/cmd] and [cmd]toolbar.setlabel[/cmd] unless the -p
+ switch is specified that causes the [cmd]toolbar.clear[/cmd] call to be skipped (contents preserved).[br]
+ This command doesn't show the toolbar (you need to use [cmd]toolbar.show[/cmd]).[br]
+ Toolbars are saved and preserved across KVIrc sessions thus you don't need to create them
+ on application startup: you only create them once.
+ If [icon_id] is specified then it is interpreted as an [doc:image_id]image identifier[/doc]
+ for the small (16x16) icon that will be put in the toolbar listing popup menu.
+ The toolbar will exist until [cmd]toolbar.destroy[/cmd] is called (you might want to add
+ an "uninstall" feature to your script).[br]
+ @seealso:
+ [fnc]$toolbar.exists[/fnc],
+ [cmd]toolbar.remove[/cmd],
+ [cmd]toolbar.show[/cmd],
+ [cmd]toolbar.destroy[/cmd]
+*/
+
+static bool toolbar_kvs_cmd_create(KviKvsModuleCommandCall * c)
+{
+ QString szId,szLabel,szIconId;
+ KVSM_PARAMETERS_BEGIN(c)
+ KVSM_PARAMETER("id",KVS_PT_NONEMPTYSTRING,0,szId)
+ KVSM_PARAMETER("label",KVS_PT_STRING,KVS_PF_OPTIONAL,szLabel)
+ KVSM_PARAMETER("icon_id",KVS_PT_NONEMPTYSTRING,KVS_PF_OPTIONAL,szIconId)
+ KVSM_PARAMETERS_END(c)
+
+/* if(!c->getParameterCode(1,szLabel))
+ {
+ c->error(__tr2qs("Internal error: call a head-shrinker"));
+ return false;
+ }
+*/
+ if(szLabel.isEmpty())szLabel = "$tr(Unnamed)";
+
+ KviCustomToolBarDescriptor * d = KviCustomToolBarManager::instance()->find(szId);
+ if(d)
+ {
+ if(!c->switches()->find('p',"preserve"))d->clear();
+ d->rename(szLabel);
+ } else {
+ d = KviCustomToolBarManager::instance()->create(szId,szLabel);
+ }
+
+ if(!szIconId.isEmpty())
+ d->setIconId(szIconId);
+
+ return true;
+}
+
+/*
+ @doc: toolbar.clear
+ @type:
+ command
+ @title:
+ toolbar.clear
+ @short:
+ Clears a toolbar
+ @syntax:
+ toolbar.clear [-q] <id:string>
+ @switches:
+ !sw: -q | --quiet
+ Run quietly
+ @description:
+ Clears the contents of the toolbar specified by <id>. If the
+ toolbar does not exist then a warning is printed unless the -q switch is used.[br]
+ @seealso:
+ [fnc]$toolbar.exists[/fnc],
+ [cmd]toolbar.remove[/cmd],
+ [cmd]toolbar.show[/cmd],
+ [cmd]toolbar.destroy[/cmd]
+*/
+
+static bool toolbar_kvs_cmd_clear(KviKvsModuleCommandCall * c)
+{
+ QString szId;
+ KVSM_PARAMETERS_BEGIN(c)
+ KVSM_PARAMETER("id",KVS_PT_NONEMPTYSTRING,0,szId)
+ KVSM_PARAMETERS_END(c)
+
+ KviCustomToolBarDescriptor * d = KviCustomToolBarManager::instance()->find(szId);
+ if(d)d->clear();
+ else {
+ if(!c->switches()->find('q',"quiet"))
+ c->warning(__tr2qs("The specified toolbar doesn't exist"));
+ }
+
+ return true;
+}
+
+
+/*
+ @doc: toolbar.destroy
+ @type:
+ command
+ @title:
+ toolbar.destroy
+ @keyterms:
+ Destroying a toolbar
+ @short:
+ Destroys a toolbar
+ @syntax:
+ toolbar.destroy [-q] <id:string>
+ @switches:
+ !sw: -q | --quiet
+ Run quietly
+ @description:
+ Destroys the toolbar with the specified <id>.[br]
+ The toolbar definition is definitively destroyed with all the items contained.[br]
+ If the -q switch is specified then this command runs in quiet mode and
+ does not warn if the toolbar was not existing.
+ @seealso:
+ [fnc]$toolbar.exists[/fnc],
+ [cmd]toolbar.create[/cmd]
+*/
+
+
+static bool toolbar_kvs_cmd_destroy(KviKvsModuleCommandCall * c)
+{
+ QString szId;
+ KVSM_PARAMETERS_BEGIN(c)
+ KVSM_PARAMETER("id",KVS_PT_NONEMPTYSTRING,0,szId)
+ KVSM_PARAMETERS_END(c)
+
+ if(!KviCustomToolBarManager::instance()->destroyDescriptor(szId))
+ {
+ if(!c->switches()->find('q',"quiet"))
+ c->warning(__tr2qs("The specified toolbar doesn't exist"));
+ }
+
+ return true;
+}
+
+
+/*
+ @doc: toolbar.show
+ @type:
+ command
+ @title:
+ toolbar.show
+ @short:
+ Shows a toolbar
+ @syntax:
+ toolbar.show [-q] <id:string>
+ @switches:
+ !sw: -q | --quiet
+ Run quietly
+ @description:
+ Shows the toolbar with the specified <id>.[br]
+ If -q is specified the command runs in quiet mode and does not complain if the
+ specified toolbar doesn't exist.[br]
+ Please note that you don't need to show the toolbar at application startup: KVIrc will
+ take care of this for you (if the user chooses to keep the toolbar visible).[br]
+ You should execute this command only if you create the toolbar after KVIrc has been
+ started.[br]
+ @seealso:
+ [fnc]$toolbar.exists[/fnc],
+ [cmd]toolbar.create[/cmd]
+*/
+
+static bool toolbar_kvs_cmd_show(KviKvsModuleCommandCall * c)
+{
+ QString szId;
+ KVSM_PARAMETERS_BEGIN(c)
+ KVSM_PARAMETER("id",KVS_PT_NONEMPTYSTRING,0,szId)
+ KVSM_PARAMETERS_END(c)
+
+ KviCustomToolBarDescriptor * d = KviCustomToolBarManager::instance()->find(szId);
+
+ if(!d)
+ {
+ if(!c->switches()->find('q',"quiet"))
+ c->warning(__tr2qs("The specified toolbar doesn't exist"));
+ return true;
+ }
+
+ if(!d->toolBar())
+ d->createToolBar();
+
+ return true;
+}
+
+/*
+ @doc: toolbar.hide
+ @type:
+ command
+ @title:
+ toolbar.hide
+ @short:
+ Hides a toolbar
+ @syntax:
+ toolbar.hide [-q] <id:string>
+ @switches:
+ !sw: -q | --quiet
+ Run quietly
+ @description:
+ Hides the toolbar with the specified <id>.[br]
+ If -q is specified the command runs in quiet mode and does not complain if the
+ specified toolbar doesn't exist.[br]
+ Please note that this command doesn't destroy the toolbar definition: the toolbar
+ can be shown again by using [cmd]toolbar.show[/cmd].[br]
+ If you want to completely remove the toolbar definition use [cmd]toolbar.destroy[/cmd].[br]
+ @seealso:
+ [fnc]$toolbar.exists[/fnc],
+ [cmd]toolbar.create[/cmd],
+ [cmd]toolbar.destroy[/cmd]
+*/
+
+
+static bool toolbar_kvs_cmd_hide(KviKvsModuleCommandCall * c)
+{
+ QString szId;
+ KVSM_PARAMETERS_BEGIN(c)
+ KVSM_PARAMETER("id",KVS_PT_NONEMPTYSTRING,0,szId)
+ KVSM_PARAMETERS_END(c)
+
+ KviCustomToolBarDescriptor * d = KviCustomToolBarManager::instance()->find(szId);
+
+ if(!d)
+ {
+ if(!c->switches()->find('q',"quiet"))
+ c->warning(__tr2qs("The specified toolbar doesn't exist"));
+ return true;
+ }
+
+ if(d->toolBar()) KviCustomToolBarManager::instance()->destroyDescriptor(d->id());
+
+ return true;
+}
+
+/*
+ @doc: toolbar.exists
+ @type:
+ function
+ @title:
+ $toolbar.exists
+ @short:
+ Checks if a toolbar exists
+ @syntax:
+ <boolean> $toolbar.exists(<id:string>)
+ @description:
+ Returns 1 if the toolbar with the specified <id> has been defined.[br]
+ Note that this doesn't mean that the toolbar is visible!
+ @seealso:
+ [cmd]toolbar.create[/cmd]
+*/
+
+
+static bool toolbar_kvs_fnc_exists(KviKvsModuleFunctionCall * c)
+{
+ QString szId;
+ KVSM_PARAMETERS_BEGIN(c)
+ KVSM_PARAMETER("id",KVS_PT_NONEMPTYSTRING,0,szId)
+ KVSM_PARAMETERS_END(c)
+
+ c->returnValue()->setBoolean(KviCustomToolBarManager::instance()->find(szId) ? true : false);
+ return true;
+}
+
+/*
+ @doc: toolbar.isVisible
+ @type:
+ function
+ @title:
+ $toolbar.isVisible
+ @short:
+ Checks if a toolbar is visible
+ @syntax:
+ <boolean> $toolbar.isVisible(<id:string>)
+ @description:
+ Returns 1 if the toolbar with the specified <id> is actually visible and 0 otherwise.[br]
+ If the toolbar is not defined at all this function still returns 0.[br]
+ @seealso:
+ [cmd]toolbar.show[/cmd]
+*/
+
+static bool toolbar_kvs_fnc_isVisible(KviKvsModuleFunctionCall * c)
+{
+ QString szId;
+ KVSM_PARAMETERS_BEGIN(c)
+ KVSM_PARAMETER("id",KVS_PT_NONEMPTYSTRING,0,szId)
+ KVSM_PARAMETERS_END(c)
+ KviCustomToolBarDescriptor * d = KviCustomToolBarManager::instance()->find(szId);
+ c->returnValue()->setBoolean(d ? (d->toolBar() ? true : false) : false);
+ return true;
+}
+
+/*
+ @doc: toolbar.list
+ @type:
+ function
+ @title:
+ $toolbar.list
+ @short:
+ Returns a list of defined toolbars
+ @syntax:
+ <array> $toolbar.list()
+ @description:
+ Returns a list of defined toolbar identifiers.[br]
+ You can use this function to loop thru all the toolbar definitions.[br]
+ @seealso:
+*/
+
+static bool toolbar_kvs_fnc_list(KviKvsModuleFunctionCall * c)
+{
+ KviKvsArray * a = new KviKvsArray();
+
+ KviPointerHashTableIterator<QString,KviCustomToolBarDescriptor> it(*(KviCustomToolBarManager::instance()->descriptors()));
+
+ kvs_uint_t id = 0;
+
+ while(KviCustomToolBarDescriptor * d = it.current())
+ {
+ a->set(id,new KviKvsVariant(d->id()));
+ id++;
+ ++it;
+ }
+
+ c->returnValue()->setArray(a);
+ return true;
+}
+
+
+
+/*
+ @doc: toolbar.remove
+ @type:
+ command
+ @title:
+ toolbar.remove
+ @keyterms:
+ Removing toolbar items
+ @short:
+ Removes a toolbar item
+ @syntax:
+ toolbar.remove [-q] [-i] <toolbarid:string> <action:variant>
+ @switches:
+ !sw: -q | --quiet
+ Run quietly
+ !sw: -i | --index
+ Treat <action> as the zero-based index of the action to be removed
+ instead of the action name.
+ @description:
+ Removes the specified <action> from the toolbar with the specified <toolbarid>.[br]
+ If no such item exists in the specified toolbar this command does nothing.[br]
+ If the <toolbar> parameter doesn't identify an existing toolbar then
+ a warning is printed unless the -q switch is used.[br]
+ If the -i switch is specified the <action> is interpreted as zero based
+ index of the action to be removed (instead of the action name).[br]
+ Please note that this is an expensive operation if the toolbar is visible (basically
+ the toolbar needs to be cleared and filled back again). It is a good idea to hide
+ the toolbar before removing items.[br]
+ @seealso:
+*/
+
+static bool toolbar_kvs_cmd_removeitem(KviKvsModuleCommandCall * c)
+{
+ QString szId;
+ KviKvsVariant * pvAction;
+ KVSM_PARAMETERS_BEGIN(c)
+ KVSM_PARAMETER("id",KVS_PT_NONEMPTYSTRING,0,szId)
+ KVSM_PARAMETER("action",KVS_PT_VARIANT,0,pvAction)
+ KVSM_PARAMETERS_END(c)
+
+ KviCustomToolBarDescriptor * d = KviCustomToolBarManager::instance()->find(szId);
+
+ if(!pvAction)
+ {
+ if(!c->switches()->find('q',"quiet"))
+ c->error(__tr2qs("No action name/index specified")); // syntax error
+ return false;
+ }
+
+ if(!d)
+ {
+ if(!c->switches()->find('q',"quiet"))
+ c->warning(__tr2qs("The specified toolbar doesn't exist"));
+ return true;
+ }
+
+ if(c->switches()->find('i',"index"))
+ {
+ kvs_int_t iAction;
+ if(!pvAction->asInteger(iAction))
+ {
+ if(!c->switches()->find('q',"quiet"))
+ c->warning(__tr2qs("The action parameter didn't evaluate to an index"));
+ } else {
+ if(!d->removeAction(iAction))
+ {
+ if(!c->switches()->find('q',"quiet"))
+ c->warning(__tr2qs("The toolbar does not contain the specified item"));
+ }
+ }
+ } else {
+ QString szAction;
+ pvAction->asString(szAction);
+ if(!d->removeAction(szAction))
+ {
+ if(!c->switches()->find('q',"quiet"))
+ c->warning(__tr2qs("The toolbar does not contain the specified item"));
+ }
+ }
+
+ return true;
+}
+
+/*
+ @doc: toolbar.additem
+ @type:
+ command
+ @title:
+ toolbar.additem
+ @keyterms:
+ Adding toolbar items
+ @short:
+ Adds a new item to a toolbar
+ @syntax:
+ toolbar.additem [-q] <toolbarid:string> <action:string>
+ @switches:
+ !sw: -q | --quiet
+ Run quietly
+ @description:
+ Adds the specified <action> from the toolbar with the specified <toolbarid>.[br]
+ If no such action exists this command does nothing (beside printing a warning unless -q is used).[br]
+ If the <toolbar> parameter doesn't identify an existing toolbar then
+ a warning is printed unless the -q switch is used.[br]
+ @examples:
+ [example]
+ toolbar.create test $tr("My Toolbar")
+ toolbar.additem test connect
+ toolbar.additem test separator
+ toolbar.additem test optionsdialog
+ toolbar.show test
+ [/example]
+ @seealso:
+*/
+
+static bool toolbar_kvs_cmd_additem(KviKvsModuleCommandCall * c)
+{
+ QString szId;
+ QString szAction;
+ KVSM_PARAMETERS_BEGIN(c)
+ KVSM_PARAMETER("id",KVS_PT_NONEMPTYSTRING,0,szId)
+ KVSM_PARAMETER("action",KVS_PT_NONEMPTYSTRING,0,szAction)
+ KVSM_PARAMETERS_END(c)
+
+ KviCustomToolBarDescriptor * d = KviCustomToolBarManager::instance()->find(szId);
+
+ if(!d)
+ {
+ if(!c->switches()->find('q',"quiet"))
+ c->warning(__tr2qs("The specified toolbar doesn't exist"));
+ return true;
+ }
+
+ if(!d->addAction(szAction))
+ {
+ if(!c->switches()->find('q',"quiet"))c->warning(__tr2qs("The action \"%Q\" doesn't exist"),&szAction);
+ }
+
+ return true;
+}
+
+
+/*
+ @doc: toolbar.items
+ @type:
+ function
+ @title:
+ $toolbar.items
+ @short:
+ Returns the list of items in a specified toolbar
+ @syntax:
+ <array> $toolbar.items(<toolbarid:string>)
+ @description:
+ Returns the array of items in the specified toolbar.
+ If the toolbar doesn't exist then an empty list is returned.
+ @seealso:
+*/
+
+static bool toolbar_kvs_fnc_items(KviKvsModuleFunctionCall * c)
+{
+ QString szId;
+ KVSM_PARAMETERS_BEGIN(c)
+ KVSM_PARAMETER("id",KVS_PT_NONEMPTYSTRING,0,szId)
+ KVSM_PARAMETERS_END(c)
+
+ KviCustomToolBarDescriptor * d = KviCustomToolBarManager::instance()->find(szId);
+
+ if(!d)
+ {
+ c->warning(__tr2qs("The specified toolbar doesn't exist"));
+ return true;
+ }
+
+ KviKvsArray * a = new KviKvsArray();
+
+ KviPointerHashTableIterator<QString,KviCustomToolBarDescriptor> it(*(KviCustomToolBarManager::instance()->descriptors()));
+
+ kvs_uint_t id = 0;
+
+ for(QString * s = d->actions()->first();s;s = d->actions()->next())
+ {
+ a->set(id,new KviKvsVariant(*s));
+ id++;
+ ++it;
+ }
+
+ c->returnValue()->setArray(a);
+ return true;
+}
+
+
+
+static bool toolbar_module_init(KviModule * m)
+{
+ KVSM_REGISTER_SIMPLE_COMMAND(m,"create",toolbar_kvs_cmd_create)
+ KVSM_REGISTER_SIMPLE_COMMAND(m,"clear",toolbar_kvs_cmd_clear)
+ KVSM_REGISTER_SIMPLE_COMMAND(m,"destroy",toolbar_kvs_cmd_destroy)
+ KVSM_REGISTER_SIMPLE_COMMAND(m,"additem",toolbar_kvs_cmd_additem)
+ KVSM_REGISTER_SIMPLE_COMMAND(m,"remove",toolbar_kvs_cmd_removeitem)
+ KVSM_REGISTER_SIMPLE_COMMAND(m,"show",toolbar_kvs_cmd_show)
+ KVSM_REGISTER_SIMPLE_COMMAND(m,"hide",toolbar_kvs_cmd_hide)
+
+ KVSM_REGISTER_FUNCTION(m,"exists",toolbar_kvs_fnc_exists)
+ KVSM_REGISTER_FUNCTION(m,"isVisible",toolbar_kvs_fnc_isVisible)
+ KVSM_REGISTER_FUNCTION(m,"list",toolbar_kvs_fnc_list)
+ KVSM_REGISTER_FUNCTION(m,"items",toolbar_kvs_fnc_items)
+
+ return true;
+}
+
+static bool toolbar_module_cleanup(KviModule *m)
+{
+ return true;
+}
+
+KVIRC_MODULE(
+ "toolbar", // module name
+ "1.0.0", // module version
+ "Copyright (C) 2002 Szymon Stefanek (pragma at kvirc dot net)", // author & (C)
+ "Interface to the scriptable toolbars",
+ toolbar_module_init,
+ 0,
+ 0,
+ toolbar_module_cleanup
+)