summaryrefslogtreecommitdiff
authorzecke <zecke>2004-09-08 21:51:06 (UTC)
committer zecke <zecke>2004-09-08 21:51:06 (UTC)
commitebb830522c9662bda4c4453e532bcc29631c5d60 (patch) (side-by-side diff)
tree5cf95975e91cb2db78be5cdf47c01a340109c1f4
parentf0fdb800d57e9a1d95ba593185e9462300539eea (diff)
downloadopie-ebb830522c9662bda4c4453e532bcc29631c5d60.zip
opie-ebb830522c9662bda4c4453e532bcc29631c5d60.tar.gz
opie-ebb830522c9662bda4c4453e532bcc29631c5d60.tar.bz2
-Close Tab Keyboard Accelerator with delayed deletion of the tab
-Optionally add a TimeStamp to the Tab -Remove not implemented CTCP actions from the Channel PopupMenu -Give Focus to the Edit Line -Some more ping handling patch inspired and copied from zautrix fork
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/opieirc/.cvsignore3
-rw-r--r--noncore/net/opieirc/ircchanneltab.cpp22
-rw-r--r--noncore/net/opieirc/ircchanneltab.h2
-rw-r--r--noncore/net/opieirc/ircmessageparser.cpp34
-rw-r--r--noncore/net/opieirc/ircmisc.cpp5
-rw-r--r--noncore/net/opieirc/ircmisc.h3
-rw-r--r--noncore/net/opieirc/ircquerytab.cpp9
-rw-r--r--noncore/net/opieirc/ircserverlist.cpp9
-rw-r--r--noncore/net/opieirc/ircserverlist.h3
-rw-r--r--noncore/net/opieirc/ircservertab.cpp25
-rw-r--r--noncore/net/opieirc/ircsettings.cpp18
-rw-r--r--noncore/net/opieirc/ircsettings.h2
-rw-r--r--noncore/net/opieirc/irctab.cpp16
-rw-r--r--noncore/net/opieirc/irctab.h4
-rw-r--r--noncore/net/opieirc/mainwindow.cpp32
-rw-r--r--noncore/net/opieirc/mainwindow.h7
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;
};