From c75b9f00eaeee4b8503ba662b3d7ccc9e1914096 Mon Sep 17 00:00:00 2001 From: Szymon Tomasz Stefanek Date: Mon, 18 Dec 2006 01:34:15 +0000 Subject: Switching from cvs to svn, initial import git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@14 17fca916-40b9-46aa-a4ea-0a15b648b75c --- src/modules/objects/class_button.cpp | 394 +++++++++++++++++++++++++++++++++++ 1 file changed, 394 insertions(+) create mode 100644 src/modules/objects/class_button.cpp (limited to 'src/modules/objects/class_button.cpp') diff --git a/src/modules/objects/class_button.cpp b/src/modules/objects/class_button.cpp new file mode 100644 index 000000000..bd2f85fef --- /dev/null +++ b/src/modules/objects/class_button.cpp @@ -0,0 +1,394 @@ +// +// File : class_button.cpp +// Creation date : Wed 13 Sep 2000 02:42:05 CEST by Krzysztof Godlewski +// +// This file is part of the KVirc irc client distribution +// Copyright (C) 1999-2000 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. ,59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// + +#include "kvi_debug.h" + + +#include "kvi_error.h" +#include +#include "kvi_iconmanager.h" + +#include "class_button.h" +/* +static KviScriptObjectClass * g_pButtonClass = 0; + +static KviScriptObject * buttonClassCreateInstance(KviScriptObjectClass * c, + KviScriptObject * p, const char * n) +{ + return new KviScriptButtonObject(c, p, n); +} + +KviScriptButtonObject::KviScriptButtonObject(KviScriptObjectClass * c, KviScriptObject * p, + const char * n) : KviScriptWidgetObject(c, p, n) +{ +} + +KviScriptButtonObject::~KviScriptButtonObject() +{ +// debug("KviScriptButtonObject::~KviScriptButtonObject(%s)",id()); +} + + +/* + @doc: button + @keyterms: + button object class + @title: + button class + @type: + class + @short: + A simple, well-known button + @inherits: + [class]object[/class] + [class]widget[/class] + @description: + A button - nothing more, nothing else... + @functions: + !fn: $setText() + This function sets the text for this button. + !fn: $text() + Returns the current text of the button + !fn: $setImage() + Sets the image to be displayed on this label. + Giving empty argument clears the pixmap[br] + See the [doc:image_id]image identifier[/doc] documentation for + the explaination of the parameter. + !fn: $clickEvent() + This function is called by the framework when the button is clicked.[br] + You can reimplement it to handle the user click events.[br] + The default implementation emits the [classfnc]$clicked[/classfnc]() signal, + so it is easy to handle the clicks from many buttons without reimplementing + the $clickEvent() for every one.[br] + Note:[br] + If you reimplement this function to catch the user click events, you will have + to emit the signal by yourself (if you still need it , obviously). + @signals: + !sg: $clicked() + This signal is emitted by the default implementation of [classfnc]$clickEvent[/classfnc]().[br] + If you reimplement that function you will have to emit the signal manually (if you still need it). + +*/ +/* +bool KviScriptButtonObject::init(KviCommand *,KviParameterList *params) +{ + setObject(new QPushButton(parentScriptWidget(),name()),true); + connect(widget(),SIGNAL(clicked()),this,SLOT(slotClicked())); + return true; +} + +#define buttonFuncReg(__nam, __func) \ + g_pButtonClass->registerFunctionHandler(__nam, \ + (KviScriptObjectFunctionHandlerProc)(KVI_PTR2MEMBER(KviScriptButtonObject::__func)), \ + 0, true); + +void KviScriptButtonObject::registerSelf() +{ + KviScriptObjectClass * base = g_pScriptObjectController-> + lookupClass("widget"); + __range_valid(base); + + g_pButtonClass = new KviScriptObjectClass(base, "button", + buttonClassCreateInstance, true); + + buttonFuncReg("setText", functionSetText); + buttonFuncReg("text", functionText); + buttonFuncReg("setAutoDefault", functionSetAutoDefault); + buttonFuncReg("setToggleButton", functionSetToggleButton); + buttonFuncReg("setOn", functionSetOn); + buttonFuncReg("isOn", functionIsOn); + buttonFuncReg("toggle", functionToggle); + buttonFuncReg("setIsMenuButton", functionSetIsMenuButton); + buttonFuncReg("isMenuButton", functionIsMenuButton); + buttonFuncReg("clickEvent", functionClickEvent); + buttonFuncReg("setImage", functionSetImage); + +// g_pButtonClass->registerFunctionHandler("clickEvent",0,"emit clicked()"); +// slots +// buttonFuncReg("slotClicked", functionSlotClicked); +// buttonFuncReg("slotClicked", __slotClicked); + //g_pButtonClass->registerEmptyFunctionHandler("slotClicked"); +} + +void KviScriptButtonObject::unregisterSelf() +{ + delete g_pButtonClass; + g_pButtonClass = 0; +} + +bool KviScriptButtonObject::functionSetText(KviCommand *, KviParameterList * p, \ + KviStr &) +{ + if(widget()) + { + if(p->first()) + ((QPushButton *)widget())->setText(p->first()->ptr()); + else + ((QPushButton *)widget())->setText(""); + } + return true; +} + +bool KviScriptButtonObject::functionText(KviCommand *, KviParameterList *, KviStr & b) +{ + if(widget()) + { + KviStr s = ((QPushButton *)widget())->text(); + b.append(s); + } + return true; +} + +bool KviScriptButtonObject::functionSetAutoDefault(KviCommand *, KviParameterList * p, + KviStr &) +{ + if(widget()) + { + ((QPushButton *)widget())->setAutoDefault(p->getBool()); + } + return true; +} + +bool KviScriptButtonObject::functionSetToggleButton(KviCommand *,KviParameterList * p, + KviStr &) +{ + if(widget()) + { + ((QPushButton *)widget())->setToggleButton(p->getBool()); + } + return true; +} + +bool KviScriptButtonObject::functionSetOn(KviCommand *,KviParameterList * p, KviStr &) +{ + if(widget()) + { + ((QPushButton *)widget())->setOn(p->getBool()); + } + return true; +} + +bool KviScriptButtonObject::functionIsOn(KviCommand *, KviParameterList *, KviStr & b) +{ + if(widget()) + { + bool t = ((QPushButton *)widget())->isOn(); + b.append( t ? '1' : '0' ); + } + return true; +} + +bool KviScriptButtonObject::functionToggle(KviCommand *,KviParameterList * p, + KviStr &) +{ + if(widget()) + { + ((QPushButton *)widget())->toggle(); + } + return true; +} + +bool KviScriptButtonObject::functionSetIsMenuButton(KviCommand *,KviParameterList * p, + KviStr &) +{ + if(widget()) + { + ((QPushButton *)widget())->setIsMenuButton(p->getBool()); + } + return true; +} + +bool KviScriptButtonObject::functionIsMenuButton(KviCommand *,KviParameterList *, + KviStr & b) +{ + if(widget()) + { + bool t = ((QPushButton *)widget())->isMenuButton(); + b.append( t ? '1' : '0' ); + } + return true; +} +bool KviScriptButtonObject::functionSetImage(KviCommand * c, KviParameterList * p, + KviStr & b) +{ + QPixmap *pix = 0; + + if(!widget())return true; + + if(p->first())pix = g_pIconManager->getImage(p->first()->ptr()); + + if(pix) + { + ((QPushButton *)widget())->setIconSet(QIconSet(*pix,QIconSet::Small)); + } else { + ((QPushButton *)widget())->setIconSet(QIconSet()); + } + return true; + } + + +bool KviScriptButtonObject::functionClickEvent(KviCommand *c,KviParameterList *,KviStr &) +{ + ENTER_STACK_FRAME(c,"button::clickEvent"); + emitSignal("clicked",0,0,c); + return c->leaveStackFrame(); +} + +void KviScriptButtonObject::slotClicked() +{ + callEventFunction("clickEvent"); +} +*/ +//--------------------------------------------------------------------------------- + +KVSO_BEGIN_REGISTERCLASS(KviKvsObject_button,"button","widget") + + KVSO_REGISTER_HANDLER(KviKvsObject_button,"setText", functionSetText) + KVSO_REGISTER_HANDLER(KviKvsObject_button,"text", functionText) + KVSO_REGISTER_HANDLER(KviKvsObject_button,"setAutoDefault", functionSetAutoDefault) + KVSO_REGISTER_HANDLER(KviKvsObject_button,"setToggleButton", functionSetToggleButton) + KVSO_REGISTER_HANDLER(KviKvsObject_button,"setOn", functionSetOn) + KVSO_REGISTER_HANDLER(KviKvsObject_button,"isOn", functionIsOn) + KVSO_REGISTER_HANDLER(KviKvsObject_button,"toggle", functionToggle) + KVSO_REGISTER_HANDLER(KviKvsObject_button,"setIsMenuButton", functionSetIsMenuButton) + KVSO_REGISTER_HANDLER(KviKvsObject_button,"isMenuButton", functionIsMenuButton) + KVSO_REGISTER_HANDLER(KviKvsObject_button,"clickEvent", functionclickEvent) + KVSO_REGISTER_HANDLER(KviKvsObject_button,"setImage", functionSetImage) + + +KVSO_END_REGISTERCLASS(KviKvsObject_button) + +KVSO_BEGIN_CONSTRUCTOR(KviKvsObject_button,KviKvsObject_widget) + +KVSO_END_CONSTRUCTOR(KviKvsObject_button) + + +KVSO_BEGIN_DESTRUCTOR(KviKvsObject_button) + +KVSO_END_CONSTRUCTOR(KviKvsObject_button) + +bool KviKvsObject_button::init(KviKvsRunTimeContext * pContext,KviKvsVariantList *pParams) +{ + setObject(new QPushButton(parentScriptWidget(),name()),true); + connect(widget(),SIGNAL(clicked()),this,SLOT(slotClicked())); + return true; +} + +bool KviKvsObject_button::functionText(KviKvsObjectFunctionCall *c) +{ + if(widget()) c->returnValue()->setString(((QPushButton *)widget())->text()); + return true; +} + +bool KviKvsObject_button::functionSetText(KviKvsObjectFunctionCall *c) +{ + QString szText; + KVSO_PARAMETERS_BEGIN(c) + KVSO_PARAMETER("text",KVS_PT_STRING,0,szText) + KVSO_PARAMETERS_END(c) + if (widget()) + ((QPushButton *)widget())->setText(szText); + return true; +} +bool KviKvsObject_button::functionSetAutoDefault(KviKvsObjectFunctionCall *c) +{ + bool bEnabled; + KVSO_PARAMETERS_BEGIN(c) + KVSO_PARAMETER("bEnabled",KVS_PT_BOOL,0,bEnabled) + KVSO_PARAMETERS_END(c) + if(widget()) + ((QPushButton *)widget())->setAutoDefault(bEnabled); + return true; +} +bool KviKvsObject_button::functionSetToggleButton(KviKvsObjectFunctionCall *c) +{ + bool bEnabled; + KVSO_PARAMETERS_BEGIN(c) + KVSO_PARAMETER("bEnabled",KVS_PT_BOOL,0,bEnabled) + KVSO_PARAMETERS_END(c) + if(widget()) + ((QPushButton *)widget())->setToggleButton(bEnabled); + return true; +} +bool KviKvsObject_button::functionSetOn(KviKvsObjectFunctionCall *c) +{ + bool bEnabled; + KVSO_PARAMETERS_BEGIN(c) + KVSO_PARAMETER("bEnabled",KVS_PT_BOOL,0,bEnabled) + KVSO_PARAMETERS_END(c) + if(widget()) + ((QPushButton *)widget())->setOn(bEnabled); + return true; +} +bool KviKvsObject_button::functionSetIsMenuButton(KviKvsObjectFunctionCall *c) +{ + bool bEnabled; + KVSO_PARAMETERS_BEGIN(c) + KVSO_PARAMETER("bEnabled",KVS_PT_BOOL,0,bEnabled) + KVSO_PARAMETERS_END(c) + if(widget()) + ((QPushButton *)widget())->setIsMenuButton(bEnabled); + return true; +} +bool KviKvsObject_button::functionIsMenuButton(KviKvsObjectFunctionCall *c) +{ + if (widget()) c->returnValue()->setBoolean(((QPushButton *)widget())->isMenuButton()); + return true; +} +bool KviKvsObject_button::functionIsOn(KviKvsObjectFunctionCall *c) +{ + if (widget()) c->returnValue()->setBoolean(((QPushButton *)widget())->isOn()); + return true; +} +bool KviKvsObject_button::functionToggle(KviKvsObjectFunctionCall *c) +{ + if(widget()) ((QPushButton *)widget())->toggle(); + return true; +} +bool KviKvsObject_button::functionSetImage(KviKvsObjectFunctionCall *c) +{ + QString icon; + KVSO_PARAMETERS_BEGIN(c) + KVSO_PARAMETER("icon",KVS_PT_STRING,0,icon) + KVSO_PARAMETERS_END(c) + if (!widget()) return true; + QPixmap * pix = g_pIconManager->getImage(icon); + if(pix) + ((QPushButton *)widget())->setIconSet(QIconSet(*pix,QIconSet::Small)); + else + ((QPushButton *)widget())->setIconSet(QIconSet()); + return true; +} +bool KviKvsObject_button::functionclickEvent(KviKvsObjectFunctionCall *c) +{ + emitSignal("clicked",c); + return true; +} + +void KviKvsObject_button::slotClicked() +{ + KviKvsVariantList *params=0; + callFunction(this,"clickEvent",params); +} + + +#include "m_class_button.moc" -- cgit v1.3.1-10-gc9f91