Sun, 02 Dec 2012 13:48:01 +0100
Continued with the IRC management.
--- a/Network/IRC/IrcChannelWidget.py Sat Dec 01 19:51:46 2012 +0100 +++ b/Network/IRC/IrcChannelWidget.py Sun Dec 02 13:48:01 2012 +0100 @@ -365,16 +365,18 @@ if match.lastindex == 2: msg = self.trUtf8("{0} has left {1}.").format( match.group(1), self.__name) + nmsg = msg self.__addManagementMessage(IrcChannelWidget.LeaveIndicator, msg) else: msg = self.trUtf8("{0} has left {1}: {2}.").format( - match.group(1), self.__name, - ircFilter(match.group(3))) + match.group(1), self.__name, ircFilter(match.group(3))) + nmsg = self.trUtf8("{0} has left {1}: {2}.").format( + match.group(1), self.__name, match.group(3)) self.__addManagementMessage(IrcChannelWidget.LeaveIndicator, msg) if Preferences.getIrc("ShowNotifications") and \ Preferences.getIrc("NotifyJoinPart"): self.__ui.showNotification(UI.PixmapCache.getPixmap("irc48.png"), - self.trUtf8("Leave Channel"), msg) + self.trUtf8("Leave Channel"), nmsg) return True return False
--- a/Network/IRC/IrcIdentitiesEditDialog.py Sat Dec 01 19:51:46 2012 +0100 +++ b/Network/IRC/IrcIdentitiesEditDialog.py Sun Dec 02 13:48:01 2012 +0100 @@ -9,11 +9,11 @@ import copy -from PyQt4.QtCore import pyqtSlot +from PyQt4.QtCore import pyqtSlot, Qt, QEvent from PyQt4.QtGui import QDialog, QInputDialog, QLineEdit, QItemSelectionModel from E5Gui import E5MessageBox -from E5Gui.E5Application import e5App +##from E5Gui.E5Application import e5App from .Ui_IrcIdentitiesEditDialog import Ui_IrcIdentitiesEditDialog @@ -24,7 +24,6 @@ # TODO: implement "Away" page -# TODO: implement "Advanced" page class IrcIdentitiesEditDialog(QDialog, Ui_IrcIdentitiesEditDialog): """ Class implementing the identities management dialog. @@ -67,6 +66,23 @@ self.identitiesCombo.setCurrentIndex(index) self.on_identitiesCombo_currentIndexChanged(identityName) + + self.nicknameEdit.installEventFilter(self) + + def eventFilter(self, obj, evt): + """ + Public method to handle events for other objects. + + @param obj reference to the object (QObject) + @param evt reference to the event (QEvent) + @return flag indicating that the event should be filtered out (boolean) + """ + if obj == self.nicknameEdit and evt.type() == QEvent.KeyPress: + if evt.key() in [Qt.Key_Enter, Qt.Key_Return]: + self.on_nicknameAddButton_clicked() + return True + + return super().eventFilter(obj, evt) def __updateIdentitiesButtons(self): """ @@ -99,9 +115,15 @@ self.serviceEdit.setText(self.__currentIdentity.getServiceName()) self.passwordEdit.setText(self.__currentIdentity.getPassword()) + self.identEdit.setText(self.__currentIdentity.getIdent()) + self.quitEdit.setText(self.__currentIdentity.getQuitMessage()) + self.partEdit.setText(self.__currentIdentity.getPartMessage()) + self.__updateIdentitiesButtons() self.__updateNicknameUpDownButtons() self.__updateNicknameButtons() + + self.identityTabWidget.setCurrentIndex(0) ## void IdentityDialog::updateIdentity(int index) ## { ## m_insertRememberLineOnAwayChBox->setChecked(m_currentIdentity->getInsertRememberLineOnAway()); @@ -113,13 +135,6 @@ ## automaticAwayGroup->setChecked(m_currentIdentity->getAutomaticAway()); ## m_awayInactivitySpin->setValue(m_currentIdentity->getAwayInactivity()); ## m_automaticUnawayChBox->setChecked(m_currentIdentity->getAutomaticUnaway()); -## -## m_sCommandEdit->setText(m_currentIdentity->getShellCommand()); -## m_codecCBox->setCurrentIndex(Konversation::IRCCharsets::self()->shortNameToIndex(m_currentIdentity->getCodecName())); -## m_loginEdit->setText(m_currentIdentity->getIdent()); -## m_quitEdit->setText(m_currentIdentity->getQuitReason()); -## m_partEdit->setText(m_currentIdentity->getPartReason()); -## m_kickEdit->setText(m_currentIdentity->getKickReason()); ## } def __refreshCurrentIdentity(self): @@ -134,6 +149,10 @@ for row in range(self.nicknamesList.count())]) self.__currentIdentity.setServiceName(self.serviceEdit.text()) self.__currentIdentity.setPassword(self.passwordEdit.text()) + + self.__currentIdentity.setIdent(self.identEdit.text()) + self.__currentIdentity.setQuitMessage(self.quitEdit.text()) + self.__currentIdentity.setPartMessage(self.partEdit.text()) ## ## void IdentityDialog::refreshCurrentIdentity() ## { @@ -146,14 +165,6 @@ ## m_currentIdentity->setAutomaticAway(automaticAwayGroup->isChecked()); ## m_currentIdentity->setAwayInactivity(m_awayInactivitySpin->value()); ## m_currentIdentity->setAutomaticUnaway(m_automaticUnawayChBox->isChecked()); -## -## m_currentIdentity->setShellCommand(m_sCommandEdit->text()); -## if(m_codecCBox->currentIndex() >= 0 && m_codecCBox->currentIndex() < Konversation::IRCCharsets::self()->availableEncodingShortNames().count()) -## m_currentIdentity->setCodecName(Konversation::IRCCharsets::self()->availableEncodingShortNames()[m_codecCBox->currentIndex()]); -## m_currentIdentity->setIdent(m_loginEdit->text()); -## m_currentIdentity->setQuitReason(m_quitEdit->text()); -## m_currentIdentity->setPartReason(m_partEdit->text()); -## m_currentIdentity->setKickReason(m_kickEdit->text()); ## } ## @@ -359,9 +370,9 @@ """ Private slot handling a change of the nick name. """ - itm = self.nicknamesList.currentItem() - if itm: - itm.setText(nick) + sel = self.nicknamesList.selectedItems() + if sel: + sel[0].setText(nick) self.__updateNicknameButtons()
--- a/Network/IRC/IrcIdentitiesEditDialog.ui Sat Dec 01 19:51:46 2012 +0100 +++ b/Network/IRC/IrcIdentitiesEditDialog.ui Sun Dec 02 13:48:01 2012 +0100 @@ -214,6 +214,63 @@ <attribute name="title"> <string>Advanced</string> </attribute> + <layout class="QGridLayout" name="gridLayout_3"> + <item row="0" column="0"> + <widget class="QLabel" name="label_5"> + <property name="text"> + <string>Ident:</string> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QLineEdit" name="identEdit"> + <property name="toolTip"> + <string>Enter the identity to be used to log-on to the server</string> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="label_6"> + <property name="text"> + <string>Reason for Quit:</string> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QLineEdit" name="quitEdit"> + <property name="toolTip"> + <string>Enter a message to be sent when quitting</string> + </property> + </widget> + </item> + <item row="2" column="0"> + <widget class="QLabel" name="label_7"> + <property name="text"> + <string>Reason for Part:</string> + </property> + </widget> + </item> + <item row="2" column="1"> + <widget class="QLineEdit" name="partEdit"> + <property name="toolTip"> + <string>Enter message to be sent when leaving a channel</string> + </property> + </widget> + </item> + <item row="3" column="1"> + <spacer name="verticalSpacer_2"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>291</height> + </size> + </property> + </spacer> + </item> + </layout> </widget> </widget> </item> @@ -245,6 +302,9 @@ <tabstop>nicknameDownButton</tabstop> <tabstop>serviceEdit</tabstop> <tabstop>passwordEdit</tabstop> + <tabstop>identEdit</tabstop> + <tabstop>quitEdit</tabstop> + <tabstop>partEdit</tabstop> <tabstop>buttonBox</tabstop> </tabstops> <resources/>
--- a/Network/IRC/IrcNetworkManager.py Sat Dec 01 19:51:46 2012 +0100 +++ b/Network/IRC/IrcNetworkManager.py Sun Dec 02 13:48:01 2012 +0100 @@ -24,6 +24,9 @@ DefaultIdentityName = "0default" DefaultIdentityDisplay = QCoreApplication.translate("IrcIdentity", "Default Identity") + DefaultQuitMessage = QCoreApplication.translate("IrcIdentity", "IRC for eric5 IDE") + DefaultPartMessage = QCoreApplication.translate("IrcIdentity", "IRC for eric5 IDE") + def __init__(self, name): """ Constructor @@ -38,6 +41,11 @@ self.__serviceName = "" self.__password = "" self.__ident = Utilities.getUserName() + + # TODO: add AWAY handling + + self.__quitMessage = IrcIdentity.DefaultQuitMessage + self.__partMessage = IrcIdentity.DefaultPartMessage def save(self, settings): """ @@ -51,6 +59,8 @@ settings.setValue("NickNames", self.__nickNames) settings.setValue("ServiceName", self.__serviceName) settings.setValue("Password", self.__password) + settings.setValue("QuitMessage", self.__quitMessage) + settings.setValue("PartMessage", self.__partMessage) def load(self, settings): """ @@ -63,6 +73,8 @@ self.__nickNames = Preferences.toList(settings.value("NickNames", [])) self.__serviceName = settings.value("ServiceName", "") self.__password = settings.value("Password", "") + self.__quitMessage = settings.value("QuitMessage", IrcIdentity.DefaultQuitMessage) + self.__partMessage = settings.value("PartMessage", IrcIdentity.DefaultPartMessage) def setName(self, name): """ @@ -160,6 +172,44 @@ """ return pwConvert(self.__password, encode=False) + def setQuitMessage(self, message): + """ + Public method to set the QUIT message. + + @param message QUIT message (string) + """ + if message: + self.__quitMessage = message + else: + self.__quitMessage = IrcIdentity.DefaultQuitMessage + + def getQuitMessage(self): + """ + Public method to get the QUIT message. + + @return QUIT message (string) + """ + return self.__quitMessage + + def setPartMessage(self, message): + """ + Public method to set the PART message. + + @param message PART message (string) + """ + if message: + self.__partMessage = message + else: + self.__partMessage = IrcIdentity.DefaultPartMessage + + def getPartMessage(self): + """ + Public method to get the PART message. + + @return PART message (string) + """ + return self.__partMessage + @classmethod def createDefaultIdentity(cls): """
--- a/Network/IRC/IrcWidget.py Sat Dec 01 19:51:46 2012 +0100 +++ b/Network/IRC/IrcWidget.py Sun Dec 02 13:48:01 2012 +0100 @@ -40,6 +40,7 @@ self.setupUi(self) self.__ircNetworkManager = IrcNetworkManager(self) + self.__ircNetworkManager.dataChanged.connect(self.__networkDataChanged) self.__leaveButton = QToolButton(self) self.__leaveButton.setIcon(UI.PixmapCache.getIcon("ircCloseChannel.png")) @@ -59,6 +60,7 @@ self.__channelTypePrefixes = "" self.__userName = "" self.__identityName = "" + self.__quitMessage = "" self.__nickIndex = -1 self.__nickName = "" self.__server = None @@ -108,7 +110,7 @@ if ok: self.__socket.blockSignals(True) - self.__send("QUIT :" + self.trUtf8("IRC for eric IDE")) + self.__send("QUIT :" + self.__quitMessage) self.__socket.close() self.__socket.deleteLater() else: @@ -132,12 +134,14 @@ @param connect flag indicating to connect (boolean) """ if connect: + # TODO: support SSL connection network = self.__ircNetworkManager.getNetwork(name) if network: self.__server = network.getServer() self.__identityName = network.getIdentityName() identity = self.__ircNetworkManager.getIdentity(self.__identityName) self.__userName = identity.getIdent() + self.__quitMessage = identity.getQuitMessage() if self.__server: self.networkWidget.addServerMessage(self.trUtf8("Info"), self.trUtf8("Looking for server {0} (port {1})...").format( @@ -159,10 +163,11 @@ self.channelsWidget.removeTab(self.channelsWidget.indexOf(channel)) channel.deleteLater() channel = None - self.__send("QUIT :" + self.trUtf8("IRC for eric IDE")) + self.__send("QUIT :" + self.__quitMessage) self.__socket.close() self.__userName = "" self.__identityName = "" + self.__quitMessage = "" def __editNetwork(self, name): """ @@ -173,6 +178,16 @@ dlg = IrcNetworkListDialog(self.__ircNetworkManager, self) dlg.exec_() + def __networkDataChanged(self): + """ + Private slot handling changes of the network and identity definitions. + """ + identity = self.__ircNetworkManager.getIdentity(self.__identityName) + if identity: + partMsg = identity.getPartMessage() + for channel in self.__channelList: + channel.setPartMessage(partMsg) + def __joinChannel(self, name, key=""): """ Private slot to join a channel. @@ -188,7 +203,8 @@ channel = IrcChannelWidget(self) channel.setName(name) channel.setUserName(self.__nickName) - channel.setPartMessage(self.trUtf8("IRC for eric IDE")) + identity = self.__ircNetworkManager.getIdentity(self.__identityName) + channel.setPartMessage(identity.getPartMessage()) channel.setUserPrivilegePrefix(self.__userPrefix) channel.sendData.connect(self.__send) @@ -197,7 +213,10 @@ self.channelsWidget.addTab(channel, name) self.__channelList.append(channel) - self.__send("JOIN " + name) # TODO: add channel key + joinCommand = ["JOIN", name] + if key: + joinCommand.append(key) + self.__send(" ".join(joinCommand)) self.__send("MODE " + name) emptyIndex = self.channelsWidget.indexOf(self.__emptyLabel) @@ -378,6 +397,9 @@ self.networkWidget.addMessage( self.trUtf8("You have left channel {0}.").format(channel)) return True + elif name == "QUIT": + # don't do anything with it here + return True elif name == "NICK": # :foo_!n=foo@foohost.bar.net NICK :newnick oldNick = match.group(1).split("!", 1)[0] @@ -497,7 +519,7 @@ Private method to register to services. """ identity = self.__ircNetworkManager.getIdentity(self.__identityName) - service = identity.getName() + service = identity.getServiceName() password = identity.getPassword() if service and password: self.__send("PRIVMSG " + service + " :identify " + password)