author | zecke <zecke> | 2004-09-06 22:47:48 (UTC) |
---|---|---|
committer | zecke <zecke> | 2004-09-06 22:47:48 (UTC) |
commit | 8f18e8b46dfaaa7e03b9ed1f3faed12da5b30cd5 (patch) (side-by-side diff) | |
tree | 39158cd8abe423cf2df95b5038cdc7848de2e3dc | |
parent | 8bf99aaa1b31e770b21b7bf50407a650a8f5d646 (diff) | |
download | opie-8f18e8b46dfaaa7e03b9ed1f3faed12da5b30cd5.zip opie-8f18e8b46dfaaa7e03b9ed1f3faed12da5b30cd5.tar.gz opie-8f18e8b46dfaaa7e03b9ed1f3faed12da5b30cd5.tar.bz2 |
-Some keyboard handling
-ping notification
merge of zautrixs work
-rw-r--r-- | noncore/net/opieirc/ircchanneltab.cpp | 18 | ||||
-rw-r--r-- | noncore/net/opieirc/ircmessageparser.cpp | 24 | ||||
-rw-r--r-- | noncore/net/opieirc/ircmisc.cpp | 19 | ||||
-rw-r--r-- | noncore/net/opieirc/ircmisc.h | 8 | ||||
-rw-r--r-- | noncore/net/opieirc/ircquerytab.cpp | 9 | ||||
-rw-r--r-- | noncore/net/opieirc/ircservertab.cpp | 15 | ||||
-rw-r--r-- | noncore/net/opieirc/ircservertab.h | 2 | ||||
-rw-r--r-- | noncore/net/opieirc/irctab.cpp | 7 | ||||
-rw-r--r-- | noncore/net/opieirc/irctab.h | 10 | ||||
-rw-r--r-- | noncore/net/opieirc/mainwindow.cpp | 37 | ||||
-rw-r--r-- | noncore/net/opieirc/mainwindow.h | 7 |
11 files changed, 138 insertions, 18 deletions
diff --git a/noncore/net/opieirc/ircchanneltab.cpp b/noncore/net/opieirc/ircchanneltab.cpp index 667e977..b6e3954 100644 --- a/noncore/net/opieirc/ircchanneltab.cpp +++ b/noncore/net/opieirc/ircchanneltab.cpp @@ -24,4 +24,9 @@ IRCChannelTab::IRCChannelTab(IRCChannel *channel, IRCServerTab *parentTab, MainW m_list->setMaximumWidth(LISTWIDTH); 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(this, SIGNAL(editFocus()), m_field, SLOT(setEditFocus())); + QWhatsThis::add(m_field, tr("Type your message here to participate in the channel discussion")); m_popup = new QPopupMenu(m_list); @@ -42,4 +47,6 @@ IRCChannelTab::IRCChannelTab(IRCChannel *channel, IRCServerTab *parentTab, MainW m_layout->add(m_field); m_field->setFocus(); + m_field->setActiveWindow(); + connect(m_field, SIGNAL(returnPressed()), this, SLOT(processCommand())); settingsChanged(); @@ -64,4 +71,13 @@ void IRCChannelTab::appendText(QString text) { m_textview->setText(txt); m_textview->ensureVisible(0, m_textview->contentsHeight()); + + int p1, p2; + 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); + if ( col < p2 ) + emit ping( title() ); + + } + emit changed(this); } @@ -123,5 +139,5 @@ void IRCChannelTab::popupQuery() { IRCQueryTab *tab = m_parentTab->getTabForQuery(person); if (!tab) { - tab = new IRCQueryTab(person, m_parentTab, m_mainWindow, (QWidget *)parent()); + tab = new IRCQueryTab(person, m_parentTab, m_mainWindow, (QWidget *)parent()); m_parentTab->addQueryTab(tab); m_mainWindow->addTab(tab); diff --git a/noncore/net/opieirc/ircmessageparser.cpp b/noncore/net/opieirc/ircmessageparser.cpp index 400ff41..90280d7 100644 --- a/noncore/net/opieirc/ircmessageparser.cpp +++ b/noncore/net/opieirc/ircmessageparser.cpp @@ -4,5 +4,5 @@ /* Lookup table for literal commands */ -IRCLiteralMessageParserStruct IRCMessageParser::literalParserProcTable[] = { +IRCLiteralMessageParserStruct IRCMessageParser::literalParserProcTable[] = { { "PING", FUNC(parseLiteralPing) }, { "NOTICE", FUNC(parseLiteralNotice) }, @@ -21,5 +21,5 @@ IRCLiteralMessageParserStruct IRCMessageParser::literalParserProcTable[] = { /* Lookup table for literal commands */ -IRCCTCPMessageParserStruct IRCMessageParser::ctcpParserProcTable[] = { +IRCCTCPMessageParserStruct IRCMessageParser::ctcpParserProcTable[] = { { "PING", FUNC(parseCTCPPing) }, { "VERSION", FUNC(parseCTCPVersion) }, @@ -29,5 +29,5 @@ IRCCTCPMessageParserStruct IRCMessageParser::ctcpParserProcTable[] = { /* Lookup table for numerical commands */ -IRCNumericalMessageParserStruct IRCMessageParser::numericalParserProcTable[] = { +IRCNumericalMessageParserStruct IRCMessageParser::numericalParserProcTable[] = { { 1, FUNC(parseNumerical001) }, // RPL_WELCOME { 2, FUNC(parseNumerical002) }, // RPL_YOURHOST @@ -172,5 +172,5 @@ void IRCMessageParser::parseLiteralPart(IRCMessage *message) { void IRCMessageParser::parseLiteralPrivMsg(IRCMessage *message) { - if (m_session->m_server->nick() == message->param(0)) { + if (m_session->m_server->nick().lower() == message->param(0).lower() ) { /* IRC Query message detected, verify sender and display it */ IRCPerson mask(message->prefix()); @@ -207,5 +207,5 @@ void IRCMessageParser::parseLiteralPrivMsg(IRCMessage *message) { void IRCMessageParser::parseLiteralNick(IRCMessage *message) { - + IRCPerson mask(message->prefix()); /* this way of handling nick changes really sucks */ @@ -221,5 +221,5 @@ void IRCMessageParser::parseLiteralNick(IRCMessage *message) { if (person) { //IRCOutput output(OUTPUT_NICKCHANGE, tr("%1 is now known as %2").arg( mask.nick() ).arg( message->param(0))); - + /* new code starts here -- this removes the person from all channels */ QList<IRCChannel> channels; @@ -235,5 +235,5 @@ void IRCMessageParser::parseLiteralNick(IRCMessage *message) { emit outputReady(output); } - /* new code ends here */ + /* new code ends here */ } else { emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Nickname change of an unknown person"))); @@ -249,5 +249,5 @@ void IRCMessageParser::parseLiteralQuit(IRCMessage *message) { m_session->getChannelsByPerson(person, channels); QListIterator<IRCChannel> it(channels); - for (;it.current(); ++it) { + for (;it.current(); ++it) { IRCChannelPerson *chanperson = it.current()->getPerson(mask.nick()); it.current()->removePerson(chanperson); @@ -326,5 +326,5 @@ void IRCMessageParser::parseCTCPAction(IRCMessage *message) { } } - + void IRCMessageParser::parseLiteralMode(IRCMessage *message) { IRCPerson mask(message->prefix()); @@ -462,5 +462,5 @@ void IRCMessageParser::parseNumericalNames(IRCMessage *message) { while (!stream.atEnd()) { stream >> temp; - + char flagch = temp.at(0).latin1(); int flag = 0; @@ -468,5 +468,5 @@ void IRCMessageParser::parseNumericalNames(IRCMessage *message) { /* Parse person flags */ if (flagch == '@' || flagch == '+' || flagch=='%' || flagch == '*') { - + nick = temp.right(temp.length()-1); switch (flagch) { @@ -479,5 +479,5 @@ void IRCMessageParser::parseNumericalNames(IRCMessage *message) { nick = temp; } - + IRCChannelPerson *chan_person = new IRCChannelPerson(); IRCPerson *person = m_session->getPerson(nick); diff --git a/noncore/net/opieirc/ircmisc.cpp b/noncore/net/opieirc/ircmisc.cpp index 6d93a34..df6f874 100644 --- a/noncore/net/opieirc/ircmisc.cpp +++ b/noncore/net/opieirc/ircmisc.cpp @@ -67,8 +67,15 @@ void IRCHistoryLineEdit::keyPressEvent(QKeyEvent *event) { m_history.prepend(text()); m_index = -1; - } else if (key == Key_Tab) { - odebug << "got tab" << oendl; + } else if (key == Key_N && event->state() == Qt::ControlButton) { + emit nextTab(); + return; + } else if ( ( key == Key_Y || key == Key_Z ) && event->state() == Qt::ControlButton) { + emit closeTab(); + return; + } else if (key == Key_P && event->state() == Qt::ControlButton) { + emit prevTab(); return; } + QLineEdit::keyPressEvent(event); } @@ -79,5 +86,5 @@ bool IRCHistoryLineEdit::eventFilter(QObject *object, QEvent *event) { /* Catch tab characters */ if (k->key() == Key_Tab) { - odebug << "tab!" << oendl; + emit nextTab(); return TRUE; } @@ -85,2 +92,8 @@ bool IRCHistoryLineEdit::eventFilter(QObject *object, QEvent *event) { return QLineEdit::eventFilter(object, event); } + + +void IRCHistoryLineEdit::setEditFocus() { + setActiveWindow(); + setFocus(); +} diff --git a/noncore/net/opieirc/ircmisc.h b/noncore/net/opieirc/ircmisc.h index b4a5b06..c42dcbd 100644 --- a/noncore/net/opieirc/ircmisc.h +++ b/noncore/net/opieirc/ircmisc.h @@ -62,4 +62,12 @@ public: IRCHistoryLineEdit(QWidget *parent = 0, const char *name = 0); virtual bool eventFilter(QObject *object, QEvent *event); +public slots: + void setEditFocus(); +signals: + void nextTab(); + void prevTab(); + void closeTab(); + + protected: void keyPressEvent(QKeyEvent *); diff --git a/noncore/net/opieirc/ircquerytab.cpp b/noncore/net/opieirc/ircquerytab.cpp index a113b04..1fddc6d 100644 --- a/noncore/net/opieirc/ircquerytab.cpp +++ b/noncore/net/opieirc/ircquerytab.cpp @@ -17,4 +17,9 @@ IRCQueryTab::IRCQueryTab(IRCPerson *person, IRCServerTab *parentTab, MainWindow QWhatsThis::add(m_textview, tr("Private discussion")); 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())); + + QWhatsThis::add(m_field, tr("Type your text here in order to send a message to the other person")); m_layout->add(hbox); @@ -45,4 +50,8 @@ void IRCQueryTab::appendText(QString text) { m_textview->setText(txt); m_textview->ensureVisible(0, m_textview->contentsHeight()); + + if ( IRCServerTab::containsPing( text, m_parentTab ) ) + emit ping( title() ); + emit changed(this); } diff --git a/noncore/net/opieirc/ircservertab.cpp b/noncore/net/opieirc/ircservertab.cpp index d1aab40..2a34c0b 100644 --- a/noncore/net/opieirc/ircservertab.cpp +++ b/noncore/net/opieirc/ircservertab.cpp @@ -3,4 +3,10 @@ #include "ircservertab.h" + +bool IRCServerTab::containsPing( const QString& text, IRCServerTab* tab ) { + return (text.find("ping") != -1 && text.find( tab->server()->nick() != -1)); +} + + IRCServerTab::IRCServerTab(IRCServer server, MainWindow *mainWindow, QWidget *parent, const char *name, WFlags f) : IRCTab(parent, name, f) { m_server = server; @@ -17,4 +23,9 @@ IRCServerTab::IRCServerTab(IRCServer server, MainWindow *mainWindow, QWidget *pa m_layout->add(m_textview); 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(this, SIGNAL(editFocus()), m_field, SLOT(setEditFocus())); + QWhatsThis::add(m_field, tr("Type commands here. A list of available commands can be found inside the OpieIRC help")); m_layout->add(m_field); @@ -122,5 +133,5 @@ void IRCServerTab::executeCommand(IRCTab *tab, QString line) { QString nickname; stream >> nickname; - if (nickname.length() > 0) { + if (nickname.length() > 0) { QString text = line.right(line.length()-nickname.length()-5); IRCPerson person; @@ -129,5 +140,5 @@ void IRCServerTab::executeCommand(IRCTab *tab, QString line) { } } - + //SEND MODES else if (command == "MODE"){ diff --git a/noncore/net/opieirc/ircservertab.h b/noncore/net/opieirc/ircservertab.h index 48200d7..69543fc 100644 --- a/noncore/net/opieirc/ircservertab.h +++ b/noncore/net/opieirc/ircservertab.h @@ -34,4 +34,6 @@ class IRCServerTab : public IRCTab { Q_OBJECT public: + static bool containsPing(const QString& text, IRCServerTab *tab); + /* IRCTab implementation */ IRCServerTab(IRCServer server, MainWindow *mainWindow, QWidget *parent = 0, const char *name = 0, WFlags f = 0); diff --git a/noncore/net/opieirc/irctab.cpp b/noncore/net/opieirc/irctab.cpp index 3351c3b..8e1dc16 100644 --- a/noncore/net/opieirc/irctab.cpp +++ b/noncore/net/opieirc/irctab.cpp @@ -3,4 +3,5 @@ #include <qwhatsthis.h> #include "irctab.h" +#include "mainwindow.h" QString IRCTab::m_errorColor; @@ -37,2 +38,8 @@ int IRCTab::id() { return m_id; } + +void IRCTab::showEvent( QShowEvent *ev ) { + topLevelWidget()->setCaption( MainWindow::appCaption() + " " + title() ); + QWidget::showEvent( ev ); + emit editFocus(); +} diff --git a/noncore/net/opieirc/irctab.h b/noncore/net/opieirc/irctab.h index 7a2d0a2..6c29ea5 100644 --- a/noncore/net/opieirc/irctab.h +++ b/noncore/net/opieirc/irctab.h @@ -44,7 +44,17 @@ public: signals: void changed(IRCTab *); + void ping(const QString& ); + void nextTab(); + void prevTab(); + void closeTab(); + void editFocus(); + public slots: virtual void remove() = 0; virtual void settingsChanged() = 0; + +protected: + void showEvent( QShowEvent* ); + protected: QLabel *m_description; diff --git a/noncore/net/opieirc/mainwindow.cpp b/noncore/net/opieirc/mainwindow.cpp index 0923a11..1143213 100644 --- a/noncore/net/opieirc/mainwindow.cpp +++ b/noncore/net/opieirc/mainwindow.cpp @@ -8,4 +8,9 @@ #include "ircsettings.h" +QString MainWindow::appCaption() { + return QObject::tr("Opie IRC"); +} + + MainWindow::MainWindow(QWidget *parent, const char *name, WFlags) : QMainWindow(parent, name, WStyle_ContextHelp) { setCaption(tr("IRC Client")); @@ -53,4 +58,9 @@ void MainWindow::selected(QWidget *) { void MainWindow::addTab(IRCTab *tab) { connect(tab, SIGNAL(changed(IRCTab*)), this, SLOT(changeEvent(IRCTab*))); + connect(tab, SIGNAL(ping (const QString&)), this, SLOT(slotPing(const QString&))); + connect(tab, SIGNAL(nextTab()), this, SLOT(slotNextTab())); + connect(tab, SIGNAL(prevTab()), this, SLOT(slotPrevTab())); + connect(tab, SIGNAL(closeTab()), this, SLOT(slotCloseTab())); + m_tabWidget->addTab(tab, tab->title()); m_tabWidget->showPage(tab); @@ -90,2 +100,29 @@ void MainWindow::settings() { } } + + +void MainWindow::slotNextTab() { + int i = m_tabWidget->currentPageIndex (); + m_tabWidget->setCurrentPage ( i+1 ); + + int j = m_tabWidget->currentPageIndex (); + if ( i == j ) + m_tabWidget->setCurrentPage ( 1 ); +} + +void MainWindow::slotPrevTab() { + int i = m_tabWidget->currentPageIndex (); + if ( i > 1 ) + m_tabWidget->setCurrentPage ( i-1 ); +} + +void MainWindow::slotCloseTab() { + IRCTab *tab = (IRCTab *) m_tabWidget->currentPage (); + if ( tab ) + killTab ( tab ); +} + +void MainWindow::slotPing( const QString& channel ) { + raise(); +} + diff --git a/noncore/net/opieirc/mainwindow.h b/noncore/net/opieirc/mainwindow.h index 0f60855..945fc71 100644 --- a/noncore/net/opieirc/mainwindow.h +++ b/noncore/net/opieirc/mainwindow.h @@ -37,4 +37,5 @@ public: void killTab(IRCTab *tab); static QString appName() { return QString::fromLatin1("opieirc"); } + static QString appCaption(); signals: void updateScroll(); @@ -44,4 +45,10 @@ protected slots: void selected(QWidget *); void changeEvent(IRCTab *); + + void slotNextTab(); + void slotPrevTab(); + void slotCloseTab(); + void slotPing(const QString&); + protected: void loadSettings(); |