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.
kvirc/src/modules/objects/class_urllabel.cpp

331 lines
9.6 KiB

//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 <TQMouseEvent>
#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(<text:string>)
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: <string> $url()
Returns the currently set url.
!fn: $setAction(<text:string>)
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: <string> $action()
Returns currently set action string.
!fn: $setText(<text>)
Sets the label's text. Reimplemented from internal reasons.
!fn: $setCursorChange(<bEnabled:boolean>)
Tells the label wheather to change or not the tqshape of cursor,
when it is above the widget. Default is false.
!fn: <boolean> $cursorChange()
Returns true if the cursor changes over the label, false if not.
!fn: $setUseSingleClick(<bEnabled:boolean>)
If <bEnabled> is true, the label will react on single clicks,
otherwise only double clicks will trigger the link.
!fn: <boolean> $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;
}