-rw-r--r-- | noncore/net/opieirc/.cvsignore | 3 | ||||
-rw-r--r-- | noncore/net/opieirc/ircchanneltab.cpp | 22 | ||||
-rw-r--r-- | noncore/net/opieirc/ircchanneltab.h | 2 | ||||
-rw-r--r-- | noncore/net/opieirc/ircmessageparser.cpp | 34 | ||||
-rw-r--r-- | noncore/net/opieirc/ircmisc.cpp | 5 | ||||
-rw-r--r-- | noncore/net/opieirc/ircmisc.h | 3 | ||||
-rw-r--r-- | noncore/net/opieirc/ircquerytab.cpp | 9 | ||||
-rw-r--r-- | noncore/net/opieirc/ircserverlist.cpp | 9 | ||||
-rw-r--r-- | noncore/net/opieirc/ircserverlist.h | 3 | ||||
-rw-r--r-- | noncore/net/opieirc/ircservertab.cpp | 25 | ||||
-rw-r--r-- | noncore/net/opieirc/ircsettings.cpp | 18 | ||||
-rw-r--r-- | noncore/net/opieirc/ircsettings.h | 2 | ||||
-rw-r--r-- | noncore/net/opieirc/irctab.cpp | 16 | ||||
-rw-r--r-- | noncore/net/opieirc/irctab.h | 4 | ||||
-rw-r--r-- | noncore/net/opieirc/mainwindow.cpp | 32 | ||||
-rw-r--r-- | noncore/net/opieirc/mainwindow.h | 7 |
16 files changed, 155 insertions, 39 deletions
diff --git a/noncore/net/opieirc/.cvsignore b/noncore/net/opieirc/.cvsignore index d5423d6..0ccbade 100644 --- a/noncore/net/opieirc/.cvsignore +++ b/noncore/net/opieirc/.cvsignore @@ -3,2 +3,3 @@ Makefile.in moc_*.cpp -.moc
\ No newline at end of file +.moc +*.gch
\ No newline at end of file diff --git a/noncore/net/opieirc/ircchanneltab.cpp b/noncore/net/opieirc/ircchanneltab.cpp index b6e3954..7610058 100644 --- a/noncore/net/opieirc/ircchanneltab.cpp +++ b/noncore/net/opieirc/ircchanneltab.cpp @@ -17,2 +17,3 @@ IRCChannelTab::IRCChannelTab(IRCChannel *channel, IRCServerTab *parentTab, MainW m_listButton = new QPushButton(">", m_textview); + m_listButton->setFlat( true ); m_textview->setCornerWidget(m_listButton); @@ -27,3 +28,3 @@ IRCChannelTab::IRCChannelTab(IRCChannel *channel, IRCServerTab *parentTab, MainW connect(m_field, SIGNAL(prevTab()), this, SIGNAL(prevTab())); - connect(m_field, SIGNAL(closeTab()), this, SIGNAL(closeTab())); + connect(m_field, SIGNAL(closeTab()), this, SLOT(remove())); connect(this, SIGNAL(editFocus()), m_field, SLOT(setEditFocus())); @@ -38,3 +39,2 @@ IRCChannelTab::IRCChannelTab(IRCChannel *channel, IRCServerTab *parentTab, MainW QPopupMenu *ctcpMenu = new QPopupMenu(m_list); - m_popup->insertItem(Resource::loadPixmap("opieirc/ctcp"), tr("CTCP"), ctcpMenu); m_popup->insertItem(Resource::loadPixmap("opieirc/query"), tr("Query"), this, SLOT(popupQuery())); @@ -51,2 +51,3 @@ IRCChannelTab::IRCChannelTab(IRCChannel *channel, IRCServerTab *parentTab, MainW connect(m_field, SIGNAL(returnPressed()), this, SLOT(processCommand())); + connect(m_list, SIGNAL(doubleClicked ( QListBoxItem * ) ), this, SLOT(popupQuery( QListBoxItem * ) )); settingsChanged(); @@ -60,3 +61,3 @@ void IRCChannelTab::appendText(QString text) { /* not using append because it creates layout problems */ - QString txt = m_textview->text() + text + "\n"; + QString txt = m_textview->text() + IRCTab::appendTimestamp( text ); if (m_maxLines > 0 && m_lines >= m_maxLines) { @@ -74,3 +75,5 @@ void IRCChannelTab::appendText(QString text) { int p1, p2; - if ( (p1 = text.find("ping", 0, false) )!= -1 && (p2 = text.find( m_parentTab->server()->nick(), 0,false )) != -1 ) { + if ( text.contains( IRCMessageParser::tr("Received a CTCP PING from ") ) ) + emit ping( title() ); + else if ( (p1 = text.find("ping", 0, false) )!= -1 && (p2 = text.find( m_parentTab->server()->nick(), 0,false )) != -1 ) { int col = text.findRev("color", -1, false); @@ -134,5 +137,5 @@ void IRCChannelTab::mouseButtonPressed(int mouse, QListBoxItem *, const QPoint & -void IRCChannelTab::popupQuery() { - if (m_list->currentItem() != -1) { - IRCPerson *person = session()->getPerson(m_list->item(m_list->currentItem())->text()); +void IRCChannelTab::popupQuery( QListBoxItem *item) { + if (item) { + IRCPerson *person = session()->getPerson(item->text()); if (person) { @@ -148,2 +151,7 @@ void IRCChannelTab::popupQuery() { +void IRCChannelTab::popupQuery() { + if ( m_list->currentItem() != -1 ) + popupQuery( m_list->item(m_list->currentItem())); +} + void IRCChannelTab::popupPing() { diff --git a/noncore/net/opieirc/ircchanneltab.h b/noncore/net/opieirc/ircchanneltab.h index 001c96d..70b212c 100644 --- a/noncore/net/opieirc/ircchanneltab.h +++ b/noncore/net/opieirc/ircchanneltab.h @@ -55,3 +55,5 @@ protected slots: /* Popup slots */ + void popupQuery(QListBoxItem*); void popupQuery(); + void popupPing(); diff --git a/noncore/net/opieirc/ircmessageparser.cpp b/noncore/net/opieirc/ircmessageparser.cpp index 90280d7..ecc7e9a 100644 --- a/noncore/net/opieirc/ircmessageparser.cpp +++ b/noncore/net/opieirc/ircmessageparser.cpp @@ -285,2 +285,36 @@ void IRCMessageParser::parseCTCPPing(IRCMessage *message) { emit outputReady(IRCOutput(OUTPUT_CTCP, tr("Received a CTCP PING from ")+mask.nick())); + + //IRCPerson mask(message->prefix()); + QString dest = message->ctcpDestination(); + if (dest.startsWith("#")) { + IRCChannel *channel = m_session->getChannel(dest.lower()); + if (channel) { + IRCChannelPerson *person = channel->getPerson(mask.nick()); + if (person) { + IRCOutput output(OUTPUT_CHANACTION, tr("Received a CTCP PING from ")+ mask.nick()) ; + output.addParam(channel); + output.addParam(person); + emit outputReady(output); + } else { + emit outputReady(IRCOutput(OUTPUT_ERROR, tr("CTCP PING with unknown person - Desynchronized?"))); + } + } else { + emit outputReady(IRCOutput(OUTPUT_ERROR, tr("CTCP PING with unknown channel - Desynchronized?"))); + } + } else { + if (message->ctcpDestination() == m_session->m_server->nick()) { + IRCPerson *person = m_session->getPerson(mask.nick()); + if (!person) { + /* Person not yet known, create and add to the current session */ + person = new IRCPerson(message->prefix()); + m_session->addPerson(person); + } + IRCOutput output(OUTPUT_QUERYACTION, tr("Received a CTCP PING from ")+ mask.nick() ); + output.addParam(person); + emit outputReady(output); + } else { + emit outputReady(IRCOutput(OUTPUT_ERROR, tr("CTCP PING with bad recipient"))); + } + } + } diff --git a/noncore/net/opieirc/ircmisc.cpp b/noncore/net/opieirc/ircmisc.cpp index 9b9bff8..6fc5ba0 100644 --- a/noncore/net/opieirc/ircmisc.cpp +++ b/noncore/net/opieirc/ircmisc.cpp @@ -69,2 +69,5 @@ OKeyConfigManager* IRCHistoryLineEdit::keyConfigInstance() { KeyPrevTab, OKeyPair(Qt::Key_P, Qt::ControlButton) )); + s_manager->addKeyConfig( OKeyConfigItem( tr("Close Tab"), "close_tab", + QPixmap(), KeyCloseTab, + OKeyPair(Qt::Key_C, Qt::ControlButton) )); s_manager->load(); @@ -109,2 +112,4 @@ void IRCHistoryLineEdit::keyPressEvent(QKeyEvent *event) { return; + case KeyCloseTab: + emit closeTab(); default: diff --git a/noncore/net/opieirc/ircmisc.h b/noncore/net/opieirc/ircmisc.h index 37eed28..3cf64df 100644 --- a/noncore/net/opieirc/ircmisc.h +++ b/noncore/net/opieirc/ircmisc.h @@ -70,3 +70,4 @@ public: KeyNextTab, - KeyPrevTab + KeyPrevTab, + KeyCloseTab }; diff --git a/noncore/net/opieirc/ircquerytab.cpp b/noncore/net/opieirc/ircquerytab.cpp index 1fddc6d..53474b9 100644 --- a/noncore/net/opieirc/ircquerytab.cpp +++ b/noncore/net/opieirc/ircquerytab.cpp @@ -18,6 +18,7 @@ IRCQueryTab::IRCQueryTab(IRCPerson *person, IRCServerTab *parentTab, MainWindow m_field = new IRCHistoryLineEdit(this); + connect(m_field, SIGNAL(nextTab()), this, SIGNAL(nextTab())); connect(m_field, SIGNAL(prevTab()), this, SIGNAL(prevTab())); - connect(m_field, SIGNAL(closeTab()),this, SIGNAL(closeTab())); - + connect(m_field, SIGNAL(closeTab()),this, SLOT(remove())); + connect(this, SIGNAL(editFocus()), m_field, SLOT(setEditFocus())); @@ -27,3 +28,3 @@ IRCQueryTab::IRCQueryTab(IRCPerson *person, IRCServerTab *parentTab, MainWindow m_layout->add(m_field); - m_field->setFocus(); + connect(m_field, SIGNAL(returnPressed()), this, SLOT(processCommand())); @@ -31,2 +32,4 @@ IRCQueryTab::IRCQueryTab(IRCPerson *person, IRCServerTab *parentTab, MainWindow settingsChanged(); + m_field->setFocus(); + m_field->setActiveWindow(); } diff --git a/noncore/net/opieirc/ircserverlist.cpp b/noncore/net/opieirc/ircserverlist.cpp index 62bfc17..3e78469 100644 --- a/noncore/net/opieirc/ircserverlist.cpp +++ b/noncore/net/opieirc/ircserverlist.cpp @@ -84,2 +84,7 @@ IRCServerList::IRCServerList(QWidget* parent, const char *name, bool modal, WFla + connect(m_list, SIGNAL(doubleClicked(QListBoxItem*)), + this, SLOT(acceptOnClick(QListBoxItem *))); + connect(m_list, SIGNAL(returnPressed(QListBoxItem*)), + this, SLOT(acceptOnClick(QListBoxItem*))); + QPEApplication::showDialog( this ); @@ -124,2 +129,6 @@ void IRCServerList::editServer() +void IRCServerList::acceptOnClick( QListBoxItem* ) { + accept(); +} + int IRCServerList::exec() diff --git a/noncore/net/opieirc/ircserverlist.h b/noncore/net/opieirc/ircserverlist.h index d61210e..869b26f 100644 --- a/noncore/net/opieirc/ircserverlist.h +++ b/noncore/net/opieirc/ircserverlist.h @@ -38,3 +38,3 @@ public: IRCServer server(); - + ~IRCServerList(); @@ -44,2 +44,3 @@ public slots: void editServer(); + void acceptOnClick(QListBoxItem*); protected: diff --git a/noncore/net/opieirc/ircservertab.cpp b/noncore/net/opieirc/ircservertab.cpp index 2a34c0b..5ca7a29 100644 --- a/noncore/net/opieirc/ircservertab.cpp +++ b/noncore/net/opieirc/ircservertab.cpp @@ -6,3 +6,4 @@ bool IRCServerTab::containsPing( const QString& text, IRCServerTab* tab ) { - return (text.find("ping") != -1 && text.find( tab->server()->nick() != -1)); + return (text.contains(IRCMessageParser::tr("Received a CTCP PING from "))) || + (text.find("ping") != -1 && text.find( tab->server()->nick() != -1)); } @@ -32,3 +33,2 @@ IRCServerTab::IRCServerTab(IRCServer server, MainWindow *mainWindow, QWidget *pa connect(m_field, SIGNAL(returnPressed()), this, SLOT(processCommand())); - m_field->setFocus(); connect(m_session, SIGNAL(outputReady(IRCOutput)), this, SLOT(display(IRCOutput))); @@ -36,2 +36,6 @@ IRCServerTab::IRCServerTab(IRCServer server, MainWindow *mainWindow, QWidget *pa settingsChanged(); + + m_field->setFocus(); + m_field->setActiveWindow(); + } @@ -45,3 +49,6 @@ void IRCServerTab::appendText(QString text) { /* not using append because it creates layout problems */ - QString txt = m_textview->text() + text + "\n"; + QString txt = m_textview->text() + IRCTab::appendTimestamp( text ); + + + if (m_maxLines > 0 && m_lines >= m_maxLines) { @@ -236,3 +243,3 @@ void IRCServerTab::remove() { while (m_channelTabs.current() != 0) { - m_mainWindow->killTab(m_channelTabs.current()); + m_mainWindow->killTab(m_channelTabs.current(), true); } @@ -240,3 +247,3 @@ void IRCServerTab::remove() { while (m_queryTabs.current() != 0) { - m_mainWindow->killTab(m_queryTabs.current()); + m_mainWindow->killTab(m_queryTabs.current(), true); } @@ -274,3 +281,3 @@ void IRCServerTab::display(IRCOutput output) { while (m_channelTabs.current() != 0) { - m_mainWindow->killTab(m_channelTabs.current()); + m_mainWindow->killTab(m_channelTabs.current(), true); } @@ -278,3 +285,3 @@ void IRCServerTab::display(IRCOutput output) { while (m_queryTabs.current() != 0) { - m_mainWindow->killTab(m_queryTabs.current()); + m_mainWindow->killTab(m_queryTabs.current(), true); } @@ -314,3 +321,3 @@ void IRCServerTab::display(IRCOutput output) { if (channelTab) - m_mainWindow->killTab(channelTab); + m_mainWindow->killTab(channelTab, true); } @@ -321,3 +328,3 @@ void IRCServerTab::display(IRCOutput output) { if (channelTab) - m_mainWindow->killTab(channelTab); + m_mainWindow->killTab(channelTab, true); } diff --git a/noncore/net/opieirc/ircsettings.cpp b/noncore/net/opieirc/ircsettings.cpp index 1fba030..7a1dd6c 100644 --- a/noncore/net/opieirc/ircsettings.cpp +++ b/noncore/net/opieirc/ircsettings.cpp @@ -14,2 +14,3 @@ #include <qwhatsthis.h> +#include <qcheckbox.h> @@ -27,3 +28,3 @@ IRCSettings::IRCSettings(QWidget* parent, const char* name, bool modal, WFlags) QWidget *genwidget = new QWidget(tw); - QGridLayout *layout = new QGridLayout(genwidget, 1, 2, 5, 0); + QGridLayout *layout = new QGridLayout(genwidget, 1, 4, 5, 0); QLabel *label = new QLabel(tr("Lines displayed :"), genwidget); @@ -37,2 +38,15 @@ IRCSettings::IRCSettings(QWidget* parent, const char* name, bool modal, WFlags) layout->addWidget(m_lines, 0, 1); + + /* + * include timestamp + */ + m_displayTime = new QCheckBox( tr("Display time in chat log"), genwidget ); + m_displayTime->setChecked( m_config->readBoolEntry("DisplayTime", false) ); + layout->addMultiCellWidget(m_displayTime, 1, 1, 0, 4 ); + + // add a spacer + layout->addItem( new QSpacerItem(1,1, QSizePolicy::Minimum, + QSizePolicy::MinimumExpanding), + 2, 0 ); + tw->addTab(genwidget, "opieirc/settings", tr("General")); @@ -119,2 +133,4 @@ void IRCSettings::accept() m_config->writeEntry("Lines", m_lines->text()); + m_config->writeEntry("DisplayTime", m_displayTime->isChecked() ); + IRCTab::setUseTimeStamps(m_displayTime->isChecked()); IRCHistoryLineEdit::keyConfigInstance()->save(); diff --git a/noncore/net/opieirc/ircsettings.h b/noncore/net/opieirc/ircsettings.h index a032aff..b51d535 100644 --- a/noncore/net/opieirc/ircsettings.h +++ b/noncore/net/opieirc/ircsettings.h @@ -34,2 +34,3 @@ class OKeyConfigWidget; +class QCheckBox; class IRCSettings : public QDialog { @@ -52,2 +53,3 @@ protected: QLineEdit *m_lines; + QCheckBox *m_displayTime; }; diff --git a/noncore/net/opieirc/irctab.cpp b/noncore/net/opieirc/irctab.cpp index 2b3ecd4..fbbf303 100644 --- a/noncore/net/opieirc/irctab.cpp +++ b/noncore/net/opieirc/irctab.cpp @@ -20,2 +20,18 @@ int IRCTab::m_maxLines; + +static bool g_useTime = false; + +void IRCTab::setUseTimeStamps( bool b ) { + g_useTime = b; +} + +// ## FIXME use TimeString later for AM/PM Setting +QString IRCTab::appendTimestamp( const QString& text ) { + return g_useTime ? + "[" +QTime::currentTime().toString()+"]" + text + "\n" : + text + "\n"; + +} + + IRCTab::IRCTab(QWidget *parent, const char *name, WFlags f) : QWidget(parent, name, f) { diff --git a/noncore/net/opieirc/irctab.h b/noncore/net/opieirc/irctab.h index 6c29ea5..d17c530 100644 --- a/noncore/net/opieirc/irctab.h +++ b/noncore/net/opieirc/irctab.h @@ -40,2 +40,6 @@ public: int id(); + + static void setUseTimeStamps(bool b); + static QString appendTimestamp(const QString& tex); + virtual QString title() = 0; diff --git a/noncore/net/opieirc/mainwindow.cpp b/noncore/net/opieirc/mainwindow.cpp index 2e674c5..2562f33 100644 --- a/noncore/net/opieirc/mainwindow.cpp +++ b/noncore/net/opieirc/mainwindow.cpp @@ -50,2 +50,3 @@ void MainWindow::loadSettings() { IRCTab::m_maxLines = config.readNumEntry("Lines", 100); + IRCTab::setUseTimeStamps( config.readBoolEntry("DisplayTime", false ) ); } @@ -62,3 +63,2 @@ void MainWindow::addTab(IRCTab *tab) { connect(tab, SIGNAL(prevTab()), this, SLOT(slotPrevTab())); - connect(tab, SIGNAL(closeTab()), this, SLOT(slotCloseTab())); @@ -75,8 +75,20 @@ void MainWindow::changeEvent(IRCTab *tab) { -void MainWindow::killTab(IRCTab *tab) { - m_tabWidget->removePage(tab); - m_tabs.remove(tab); +void MainWindow::killTab(IRCTab *tab, bool imediate) { + m_toDelete.append( tab ); - /* there might be nicer ways to do this .. */ - delete tab; + if ( imediate ) + slotKillTabsLater(); + else + QTimer::singleShot(0, this, SLOT(slotKillTabsLater()) ); +} + +void MainWindow::slotKillTabsLater() { + for ( QListIterator<IRCTab> it(m_toDelete); it.current(); ++it ) { + m_tabWidget->removePage( it.current() ); + m_tabs.remove( it.current() ); + } + + m_toDelete.setAutoDelete( true ); + m_toDelete.clear(); + m_toDelete.setAutoDelete( false ); } @@ -119,9 +131,3 @@ void MainWindow::slotPrevTab() { -void MainWindow::slotCloseTab() { - IRCTab *tab = (IRCTab *) m_tabWidget->currentPage (); - if ( tab ) - killTab ( tab ); -} - -void MainWindow::slotPing( const QString& channel ) { +void MainWindow::slotPing( const QString& /*channel*/ ) { raise(); diff --git a/noncore/net/opieirc/mainwindow.h b/noncore/net/opieirc/mainwindow.h index 945fc71..abf205d 100644 --- a/noncore/net/opieirc/mainwindow.h +++ b/noncore/net/opieirc/mainwindow.h @@ -36,3 +36,3 @@ public: void addTab(IRCTab *tab); - void killTab(IRCTab *tab); + void killTab(IRCTab *tab, bool now = false); static QString appName() { return QString::fromLatin1("opieirc"); } @@ -48,5 +48,5 @@ protected slots: void slotNextTab(); - void slotPrevTab(); - void slotCloseTab(); + void slotPrevTab(); void slotPing(const QString&); + void slotKillTabsLater(); @@ -57,2 +57,3 @@ protected: QList<IRCTab> m_tabs; + QList<IRCTab> m_toDelete; }; |