diff options
| author | 2011-01-01 20:19:56 +0000 | |
|---|---|---|
| committer | 2011-01-01 20:19:56 +0000 | |
| commit | c601b5a27f74b16158adafe429faefbe573e64a2 (patch) | |
| tree | a3cde3206a45628f8ac86e8dfbdab70b20c3a831 /src/modules/options/optw_servers.cpp | |
| parent | probable compilation fix for rijndaled/crypto++ (diff) | |
| download | KVIrc-c601b5a27f74b16158adafe429faefbe573e64a2.tar.gz KVIrc-c601b5a27f74b16158adafe429faefbe573e64a2.tar.bz2 KVIrc-c601b5a27f74b16158adafe429faefbe573e64a2.zip | |
The big rename for modules. Still some details remaining.
git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@5284 17fca916-40b9-46aa-a4ea-0a15b648b75c
Diffstat (limited to 'src/modules/options/optw_servers.cpp')
| -rw-r--r-- | src/modules/options/optw_servers.cpp | 2001 |
1 files changed, 0 insertions, 2001 deletions
diff --git a/src/modules/options/optw_servers.cpp b/src/modules/options/optw_servers.cpp deleted file mode 100644 index 68acd25e2..000000000 --- a/src/modules/options/optw_servers.cpp +++ /dev/null @@ -1,2001 +0,0 @@ -//============================================================================= -// -// File : optw_servers.cpp -// Creation date : Wed Jun 12 2000 03:29:51 by Szymon Stefanek -// -// This file is part of the KVIrc irc client distribution -// Copyright (C) 2000-2010 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 "optw_servers.h" -#include "optw_proxy.h" -#include "optw_nickserv.h" // for the NickServ rule editor - -#include "container.h" - -#include "KviQueryWindow.h" -#include "KviChannelWindow.h" -#include "KviLocale.h" -#include "KviIconManager.h" -#include "KviIrcServerDataBase.h" -#include "KviIpEditor.h" -#include "KviNetUtils.h" -#include "kvi_settings.h" -#include "KviFileDialog.h" -#include "KviConfigurationFile.h" -#include "KviScriptEditor.h" -#include "KviOptions.h" -#include "KviApplication.h" -#include "KviConsoleWindow.h" -#include "KviIrcUrl.h" -#include "KviModule.h" -#include "KviModuleManager.h" -#include "KviModuleExtension.h" -#include "KviMessageBox.h" -#include "KviMexServerImport.h" -#include "KviNickServRuleSet.h" -#include "KviProxy.h" -#include "KviProxyDataBase.h" -#include "KviKvsScript.h" -#include "KviPointerHashTable.h" -#include "KviTalPopupMenu.h" -#include "KviTalToolTip.h" - -#include <QLineEdit> -#include <QCursor> -#include <QValidator> -#include <QMessageBox> -#include <QComboBox> -#include <QButtonGroup> -#include <QInputDialog> -#include <QHeaderView> -#include <QIcon> - -#if defined(COMPILE_ON_WINDOWS) || defined(COMPILE_ON_MINGW) || defined(COMPILE_ON_MAC) - #include <QStyleFactory> - #include <QWindowsStyle> -#endif //COMPILE_ON_WINDOWS || COMPILE_ON_MINGW - -KviIrcNetworkDetailsWidget::KviIrcNetworkDetailsWidget(QWidget * par,KviIrcNetwork * n) - : QDialog(par) -{ - setModal(true); - setObjectName("network_details"); - - m_pOnConnectEditor=0; - m_pOnLoginEditor=0; - - m_pUserEditor=0; - m_pPassEditor=0; - m_pNickEditor=0; - m_pRealEditor=0; - m_pDescEditor=0; - - m_pEncodingEditor=0; - m_pTextEncodingEditor=0; - - m_pAutoConnectCheck=0; - - m_pNickServTreeWidget=0; - m_pNickServCheck=0; - m_pAddRuleButton=0; - m_pDelRuleButton=0; - m_pEditRuleButton=0; - - m_pChannelListSelector=0; - - QGridLayout * g = new QGridLayout(this); - - setWindowTitle(__tr2qs_ctx("Network Details","options")); - setWindowIcon(QIcon(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_WORLD)))); - - QString szTmp = "<font size=\"+1\"><b>"; - szTmp += n->name(); - szTmp += "</b></font>"; - - QLabel * l = new QLabel(szTmp,this); - l->setFrameStyle(QFrame::Raised | QFrame::StyledPanel); - l->setAlignment(Qt::AlignCenter); - g->addWidget(l,0,0,1,4); - - l->setMinimumWidth(200); - - l = new QLabel(__tr2qs_ctx("Description:","options"),this); - g->addWidget(l,1,0); - m_pDescEditor = new QLineEdit(this); - g->addWidget(m_pDescEditor,1,1,1,3); - - m_pDescEditor->setText(n->description()); - KviTalToolTip::add(m_pDescEditor,__tr2qs_ctx("<center>Put here a brief description of the network.</center>","options")); - - // Identity tab - - QTabWidget * tw = new QTabWidget(this); - g->addWidget(tw,2,0,1,4); - - QWidget * tab = new QWidget(tw); - QGridLayout * gl = new QGridLayout(tab); - - KviTalGroupBox *gbox = new KviTalGroupBox(Qt::Horizontal,__tr2qs_ctx("Properties","options"),tab); - gl->addWidget(gbox,0,0,1,2); - - QGridLayout * pPropertiesBoxLayout = new QGridLayout(); - gbox->setLayout(pPropertiesBoxLayout); - - l = new QLabel(__tr2qs_ctx("Username:","options"),gbox); - pPropertiesBoxLayout->addWidget(l,0,0); - - m_pUserEditor = new QLineEdit(gbox); - m_pUserEditor->setText(n->userName()); - pPropertiesBoxLayout->addWidget(m_pUserEditor,0,1); - - KviTalToolTip::add(m_pUserEditor,__tr2qs_ctx("<center>This is the <b>username</b> that KVIrc will use to login to servers on this network.\n" \ - "If this field is left empty (most common case), KVIrc will use the default username " \ - "specified in the \"Identity\" options tab.</center>","options")); - - l = new QLabel(__tr2qs_ctx("Password:","options"),gbox); - pPropertiesBoxLayout->addWidget(l,1,0); - - m_pPassEditor = new KviPasswordLineEdit(gbox); - m_pPassEditor->setText(n->password()); - pPropertiesBoxLayout->addWidget(m_pPassEditor,1,1); - - KviTalToolTip::add(m_pPassEditor,__tr2qs_ctx("<center>If this network requires a password, put it in this field, otherwise leave it empty.</center>","options")); - - l = new QLabel(__tr2qs_ctx("Nickname:","options"),gbox); - pPropertiesBoxLayout->addWidget(l,2,0); - - m_pNickEditor = new QLineEdit(gbox); - QValidator * v = new QRegExpValidator(QRegExp("[^-0-9 ][^ ]*",Qt::CaseSensitive),gbox); - m_pNickEditor->setValidator(v); - m_pNickEditor->setText(n->nickName()); - pPropertiesBoxLayout->addWidget(m_pNickEditor,2,1); - - - KviTalToolTip::add(m_pNickEditor,__tr2qs_ctx("<center>You can specify a \"special\" <b>nickname</b> that will be used to log in to the servers on this network.<br>" \ - "If this field is left empty (most common case), the default nickname (specified in the \"Identity\" settings) will be used.</center>","options")); - - l = new QLabel(__tr2qs_ctx("Real name:","options"),gbox); - pPropertiesBoxLayout->addWidget(l,3,0); - - m_pRealEditor = new QLineEdit(gbox); - m_pRealEditor->setText(n->realName()); - pPropertiesBoxLayout->addWidget(m_pRealEditor,3,1); - - KviTalToolTip::add(m_pRealEditor,__tr2qs_ctx("<center>You can specify a \"special\" <b>real name</b> that will be used to login with the servers on this network.<br>" \ - "If you leave this field empty (most common case), the default \"real name\" (specified in the \"Identity\" settings) will be used.</center>","options")); - - //server encoding - - l = new QLabel(__tr2qs_ctx("Server Encoding:","options"),tab); - gl->addWidget(l,1,0); - m_pEncodingEditor = new QComboBox(tab); - m_pEncodingEditor->setDuplicatesEnabled(false); - gl->addWidget(m_pEncodingEditor,1,1); - KviTalToolTip::add(m_pEncodingEditor,__tr2qs_ctx("<center>This box allows you to choose the preferred encoding for the servers in this network. " \ - "This encoding will be used for server specific needs, like referencing nicknames and channel names." \ - "If you choose \"Use System Encoding\" then the encoding will be set to the systemwide " \ - "value that you choose in the \"Encoding\" page of the options dialog.</center>","options")); - - //text encoding - - l = new QLabel(__tr2qs_ctx("Text Encoding:","options"),tab); - gl->addWidget(l,2,0); - m_pTextEncodingEditor = new QComboBox(tab); - m_pTextEncodingEditor->setDuplicatesEnabled(false); - gl->addWidget(m_pTextEncodingEditor,2,1); - KviTalToolTip::add(m_pTextEncodingEditor,__tr2qs_ctx("<center>This box allows you to choose the preferred encoding for the servers in this network. " \ - "This encoding will be used as the default for text messages." \ - "If you choose \"Use System Encoding\" then the encoding will be set to the systemwide " \ - "value that you choose in the \"Encoding\" page of the options dialog.</center>","options")); - - //common between server encoding and text encoding - - int i = 0; - int srvcurrent = 0, txtcurrent=0; - KviLocale::EncodingDescription * d = KviLocale::encodingDescription(i); - QString tmp; - m_pEncodingEditor->addItem(__tr2qs_ctx("Use System Encoding","options")); - m_pTextEncodingEditor->addItem(__tr2qs_ctx("Use System Encoding","options")); - while(d->szName) - { - KviQString::sprintf(tmp,"%s (%s)",d->szName,d->szDescription); - m_pEncodingEditor->insertItem(m_pEncodingEditor->count(),tmp); - m_pTextEncodingEditor->insertItem(m_pTextEncodingEditor->count(),tmp); - if(KviQString::equalCI(d->szName,n->encoding()))srvcurrent = i + 1; - if(KviQString::equalCI(d->szName,n->textEncoding()))txtcurrent = i + 1; - i = i + 1; - d = KviLocale::encodingDescription(i); - } - - m_pEncodingEditor->setCurrentIndex(srvcurrent); - m_pTextEncodingEditor->setCurrentIndex(txtcurrent); - - - m_pAutoConnectCheck = new QCheckBox(__tr2qs_ctx("Connect to this network at startup","options"),tab); - m_pAutoConnectCheck->setChecked(n->autoConnect()); - gl->addWidget(m_pAutoConnectCheck,3,0,1,2); - - KviTalToolTip::add(m_pAutoConnectCheck,__tr2qs_ctx("<center>This option will cause KVIrc to automatically connect to this network at startup</center>","options")); - - - l = new QLabel("",tab); - gl->addWidget(l,4,0); - - gl->setRowStretch(4,1); - gl->setColumnStretch(1,1); - - tw->addTab(tab,__tr2qs_ctx("General","options")); - - // after login join channels - tab = new QWidget(tw); - - gl = new QGridLayout(tab); - - if(n->autoJoinChannelList()) - m_lstChannels = *(n->autoJoinChannelList()); - m_pChannelListSelector = new KviChannelListSelector(tab, - __tr2qs_ctx("Channels to join automatically upon connect:","options"),&m_lstChannels,true); - - KviTalToolTip::add(m_pChannelListSelector,__tr2qs_ctx("<center>Here you can set a list of channels to be joined automatically " \ - "after a connection to a server in this network has been established. To add a channel, type its name in the " \ - "text input below and click \"<b>Add</b>\".</center>","options")); - - gl->addWidget(m_pChannelListSelector,0,0); - - tw->addTab(tab,__tr2qs_ctx("Join Channels","options")); - - // after connect execute - tab = new QWidget(tw); - gl = new QGridLayout(tab); - - m_pOnConnectEditor = KviScriptEditor::createInstance(tab); - gl->addWidget(m_pOnConnectEditor,0,0); - m_pOnConnectEditor->setText(n->onConnectCommand()); - m_pOnConnectEditor->setMinimumHeight(150); - KviTalToolTip::add(m_pOnConnectEditor,__tr2qs_ctx("<center>The following commands will be executed after a connection to a server in this network has been established.<br>" \ - "<b>Important:</b> Enter commands <b>without</b> a preceding slash (e.g. <tt>quote pass secret</tt> instead of <tt>/quote pass secret</tt>).<br>"\ - "KVIrc will first send the USER command, then eventually PASS and NICK and then execute this " \ - "command sequence.</center>","options")); - - tw->addTab(tab,__tr2qs_ctx("On Connect","options")); - - - // after login execute - tab = new QWidget(tw); - gl = new QGridLayout(tab); - - m_pOnLoginEditor = KviScriptEditor::createInstance(tab); - gl->addWidget(m_pOnLoginEditor,0,0); - m_pOnLoginEditor->setText(n->onLoginCommand()); - - m_pOnLoginEditor->setMinimumHeight(150); - - KviTalToolTip::add(m_pOnLoginEditor, - __tr2qs_ctx("<center>The following commands will be executed after a successful login to a server in this network.<br>" \ - "<b>Important:</b> Enter commands <b>without</b> a preceding slash (e.g. <tt>quote privatelog</tt> instead of <tt>/quote privatelog</tt>).<br>" - "This is useful for automatically opening queries, setting variables, etc.</center>","options")); - - tw->addTab(tab,__tr2qs_ctx("On Login","options")); - - - // nick serv rules - - tab = new QWidget(tw); - gl = new QGridLayout(tab); - - KviNickServRuleSet * rs = n->nickServRuleSet(); - bool bNickServEnabled = rs ? (rs->isEnabled() && !rs->isEmpty()) : false; - - m_pNickServCheck = new QCheckBox(__tr2qs_ctx("Enable NickServ Identification","options"),tab); - gl->addWidget(m_pNickServCheck,0,0,1,3); - - KviTalToolTip::add(m_pNickServCheck, - __tr2qs_ctx("This check enables the automatic identification with NickServ","options")); - m_pNickServCheck->setChecked(bNickServEnabled); - - m_pNickServTreeWidget = new QTreeWidget(tab); - m_pNickServTreeWidget->setSelectionMode(QAbstractItemView::SingleSelection); - m_pNickServTreeWidget->setAllColumnsShowFocus(true); - m_pNickServTreeWidget->setColumnCount(4); - QStringList columnLabels; - columnLabels.append(__tr2qs_ctx("Nickname","options")); - columnLabels.append(__tr2qs_ctx("NickServ Mask","options")); - columnLabels.append(__tr2qs_ctx("NickServ Request Mask","options")); - columnLabels.append(__tr2qs_ctx("Identify Command","options")); - m_pNickServTreeWidget->setHeaderLabels(columnLabels); - connect(m_pNickServTreeWidget,SIGNAL(itemSelectionChanged()),this,SLOT(enableDisableNickServControls())); - gl->addWidget(m_pNickServTreeWidget,1,0,1,3); - - KviTalToolTip::add(m_pNickServTreeWidget, - __tr2qs_ctx("<center>This is a list of NickServ identification rules. " \ - "KVIrc will use them to model its automatic interaction with NickServ on this network.<br>" \ - "Please be aware that this feature can cause your NickServ passwords to be stolen " \ - "if used improperly. Make sure that you fully understand the NickServ authentication protocol.<br>" \ - "In other words, be sure to know what you're doing.<br>" \ - "Also note that the password that you provide is stored as <b>PLAIN TEXT</b>.</center>","options")); - - m_pAddRuleButton = new QPushButton(__tr2qs_ctx("Add Rule","options"),tab); - connect(m_pAddRuleButton,SIGNAL(clicked()),this,SLOT(addNickServRule())); - gl->addWidget(m_pAddRuleButton,2,0); - - - m_pEditRuleButton = new QPushButton(__tr2qs_ctx("Edit Rule","options"),tab); - connect(m_pEditRuleButton,SIGNAL(clicked()),this,SLOT(editNickServRule())); - gl->addWidget(m_pEditRuleButton,2,1); - - m_pDelRuleButton = new QPushButton(__tr2qs_ctx("Delete Rule","options"),tab); - connect(m_pDelRuleButton,SIGNAL(clicked()),this,SLOT(delNickServRule())); - gl->addWidget(m_pDelRuleButton,2,2); - - connect(m_pNickServCheck,SIGNAL(toggled(bool)),this,SLOT(enableDisableNickServControls())); - - if(rs && rs->rules()) - { - KviPointerList<KviNickServRule> * ll = rs->rules(); - for(KviNickServRule * rule = ll->first();rule;rule = ll->next()) - { - QTreeWidgetItem* it = new QTreeWidgetItem(m_pNickServTreeWidget); - it->setText(0,rule->registeredNick()); - it->setText(1,rule->nickServMask()); - it->setText(2,rule->messageRegexp()); - it->setText(3,rule->identifyCommand()); - } - } - - enableDisableNickServControls(); - - gl->setRowStretch(1,1); - - tw->addTab(tab,__tr2qs_ctx("NickServ","options")); - - QPushButton * b = new QPushButton(__tr2qs_ctx("&OK","options"),this); - b->setMinimumWidth(80); - g->addWidget(b,3,2); - b->setDefault(true); - connect(b,SIGNAL(clicked()),this,SLOT(accept())); - - b = new QPushButton(__tr2qs_ctx("Cancel","options"),this); - g->addWidget(b,3,3); - b->setMinimumWidth(80); - connect(b,SIGNAL(clicked()),this,SLOT(reject())); - - g->setRowStretch(2,1); - g->setColumnStretch(1,1); - - tw->setMinimumWidth(375); -} - - -KviIrcNetworkDetailsWidget::~KviIrcNetworkDetailsWidget() -{ - if(m_pOnConnectEditor) KviScriptEditor::destroyInstance(m_pOnConnectEditor); - if(m_pOnLoginEditor) KviScriptEditor::destroyInstance(m_pOnLoginEditor); -} - -void KviIrcNetworkDetailsWidget::editNickServRule() -{ - QTreeWidgetItem * it = (QTreeWidgetItem *) m_pNickServTreeWidget->currentItem(); - if(!it)return; - KviNickServRule r(it->text(0),it->text(1),it->text(2),it->text(3)); - KviNickServRuleEditor ed(this,false); - if(ed.editRule(&r)) - { - it->setText(0,r.registeredNick()); - it->setText(1,r.nickServMask()); - it->setText(2,r.messageRegexp()); - it->setText(3,r.identifyCommand()); - } -} - -void KviIrcNetworkDetailsWidget::addNickServRule() -{ - KviNickServRule r; - KviNickServRuleEditor ed(this,false); - if(ed.editRule(&r)) - { - QTreeWidgetItem *it = new QTreeWidgetItem(m_pNickServTreeWidget); - it->setText(0,r.registeredNick()); - it->setText(1,r.nickServMask()); - it->setText(2,r.messageRegexp()); - it->setText(3,r.identifyCommand()); - } -} - -void KviIrcNetworkDetailsWidget::delNickServRule() -{ - QTreeWidgetItem * it = (QTreeWidgetItem *)m_pNickServTreeWidget->currentItem(); - if(!it)return; - delete it; - enableDisableNickServControls(); -} - -void KviIrcNetworkDetailsWidget::enableDisableNickServControls() -{ - bool bEnabled = m_pNickServCheck->isChecked(); - m_pNickServTreeWidget->setEnabled(bEnabled); - m_pAddRuleButton->setEnabled(bEnabled); - bEnabled = bEnabled && (m_pNickServTreeWidget->topLevelItemCount()) && m_pNickServTreeWidget->currentItem(); - m_pDelRuleButton->setEnabled(bEnabled); - m_pEditRuleButton->setEnabled(bEnabled); -} - -void KviIrcNetworkDetailsWidget::fillData(KviIrcNetwork * n) -{ - n->setUserName(m_pUserEditor->text()); - n->setPassword(m_pPassEditor->text()); - n->setNickName(m_pNickEditor->text()); - n->setRealName(m_pRealEditor->text()); - n->setDescription(m_pDescEditor->text()); - if(m_pAutoConnectCheck) - n->setAutoConnect(m_pAutoConnectCheck->isChecked()); - if(m_pEncodingEditor) - { - if(m_pEncodingEditor->currentIndex() <= 0) - { - n->setEncoding(QString()); - } else { - KviLocale::EncodingDescription * d = KviLocale::encodingDescription(m_pEncodingEditor->currentIndex() - 1); - n->setEncoding(d->szName); - } - } - if(m_pTextEncodingEditor) - { - if(m_pTextEncodingEditor->currentIndex() <= 0) - { - n->setTextEncoding(QString()); - } else { - KviLocale::EncodingDescription * dd = KviLocale::encodingDescription(m_pTextEncodingEditor->currentIndex() - 1); - n->setTextEncoding(dd->szName); - } - } - if(m_pChannelListSelector) - m_pChannelListSelector->commit(); - if(m_lstChannels.isEmpty())n->setAutoJoinChannelList(0); - else n->setAutoJoinChannelList(new QStringList(m_lstChannels)); - if(m_pNickServTreeWidget) - { - if(m_pNickServTreeWidget->topLevelItemCount() > 0) - { - KviNickServRuleSet * rs = KviNickServRuleSet::createInstance(); - rs->setEnabled(m_pNickServCheck->isChecked()); - QTreeWidgetItem * it; - for (int i=0;i<m_pNickServTreeWidget->topLevelItemCount();i++) - { - it=(QTreeWidgetItem *) m_pNickServTreeWidget->topLevelItem(i); - rs->addRule(KviNickServRule::createInstance(it->text(0),it->text(1),it->text(2),it->text(3))); - } - n->setNickServRuleSet(rs); - } else n->setNickServRuleSet(0); - } - if(m_pOnConnectEditor) - { - QString tmp; - m_pOnConnectEditor->getText(tmp); - n->setOnConnectCommand(tmp); - } - if(m_pOnLoginEditor) - { - QString tmp; - m_pOnLoginEditor->getText(tmp); - n->setOnLoginCommand(tmp); - } -} - - -KviIrcServerDetailsWidget::KviIrcServerDetailsWidget(QWidget * par,KviIrcServer * s) -: QDialog(par) -{ - setModal(true); - setObjectName("server_details"); - - m_szHostname = s->hostName(); - QGridLayout * g = new QGridLayout(this); - - setWindowTitle(__tr2qs_ctx("Server Details","options")); - setWindowIcon(QIcon(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_SERVER)))); - - m_pHeaderLabel = new QLabel("",this); // the text will be set later - m_pHeaderLabel->setFrameStyle(QFrame::Raised | QFrame::StyledPanel); - m_pHeaderLabel->setAlignment(Qt::AlignCenter); - g->addWidget(m_pHeaderLabel,0,0,1,4); - m_pHeaderLabel->setMinimumWidth(200); - - QLabel * l = new QLabel(__tr2qs_ctx("Description:","options"),this); - g->addWidget(l,1,0); - m_pDescEditor = new QLineEdit(this); - g->addWidget(m_pDescEditor,1,1,1,3); - - m_pDescEditor->setText(s->description()); - KviTalToolTip::add(m_pDescEditor,__tr2qs_ctx("<center>This is a brief description of this server. " \ - "This field has no restrictions but many server lists use it to describe the server's physical location</center>","options")); - - // Identity tab - - QTabWidget * tw = new QTabWidget(this); - g->addWidget(tw,2,0,1,4); - - QWidget * tab = new QWidget(tw); - QGridLayout * gl = new QGridLayout(tab); - - KviTalGroupBox *gbox = new KviTalGroupBox(Qt::Horizontal,__tr2qs_ctx("Properties","options"),tab); - gl->addWidget(gbox,0,0); - - QGridLayout * pPropertiesBoxLayout = new QGridLayout(); - gbox->setLayout(pPropertiesBoxLayout); - - l = new QLabel(__tr2qs_ctx("Username:","options"),gbox); - pPropertiesBoxLayout->addWidget(l,0,0); - - m_pUserEditor = new QLineEdit(gbox); - m_pUserEditor->setText(s->userName()); - pPropertiesBoxLayout->addWidget(m_pUserEditor,0,1); - - KviTalToolTip::add(m_pUserEditor,__tr2qs_ctx("<center>This is the <b>username</b> that KVIrc will use to login to this server.\n" \ - "If this field is left empty (most common case), KVIrc will first look if an username is specified " \ - "for the network that this server belongs to, and if that is empty then KVIrc will use the default username " \ - "specified in the \"Identity\" options tab.</center>","options")); - - l = new QLabel(__tr2qs_ctx("Password:","options"),gbox); - pPropertiesBoxLayout->addWidget(l,1,0); - - m_pPassEditor = new KviPasswordLineEdit(gbox); - m_pPassEditor->setText(s->password()); - pPropertiesBoxLayout->addWidget(m_pPassEditor,1,1); - - KviTalToolTip::add(m_pPassEditor,__tr2qs_ctx("<center>If this server requires a password, put it in this field, otherwise leave it empty.</center>","options")); - - l = new QLabel(__tr2qs_ctx("Nickname:","options"),gbox); - pPropertiesBoxLayout->addWidget(l,2,0); - - m_pNickEditor = new QLineEdit(gbox); - QValidator * v = new QRegExpValidator(QRegExp("[^-0-9 ][^ ]*"),gbox); - m_pNickEditor->setValidator(v); - m_pNickEditor->setText(s->nickName()); - pPropertiesBoxLayout->addWidget(m_pNickEditor,2,1); - - KviTalToolTip::add(m_pNickEditor,__tr2qs_ctx("<center>You can specify a \"special\" <b>nickname</b> that will be used to log in to this server.<br>" \ - "If this field is left empty (most common case), KVIrc will first look if a nickname is specified " \ - "for the network that this server belongs to, and if that is empty then the default nickname (specified in the \"Identity\" settings) will be used.</center>","options")); - - l = new QLabel(__tr2qs_ctx("Real name:","options"),gbox); - pPropertiesBoxLayout->addWidget(l,3,0); - - m_pRealEditor = new QLineEdit(gbox); - m_pRealEditor->setText(s->realName()); - pPropertiesBoxLayout->addWidget(m_pRealEditor,3,1); - - KviTalToolTip::add(m_pRealEditor,__tr2qs_ctx("<center>You can specify a \"special\" <b>real name</b> that will be used to login with this server.<br>" \ - "If you leave this field empty (most common case), KVIrc will first look if a real name is specified " \ - "for the network that this server belongs to, and if that is empty the default \"real name\" (specified in the \"Identity\" settings) will be used.</center>","options")); - - - - gbox = new KviTalGroupBox(Qt::Horizontal,__tr2qs_ctx("User Mode","options"),tab); - gl->addWidget(gbox,1,0); - - m_pUseDefaultInitUMode = new QCheckBox(__tr2qs_ctx("Use default user mode","options"),gbox); - KviTalToolTip::add(m_pUseDefaultInitUMode,__tr2qs_ctx("<center>If this is enabled, the global initial <b>user mode</b> (configured from"\ - " the identity dialog) will be used. If disabled, you can configure an initial user mode for this server","options")); - bool bHasUmode = !(s->initUMode().isEmpty()); - KviCString szDefUMode = KVI_OPTION_STRING(KviOption_stringDefaultUserMode); - m_pUseDefaultInitUMode->setChecked(!bHasUmode); - connect(m_pUseDefaultInitUMode,SIGNAL(toggled(bool)),this,SLOT(useDefaultInitUModeToggled(bool))); - - m_pIMode = new QCheckBox(__tr2qs_ctx("Invisible (+i)","options"),gbox); - m_pIMode->setEnabled(bHasUmode); - m_pIMode->setChecked(bHasUmode ? s->initUMode().contains('i',Qt::CaseInsensitive) : szDefUMode.contains('i',Qt::CaseInsensitive)); - - m_pSMode = new QCheckBox(__tr2qs_ctx("Server notices (+s)","options"),gbox); - m_pSMode->setEnabled(bHasUmode); - m_pSMode->setChecked(bHasUmode ? s->initUMode().contains('s',Qt::CaseInsensitive) : szDefUMode.contains('s',Qt::CaseInsensitive)); - - m_pWMode = new QCheckBox(__tr2qs_ctx("Wallops (+w)","options"),gbox); - m_pWMode->setEnabled(bHasUmode); - m_pWMode->setChecked(bHasUmode ? s->initUMode().contains('w',Qt::CaseInsensitive) : szDefUMode.contains('w',Qt::CaseInsensitive)); - - l = new QLabel("",tab); - gl->addWidget(l,2,0); - - gl->setRowStretch(2,1); - - tw->addTab(tab,*(g_pIconManager->getSmallIcon(KVI_SMALLICON_WHO)),__tr2qs_ctx("Identity","options")); - - // Connection tab - - int iRow = 0; - - tab = new QWidget(tw); - gl = new QGridLayout(tab); - - l = new QLabel(__tr2qs_ctx("Port:","options"),tab); - gl->addWidget(l,iRow,0); - - - m_pPortEditor = new QLineEdit(tab); - gl->addWidget(m_pPortEditor,iRow,1); - QString tmpz; - tmpz.setNum(s->port()); - m_pPortEditor->setText(tmpz); - KviTalToolTip::add(m_pPortEditor,__tr2qs_ctx("<center>This is the default <b>port</b> that this server will be contacted on.<br>Usually <b>6667</b> is OK.</center>","options")); - connect(m_pPortEditor,SIGNAL(textChanged(const QString &)),this,SLOT(portEditorTextChanged(const QString &))); - - iRow++; - - l = new QLabel(__tr2qs_ctx("IP address:","options"),tab); - gl->addWidget(l,iRow,0); - m_pIpEditor = new KviIpEditor(tab,KviIpEditor::IPv4); - gl->addWidget(m_pIpEditor,iRow,1); - KviTalToolTip::add(m_pIpEditor,__tr2qs_ctx("<center>This is the <b>IP address</b> of this server, it is here for caching purposes.<br>" \ - "If you leave this field empty, KVIrc will fill it in the first time it connects to the server. " \ - "If you enable the \"cache IP address\" option below, KVIrc will use it as a \"cached result\" " \ - "and avoid looking it up again.</center>","options")); -#ifdef COMPILE_IPV6_SUPPORT - m_pIpEditor->setAddressType(s->isIPv6() ? KviIpEditor::IPv6 : KviIpEditor::IPv4); -#else - m_pIpEditor->setAddressType(KviIpEditor::IPv4); -#endif - - if(!m_pIpEditor->setAddress(s->m_szIp)) - { -#ifdef COMPILE_IPV6_SUPPORT - m_pIpEditor->setAddress(s->isIPv6() ? "0:0:0:0:0:0:0:0" : "0.0.0.0"); -#else - m_pIpEditor->setAddress("0.0.0.0"); -#endif - } - - iRow++; - - QGridLayout * pCheckBoxLayout = new QGridLayout(); - gl->addLayout(pCheckBoxLayout,iRow,0,1,2); - - m_pCacheIpCheck = new QCheckBox(__tr2qs_ctx("Cache IP address","options"),tab); - pCheckBoxLayout->addWidget(m_pCacheIpCheck,0,0); - - KviTalToolTip::add(m_pCacheIpCheck,__tr2qs_ctx("<center>This check will enable <b>IP address caching</b> for this server:<br>" \ - "DNS lookups can be time-consuming and might be blocking on some platforms; " \ - "this option will cause KVIrc to look up the server hostname only once.<br><br> " \ - "Advanced: you can also use this option to force a certain server name to resolve " \ - "to a fixed ip address when either the dns for that server is temporairly " \ - "unreachable or you want to avoid the round-robin lookups.</center>","options")); - m_pCacheIpCheck->setChecked(s->cacheIp()); - - - - - m_pUseAutoConnect = new QCheckBox(__tr2qs_ctx("Connect to this server at startup","options"),tab); - m_pUseAutoConnect->setChecked(s->autoConnect()); - - pCheckBoxLayout->addWidget(m_pUseAutoConnect,0,1); - - KviTalToolTip::add(m_pUseAutoConnect,__tr2qs_ctx("<center>This option will cause KVIrc to connect to the IRC server when it is started.</center>","options")); - - - - m_pUseIPV6Check = new QCheckBox(__tr2qs_ctx("Use IPv6 protocol","options"),tab); - pCheckBoxLayout->addWidget(m_pUseIPV6Check,1,0); - -#ifdef COMPILE_IPV6_SUPPORT - m_pUseIPV6Check->setChecked(s->isIPv6()); -#else - m_pUseIPV6Check->setEnabled(false); -#endif - connect(m_pUseIPV6Check,SIGNAL(toggled(bool)),this,SLOT(useIPV6CheckToggled(bool))); - - KviTalToolTip::add(m_pUseIPV6Check,__tr2qs_ctx("<center>This check identifies IPv6 servers.<br>If enabled, KVIrc will attempt to use the IPv6 protocol " \ - "(thus your OS <b>must</b> have a working IPv6 stack and you <b>must</b> have an IPv6 connection).</center>","options")); - - - - - m_pUseSSLCheck = new QCheckBox(__tr2qs_ctx("Use SSL protocol","options"),tab); - pCheckBoxLayout->addWidget(m_pUseSSLCheck,1,1); - - KviTalToolTip::add(m_pUseSSLCheck,__tr2qs_ctx("<center>This check will cause the connection to use the <b>Secure Socket Layer</b> " \ - "encryption support. Obviously, this server must have support for this, too. :)</center>","options")); -#ifndef COMPILE_SSL_SUPPORT - m_pUseSSLCheck->setEnabled(false); -#endif - m_pUseSSLCheck->setChecked(s->useSSL()); - - - iRow++; - - - //server encoding - - l = new QLabel(__tr2qs_ctx("Protocol Encoding:","options"),tab); - gl->addWidget(l,iRow,0); - m_pEncodingEditor = new QComboBox(tab); - m_pEncodingEditor->setDuplicatesEnabled(false); - gl->addWidget(m_pEncodingEditor,iRow,1); - KviTalToolTip::add(m_pEncodingEditor,__tr2qs_ctx("<center>This box allows you to choose the preferred encoding for this server. " \ - "This encoding will be used for server specific needs, like referencing nicknames and channel names." \ - "If you choose \"Use Network Encoding\" then the encoding will be inherited from the " \ - "network that this server belongs to.</center>","options")); - - iRow++; - - //text encoding - - l = new QLabel(__tr2qs_ctx("Text Encoding:","options"),tab); - gl->addWidget(l,iRow,0); - m_pTextEncodingEditor = new QComboBox(tab); - m_pTextEncodingEditor->setDuplicatesEnabled(false); - gl->addWidget(m_pTextEncodingEditor,iRow,1); - KviTalToolTip::add(m_pTextEncodingEditor,__tr2qs_ctx("<center>This box allows you to choose the preferred encoding for this server. " \ - "This encoding will be used as the default for text messages." \ - "If you choose \"Use Network Encoding\" then the encoding will be inherited from the " \ - "network that this server belongs to.</center>","options")); - - //common between server encoding and text encoding - - int i = 0; - int srvcurrent = 0, txtcurrent=0; - KviLocale::EncodingDescription * d = KviLocale::encodingDescription(i); - QString tmp; - m_pEncodingEditor->addItem(__tr2qs_ctx("Use Network Encoding","options")); - m_pTextEncodingEditor->addItem(__tr2qs_ctx("Use Network Encoding","options")); - while(d->szName) - { - KviQString::sprintf(tmp,"%s (%s)",d->szName,d->szDescription); - m_pEncodingEditor->insertItem(m_pEncodingEditor->count(),tmp); - m_pTextEncodingEditor->insertItem(m_pTextEncodingEditor->count(),tmp); - if(KviQString::equalCI(d->szName,s->encoding()))srvcurrent = i + 1; - if(KviQString::equalCI(d->szName,s->textEncoding()))txtcurrent = i + 1; - i = i + 1; - d = KviLocale::encodingDescription(i); - } - - m_pEncodingEditor->setCurrentIndex(srvcurrent); - m_pTextEncodingEditor->setCurrentIndex(txtcurrent); - - iRow++; - - l = new QLabel(__tr2qs_ctx("Proxy server:","options"),tab); - gl->addWidget(l,iRow,0); - m_pProxyEditor = new QComboBox(tab); - gl->addWidget(m_pProxyEditor,iRow,1); - KviTalToolTip::add(m_pProxyEditor,__tr2qs_ctx("<center>This is the <b>proxy</b> that KVIrc will use to connect to this server.\n" \ - "If this field is set in \"Default\" KVirc will use global proxy settings, if it is set in \"Direct connection\" " \ - "KVirc will connect to this server without proxy. You can define new proxy server in global options' \"Proxy servers\" menu.</center>","options")); - - m_pProxyEditor->addItem(__tr2qs_ctx("Default","options")); - m_pProxyEditor->addItem(__tr2qs_ctx("Direct connection","options")); - - KviPointerList<KviProxy> * proxylist = g_pProxyDataBase->proxyList(); - for(KviProxy * p = proxylist->first();p;p = proxylist->next()) - { - m_pProxyEditor->insertItem(m_pProxyEditor->count(),QString("%1:%2").arg(p->hostname()).arg(p->port())); - } - if(m_pProxyEditor->count() > (s->proxy()+2)) - m_pProxyEditor->setCurrentIndex(s->proxy()+2); - - iRow++; - - - - - l = new QLabel("",tab); - gl->addWidget(l,iRow,0,1,2); - - gl->setRowStretch(iRow,1); - - tw->addTab(tab,*(g_pIconManager->getSmallIcon(KVI_SMALLICON_SOCKETWARNING)),__tr2qs_ctx("Connection","options")); - - // after login join channels - tab = new QWidget(tw); - - gl = new QGridLayout(tab); - - if(s->autoJoinChannelList()) - m_lstChannels = *(s->autoJoinChannelList()); - m_pChannelListSelector = new KviChannelListSelector(tab, - __tr2qs_ctx("Channels to join automatically upon connect:","options"),&m_lstChannels,true); - KviTalToolTip::add(m_pChannelListSelector,__tr2qs_ctx("<center>Here you can set a list of channels to be joined automatically " \ - "after a connection to this server has been established. To add a channel, type its name in the " \ - "text input below and click \"<b>Add</b>\".</center>","options")); - gl->addWidget(m_pChannelListSelector,0,0); - - tw->addTab(tab,*(g_pIconManager->getSmallIcon(KVI_SMALLICON_CHANNEL)),__tr2qs_ctx("Join Channels","options")); - - // after connect execute - tab = new QWidget(tw); - gl = new QGridLayout(tab); - - - m_pOnConnectEditor = KviScriptEditor::createInstance(tab); - gl->addWidget(m_pOnConnectEditor,0,0); - m_pOnConnectEditor->setText(s->onConnectCommand()); - m_pOnConnectEditor->setMinimumHeight(150); - KviTalToolTip::add(m_pOnConnectEditor,__tr2qs_ctx("<center>The following commands will be executed after a connection has been established.<br>" \ - "<b>Important:</b> Enter commands <b>without</b> a preceding slash (e.g. <tt>quote pass secret</tt> instead of <tt>/quote pass secret</tt>).<br>"\ - "KVIrc will first send the USER command, then eventually PASS and NICK and then execute this " \ - "command sequence.<br>This is particularly useful for IRC bouncers that require login commands.</center>","options")); - - tw->addTab(tab,__tr2qs_ctx("On Connect","options")); - // after login execute - - tab = new QWidget(tw); - gl = new QGridLayout(tab - ); - - m_pOnLoginEditor = KviScriptEditor::createInstance(tab); - gl->addWidget(m_pOnLoginEditor,0,0); - m_pOnLoginEditor->setText(s->onLoginCommand()); - - m_pOnLoginEditor->setMinimumHeight(150); - - KviTalToolTip::add(m_pOnLoginEditor, - __tr2qs_ctx("<center>The following commands will be executed after a successful login to this server.<br>" \ - "<b>Important:</b> Enter commands <b>without</b> a preceding slash (e.g. <tt>quote privatelog</tt> instead of <tt>/quote privatelog</tt>).<br>" - "This is useful for automatically opening queries, setting variables, etc.</center>","options")); - - tw->addTab(tab,__tr2qs_ctx("On Login","options")); - - - - // Advanced tab - - - tab = new QWidget(tw); - gl = new QGridLayout(tab); - - iRow = 0; - - QGroupBox * pCapGroup = new QGroupBox(__tr2qs_ctx("Extended Capabilities","options"),tab); - gl->addWidget(pCapGroup,iRow,0,1,2); - - QGridLayout * pCapLayout = new QGridLayout(); - pCapGroup->setLayout(pCapLayout); - - m_pEnableCAPCheck = new QCheckBox(__tr2qs_ctx("Query extended capabilities on connect","options"),tab); - pCapLayout->addWidget(m_pEnableCAPCheck,0,0); - - KviTalToolTip::add(m_pEnableCAPCheck,__tr2qs_ctx("<center>This check will cause the connection to use the <b>Extended Capability</b> " \ - "support. Obviously, this server must have support for this, too. Disable this for irc bouncers.</center>","options")); - m_pEnableCAPCheck->setChecked(s->enabledCAP()); - - - - m_pEnableSTARTTLSCheck = new QCheckBox(__tr2qs_ctx("Switch to SSL/TLS by using the STARTTLS extension","options"),tab); - pCapLayout->addWidget(m_pEnableSTARTTLSCheck,1,0); - - m_pEnableSTARTTLSCheck->setEnabled(s->enabledCAP()); - QObject::connect(m_pEnableCAPCheck,SIGNAL(toggled(bool)),m_pEnableSTARTTLSCheck,SLOT(setEnabled(bool))); - KviTalToolTip::add(m_pEnableSTARTTLSCheck,__tr2qs_ctx("<center>This check enables the use of the <b>Transport Layer Security</b> " \ - "protocol. If you enable the proper global option in the Connection/SSL tab, the TLS protocol will be used for this server if available.</center>","options")); -#ifndef COMPILE_SSL_SUPPORT - m_pEnableSTARTTLSCheck->setEnabled(false); -#endif - m_pEnableSTARTTLSCheck->setChecked(s->enabledCAP() && s->enabledSTARTTLS()); - - - QGroupBox * pSASLGroup = new QGroupBox(__tr2qs_ctx("SASL Authentication","options"),tab); - pCapLayout->addWidget(pSASLGroup,2,0); - - QGridLayout * pSASLLayout = new QGridLayout(pSASLGroup); - - m_pEnableSASLCheck = new QCheckBox(__tr2qs_ctx("Authenticate via SASL extension","options"),pSASLGroup); - pSASLLayout->addWidget(m_pEnableSASLCheck,0,0,1,2); - KviTalToolTip::add(m_pEnableSASLCheck,__tr2qs_ctx("<center>This check enables the use of the <b>SASL</b> authentication procotol " \ - "If you enable the proper global option in the Connection/SSL tab and fill the Sasl Nickname and Sasl Password fields in this page, the SASL protocol will be used for this server if available.</center>","options")); - m_pEnableSASLCheck->setChecked(s->enabledSASL()); - - l = new QLabel(__tr2qs_ctx("Sasl Nickname:","options"),pSASLGroup); - pSASLLayout->addWidget(l,1,0); - m_pSaslNickEditor = new QLineEdit(pSASLGroup); - m_pSaslNickEditor->setText(s->saslNick()); - KviTalToolTip::add(m_pSaslNickEditor,__tr2qs_ctx("<center>If you want to enable SASL authentication, insert your nickname here.</center>","options")); - pSASLLayout->addWidget(m_pSaslNickEditor,1,1); - - l = new QLabel(__tr2qs_ctx("Sasl Password:","options"),pSASLGroup); - pSASLLayout->addWidget(l,2,0); - m_pSaslPassEditor = new KviPasswordLineEdit(pSASLGroup); // <---- ????? - m_pSaslPassEditor->setText(s->saslPass()); - KviTalToolTip::add(m_pSaslPassEditor,__tr2qs_ctx("<center>If you want to enable SASL authentication, insert your password here.</center>","options")); - pSASLLayout->addWidget(m_pSaslPassEditor,2,1); - - pSASLGroup->setEnabled(s->enabledCAP()); - QObject::connect(m_pEnableCAPCheck,SIGNAL(toggled(bool)),pSASLGroup,SLOT(setEnabled(bool))); - - iRow++; - - - l = new QLabel(__tr2qs_ctx("Link filter:","options"),tab); - gl->addWidget(l,iRow,0); - m_pLinkFilterEditor = new QComboBox(tab); - m_pLinkFilterEditor->setEditable(true); - m_pLinkFilterEditor->setDuplicatesEnabled(false); - gl->addWidget(m_pLinkFilterEditor,iRow,1); - - m_pLinkFilterEditor->addItem(""); - - g_pModuleManager->loadModulesByCaps("linkfilter"); - KviModuleExtensionDescriptorList * mexl = KviModuleExtensionManager::instance()->getExtensionList("linkfilter"); - - if(mexl) - { - for(KviModuleExtensionDescriptor * d = mexl->first();d;d = mexl->next()) - m_pLinkFilterEditor->addItem(d->name().ptr()); - } else { - if(!s->linkFilter().isEmpty()) - m_pLinkFilterEditor->addItem(s->linkFilter()); - } - - if(!s->linkFilter().isEmpty()) - { - int i = m_pLinkFilterEditor->findText(s->linkFilter()); - if (i != -1) - m_pLinkFilterEditor->setCurrentIndex(i); - else - m_pLinkFilterEditor->setEditText(s->linkFilter()); - } - else - m_pLinkFilterEditor->setCurrentIndex(0); - - - KviTalToolTip::add(m_pLinkFilterEditor,__tr2qs_ctx("<center>This field specifies the name of a module that exports a link filter for this type of server.<br>" \ - "For plain IRC connections, you don't need any link filters; this is used for incompatible protocols.</center>","options")); - - iRow++; - - l = new QLabel(__tr2qs_ctx("Id:","options"),tab); - gl->addWidget(l,iRow,0); - m_pIdEditor = new QLineEdit(tab); - if(s->id().isEmpty())s->generateUniqueId(); - m_pIdEditor->setText(s->id()); - gl->addWidget(m_pIdEditor,iRow,1); - - KviTalToolTip::add(m_pIdEditor,__tr2qs_ctx("<center>This field allows you to specify a really unique id for this server. " \ - "You will then be able to use /server -x <this_id> to make the connection. This is especially " \ - "useful when you have multiple server entries with the same hostname and port in different networks (bouncers?)</center>","options")); - - - iRow++; - - tw->addTab(tab,__tr2qs_ctx("Advanced","options")); - - - - QPushButton * b = new QPushButton(__tr2qs_ctx("OK","options"),this); - b->setMinimumWidth(80); - g->addWidget(b,3,2); - b->setDefault(true); - connect(b,SIGNAL(clicked()),this,SLOT(accept())); - - b = new QPushButton(__tr2qs_ctx("Cancel","options"),this); - g->addWidget(b,3,3); - b->setMinimumWidth(80); - connect(b,SIGNAL(clicked()),this,SLOT(reject())); - - g->setRowStretch(2,1); - g->setColumnStretch(1,1); - - - tw->setMinimumWidth(390); - - setHeaderLabelText(); -} - -KviIrcServerDetailsWidget::~KviIrcServerDetailsWidget() -{ - if(m_pOnConnectEditor) KviScriptEditor::destroyInstance(m_pOnConnectEditor); - if(m_pOnLoginEditor) KviScriptEditor::destroyInstance(m_pOnLoginEditor); -} - -void KviIrcServerDetailsWidget::useIPV6CheckToggled(bool) -{ -#ifdef COMPILE_IPV6_SUPPORT - m_pIpEditor->setAddressType(m_pUseIPV6Check->isChecked() ? KviIpEditor::IPv6 : KviIpEditor::IPv4); -#else - m_pIpEditor->setAddressType(KviIpEditor::IPv4); -#endif - setHeaderLabelText(); -} - -void KviIrcServerDetailsWidget::portEditorTextChanged(const QString &) -{ - setHeaderLabelText(); -} - -void KviIrcServerDetailsWidget::setHeaderLabelText() -{ - QString szTmp = "<font size=\"+1\"><b>irc"; - if(m_pUseIPV6Check->isChecked())szTmp += "6"; - szTmp += "://"; - szTmp += m_szHostname; - szTmp += ":"; - - bool bOk; - - QString num = m_pPortEditor->text(); - unsigned int uPort = num.toUInt(&bOk); - if(!bOk)uPort = 6667; - num.setNum(uPort); - szTmp += num; - szTmp += "</b></font>"; - - m_pHeaderLabel->setText(szTmp); -} - -void KviIrcServerDetailsWidget::fillData(KviIrcServer * s) -{ - s->setUserName(m_pUserEditor->text()); - s->setPassword(m_pPassEditor->text()); - s->setNickName(m_pNickEditor->text()); - s->setRealName(m_pRealEditor->text()); - if(m_pDescEditor) - s->setDescription(m_pDescEditor->text()); - if(m_pLinkFilterEditor) - s->setLinkFilter(m_pLinkFilterEditor->lineEdit()->text()); - if(m_pEncodingEditor) - { - if(m_pEncodingEditor->currentIndex() <= 0) - { - s->m_szEncoding = ""; - } else { - KviLocale::EncodingDescription * d = KviLocale::encodingDescription(m_pEncodingEditor->currentIndex() - 1); - s->m_szEncoding = d->szName; - } - } - if(m_pTextEncodingEditor) - { - if(m_pTextEncodingEditor->currentIndex() <= 0) - { - s->m_szTextEncoding = ""; - } else { - KviLocale::EncodingDescription * dd = KviLocale::encodingDescription(m_pTextEncodingEditor->currentIndex() - 1); - s->m_szTextEncoding = dd->szName; - } - } - s->setIp(""); - if(m_pCacheIpCheck) - s->setCacheIp(m_pCacheIpCheck->isChecked()); - if(m_pUseSSLCheck) - s->setUseSSL(m_pUseSSLCheck->isChecked()); - if(m_pEnableCAPCheck) - s->setEnabledCAP(m_pEnableCAPCheck->isChecked()); - if(m_pEnableSTARTTLSCheck) - s->setEnabledSTARTTLS(m_pEnableSTARTTLSCheck->isChecked()); - - s->setSaslNick(m_pSaslNickEditor->text()); - s->setSaslPass(m_pSaslPassEditor->text()); - if(m_pEnableSASLCheck) - s->setEnabledSASL( m_pEnableSASLCheck->isChecked() && - !m_pSaslNickEditor->text().isEmpty() && - !m_pSaslPassEditor->text().isEmpty() - ); - - if(m_pIdEditor) - s->setId(m_pIdEditor->text()); - if(s->id().isEmpty())s->generateUniqueId(); - - if(m_pUseDefaultInitUMode) - { - KviCString szUMode; - if(!m_pUseDefaultInitUMode->isChecked()) - { - if(m_pIMode->isChecked())szUMode.append('i'); - if(m_pWMode->isChecked())szUMode.append('w'); - if(m_pSMode->isChecked())szUMode.append('s'); - } - s->setInitUMode(szUMode.ptr()); - } - - QString tmp = m_pPortEditor->text(); - bool bOk; - kvi_u32_t uPort = tmp.toUInt(&bOk); - if(!bOk)uPort = 6667; - s->m_uPort = uPort; -#ifdef COMPILE_IPV6_SUPPORT - s->setIPv6(m_pUseIPV6Check->isChecked()); -#else - s->setIPv6(false); -#endif - - if(m_pIpEditor) - { - QString tmpAddr = m_pIpEditor->address(); - - if(!m_pIpEditor->hasEmptyFields()) - { -#ifdef COMPILE_IPV6_SUPPORT - if(s->isIPv6()) - { - if((!KviQString::equalCI(tmpAddr,"0:0:0:0:0:0:0:0")) && KviNetUtils::isValidStringIp(tmpAddr)) - { - s->setIp(tmpAddr); - } else { - s->setCacheIp(false); - s->setIp(""); - } - } else { -#endif - if((!KviQString::equalCI(tmpAddr,"0.0.0.0")) && KviNetUtils::isValidStringIp(tmpAddr)) - { - s->setIp(tmpAddr); - } else { - s->setCacheIp(false); - s->setIp(""); - } -#ifdef COMPILE_IPV6_SUPPORT - } -#endif - } else { - s->setCacheIp(false); - s->setIp(""); - } - } - if(m_pOnConnectEditor) - { - QString tmp; - m_pOnConnectEditor->getText(tmp); - s->setOnConnectCommand(tmp); - } - if(m_pOnLoginEditor) - { - QString tmp; - m_pOnLoginEditor->getText(tmp); - s->setOnLoginCommand(tmp); - } - if(m_pChannelListSelector) - m_pChannelListSelector->commit(); - if(m_lstChannels.isEmpty())s->setAutoJoinChannelList(0); - else s->setAutoJoinChannelList(new QStringList(m_lstChannels)); - if(m_pUseAutoConnect) - s->setAutoConnect(m_pUseAutoConnect->isChecked()); - if(m_pProxyEditor) - s->setProxy(m_pProxyEditor->currentIndex()-2); -} - -void KviIrcServerDetailsWidget::useDefaultInitUModeToggled(bool b) -{ - m_pIMode->setEnabled(!b); - m_pWMode->setEnabled(!b); - m_pSMode->setEnabled(!b); -} - -// KviApplication.cpp -extern KVIRC_API KviIrcServerDataBase * g_pServerDataBase; - -KviIrcServerOptionsTreeWidgetItem::KviIrcServerOptionsTreeWidgetItem(QTreeWidget *parent,const QPixmap &pm,const KviIrcNetwork *n) - : QTreeWidgetItem(parent) -{ - setIcon(0,QIcon(pm)); - m_pServerData = 0; - m_pNetworkData = new KviIrcNetwork(*n); - setText(0,n->name()); - setText(1,n->description()); -} - -KviIrcServerOptionsTreeWidgetItem::KviIrcServerOptionsTreeWidgetItem(QTreeWidgetItem *parent,const QPixmap &pm,const KviIrcServer *s) - : QTreeWidgetItem(parent) -{ - setIcon(0,QIcon(pm)); - m_pServerData = new KviIrcServer(*s); - setText(0,s->hostName()); - setText(1,s->description()); - m_pNetworkData = 0; -} - -KviIrcServerOptionsTreeWidgetItem::~KviIrcServerOptionsTreeWidgetItem() -{ - if(m_pServerData)delete m_pServerData; - if(m_pNetworkData)delete m_pNetworkData; -} - -void KviIrcServerOptionsTreeWidgetItem::updateVisibleStrings() -{ - if(m_pNetworkData) - { - setText(0,m_pNetworkData->name()); - setText(1,m_pNetworkData->description()); - return; - } - if(m_pServerData) - { - setText(0,m_pServerData->hostName()); - setText(1,m_pServerData->description()); - } -} - - -KviIrcServerOptionsWidget::KviIrcServerOptionsWidget(QWidget * parent) -: KviOptionsWidget(parent) -{ - setObjectName("server_options_widget"); - - createLayout(); - - m_pContextPopup = new KviTalPopupMenu(this); - m_pImportPopup = new KviTalPopupMenu(this); - - connect(m_pImportPopup,SIGNAL(aboutToShow()),this,SLOT(importPopupAboutToShow())); - connect(m_pImportPopup,SIGNAL(activated(int)),this,SLOT(importPopupActivated(int))); - - m_pServerDetailsDialog = 0; - m_pNetworkDetailsDialog = 0; - m_pImportFilter = 0; - - m_pTreeWidget = new QTreeWidget(this); - addWidgetToLayout(m_pTreeWidget,0,0,0,0); - m_pTreeWidget->setColumnCount(2); - QStringList columLabels; - columLabels.append(__tr2qs_ctx("Server","options")); - columLabels.append(__tr2qs_ctx("Description","options")); - m_pTreeWidget->setColumnWidth(0,250); - m_pTreeWidget->setColumnWidth(1,250); - - m_pTreeWidget->setSortingEnabled(true); - m_pTreeWidget->sortByColumn(0,Qt::AscendingOrder); - m_pTreeWidget->setHeaderLabels(columLabels); - m_pTreeWidget->setRootIsDecorated(true); - m_pTreeWidget->setAllColumnsShowFocus(true); - m_pTreeWidget->setSelectionMode(QAbstractItemView::SingleSelection); - m_pTreeWidget->setContextMenuPolicy(Qt::CustomContextMenu); - connect(m_pTreeWidget,SIGNAL(customContextMenuRequested(const QPoint &)), - this,SLOT(customContextMenuRequested(const QPoint &))); - connect(m_pTreeWidget,SIGNAL(currentItemChanged(QTreeWidgetItem *,QTreeWidgetItem *)), - this,SLOT(currentItemChanged(QTreeWidgetItem *,QTreeWidgetItem *))); - - connect(m_pTreeWidget,SIGNAL(itemDoubleClicked(QTreeWidgetItem*, int )), - this,SLOT(itemDoubleClicked(QTreeWidgetItem*, int ))); - - QString tiptxt = __tr2qs_ctx("<center>This is the list of available IRC servers.<br>" \ - "Right-click on the list to add or remove servers and perform other actions.<br>"\ - "Double-click on a item for advanced options.</center>","options"); - KviTalToolTip::add(m_pTreeWidget,tiptxt); - KviTalToolTip::add(m_pTreeWidget->viewport(),tiptxt); - - KviTalVBox * vbox = new KviTalVBox(this); - vbox->setSpacing(0); - addWidgetToLayout(vbox,1,0,1,0); - - m_pNewNetworkButton = new QToolButton(vbox); - m_pNewNetworkButton->setIcon(QIcon(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_WORLD)))); - m_pNewNetworkButton->setAutoRaise(true); - connect(m_pNewNetworkButton,SIGNAL(clicked()),this,SLOT(newNetwork())); - KviTalToolTip::add(m_pNewNetworkButton,__tr2qs_ctx("New Network","options")); - - m_pNewServerButton = new QToolButton(vbox); - m_pNewServerButton->setIcon(QIcon(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_SERVER)))); - m_pNewServerButton->setAutoRaise(true); - connect(m_pNewServerButton,SIGNAL(clicked()),this,SLOT(newServer())); - KviTalToolTip::add(m_pNewServerButton,__tr2qs_ctx("New Server","options")); - - m_pRemoveButton = new QToolButton(vbox); - m_pRemoveButton->setIcon(QIcon(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_CUT)))); - m_pRemoveButton->setEnabled(false); - m_pRemoveButton->setAutoRaise(true); - connect(m_pRemoveButton,SIGNAL(clicked()),this,SLOT(removeCurrent())); - KviTalToolTip::add(m_pRemoveButton,__tr2qs_ctx("Remove Network/Server","options")); - - QFrame * f = new QFrame(vbox); - f->setFrameStyle(QFrame::Sunken | QFrame::HLine); - - m_pCopyServerButton = new QToolButton(vbox); - m_pCopyServerButton->setIcon(QIcon(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_COPY)))); - m_pCopyServerButton->setEnabled(false); - m_pCopyServerButton->setAutoRaise(true); - connect(m_pCopyServerButton,SIGNAL(clicked()),this,SLOT(copyServer())); - KviTalToolTip::add(m_pCopyServerButton,__tr2qs_ctx("Copy Server","options")); - - m_pPasteServerButton = new QToolButton(vbox); - m_pPasteServerButton->setIcon(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_PASTE))); - m_pPasteServerButton->setEnabled(false); - m_pPasteServerButton->setAutoRaise(true); - connect(m_pPasteServerButton,SIGNAL(clicked()),this,SLOT(pasteServer())); - KviTalToolTip::add(m_pPasteServerButton,__tr2qs_ctx("Paste Server","options")); - - f = new QFrame(vbox); - f->setFrameStyle(QFrame::Sunken | QFrame::HLine); - - m_pImportButton = new QToolButton(vbox); - m_pImportButton->setIcon(QIcon(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_FOLDER)))); - m_pImportButton->setAutoRaise(true); - m_pImportButton->setMenu(m_pImportPopup); - m_pImportButton->setPopupMode(QToolButton::InstantPopup); - - KviTalToolTip::add(m_pImportButton,__tr2qs_ctx("Import List","options")); - - QFrame * lll = new QFrame(vbox); - vbox->setStretchFactor(lll,100); - - KviTalGroupBox *gbox = addGroupBox(0,1,1,1,Qt::Vertical,__tr2qs_ctx("Active Configuration","options")); - m_pSrvNetLabel = new QLabel(__tr2qs_ctx("Server:","options"),gbox); - - m_pSrvNetEdit = new QLineEdit(gbox); - connect(m_pSrvNetEdit,SIGNAL(textEdited(const QString &)),this,SLOT(serverNetworkEditTextEdited(const QString &))); - KviTalToolTip::add(m_pSrvNetEdit,__tr2qs_ctx("<center>This is the name of the currently selected server or network</center>","options")); - - m_pDetailsButton = new QPushButton(__tr2qs_ctx("Advanced...","options"),gbox); - connect(m_pDetailsButton,SIGNAL(clicked()),this,SLOT(detailsClicked())); - KviTalToolTip::add(m_pDetailsButton,__tr2qs_ctx("<center>Click here to edit advanced options for this entry</center>","options")); - - m_pRecentPopup = new KviTalPopupMenu(gbox); - connect(m_pRecentPopup,SIGNAL(aboutToShow()),this,SLOT(recentServersPopupAboutToShow())); - connect(m_pRecentPopup,SIGNAL(activated(int)),this,SLOT(recentServersPopupClicked(int))); - - QToolButton * tb = new QToolButton(gbox); - tb->setIcon(QIcon(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_TIME)))); - tb->setMenu(m_pRecentPopup); - tb->setAutoRaise(true); - tb->setPopupMode(QToolButton::InstantPopup); - - KviTalToolTip::add(tb,__tr2qs_ctx("<center>This button shows a list of recently used servers. It allows you to quickly find them in the list.</center>","options")); - - - // The "Show this dialog at startup" option is shown only when the server options widget is shown as standalone dialog - if(parent->inherits("KviOptionsWidgetContainer")) - { - m_pConnectCurrent = new QPushButton(__tr2qs_ctx("Connect &Now","options"),this); - addWidgetToLayout(m_pConnectCurrent,0,2,1,2); - connect(m_pConnectCurrent,SIGNAL(clicked()),this,SLOT(connectCurrentClicked())); - - QPalette pal(QColor(0,0,128)); - - pal.setColor(QPalette::Active,QPalette::Button,QColor(0,0,220)); - pal.setColor(QPalette::Active,QPalette::ButtonText,QColor(245,245,245)); - - pal.setColor(QPalette::Disabled,QPalette::Button,QColor(98,98,180)); - pal.setColor(QPalette::Disabled,QPalette::ButtonText,QColor(128,128,245)); - -#if defined(COMPILE_ON_WINDOWS) || defined(COMPILE_ON_MINGW) || defined(COMPILE_ON_MAC) - // Kill the WindowXP/Mac style which does not honor palette - QStyle * pWindowsStyle = QStyleFactory::create("plastique"); - if(!pWindowsStyle) - { - pWindowsStyle = QStyleFactory::create("windows"); - if(!pWindowsStyle) - pWindowsStyle = QStyleFactory::create("motif"); - } - if(pWindowsStyle) - m_pConnectCurrent->setStyle(pWindowsStyle); -#endif //COMPILE_ON_WINDOWS || COMPILE_ON_MINGW - - m_pConnectCurrent->setPalette(pal); - - QFont fnt = m_pConnectCurrent->font(); - fnt.setPointSizeF(fnt.pointSizeF() * 1.4); - fnt.setBold(true); - m_pConnectCurrent->setFont(fnt); - - KviTalToolTip::add(m_pConnectCurrent,__tr2qs_ctx("<center>Hit this button to connect to the currently selected server.</center>","options")); - - KviOptionsWidgetContainer * pContainer = dynamic_cast<KviOptionsWidgetContainer *>(parent); - if(pContainer) - { - KviBoolSelector * b = addBoolSelector(pContainer,__tr2qs_ctx("Show this dialog at startup","options"),KviOption_boolShowServersConnectDialogOnStart); - pContainer->setLeftCornerWidget(b); - - KviTalToolTip::add(b,__tr2qs_ctx("<center>If this option is enabled, the Servers dialog will appear every time you start KVIrc</center>","options")); - } - } else { - m_pConnectCurrent = NULL; - } - - m_pLastEditedItem = 0; - - m_pClipboard = 0; - - fillServerList(); - - layout()->setRowStretch(0,1); - layout()->setColumnStretch(0,1); - setMinimumWidth(600); -} - -KviIrcServerOptionsWidget::~KviIrcServerOptionsWidget() -{ - if(m_pImportFilter) - { - disconnect(m_pImportFilter,0,this,0); - m_pImportFilter->die(); - m_pImportFilter = 0; - } - - if(m_pClipboard) - delete m_pClipboard; - if(m_pServerDetailsDialog) - delete m_pServerDetailsDialog; - if(m_pNetworkDetailsDialog) - delete m_pNetworkDetailsDialog; -} - -void KviIrcServerOptionsWidget::recentServersPopupAboutToShow() -{ - g_pApp->fillRecentServersPopup(m_pRecentPopup); - - m_pRecentPopup->insertSeparator(); - m_pRecentPopup->insertItem(__tr2qs("Clear Recent Servers List")); -} - -void KviIrcServerOptionsWidget::recentServersPopupClicked(int id) -{ - KviConsoleWindow * c = g_pActiveWindow->console(); - if(!c) - return; - - QString szItemText = m_pRecentPopup->text(id); - szItemText.remove(QChar('&')); - if(szItemText.isEmpty()) - return; - if(szItemText == __tr2qs("Clear Recent Servers List")) - { - KviKvsScript::run("option stringlistRecentServers",c); - return; - } - - selectBestServerByUrl(szItemText); -} - -void KviIrcServerOptionsWidget::selectBestServerByUrl(const QString &szUrl) -{ - if(szUrl.isEmpty()) - return; - - KviIrcUrlParts oParts; - - KviIrcUrl::split(szUrl,oParts); - - int uCount = m_pTreeWidget->topLevelItemCount(); - int uIdx = 0; - - KviIrcServerOptionsTreeWidgetItem * pBestCandidate = NULL; - kvi_u32_t uBestCandidateScore = 0; - - while(uIdx < uCount) - { - KviIrcServerOptionsTreeWidgetItem * pNet = static_cast<KviIrcServerOptionsTreeWidgetItem *>(m_pTreeWidget->topLevelItem(uIdx)); - - uIdx++; - - if(!pNet) - continue; // huh ? - - int uServerCount = pNet->childCount(); - int uChildIdx = 0; - while(uChildIdx < uServerCount) - { - KviIrcServerOptionsTreeWidgetItem * pServer = static_cast<KviIrcServerOptionsTreeWidgetItem *>(pNet->child(uChildIdx)); - uChildIdx++; - - if(!pServer) - continue; // huh ? - - KviIrcServer * pServerData = pServer->serverData(); - - if(!pServerData) - continue; // umphf... - - kvi_u32_t uScore = 0; - - if(pServerData->hostName().toLower() == oParts.szHost.toLower()) - uScore++; - if(pServerData->port() == oParts.iPort) - uScore++; - if(pServerData->isIPv6() == oParts.bIPv6) - uScore++; - if(pServerData->useSSL() == oParts.bSsl) - uScore++; - - if(uScore > uBestCandidateScore) - { - uBestCandidateScore = uScore; - pBestCandidate = pServer; - if(uScore >= 4) - { - // exact match - uIdx = uCount; // break the outer loop - break; // break the inner loop - } - } - } - } - - if(pBestCandidate) - m_pTreeWidget->setCurrentItem(pBestCandidate); - -} - -void KviIrcServerOptionsWidget::connectCurrentClicked() -{ - saveLastItem(); - commit(); - KviCString szServer = m_pSrvNetEdit->text(); - if(szServer.isEmpty())return; - KviKvsScript::run("server -u",g_pApp->activeConsole()); -} - -void KviIrcServerOptionsWidget::fillServerList() -{ - KviIrcServerOptionsTreeWidgetItem * net; - KviIrcServerOptionsTreeWidgetItem * srv; - KviIrcServerOptionsTreeWidgetItem * cur = 0; - - KviPointerHashTableIterator<QString,KviIrcNetwork> it(*(g_pServerDataBase->recordDict())); - - if(m_pConnectCurrent) - m_pConnectCurrent->setEnabled(false); - - while(KviIrcNetwork * r = it.current()) - { - net = new KviIrcServerOptionsTreeWidgetItem(m_pTreeWidget,*(g_pIconManager->getSmallIcon(KVI_SMALLICON_WORLD)),r); - KviPointerList<KviIrcServer> * sl = r->serverList(); - bool bCurrent = r->name() == g_pServerDataBase->currentNetworkName().toUtf8().data(); - net->setExpanded(bCurrent); - for(KviIrcServer * s = sl->first();s;s = sl->next()) - { - srv = new KviIrcServerOptionsTreeWidgetItem(net,*(g_pIconManager->getSmallIcon(KVI_SMALLICON_SERVER)),s); - - if((s == r->currentServer()) && bCurrent) - { - srv->setSelected(true); - cur = srv; - } - } - ++it; - } - if(cur) - { - cur->setSelected(true); - m_pTreeWidget->setCurrentItem(cur); - m_pTreeWidget->scrollToItem(cur); - if(m_pConnectCurrent) - m_pConnectCurrent->setEnabled(true); - } -} - -void KviIrcServerOptionsWidget::itemDoubleClicked(QTreeWidgetItem*, int ) -{ - detailsClicked(); -} - -void KviIrcServerOptionsWidget::currentItemChanged(QTreeWidgetItem *it,QTreeWidgetItem *) -{ - saveLastItem(); - m_pLastEditedItem = (KviIrcServerOptionsTreeWidgetItem *)it; - - if(m_pLastEditedItem) - { - m_pSrvNetLabel->setEnabled(true); - m_pSrvNetEdit->setEnabled(true); - m_pDetailsButton->setEnabled(true); - if(m_pConnectCurrent) - m_pConnectCurrent->setEnabled(m_pLastEditedItem->m_pServerData); - - m_pRemoveButton->setEnabled(true); - m_pCopyServerButton->setEnabled(m_pLastEditedItem->m_pServerData); - - if(m_pLastEditedItem->m_pServerData) - { - m_pSrvNetLabel->setText(__tr2qs_ctx("Server:","options")); - m_pSrvNetEdit->setText(m_pLastEditedItem->m_pServerData->m_szHostname); - } else { - m_pSrvNetLabel->setText(__tr2qs_ctx("Network:","options")); - m_pSrvNetEdit->setText(it->text(0)); - } - } else { - m_pRemoveButton->setEnabled(false); - m_pCopyServerButton->setEnabled(true); - - if(m_pConnectCurrent) - m_pConnectCurrent->setEnabled(false); - m_pSrvNetLabel->setEnabled(false); - m_pSrvNetEdit->setEnabled(false); - m_pSrvNetEdit->setText(__tr2qs_ctx("No selection","options")); - m_pDetailsButton->setEnabled(false); - } -} - -void KviIrcServerOptionsWidget::serverNetworkEditTextEdited(const QString &) -{ - if(!m_pLastEditedItem) - return; - - saveLastItem(); - - // make sure the current item is currently visible (if it still exists) - if(m_pLastEditedItem) - m_pTreeWidget->scrollToItem(m_pLastEditedItem,QTreeWidget::EnsureVisible); -} - - -void KviIrcServerOptionsWidget::saveLastItem() -{ - if(!m_pLastEditedItem) - return; - - if(m_pLastEditedItem->m_pServerData) - { - KviCString tmp = m_pSrvNetEdit->text(); - if(tmp.isEmpty()) - tmp = "irc.unknown.net"; - m_pLastEditedItem->m_pServerData->m_szHostname = tmp; - m_pLastEditedItem->updateVisibleStrings(); - } else if(m_pLastEditedItem->m_pNetworkData) - { - QString tmp = m_pSrvNetEdit->text(); - if(tmp.isEmpty()) - tmp = __tr2qs_ctx("UnknownNet","options"); - m_pLastEditedItem->m_pNetworkData->setName(tmp); - m_pLastEditedItem->updateVisibleStrings(); - } -} - -void KviIrcServerOptionsWidget::commit() -{ - saveLastItem(); - g_pServerDataBase->clear(); - - KviIrcServerOptionsTreeWidgetItem * network; - for (int i=0;i<m_pTreeWidget->topLevelItemCount();i++) - { - network=(KviIrcServerOptionsTreeWidgetItem *) m_pTreeWidget->topLevelItem(i); - QString tmp = network->m_pNetworkData->name(); - KviIrcNetwork * pNetwork = g_pServerDataBase->findNetwork(tmp); - if(pNetwork) - { - pNetwork->copyFrom(*(network->m_pNetworkData)); - } else { - pNetwork = new KviIrcNetwork(tmp); - pNetwork->copyFrom(*(network->m_pNetworkData)); - g_pServerDataBase->addNetwork(pNetwork); - } - if(network == m_pLastEditedItem)g_pServerDataBase->setCurrentNetwork(pNetwork->name()); - - KviIrcServerOptionsTreeWidgetItem * ch; - for (int j=0;j<network->childCount();j++) - { - KviIrcServer *srv; - ch=(KviIrcServerOptionsTreeWidgetItem *)network->child(j); - if(ch->m_pServerData) - { - if(!ch->m_pServerData->m_szHostname.isEmpty()) - { - srv = pNetwork->findServer(ch->m_pServerData); - if(!srv) - { - srv = new KviIrcServer(*(ch->m_pServerData)); - pNetwork->insertServer(srv); - } else *srv = *(ch->m_pServerData); - if(srv->id().isEmpty())srv->generateUniqueId(); - if(ch == m_pLastEditedItem) - { - g_pServerDataBase->setCurrentNetwork(pNetwork->name()); - pNetwork->setCurrentServer(srv); - } - } - } - } - - } - - KviOptionsWidget::commit(); - - // Ensure saving of the server DB - g_pApp->saveIrcServerDataBase(); -} - -void KviIrcServerOptionsWidget::customContextMenuRequested(const QPoint &pnt) -{ - int id; - QTreeWidgetItem *it=(QTreeWidgetItem *) m_pTreeWidget->itemAt(pnt); - bool bServer = (it && ((KviIrcServerOptionsTreeWidgetItem *)it)->m_pServerData); - m_pContextPopup->clear(); - m_pContextPopup->insertItem(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_WORLD)),__tr2qs_ctx("New Network","options"),this,SLOT(newNetwork())); - id = m_pContextPopup->insertItem(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_CUT)),__tr2qs_ctx("Remove Network","options"),this,SLOT(removeCurrent())); - m_pContextPopup->setItemEnabled(id,!bServer); - m_pContextPopup->insertSeparator(); - id = m_pContextPopup->insertItem(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_SERVER)),__tr2qs_ctx("&New Server","options"),this,SLOT(newServer())); - id = m_pContextPopup->insertItem(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_CUT)),__tr2qs_ctx("Re&move Server","options"),this,SLOT(removeCurrent())); - m_pContextPopup->setItemEnabled(id,bServer); - id = m_pContextPopup->insertItem(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_COPY)),__tr2qs_ctx("&Copy Server","options"),this,SLOT(copyServer())); - m_pContextPopup->setItemEnabled(id,bServer); - id = m_pContextPopup->insertItem(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_PASTE)),__tr2qs_ctx("&Paste Server","options"),this,SLOT(pasteServer())); - m_pContextPopup->setItemEnabled(id,m_pClipboard); - - m_pContextPopup->insertSeparator(); - // m_pContextPopup->insertItem(__c2q(__tr("Merge list from server.ini","options")),this,SLOT(importFromIni())); - m_pContextPopup->insertItem(__tr2qs_ctx("Clear List","options"),this,SLOT(clearList())); - m_pContextPopup->insertSeparator(); - m_pContextPopup->insertItem(__tr2qs_ctx("Import List","options"),m_pImportPopup); - m_pContextPopup->popup(QCursor::pos()); -} - -void KviIrcServerOptionsWidget::importPopupAboutToShow() -{ - g_pModuleManager->loadModulesByCaps("serverimport"); - m_pImportPopup->clear(); - - KviModuleExtensionDescriptorList * l = KviModuleExtensionManager::instance()->getExtensionList("serverimport"); - - if(!l)return; - - int id; - - for(KviModuleExtensionDescriptor * d = l->first();d;d = l->next()) - { - if(d->icon()) - id = m_pImportPopup->insertItem(*(d->icon()),d->visibleName()); - else - id = m_pImportPopup->insertItem(d->visibleName()); - m_pImportPopup->setItemParameter(id,d->id()); - } -} - -void KviIrcServerOptionsWidget::importPopupActivated(int id) -{ - // ensure that we have all the modules : they could have been unloaded while the popup was displayed - g_pModuleManager->loadModulesByCaps("serverimport"); - - KviModuleExtensionDescriptorList * l = KviModuleExtensionManager::instance()->getExtensionList("serverimport"); - - if(!l) - { - // ops.. internal error: I thought to have a module capable of importing servers - // but actually it's not the case.. something weird happened (in the best case - // the user has just unloaded the module and removed it from disk ?) - KviMessageBox::warning(__tr2qs_ctx("Oops... something weird happened:<br>Can't find any module capable of importing servers.","options")); - return; - } - - if(m_pImportFilter) - { - disconnect(m_pImportFilter,0,this,0); - m_pImportFilter->die(); - m_pImportFilter = 0; - } - - id = m_pImportPopup->itemParameter(id); - - m_pImportFilter = (KviMexServerImport *)KviModuleExtensionManager::instance()->allocateExtension("serverimport",id,0); - - if(!m_pImportFilter) - { - KviMessageBox::warning(__tr2qs_ctx("Oops... something weird happened:<br>Can't find the module that was capable of this import action. :(","options")); - return; - } - - connect(m_pImportFilter,SIGNAL(server(const KviIrcServer &,const QString&)),this,SLOT(importServer(const KviIrcServer &,const QString&))); - connect(m_pImportFilter,SIGNAL(destroyed()),this,SLOT(importerDead())); - - m_pImportFilter->start(); -} - -void KviIrcServerOptionsWidget::importerDead() -{ - m_pImportFilter = 0; -} - -void KviIrcServerOptionsWidget::importServer(const KviIrcServer &s,const QString &network) -{ - KviIrcServerOptionsTreeWidgetItem * net = findNetItem(network); - if(!net) - { - KviIrcNetwork d(network); - net = new KviIrcServerOptionsTreeWidgetItem(m_pTreeWidget,*(g_pIconManager->getSmallIcon(KVI_SMALLICON_WORLD)),&d); - net->setExpanded(true); - } - - KviIrcServerOptionsTreeWidgetItem * srv ; - for(int i=0;i<net->childCount();i++) - { - srv=(KviIrcServerOptionsTreeWidgetItem *) net->child(i); - if((srv)->m_pServerData->useSSL() == s.useSSL()) - { - if(srv->m_pServerData->isIPv6() == s.isIPv6()) - { - if(KviQString::equalCI(srv->m_pServerData->hostName(),s.hostName())) - { - // update the port - srv->m_pServerData->setPort(s.port()); - if(!s.ip().isEmpty())srv->m_pServerData->setIp(s.ip()); - if(!s.password().isEmpty())srv->m_pServerData->setPassword(s.password()); - if(!s.nickName().isEmpty())srv->m_pServerData->setNickName(s.nickName()); - m_pTreeWidget->setCurrentItem(srv); - m_pTreeWidget->scrollToItem(srv); - return; - } - } - } - } - - // not found : add it! - KviIrcServerOptionsTreeWidgetItem * newServer = new KviIrcServerOptionsTreeWidgetItem(net,*(g_pIconManager->getSmallIcon(KVI_SMALLICON_SERVER)),&s); - m_pTreeWidget->setCurrentItem(newServer); - m_pTreeWidget->scrollToItem(newServer); -} - -void KviIrcServerOptionsWidget::newNetwork() -{ - KviIrcNetwork d(__tr2qs_ctx("New Network","options")); - KviIrcServerOptionsTreeWidgetItem * it = new KviIrcServerOptionsTreeWidgetItem(m_pTreeWidget,*(g_pIconManager->getSmallIcon(KVI_SMALLICON_WORLD)),&d); - it->setExpanded(true); - it->setSelected(true); - m_pTreeWidget->setCurrentItem(it); - m_pTreeWidget->scrollToItem(it); -} - -void KviIrcServerOptionsWidget::newServer() -{ - if(m_pLastEditedItem) - { - KviIrcServerOptionsTreeWidgetItem * net; - if(m_pLastEditedItem->m_pServerData) - { - net = (KviIrcServerOptionsTreeWidgetItem *)m_pLastEditedItem->parent(); - if(!net)return; - } - else net = m_pLastEditedItem; - - KviIrcServer tmp; - tmp.m_szHostname = __tr2qs_ctx("irc.unknown.net","options"); - tmp.setCacheIp(false); - tmp.generateUniqueId(); - - KviIrcServerOptionsTreeWidgetItem * it = new KviIrcServerOptionsTreeWidgetItem(net,*(g_pIconManager->getSmallIcon(KVI_SMALLICON_SERVER)),&tmp); - - net->setExpanded(true); - - it->setSelected(true); - m_pTreeWidget->setCurrentItem(it); - m_pTreeWidget->scrollToItem(it); - } -} - -void KviIrcServerOptionsWidget::copyServer() -{ - if(m_pLastEditedItem) - { - if(m_pLastEditedItem->m_pServerData) - { - if(!m_pClipboard)m_pClipboard = new KviIrcServer(); - *m_pClipboard = *(m_pLastEditedItem->m_pServerData); - m_pPasteServerButton->setEnabled(true); - } - } -} - -void KviIrcServerOptionsWidget::pasteServer() -{ - if(m_pClipboard) - { - if(m_pLastEditedItem) - { - KviIrcServerOptionsTreeWidgetItem * net; - if(m_pLastEditedItem->m_pServerData) - { - net = (KviIrcServerOptionsTreeWidgetItem *)m_pLastEditedItem->parent(); - if(!net)return; - } - else net = m_pLastEditedItem; - - KviIrcServerOptionsTreeWidgetItem * it = new KviIrcServerOptionsTreeWidgetItem(net, - *(g_pIconManager->getSmallIcon(KVI_SMALLICON_SERVER)),m_pClipboard); - - net->setExpanded(true); - - it->setSelected(true); - m_pTreeWidget->setCurrentItem(it); - m_pTreeWidget->scrollToItem(it); - } - } -} - -void KviIrcServerOptionsWidget::removeCurrent() -{ - if(m_pLastEditedItem) - { - QTreeWidgetItem * it = m_pTreeWidget->itemAbove(m_pLastEditedItem); - - int index = m_pTreeWidget->indexOfTopLevelItem(m_pLastEditedItem); - if(index > -1) - { - // top level item - m_pTreeWidget->takeTopLevelItem(m_pTreeWidget->indexOfTopLevelItem(m_pLastEditedItem)); - } else { - QTreeWidgetItem * tmp = m_pLastEditedItem->parent(); - index = tmp->indexOfChild(m_pLastEditedItem); - if(index > -1) tmp->takeChild(index); - } - - if(!it)it = m_pTreeWidget->topLevelItem(0); - if(it) - { - it->setSelected(true); - m_pTreeWidget->setCurrentItem(it); - m_pTreeWidget->scrollToItem(it); - } - } -} - -KviIrcServerOptionsTreeWidgetItem * KviIrcServerOptionsWidget::findNetItem(const QString &netname) -{ - - KviIrcServerOptionsTreeWidgetItem * it; - for(int i=0;i<m_pTreeWidget->topLevelItemCount();i++) - { - it=(KviIrcServerOptionsTreeWidgetItem *)m_pTreeWidget->topLevelItem(i); - if(KviQString::equalCI(it->text(0),netname))return it; - } - return 0; -} - -void KviIrcServerOptionsWidget::clearList() -{ - m_pTreeWidget->clear(); - m_pLastEditedItem = 0; - currentItemChanged(0,0); -} - -void KviIrcServerOptionsWidget::detailsClicked() -{ - if(!m_pLastEditedItem)return; - if(m_pLastEditedItem->m_pServerData) - { - saveLastItem(); - - m_pServerDetailsDialog = new KviIrcServerDetailsWidget(this,m_pLastEditedItem->m_pServerData); - - int retCode = m_pServerDetailsDialog->exec(); - if(retCode == QDialog::Accepted) - { - if(m_pLastEditedItem) - { - if(m_pLastEditedItem->m_pServerData) - { - m_pServerDetailsDialog->fillData(m_pLastEditedItem->m_pServerData); - saveLastItem(); - } - } - } - - delete m_pServerDetailsDialog; - m_pServerDetailsDialog = 0; - return; - } - if(m_pLastEditedItem->m_pNetworkData) - { - saveLastItem(); - - m_pNetworkDetailsDialog = new KviIrcNetworkDetailsWidget(this,m_pLastEditedItem->m_pNetworkData); - - int retCode = m_pNetworkDetailsDialog->exec(); - if(retCode == QDialog::Accepted) - { - if(m_pLastEditedItem) - { - if(m_pLastEditedItem->m_pNetworkData) - { - m_pNetworkDetailsDialog->fillData(m_pLastEditedItem->m_pNetworkData); - saveLastItem(); - } - } - } - - delete m_pNetworkDetailsDialog; - m_pNetworkDetailsDialog = 0; - } -} - -#ifndef COMPILE_USE_STANDALONE_MOC_SOURCES -#include "m_optw_servers.moc" -#endif //!COMPILE_USE_STANDALONE_MOC_SOURCES |
