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/kvirc/kernel/kvi_coreactions.cpp

1187 lines
30 KiB

//=============================================================================
//
// File : kvi_coreactions.cpp
// Created on Mon 22 Nov 2004 02:30:47 by Szymon Stefanek
//
// This file is part of the KVIrc IRC Client distribution
// Copyright (C) 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.
//
//=============================================================================
#define __KVIRC__
#include "kvi_coreactions.h"
#include "kvi_frame.h"
#include "kvi_locale.h"
#include "kvi_irccontext.h"
#include "kvi_iconmanager.h"
#include "kvi_app.h"
#include "kvi_customtoolbar.h"
#include "kvi_actiondrawer.h"
#include "kvi_actionmanager.h"
#include "kvi_kvs_action.h"
#include "kvi_mdimanager.h"
#include "kvi_irctoolbar.h"
#include "kvi_locale.h"
#include "kvi_ircurl.h"
#include "kvi_ircconnection.h"
#include "kvi_ircconnectionuserinfo.h"
#include "kvi_coreactionnames.h"
#include "kvi_ircconnectionserverinfo.h"
#include "kvi_styled_controls.h"
#include "kvi_kvs_script.h"
#include "kvi_tal_popupmenu.h"
#include <tqobject.h>
// Ctrl+Alt+A : KviGoAwayAction
// Ctrl+Alt+C : Connect/Disconnect
// Ctrl+Alt+S : Servers dialog
// Ctrl+Alt+I : Identity dialog
// Ctrl+Alt+O : General options
// Ctrl+Alt+T : Theme options
// Ctrl+Alt+J : Join Channels
// Ctrl+Alt+X : Execute script
// Ctrl+Alt+N : New irc context
// Ctrl+Alt+1 : Action editor
// Ctrl+Alt+2 : Alias editor
// Ctrl+Alt+3 : Event editor
// Ctrl+Alt+4 : Popup editor
// Ctrl+Alt+5 : Raw event editor
// Ctrl+Alt+6 : Customize toolbars
// Ctrl+Alt+H : Show help index
// Ctrl+Alt+R : Edit regusers
// Ctrl+Alt+M : Manage Script Addons
// Ctrl+Alt+L : Manage Themes
void register_core_actions(KviActionManager * m)
{
m->registerAction(new KviConnectAction(m)); // this as parent will destroy it on exit!
m->registerAction(new KviSeparatorAction(m));
m->registerAction(new KviIrcContextDisplayAction(m));
m->registerAction(new KviJoinChannelAction(m));
m->registerAction(new KviChangeNickAction(m));
m->registerAction(new KviConnectToServerAction(m));
m->registerAction(new KviChangeUserModeAction(m));
m->registerAction(new KviGoAwayAction(m));
m->registerAction(new KviIrcToolsAction(m));
m->registerAction(new KviIrcOperationsAction(m));
KviAction * a;
#define SCRIPT_ACTION(__name,__code,__visible,__description,__category,__icon,__smallicon,__flags,__accel) \
a = new KviKvsAction(m, \
TQString(__name), \
TQString(__code), \
TQString(__visible), \
TQString(__description), \
__category, \
TQString(__icon), \
__smallicon, \
__flags, \
__accel); \
m->registerAction(a)
#define SLOT_ACTION(__name,__object,__slot,__visible,__description,__category,__icon,__smallicon,__flags,__accel) \
a = new KviAction(m, \
TQString(__name), \
TQString(__visible), \
TQString(__description), \
__category, \
TQString(__icon), \
__smallicon, \
__flags, \
__accel); \
TQObject::connect(a,TQ_SIGNAL(activated()),__object,__slot); \
m->registerAction(a)
SCRIPT_ACTION(
KVI_COREACTION_SERVEROPTIONS,
"options.edit KviServerOptionsWidget",
__tr2qs("Configure Servers..."),
__tr2qs("Allows you to configure the servers and eventually to connect to them"),
KviActionManager::categorySettings(),
"kvi_bigicon_servers.png",
KVI_SMALLICON_SERVER,
0,
"Ctrl+Alt+S");
SCRIPT_ACTION(
KVI_COREACTION_MANAGEADDONS,
"addon.dialog",
__tr2qs("Manage Addons..."),
__tr2qs("Allows you to manage the script-based addons"),
KviActionManager::categorySettings(),
"kvi_bigicon_addons.png",
KVI_SMALLICON_ADDONS,
0,
"Ctrl+Alt+M");
SCRIPT_ACTION(
KVI_COREACTION_EDITREGUSERS,
"reguser.edit -t",
__tr2qs("Configure Registered Users..."),
__tr2qs("Shows a dialog that allows editing the registered user entries"),
KviActionManager::categorySettings(),
"kvi_bigicon_regusers.png",
KVI_SMALLICON_REGUSERS,
0,
"Ctrl+Alt+R");
SCRIPT_ACTION(
KVI_COREACTION_IDENTITYOPTIONS,
"options.edit KviIdentityOptionsWidget",
__tr2qs("Configure Identity..."),
__tr2qs("Allows you to configure nickname, username, avatar etc..."),
KviActionManager::categorySettings(),
"kvi_bigicon_identity.png",
KVI_SMALLICON_WHO,
0,
"Ctrl+Alt+I");
SCRIPT_ACTION(
KVI_COREACTION_SOCKETSPY,
"socketspy.open",
__tr2qs("Show SocketSpy..."),
__tr2qs("Shows a window that allows monitoring the socket traffic"),
KviActionManager::categoryScripting(),
"kvi_bigicon_socketspy.png",
KVI_SMALLICON_SPY,
KviAction::NeedsContext,
TQString());
SCRIPT_ACTION(
KVI_COREACTION_NETWORKLINKS,
"links.open",
__tr2qs("Get Network Links"),
__tr2qs("Shows a window that allows viewing the network links"),
KviActionManager::categoryIrc(),
"kvi_bigicon_networklinks.png",
KVI_SMALLICON_LINKS,
KviAction::NeedsContext,
TQString());
SCRIPT_ACTION(
KVI_COREACTION_CHANNELLIST,
"list.open",
__tr2qs("Get Channel List"),
__tr2qs("Shows a window that allows listing the network channels"),
KviActionManager::categoryIrc(),
"kvi_bigicon_channellist.png",
KVI_SMALLICON_LIST,
KviAction::NeedsContext,
TQString());
SCRIPT_ACTION(
KVI_COREACTION_GENERALOPTIONS,
"options.dialog",
__tr2qs("Configure KVIrc..."),
__tr2qs("Shows the general options dialog"),
KviActionManager::categorySettings(),
"kvi_bigicon_settings.png",
KVI_SMALLICON_OPTIONS,
0,
"Ctrl+Alt+O");
SCRIPT_ACTION(
KVI_COREACTION_THEMEOPTIONS,
"options.dialog theme",
__tr2qs("Configure Theme..."),
__tr2qs("Shows the theme options dialog"),
KviActionManager::categorySettings(),
"kvi_bigicon_themeoptions.png",
KVI_SMALLICON_THEMEOPTIONS,
0,
"Ctrl+Alt+T");
SCRIPT_ACTION(
KVI_COREACTION_MANAGETHEMES,
"theme.dialog",
__tr2qs("Manage Themes..."),
__tr2qs("Allows you to manage the themes"),
KviActionManager::categorySettings(),
"kvi_bigicon_theme.png",
KVI_SMALLICON_THEME,
0,
"Ctrl+Alt+L");
SCRIPT_ACTION(
KVI_COREACTION_TOOLBAREDITOR,
"toolbareditor.open",
__tr2qs("Customize Toolbars..."),
__tr2qs("Shows a window that allows editing script toolbars"),
KviActionManager::categorySettings(),
"kvi_bigicon_toolbareditor.png",
KVI_SMALLICON_TOOLBAR,
0,
"Ctrl+Alt+6");
SCRIPT_ACTION(
KVI_COREACTION_JOINCHANNELS,
"channelsjoin.open",
__tr2qs("Join Channels..."),
__tr2qs("Shows a dialog that allows you joing channels"),
KviActionManager::categoryIrc(),
"kvi_bigicon_channels.png",
KVI_SMALLICON_CHANNEL,
KviKvsAction::NeedsConnection | KviKvsAction::NeedsContext,
"Ctrl+Alt+J");
SCRIPT_ACTION(
KVI_COREACTION_ACTIONEDITOR,
"actioneditor.open",
__tr2qs("Edit Actions..."),
__tr2qs("Shows a window that allows editing actions"),
KviActionManager::categoryScripting(),
"kvi_bigicon_actioneditor.png",
KVI_SMALLICON_SCRIPTACTION,
0,
"Ctrl+Alt+1");
SCRIPT_ACTION(
KVI_COREACTION_ALIASEDITOR,
"aliaseditor.open",
__tr2qs("Edit Aliases..."),
__tr2qs("Shows a window that allows editing aliases"),
KviActionManager::categoryScripting(),
"kvi_bigicon_aliaseditor.png",
KVI_SMALLICON_ALIAS,
0,
"Ctrl+Alt+2");
SCRIPT_ACTION(
KVI_COREACTION_EVENTEDITOR,
"eventeditor.open",
__tr2qs("Edit Events..."),
__tr2qs("Shows a window that allows editing script events"),
KviActionManager::categoryScripting(),
"kvi_bigicon_eventeditor.png",
KVI_SMALLICON_EVENT,
0,
"Ctrl+Alt+3");
SCRIPT_ACTION(
KVI_COREACTION_POPUPEDITOR,
"popupeditor.open",
__tr2qs("Edit Popups..."),
__tr2qs("Shows a window that allows editing popup menus"),
KviActionManager::categoryScripting(),
"kvi_bigicon_popupeditor.png",
KVI_SMALLICON_POPUP,
0,
"Ctrl+Alt+4");
SCRIPT_ACTION(
KVI_COREACTION_RAWEDITOR,
"raweditor.open",
__tr2qs("Edit Raw Events..."),
__tr2qs("Shows a window that allows editing raw scripting events"),
KviActionManager::categoryScripting(),
"kvi_bigicon_raweditor.png",
KVI_SMALLICON_RAWEVENT,
0,
"Ctrl+Alt+5");
SCRIPT_ACTION(
KVI_COREACTION_CODETESTER,
"codetester.open",
__tr2qs("New Script Tester"),
__tr2qs("Creates an embedded editor for long scripts"),
KviActionManager::categoryScripting(),
"kvi_bigicon_codetester.png",
KVI_SMALLICON_BOMB,
0,
TQString());
SCRIPT_ACTION(
KVI_COREACTION_EXECUTEKVS,
"dialog.file(open,$tr(\"Select a Script File\")){ if(!$str.isEmpty($0))parse $0; }",
__tr2qs("Execute Script..."),
__tr2qs("Allows executing a KVS script from file"),
KviActionManager::categoryScripting(),
"kvi_bigicon_folder.png",
KVI_SMALLICON_FOLDER,
0,
"Ctrl+Alt+X");
SCRIPT_ACTION(
KVI_COREACTION_HELPINDEX,
"help",
__tr2qs("Help Index"),
__tr2qs("Shows the documentation index"),
KviActionManager::categoryGeneric(),
"kvi_bigicon_help.png",
KVI_SMALLICON_HELP,
0,
"Ctrl+Alt+H");
SCRIPT_ACTION(
KVI_COREACTION_KVIRCMAILINGLIST,
"openurl http://www.kvirc.net/?id=mailinglist",
__tr2qs("Subscribe to the Mailing List"),
__tr2qs("Allows subscribing to the KVIrc mailing list"),
KviActionManager::categoryGeneric(),
"kvi_bigicon_mailinglist.png",
KVI_SMALLICON_MESSAGE,
0,
TQString());
SCRIPT_ACTION(
KVI_COREACTION_KVIRCHOMEPAGE,
"openurl http://www.kvirc.net",
__tr2qs("KVIrc WWW"),
__tr2qs("Opens the KVIrc homepage"),
KviActionManager::categoryGeneric(),
"kvi_bigicon_kvircwww.png",
KVI_SMALLICON_KVIRC,
0,
TQString());
SCRIPT_ACTION(
KVI_COREACTION_KVIRCRUHOMEPAGE,
"openurl http://www.kvirc.ru",
__tr2qs("KVIrc Russian WWW"),
__tr2qs("Opens the KVIrc homepage in russian"),
KviActionManager::categoryGeneric(),
"kvi_bigicon_kvircwww.png",
KVI_SMALLICON_KVIRC,
0,
TQString());
SCRIPT_ACTION(
KVI_COREACTION_SCREENSHOT,
"theme.screenshot",
__tr2qs("Acquire Screenshot"),
__tr2qs("Acquires a Screenshot of the KVIrc main window"),
KviActionManager::categoryGeneric(),
"kvi_bigicon_screenshot.png",
KVI_SMALLICON_SCREENSHOT,
0,
TQString());
SLOT_ACTION(
KVI_COREACTION_CASCADEWINDOWS,
g_pFrame->mdiManager(),
TQ_SLOT(cascadeMaximized()),
__tr2qs("Cascade windows"),
__tr2qs("Arranges the MDI windows in a maximized-cascade fashion"),
KviActionManager::categoryGUI(),
"kvi_bigicon_cascadewindows.png",
KVI_SMALLICON_CASCADEWINDOWS,
0,
TQString());
SLOT_ACTION(
KVI_COREACTION_TILEWINDOWS,
g_pFrame->mdiManager(),
TQ_SLOT(tile()),
__tr2qs("Tile windows"),
__tr2qs("Tiles the MDI windows with the currently selected tile method"),
KviActionManager::categoryGUI(),
"kvi_bigicon_tilewindows.png",
KVI_SMALLICON_TILEWINDOWS,
0,
TQString());
SLOT_ACTION(
KVI_COREACTION_MINIMIZEALLWINDOWS,
g_pFrame->mdiManager(),
TQ_SLOT(minimizeAll()),
__tr2qs("Minimize all windows"),
__tr2qs("Minimized all the currently visible MDI windows"),
KviActionManager::categoryGUI(),
"kvi_bigicon_minimizeallwindows.png",
KVI_SMALLICON_MINIMIZE,
0,
TQString());
SLOT_ACTION(
KVI_COREACTION_NEWIRCCONTEXT,
g_pFrame,
TQ_SLOT(newConsole()),
__tr2qs("New IRC Context"),
__tr2qs("Creates a new IRC context console"),
KviActionManager::categoryIrc(),
"kvi_bigicon_newirccontext.png",
KVI_SMALLICON_CONSOLE,
0,
"Ctrl+Alt+N");
SLOT_ACTION(
KVI_COREACTION_QUITKVIRC,
g_pApp,
TQ_SLOT(quit()),
__tr2qs("Quit KVIrc"),
__tr2qs("Quits KVIrc closing all the current connections"),
KviActionManager::categoryGeneric(),
"kvi_bigicon_quit.png",
KVI_SMALLICON_QUITAPP,
0,
TQString());
}
KviIrcContextDisplayAction::KviIrcContextDisplayAction(TQObject * pParent)
: KviAction(pParent,
TQString(KVI_COREACTION_IRCCONTEXTDISPLAY),
__tr2qs("IRC Context Display"),
__tr2qs("Shows a small display with IRC context informations"),
KviActionManager::categoryIrc(),
"kvi_bigicon_irccontextdisplay.png",
KVI_SMALLICON_NONE,
NeedsContext | NeedsConnection)
{
}
void KviIrcContextDisplayAction::setup()
{
KviAction::setup();
connect(g_pFrame,TQ_SIGNAL(activeConnectionServerInfoChanged()),this,TQ_SLOT(activeContextStateChanged()));
connect(g_pFrame,TQ_SIGNAL(activeConnectionNickNameChanged()),this,TQ_SLOT(activeContextStateChanged()));
connect(g_pFrame,TQ_SIGNAL(activeConnectionUserModeChanged()),this,TQ_SLOT(activeContextStateChanged()));
connect(g_pFrame,TQ_SIGNAL(activeConnectionAwayStateChanged()),this,TQ_SLOT(activeContextStateChanged()));
connect(g_pFrame,TQ_SIGNAL(activeConnectionLagChanged()),this,TQ_SLOT(activeContextStateChanged()));
}
bool KviIrcContextDisplayAction::addToPopupMenu(KviTalPopupMenu *p)
{
if(!setupDone())setup();
KviIrcContextDisplay * w = new KviIrcContextDisplay(p,"kvirc.irccontextdisplay");
registerWidget(w);
p->insertItem(w);
return true;
}
TQWidget * KviIrcContextDisplayAction::addToCustomToolBar(KviCustomToolBar *t)
{
if(!setupDone())setup();
KviIrcContextDisplay * w = new KviIrcContextDisplay(t,"kvirc.irccontextdisplay");
registerWidget(w);
return w;
}
void KviIrcContextDisplayAction::activeContextChanged()
{
if(m_pWidgetList)
{
for(TQWidget * w = m_pWidgetList->first();w;w = m_pWidgetList->next())
w->update();
}
}
void KviIrcContextDisplayAction::activeContextStateChanged()
{
if(m_pWidgetList)
{
for(TQWidget * w = m_pWidgetList->first();w;w = m_pWidgetList->next())
w->update();
}
}
void KviIrcContextDisplayAction::setEnabled(bool)
{
// does nothing here : always enabled!
}
KviSeparatorAction::KviSeparatorAction(TQObject * pParent)
: KviAction(pParent,
TQString(KVI_COREACTION_SEPARATOR),
__tr2qs("Separator"),
__tr2qs("Acts as a separator for other items: performs no action"),
KviActionManager::categoryGeneric(),
KVI_BIGICON_SEPARATOR,
KVI_SMALLICON_NONE,
0)
{
}
bool KviSeparatorAction::addToPopupMenu(KviTalPopupMenu *p)
{
if(!setupDone())setup();
p->insertSeparator();
return true;
}
TQWidget * KviSeparatorAction::addToCustomToolBar(KviCustomToolBar *t)
{
if(!setupDone())setup();
TQWidget * w = new KviCustomToolBarSeparator(t,"kvirc.separator");
registerWidget(w);
return w;
}
KviConnectAction::KviConnectAction(TQObject * pParent)
: KviAction(pParent,
TQString(KVI_COREACTION_CONNECT),
__tr2qs("Connect/Disconnect"),
__tr2qs("Allows you to connect to a server or to terminate the current connection"),
KviActionManager::categoryIrc(),
KVI_BIGICON_CONNECTED,
KVI_SMALLICON_NONE, // no small icon for now
NeedsContext | NeedsConnection,
TQString("Ctrl+Alt+C"))
{
}
void KviConnectAction::reloadImages()
{
activeContextStateChanged();
}
void KviConnectAction::activeContextChanged()
{
activeContextStateChanged();
}
void KviConnectAction::activeContextStateChanged()
{
KviPointerList<TQWidget> * bl = widgetList();
if(!bl)return;
TQPixmap * p;
TQString txt;
KviIrcContext * c = g_pFrame->activeContext();
if(c)
{
switch(c->state())
{
case KviIrcContext::Idle:
p = g_pIconManager->getBigIcon(KVI_BIGICON_DISCONNECTED);
txt = m_szConnectString;
break;
case KviIrcContext::Connecting:
case KviIrcContext::LoggingIn:
p = g_pIconManager->getBigIcon(KVI_BIGICON_CONNECTING);
txt = m_szAbortConnectionString;
break;
case KviIrcContext::Connected:
p = g_pIconManager->getBigIcon(KVI_BIGICON_CONNECTED);
txt = m_szDisconnectString;
break;
default:
p = 0;
break;
}
} else {
p = 0;
}
if(p)
{
for(TQToolButton * b = (TQToolButton *)bl->first();b;b =(TQToolButton *)bl->next())
{
if(!b->isEnabled())b->setEnabled(true);
b->setPixmap(*p);
b->setTextLabel(txt);
}
} else {
for(TQToolButton * b = (TQToolButton *)bl->first();b;b = (TQToolButton *)bl->next())
{
if(b->isEnabled())b->setEnabled(false);
}
}
}
void KviConnectAction::setup()
{
KviAction::setup();
m_szConnectString = __tr2qs("Connect");
m_szAbortConnectionString = __tr2qs("Abort Connection");
m_szDisconnectString = __tr2qs("Disconnect");
}
void KviConnectAction::activate()
{
KviIrcContext * c = g_pFrame->activeContext();
if(c)c->connectOrDisconnect();
}
bool KviConnectAction::addToPopupMenu(KviTalPopupMenu *p)
{
if(!setupDone())setup();
KviIrcContext * c = g_pFrame->activeContext();
int id;
TQString t;
if(c)
{
switch(c->state())
{
case KviIrcContext::Idle:
t = m_szConnectString;
if(!m_szKeySequence.isEmpty())t += '\t' + m_szKeySequence;
p->insertItem(t,this,TQ_SLOT(activate()));
break;
case KviIrcContext::Connecting:
case KviIrcContext::LoggingIn:
t = m_szAbortConnectionString;
if(!m_szKeySequence.isEmpty())t += '\t' + m_szKeySequence;
p->insertItem(t,this,TQ_SLOT(activate()));
break;
case KviIrcContext::Connected:
t = m_szDisconnectString;
if(!m_szKeySequence.isEmpty())t += '\t' + m_szKeySequence;
p->insertItem(t,this,TQ_SLOT(activate()));
break;
default:
t = m_szConnectString;
if(!m_szKeySequence.isEmpty())t += '\t' + m_szKeySequence;
id = p->insertItem(t,this,TQ_SLOT(activate()));
p->setItemEnabled(id,false);
break;
}
} else {
t = m_szConnectString;
if(!m_szKeySequence.isEmpty())t += '\t' + m_szKeySequence;
id = p->insertItem(t,this,TQ_SLOT(activate()));
p->setItemEnabled(id,false);
}
return true;
}
TQWidget * KviConnectAction::addToCustomToolBar(KviCustomToolBar *t)
{
if(!setupDone())setup();
TQToolButton * b = new KviStyledToolButton(
*(g_pIconManager->getBigIcon(KVI_BIGICON_DISCONNECTED)),
m_szConnectString,
m_szConnectString,
this,TQ_SLOT(activate()),t,name());
registerWidget(b);
activeContextStateChanged();
return b;
}
KviSubmenuAction::KviSubmenuAction(TQObject * pParent,
const TQString &szName,
const TQString &szScriptCode,
const TQString &szVisibleName,
const TQString &szDescription,
KviActionCategory * pCategory,
const TQString &szBigIcon,
int iSmallIconId,
unsigned int uFlags)
: KviKvsAction(pParent,
szName,
szScriptCode,
szVisibleName,
szDescription,
pCategory,
szBigIcon,
iSmallIconId,
uFlags)
{
m_pPopup = 0;
}
KviSubmenuAction::~KviSubmenuAction()
{
if(m_pPopup)delete m_pPopup;
}
void KviSubmenuAction::setup()
{
KviKvsAction::setup();
if(!m_pPopup)
{
m_pPopup = new KviTalPopupMenu();
connect(m_pPopup,TQ_SIGNAL(aboutToShow()),this,TQ_SLOT(popupAboutToShow()));
connect(m_pPopup,TQ_SIGNAL(activated(int)),this,TQ_SLOT(popupActivated(int)));
}
}
void KviSubmenuAction::popupAboutToShow()
{
}
void KviSubmenuAction::popupActivated(int)
{
}
bool KviSubmenuAction::addToPopupMenu(KviTalPopupMenu *p)
{
if(!setupDone())setup();
int id = p->insertItem(*(smallIcon()),visibleName(),m_pPopup);
if(!isEnabled())p->setItemEnabled(id,false);
return true;
}
TQWidget * KviSubmenuAction::addToCustomToolBar(KviCustomToolBar *t)
{
if(!setupDone())setup();
KviStyledToolButton * b = new KviStyledToolButton(
*(bigIcon()),
visibleName(),
visibleName(),
this,TQ_SLOT(activate()),t,name());
b->setPopup(m_pPopup);
b->setShowSubmenuIndicator(true);
b->setPopupDelay(1);
registerWidget(b);
if(!isEnabled())b->setEnabled(false);
return b;
}
KviJoinChannelAction::KviJoinChannelAction(TQObject * pParent)
: KviSubmenuAction(pParent,
TQString(KVI_COREACTION_CHANNELMENU),
TQString("channelsjoin.open"),
__tr2qs("Join Channel"),
__tr2qs("Shows a popup menu that allows quickly selecting a channel to join"),
KviActionManager::categoryIrc(),
"kvi_bigicon_channelspopup.png",
KVI_SMALLICON_CHANNEL,
NeedsConnection | NeedsContext)
{
}
void KviJoinChannelAction::popupAboutToShow()
{
KviConsole * c = g_pActiveWindow->console();
if(!c)return;
g_pApp->fillRecentChannelsPopup(m_pPopup,c);
m_pPopup->insertSeparator();
m_pPopup->insertItem(*(smallIcon()),__tr2qs("Other..."));
}
void KviJoinChannelAction::popupActivated(int id)
{
KviConsole * c = g_pActiveWindow->console();
if(!c)return;
TQString text = m_pPopup->text(id);
if(!text.isEmpty())
{
TQString szText;
if(__tr2qs("Other...") == text)szText = "channelsjoin.open";
else {
szText = text;
szText.prepend("join ");
}
KviKvsScript::run(szText,c);
}
}
KviChangeNickAction::KviChangeNickAction(TQObject * pParent)
: KviSubmenuAction(pParent,
TQString(KVI_COREACTION_NICKNAMEMENU),
TQString("dialog.textinput(\"Change Nickname\",\"Please enter the new nickname\",\"Cancel\",\"default=OK\"){ if($0 == 1)nick $1; }"),
__tr2qs("Change Nickname"),
__tr2qs("Shows a popup menu that allows quickly changing the nickname"),
KviActionManager::categoryIrc(),
"kvi_bigicon_nickpopup.png",
KVI_SMALLICON_NICK,
NeedsConnection | NeedsContext)
{
}
void KviChangeNickAction::popupAboutToShow()
{
KviConsole * c = g_pActiveWindow->console();
if(!c)return;
g_pApp->fillRecentNicknamesPopup(m_pPopup,c);
m_pPopup->insertSeparator();
m_pPopup->insertItem(*(smallIcon()),__tr2qs("Other..."));
}
void KviChangeNickAction::popupActivated(int id)
{
KviConsole * c = g_pActiveWindow->console();
if(!c)return;
TQString text = m_pPopup->text(id);
if(!text.isEmpty())
{
TQString szText;
if(__tr2qs("Other...") == text)
{
activate();
} else {
szText = text;
szText.prepend("nick ");
KviKvsScript::run(szText,c);
}
}
}
KviConnectToServerAction::KviConnectToServerAction(TQObject * pParent)
: KviSubmenuAction(pParent,
TQString(KVI_COREACTION_SERVERMENU),
TQString("options.edit KviServerOptionsWidget"),
__tr2qs("Connect To"),
__tr2qs("Shows a popup menu that allows quickly connecting to a server"),
KviActionManager::categoryIrc(),
"kvi_bigicon_server.png",
KVI_SMALLICON_SERVER,
NeedsContext)
{
}
void KviConnectToServerAction::popupAboutToShow()
{
g_pApp->fillRecentServersPopup(m_pPopup);
m_pPopup->insertSeparator();
m_pPopup->insertItem(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_SERVER)),__tr2qs("Other..."));
}
void KviConnectToServerAction::popupActivated(int id)
{
KviConsole * c = g_pActiveWindow->console();
if(!c)return;
TQString text = m_pPopup->text(id);
if(!text.isEmpty())
{
if(__tr2qs("Other...") == text)
{
activate();
} else {
KviStr szCommand;
KviStr szText = text;
if(KviIrcUrl::parse(szText.ptr(),szCommand,KVI_IRCURL_CONTEXT_THIS))
{
KviKvsScript::run(szCommand.ptr(),c);
}
}
}
}
KviChangeUserModeAction::KviChangeUserModeAction(TQObject * pParent)
: KviSubmenuAction(pParent,
TQString(KVI_COREACTION_USERMODEMENU),
TQString(""),
__tr2qs("User Mode"),
__tr2qs("Shows a popup menu that allows quickly changing user modes"),
KviActionManager::categoryIrc(),
"kvi_bigicon_usermode.png",
KVI_SMALLICON_MODE,
NeedsContext | NeedsConnection)
{
}
void KviChangeUserModeAction::popupAboutToShow()
{
KviConsole * c = g_pActiveWindow->console();
if(!c)return;
m_pPopup->clear();
int id;
TQString szModes = g_pActiveWindow->console()->connection()->serverInfo()->supportedUserModes();
id = m_pPopup->insertItem(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_WALLOPS)),__tr2qs("Wallops (+w)"));
m_pPopup->setItemChecked(id,c->connection()->userInfo()->hasUserMode('w'));
id = m_pPopup->insertItem(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_SERVERNOTICE)),__tr2qs("Server Notices (+s)"));
m_pPopup->setItemChecked(id,c->connection()->userInfo()->hasUserMode('s'));
id = m_pPopup->insertItem(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_INVISIBLE)),__tr2qs("Invisible (+i)"));
m_pPopup->setItemChecked(id,c->connection()->userInfo()->hasUserMode('i'));
szModes.replace("w","");
szModes.replace("s","");
szModes.replace("i","");
while(!szModes.isEmpty())
{
TQChar ccc = szModes[0];
szModes.remove(0,1);
id = m_pPopup->insertItem(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_MODE)),TQString("+%1 Mode").arg(ccc));
m_pPopup->setItemChecked(id,c->connection()->userInfo()->hasUserMode(ccc.latin1()));
}
}
void KviChangeUserModeAction::popupActivated(int id)
{
KviConsole * c = g_pActiveWindow->console();
if(!c)return;
TQString text = m_pPopup->text(id);
if(!c->isConnected())return;
if(!text.isEmpty())
{
int idx = text.find('+');
if(idx != -1)
{
idx++;
if(idx < text.length())
{
TQChar m = text[idx];
TQString command = "mode ";
command.append(c->connection()->userInfo()->nickName());
command.append(c->connection()->userInfo()->hasUserMode(m) ? " -" : " +");
command.append(m);
KviKvsScript::run(command,c);
}
}
}
}
KviGoAwayAction::KviGoAwayAction(TQObject * pParent)
: KviKvsAction(pParent,
TQString(KVI_COREACTION_AWAYBACK),
TQString("if($away())back; else away;"),
__tr2qs("Away/Back"),
__tr2qs("Allows entering and leaving away state"),
KviActionManager::categoryIrc(),
"kvi_bigicon_nokeyboard.png",
KVI_SMALLICON_NOTAWAY,
KviKvsAction::NeedsContext | KviKvsAction::NeedsConnection,
"Ctrl+Alt+A")
{
}
void KviGoAwayAction::reloadImages()
{
activeContextStateChanged();
}
void KviGoAwayAction::activeContextChanged()
{
activeContextStateChanged();
}
void KviGoAwayAction::activeContextStateChanged()
{
KviPointerList<TQWidget> * bl = widgetList();
if(!bl)return;
TQPixmap * p;
TQString txt;
KviIrcContext * c = g_pFrame->activeContext();
if(c)
{
if(c->state() == KviIrcContext::Connected)
{
if(c->connection()->userInfo()->isAway())
{
p = g_pIconManager->getBigIcon("kvi_bigicon_keyboard.png");
txt = m_szBackString;
} else {
p = g_pIconManager->getBigIcon("kvi_bigicon_nokeyboard.png");
txt = m_szAwayString;
}
} else {
p = 0;
}
} else {
p = 0;
}
if(p)
{
for(TQToolButton * b = (TQToolButton *)bl->first();b;b =(TQToolButton *)bl->next())
{
if(!b->isEnabled())b->setEnabled(true);
b->setPixmap(*p);
b->setTextLabel(txt);
}
m_uInternalFlags |= KVI_ACTION_FLAG_ENABLED;
setEnabled(true);
} else {
for(TQToolButton * b = (TQToolButton *)bl->first();b;b = (TQToolButton *)bl->next())
{
if(b->isEnabled())b->setEnabled(false);
}
m_uInternalFlags &= ~KVI_ACTION_FLAG_ENABLED;
setEnabled(true);
}
}
void KviGoAwayAction::setup()
{
KviKvsAction::setup();
m_szAwayString = __tr2qs("Enter Away Mode");
m_szBackString = __tr2qs("Leave Away Mode");
connect(g_pFrame,TQ_SIGNAL(activeConnectionAwayStateChanged()),this,TQ_SLOT(activeContextStateChanged()));
}
bool KviGoAwayAction::addToPopupMenu(KviTalPopupMenu *p)
{
if(!setupDone())setup();
KviIrcContext * c = g_pFrame->activeContext();
int id;
TQString t;
if(c)
{
if(c->state() == KviIrcContext::Connected)
{
if(c->connection()->userInfo()->isAway())
{
t = m_szBackString;
if(!m_szKeySequence.isEmpty())t += '\t' + m_szKeySequence;
p->insertItem(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_AWAY)),t,this,TQ_SLOT(activate()));
} else {
t = m_szAwayString;
if(!m_szKeySequence.isEmpty())t += '\t' + m_szKeySequence;
p->insertItem(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_NOTAWAY)),t,this,TQ_SLOT(activate()));
}
} else {
t = m_szAwayString;
if(!m_szKeySequence.isEmpty())t += '\t' + m_szKeySequence;
id = p->insertItem(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_NOTAWAY)),t,this,TQ_SLOT(activate()));
p->setItemEnabled(id,false);
}
} else {
t = m_szAwayString;
if(!m_szKeySequence.isEmpty())t += '\t' + m_szKeySequence;
id = p->insertItem(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_NOTAWAY)),t,this,TQ_SLOT(activate()));
p->setItemEnabled(id,false);
}
return true;
}
TQWidget * KviGoAwayAction::addToCustomToolBar(KviCustomToolBar *t)
{
if(!setupDone())setup();
TQToolButton * b = new KviStyledToolButton(
*(g_pIconManager->getBigIcon("kvi_bigicon_nokeyboard.png")),
m_szAwayString,
m_szAwayString,
this,TQ_SLOT(activate()),t,name());
registerWidget(b);
activeContextStateChanged();
return b;
}
KviIrcToolsAction::KviIrcToolsAction(TQObject * pParent)
: KviSubmenuAction(pParent,
TQString(KVI_COREACTION_IRCTOOLS),
TQString(""),
__tr2qs("Irc Tools"),
__tr2qs("Shows a popup menu with some IRC Tools"),
KviActionManager::categoryIrc(),
"kvi_bigicon_tools.png",
KVI_SMALLICON_NONE,
NeedsConnection | NeedsContext)
{
}
void KviIrcToolsAction::popupAboutToShow()
{
m_pPopup->clear();
KviAction * a;
a = KviActionManager::instance()->getAction(KVI_COREACTION_SOCKETSPY);
if(a)a->addToPopupMenu(m_pPopup);
a = KviActionManager::instance()->getAction(KVI_COREACTION_SEPARATOR);
if(a)a->addToPopupMenu(m_pPopup);
a = KviActionManager::instance()->getAction(KVI_COREACTION_CHANNELLIST);
if(a)a->addToPopupMenu(m_pPopup);
a = KviActionManager::instance()->getAction(KVI_COREACTION_NETWORKLINKS);
if(a)a->addToPopupMenu(m_pPopup);
}
void KviIrcToolsAction::popupActivated(int id)
{
}
KviIrcOperationsAction::KviIrcOperationsAction(TQObject * pParent)
: KviSubmenuAction(pParent,
TQString(KVI_COREACTION_IRCACTIONS),
TQString(""),
__tr2qs("Irc Actions"),
__tr2qs("Shows a popup menu with some IRC Actions"),
KviActionManager::categoryIrc(),
"kvi_bigicon_actions.png",
KVI_SMALLICON_NONE,
NeedsConnection | NeedsContext)
{
}
void KviIrcOperationsAction::popupAboutToShow()
{
m_pPopup->clear();
KviAction * a;
a = KviActionManager::instance()->getAction(KVI_COREACTION_AWAYBACK);
if(a)a->addToPopupMenu(m_pPopup);
a = KviActionManager::instance()->getAction(KVI_COREACTION_USERMODEMENU);
if(a)a->addToPopupMenu(m_pPopup);
a = KviActionManager::instance()->getAction(KVI_COREACTION_SEPARATOR);
if(a)a->addToPopupMenu(m_pPopup);
a = KviActionManager::instance()->getAction(KVI_COREACTION_CHANNELMENU);
if(a)a->addToPopupMenu(m_pPopup);
a = KviActionManager::instance()->getAction(KVI_COREACTION_NICKNAMEMENU);
if(a)a->addToPopupMenu(m_pPopup);
a = KviActionManager::instance()->getAction(KVI_COREACTION_SEPARATOR);
if(a)a->addToPopupMenu(m_pPopup);
a = KviActionManager::instance()->getAction(KVI_COREACTION_SERVERMENU);
if(a)a->addToPopupMenu(m_pPopup);
}
void KviIrcOperationsAction::popupActivated(int id)
{
}