//vim: ts=8 // File : class_urllabel.cpp // Creation date : Thu Feb 18 1:27:44 CEST 2001 by Krzysztof Godlewski // // This file is part of the KVirc irc client distribution // Copyright (C) 1999-2000 Krzysztof Godlewski // 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. ,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. // #include "class_urllabel.h" #include "kvi_debug.h" #include "kvi_locale.h" #include "kvi_error.h" #include "kvi_app.h" #include "kvi_window.h" #include "kvi_kvs_script.h" #ifdef COMPILE_USE_QT4 #include #define TQT_LEFT_BUTTON Qt::LeftButton #else #define TQT_LEFT_BUTTON Qt::LeftButton #endif //#warning "Functions to change colors for different states" //#warning "$setUnderline(), $underline()" //extern KviApp * g_pApp; /*static KviScriptObjectClass * g_pUrlLabelClass = 0; static KviScriptObject * urlLabelClassCreateInstance(KviScriptObjectClass * c, KviScriptObject * p, const char * n) { return new KviScriptUrlLabelObject(c, p, n); } KviScriptUrlLabelObject::KviScriptUrlLabelObject(KviScriptObjectClass * c, \ KviScriptObject * p, const char *n) : KviScriptLabelObject(c, p, n) { m_normalClr = TQColor("black"); m_enterClr = TQColor("blue"); m_activeClr = TQColor("red"); m_useSingleClick = true; // ((TQLabel *)widget())->setAutoResize(true); //widget()->setCursor(TQt::pointingHandCursor); //((KviScriptWidgetObject: * )p)->widget()->setCursor(TQt::pointingHandCursor); } KviScriptUrlLabelObject::~KviScriptUrlLabelObject() { } bool KviScriptUrlLabelObject::eventFilter(TQObject * o, TQEvent * e) { TQPalette pal = ((TQLabel *)widget())->palette(); switch(e->type()) { case TQEvent::Enter: pal.setColor(TQColorGroup::Foreground, m_enterClr); break; case TQEvent::Leave: // this doesn't work... if(((TQMouseEvent *)e)->state() & TQEvent::LeftButton) pal.setColor(TQColorGroup::Foreground, \ m_activeClr); else pal.setColor(TQColorGroup::Foreground, \ m_normalClr); break; case TQEvent::MouseButtonRelease: pal.setColor(TQColorGroup::Foreground, m_enterClr); // perform actions here if(!m_lastClickWasDbl && !m_useSingleClick) break; if(!m_action.isEmpty()) { } break; case TQEvent::MouseButtonPress: m_lastClickWasDbl = false; if(!((TQMouseEvent * )e)->button() & \ TQEvent::LeftButton || !m_useSingleClick) break; pal.setColor(TQColorGroup::Foreground, m_activeClr); break; case TQEvent::MouseButtonDblClick: m_lastClickWasDbl = true; if(m_useSingleClick) break; pal.setColor(TQColorGroup::Foreground, m_activeClr); break; default: // make gcc happy break; } ((TQLabel *)widget())->setPalette(pal); return false; } */ //#warning "Docs for urllabel" /* @doc: urllabel @keyterms: display url, link @title: urllabel class @type: class @short: Displays an URI allowing to perform actions on click @inherits: [class]object[/class] [class]widget[/class] [class]label[/class] @description: This widget allows you to bind specific action on click. It can open an url, or execute any KVI++ code. The text color reacts on cursor movements and clicks. @functions: !fn: $setUrl() Sets the url to be opened when the links is activated. The way the label opens the url is defined in KVirc config dialog. !fn: $url() Returns the currently set url. !fn: $setAction() Sets the action to be performed when the link is triggered. It can be any valid KVI++ code. Note that all KVirc commands must be prefixed with a '/', just as if you typed them in the input widget. !fn: $action() Returns currently set action string. !fn: $setText() Sets the label's text. Reimplemented from internal reasons. !fn: $setCursorChange() Tells the label wheather to change or not the tqshape of cursor, when it is above the widget. Default is false. !fn: $cursorChange() Returns true if the cursor changes over the label, false if not. !fn: $setUseSingleClick() If is true, the label will react on single clicks, otherwise only double clicks will trigger the link. !fn: $useSingleClick() Returns true if the label reacts on single clicks, false if it reacts only on double clicks. */ KVSO_BEGIN_REGISTERCLASS(KviKvsObject_urlabel,"urllabel","label") KVSO_REGISTER_HANDLER(KviKvsObject_urlabel,"setUrl",functionsetUrl) KVSO_REGISTER_HANDLER(KviKvsObject_urlabel,"url",functionurl) KVSO_REGISTER_HANDLER(KviKvsObject_urlabel,"setAction",functionsetAction) KVSO_REGISTER_HANDLER(KviKvsObject_urlabel,"action",functionaction) KVSO_REGISTER_HANDLER(KviKvsObject_urlabel,"setText",functionsetText) KVSO_REGISTER_HANDLER(KviKvsObject_urlabel,"setCursorChange",functionsetCursorChange) KVSO_REGISTER_HANDLER(KviKvsObject_urlabel,"cursorChange",functioncursorChange) KVSO_REGISTER_HANDLER(KviKvsObject_urlabel,"setUseSingleClick",functionsetUseSingleClick) KVSO_REGISTER_HANDLER(KviKvsObject_urlabel,"useSingleClick",functionuseSingleClick) KVSO_END_REGISTERCLASS(KviKvsObject_urlabel) KVSO_BEGIN_CONSTRUCTOR(KviKvsObject_urlabel,KviKvsObject_label) m_normalClr = TQColor("black"); m_enterClr = TQColor("blue"); m_activeClr = TQColor("red"); m_useSingleClick = true; KVSO_END_CONSTRUCTOR(KviKvsObject_urlabel) KVSO_BEGIN_DESTRUCTOR(KviKvsObject_urlabel) KVSO_END_CONSTRUCTOR(KviKvsObject_urlabel) bool KviKvsObject_urlabel::eventFilter(TQObject * o, TQEvent * e) { TQPalette pal = ((TQLabel *)widget())->palette(); switch(e->type()) { case TQEvent::Enter: pal.setColor(TQColorGroup::Foreground, m_enterClr); break; case TQEvent::Leave: // this doesn't work... if(((TQMouseEvent *)e)->state() & TQT_LEFT_BUTTON) pal.setColor(TQColorGroup::Foreground, \ m_activeClr); else pal.setColor(TQColorGroup::Foreground, \ m_normalClr); break; case TQEvent::MouseButtonRelease: pal.setColor(TQColorGroup::Foreground, m_enterClr); // perform actions here if(!m_lastClickWasDbl && !m_useSingleClick) break; if(!m_action.isEmpty()) { KviKvsScript kvs("commandline",m_action); kvs.run(g_pActiveWindow,0,0/*,KviKvsScript::AssumeLocals*/); } else if(!m_url.isEmpty()) { KviKvsScript kvs("commandline","openurl "+m_url); kvs.run(g_pActiveWindow,0,0/*,KviKvsScript::AssumeLocals*/); } break; case TQEvent::MouseButtonPress: m_lastClickWasDbl = false; if(!((TQMouseEvent * )e)->button() & \ TQT_LEFT_BUTTON || !m_useSingleClick) break; pal.setColor(TQColorGroup::Foreground, m_activeClr); break; case TQEvent::MouseButtonDblClick: m_lastClickWasDbl = true; if(m_useSingleClick) break; pal.setColor(TQColorGroup::Foreground, m_activeClr); break; default: // make gcc happy break; } ((TQLabel *)widget())->setPalette(pal); return false; } bool KviKvsObject_urlabel::functionsetUrl(KviKvsObjectFunctionCall *c) { TQString szUrl; KVSO_PARAMETERS_BEGIN(c) KVSO_PARAMETER("url",KVS_PT_STRING,0,szUrl) KVSO_PARAMETERS_END(c) if(!widget()) return true; if(szUrl.isEmpty()){ c->error(__tr2qs("Not Enough Parameters")); return false; } m_url = szUrl; return true; } bool KviKvsObject_urlabel::functionurl(KviKvsObjectFunctionCall *c) { c->returnValue()->setString(m_url); return true; } bool KviKvsObject_urlabel::functionsetAction(KviKvsObjectFunctionCall *c) { TQString szAction; KVSO_PARAMETERS_BEGIN(c) KVSO_PARAMETER("action",KVS_PT_STRING,0,szAction) KVSO_PARAMETERS_END(c) if(!widget()) return true; if(szAction.isEmpty()){ c->error(__tr2qs("Not Enough Parameters")); return false; } m_action = szAction; return true; } bool KviKvsObject_urlabel::functionsetText(KviKvsObjectFunctionCall *c) { TQString szText; KVSO_PARAMETERS_BEGIN(c) KVSO_PARAMETER("text",KVS_PT_STRING,0,szText) KVSO_PARAMETERS_END(c) if(!widget()) return true; ((TQLabel *)widget())->setText(szText); ((TQLabel *)widget())->setFixedSize(((TQLabel *)widget())->sizeHint()); return true; } bool KviKvsObject_urlabel::functionaction(KviKvsObjectFunctionCall *c) { c->returnValue()->setString(m_action); return true; } bool KviKvsObject_urlabel::functionsetCursorChange(KviKvsObjectFunctionCall *c) { bool bFlag; KVSO_PARAMETERS_BEGIN(c) KVSO_PARAMETER("bEnabled",KVS_PT_BOOLEAN,0,bFlag) KVSO_PARAMETERS_END(c) if(!widget()) return true; if(m_changeCursor = bFlag) widget()->setCursor(TQt::pointingHandCursor); else widget()->setCursor(TQt::arrowCursor); return true; } bool KviKvsObject_urlabel::functionsetUseSingleClick(KviKvsObjectFunctionCall *c) { bool bFlag; KVSO_PARAMETERS_BEGIN(c) KVSO_PARAMETER("bEnabled",KVS_PT_BOOLEAN,0,bFlag) KVSO_PARAMETERS_END(c) m_useSingleClick = bFlag; return true; } bool KviKvsObject_urlabel::functionuseSingleClick(KviKvsObjectFunctionCall *c) { c->returnValue()->setBoolean(m_useSingleClick); return true; } bool KviKvsObject_urlabel::functioncursorChange(KviKvsObjectFunctionCall *c) { c->returnValue()->setBoolean(m_changeCursor); return true; }