author | zecke <zecke> | 2004-09-08 21:51:06 (UTC) |
---|---|---|
committer | zecke <zecke> | 2004-09-08 21:51:06 (UTC) |
commit | ebb830522c9662bda4c4453e532bcc29631c5d60 (patch) (unidiff) | |
tree | 5cf95975e91cb2db78be5cdf47c01a340109c1f4 /noncore/net | |
parent | f0fdb800d57e9a1d95ba593185e9462300539eea (diff) | |
download | opie-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
-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 | |||
@@ -2,3 +2,4 @@ Makefile | |||
2 | Makefile.in | 2 | Makefile.in |
3 | moc_*.cpp | 3 | moc_*.cpp |
4 | .moc \ No newline at end of file | 4 | .moc |
5 | *.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 | |||
@@ -16,4 +16,5 @@ IRCChannelTab::IRCChannelTab(IRCChannel *channel, IRCServerTab *parentTab, MainW | |||
16 | m_listVisible = TRUE; | 16 | m_listVisible = TRUE; |
17 | m_listButton = new QPushButton(">", m_textview); | 17 | m_listButton = new QPushButton(">", m_textview); |
18 | m_listButton->setFlat( true ); | ||
18 | m_textview->setCornerWidget(m_listButton); | 19 | m_textview->setCornerWidget(m_listButton); |
19 | m_textview->setTextFormat(RichText); | 20 | m_textview->setTextFormat(RichText); |
@@ -26,5 +27,5 @@ IRCChannelTab::IRCChannelTab(IRCChannel *channel, IRCServerTab *parentTab, MainW | |||
26 | connect(m_field, SIGNAL(nextTab()), this, SIGNAL(nextTab())); | 27 | connect(m_field, SIGNAL(nextTab()), this, SIGNAL(nextTab())); |
27 | connect(m_field, SIGNAL(prevTab()), this, SIGNAL(prevTab())); | 28 | connect(m_field, SIGNAL(prevTab()), this, SIGNAL(prevTab())); |
28 | connect(m_field, SIGNAL(closeTab()), this, SIGNAL(closeTab())); | 29 | connect(m_field, SIGNAL(closeTab()), this, SLOT(remove())); |
29 | connect(this, SIGNAL(editFocus()), m_field, SLOT(setEditFocus())); | 30 | connect(this, SIGNAL(editFocus()), m_field, SLOT(setEditFocus())); |
30 | 31 | ||
@@ -37,5 +38,4 @@ IRCChannelTab::IRCChannelTab(IRCChannel *channel, IRCServerTab *parentTab, MainW | |||
37 | /* Construct the popup menu */ | 38 | /* Construct the popup menu */ |
38 | QPopupMenu *ctcpMenu = new QPopupMenu(m_list); | 39 | QPopupMenu *ctcpMenu = new QPopupMenu(m_list); |
39 | m_popup->insertItem(Resource::loadPixmap("opieirc/ctcp"), tr("CTCP"), ctcpMenu); | ||
40 | m_popup->insertItem(Resource::loadPixmap("opieirc/query"), tr("Query"), this, SLOT(popupQuery())); | 40 | m_popup->insertItem(Resource::loadPixmap("opieirc/query"), tr("Query"), this, SLOT(popupQuery())); |
41 | ctcpMenu->insertItem(Resource::loadPixmap("opieirc/ping"), tr("Ping"), this, SLOT(popupPing())); | 41 | ctcpMenu->insertItem(Resource::loadPixmap("opieirc/ping"), tr("Ping"), this, SLOT(popupPing())); |
@@ -50,4 +50,5 @@ IRCChannelTab::IRCChannelTab(IRCChannel *channel, IRCServerTab *parentTab, MainW | |||
50 | 50 | ||
51 | connect(m_field, SIGNAL(returnPressed()), this, SLOT(processCommand())); | 51 | connect(m_field, SIGNAL(returnPressed()), this, SLOT(processCommand())); |
52 | connect(m_list, SIGNAL(doubleClicked ( QListBoxItem * ) ), this, SLOT(popupQuery( QListBoxItem * ) )); | ||
52 | settingsChanged(); | 53 | settingsChanged(); |
53 | } | 54 | } |
@@ -59,5 +60,5 @@ void IRCChannelTab::scrolling(){ | |||
59 | void IRCChannelTab::appendText(QString text) { | 60 | void IRCChannelTab::appendText(QString text) { |
60 | /* not using append because it creates layout problems */ | 61 | /* not using append because it creates layout problems */ |
61 | QString txt = m_textview->text() + text + "\n"; | 62 | QString txt = m_textview->text() + IRCTab::appendTimestamp( text ); |
62 | if (m_maxLines > 0 && m_lines >= m_maxLines) { | 63 | if (m_maxLines > 0 && m_lines >= m_maxLines) { |
63 | int firstBreak = txt.find('\n'); | 64 | int firstBreak = txt.find('\n'); |
@@ -73,5 +74,7 @@ void IRCChannelTab::appendText(QString text) { | |||
73 | 74 | ||
74 | int p1, p2; | 75 | int p1, p2; |
75 | if ( (p1 = text.find("ping", 0, false) )!= -1 && (p2 = text.find( m_parentTab->server()->nick(), 0,false )) != -1 ) { | 76 | if ( text.contains( IRCMessageParser::tr("Received a CTCP PING from ") ) ) |
77 | emit ping( title() ); | ||
78 | else if ( (p1 = text.find("ping", 0, false) )!= -1 && (p2 = text.find( m_parentTab->server()->nick(), 0,false )) != -1 ) { | ||
76 | int col = text.findRev("color", -1, false); | 79 | int col = text.findRev("color", -1, false); |
77 | if ( col < p2 ) | 80 | if ( col < p2 ) |
@@ -133,7 +136,7 @@ void IRCChannelTab::mouseButtonPressed(int mouse, QListBoxItem *, const QPoint & | |||
133 | } | 136 | } |
134 | 137 | ||
135 | void IRCChannelTab::popupQuery() { | 138 | void IRCChannelTab::popupQuery( QListBoxItem *item) { |
136 | if (m_list->currentItem() != -1) { | 139 | if (item) { |
137 | IRCPerson *person = session()->getPerson(m_list->item(m_list->currentItem())->text()); | 140 | IRCPerson *person = session()->getPerson(item->text()); |
138 | if (person) { | 141 | if (person) { |
139 | IRCQueryTab *tab = m_parentTab->getTabForQuery(person); | 142 | IRCQueryTab *tab = m_parentTab->getTabForQuery(person); |
@@ -147,4 +150,9 @@ void IRCChannelTab::popupQuery() { | |||
147 | } | 150 | } |
148 | 151 | ||
152 | void IRCChannelTab::popupQuery() { | ||
153 | if ( m_list->currentItem() != -1 ) | ||
154 | popupQuery( m_list->item(m_list->currentItem())); | ||
155 | } | ||
156 | |||
149 | void IRCChannelTab::popupPing() { | 157 | void IRCChannelTab::popupPing() { |
150 | //HAHA, no wonder these don't work | 158 | //HAHA, no wonder these don't work |
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 | |||
@@ -54,5 +54,7 @@ protected slots: | |||
54 | void mouseButtonPressed(int mouse, QListBoxItem *item, const QPoint &point); | 54 | void mouseButtonPressed(int mouse, QListBoxItem *item, const QPoint &point); |
55 | /* Popup slots */ | 55 | /* Popup slots */ |
56 | void popupQuery(QListBoxItem*); | ||
56 | void popupQuery(); | 57 | void popupQuery(); |
58 | |||
57 | void popupPing(); | 59 | void popupPing(); |
58 | void popupVersion(); | 60 | void popupVersion(); |
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 | |||
@@ -284,4 +284,38 @@ void IRCMessageParser::parseCTCPPing(IRCMessage *message) { | |||
284 | m_session->m_connection->sendCTCP(mask.nick(), "PING " + message->allParameters()); | 284 | m_session->m_connection->sendCTCP(mask.nick(), "PING " + message->allParameters()); |
285 | emit outputReady(IRCOutput(OUTPUT_CTCP, tr("Received a CTCP PING from ")+mask.nick())); | 285 | emit outputReady(IRCOutput(OUTPUT_CTCP, tr("Received a CTCP PING from ")+mask.nick())); |
286 | |||
287 | //IRCPerson mask(message->prefix()); | ||
288 | QString dest = message->ctcpDestination(); | ||
289 | if (dest.startsWith("#")) { | ||
290 | IRCChannel *channel = m_session->getChannel(dest.lower()); | ||
291 | if (channel) { | ||
292 | IRCChannelPerson *person = channel->getPerson(mask.nick()); | ||
293 | if (person) { | ||
294 | IRCOutput output(OUTPUT_CHANACTION, tr("Received a CTCP PING from ")+ mask.nick()) ; | ||
295 | output.addParam(channel); | ||
296 | output.addParam(person); | ||
297 | emit outputReady(output); | ||
298 | } else { | ||
299 | emit outputReady(IRCOutput(OUTPUT_ERROR, tr("CTCP PING with unknown person - Desynchronized?"))); | ||
300 | } | ||
301 | } else { | ||
302 | emit outputReady(IRCOutput(OUTPUT_ERROR, tr("CTCP PING with unknown channel - Desynchronized?"))); | ||
303 | } | ||
304 | } else { | ||
305 | if (message->ctcpDestination() == m_session->m_server->nick()) { | ||
306 | IRCPerson *person = m_session->getPerson(mask.nick()); | ||
307 | if (!person) { | ||
308 | /* Person not yet known, create and add to the current session */ | ||
309 | person = new IRCPerson(message->prefix()); | ||
310 | m_session->addPerson(person); | ||
311 | } | ||
312 | IRCOutput output(OUTPUT_QUERYACTION, tr("Received a CTCP PING from ")+ mask.nick() ); | ||
313 | output.addParam(person); | ||
314 | emit outputReady(output); | ||
315 | } else { | ||
316 | emit outputReady(IRCOutput(OUTPUT_ERROR, tr("CTCP PING with bad recipient"))); | ||
317 | } | ||
318 | } | ||
319 | |||
286 | } | 320 | } |
287 | 321 | ||
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 | |||
@@ -68,4 +68,7 @@ OKeyConfigManager* IRCHistoryLineEdit::keyConfigInstance() { | |||
68 | s_manager->addKeyConfig( OKeyConfigItem( tr("Previous Tab"), "prev_tab", QPixmap(), | 68 | s_manager->addKeyConfig( OKeyConfigItem( tr("Previous Tab"), "prev_tab", QPixmap(), |
69 | KeyPrevTab, OKeyPair(Qt::Key_P, Qt::ControlButton) )); | 69 | KeyPrevTab, OKeyPair(Qt::Key_P, Qt::ControlButton) )); |
70 | s_manager->addKeyConfig( OKeyConfigItem( tr("Close Tab"), "close_tab", | ||
71 | QPixmap(), KeyCloseTab, | ||
72 | OKeyPair(Qt::Key_C, Qt::ControlButton) )); | ||
70 | s_manager->load(); | 73 | s_manager->load(); |
71 | } | 74 | } |
@@ -108,4 +111,6 @@ void IRCHistoryLineEdit::keyPressEvent(QKeyEvent *event) { | |||
108 | emit prevTab(); | 111 | emit prevTab(); |
109 | return; | 112 | return; |
113 | case KeyCloseTab: | ||
114 | emit closeTab(); | ||
110 | default: | 115 | default: |
111 | break; | 116 | break; |
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 | |||
@@ -69,5 +69,6 @@ public: | |||
69 | enum KeyMode { | 69 | enum KeyMode { |
70 | KeyNextTab, | 70 | KeyNextTab, |
71 | KeyPrevTab | 71 | KeyPrevTab, |
72 | KeyCloseTab | ||
72 | }; | 73 | }; |
73 | 74 | ||
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 | |||
@@ -17,8 +17,9 @@ IRCQueryTab::IRCQueryTab(IRCPerson *person, IRCServerTab *parentTab, MainWindow | |||
17 | QWhatsThis::add(m_textview, tr("Private discussion")); | 17 | QWhatsThis::add(m_textview, tr("Private discussion")); |
18 | m_field = new IRCHistoryLineEdit(this); | 18 | m_field = new IRCHistoryLineEdit(this); |
19 | |||
19 | connect(m_field, SIGNAL(nextTab()), this, SIGNAL(nextTab())); | 20 | connect(m_field, SIGNAL(nextTab()), this, SIGNAL(nextTab())); |
20 | connect(m_field, SIGNAL(prevTab()), this, SIGNAL(prevTab())); | 21 | connect(m_field, SIGNAL(prevTab()), this, SIGNAL(prevTab())); |
21 | connect(m_field, SIGNAL(closeTab()),this, SIGNAL(closeTab())); | 22 | connect(m_field, SIGNAL(closeTab()),this, SLOT(remove())); |
22 | 23 | connect(this, SIGNAL(editFocus()), m_field, SLOT(setEditFocus())); | |
23 | 24 | ||
24 | QWhatsThis::add(m_field, tr("Type your text here in order to send a message to the other person")); | 25 | QWhatsThis::add(m_field, tr("Type your text here in order to send a message to the other person")); |
@@ -26,8 +27,10 @@ IRCQueryTab::IRCQueryTab(IRCPerson *person, IRCServerTab *parentTab, MainWindow | |||
26 | hbox->show(); | 27 | hbox->show(); |
27 | m_layout->add(m_field); | 28 | m_layout->add(m_field); |
28 | m_field->setFocus(); | 29 | |
29 | connect(m_field, SIGNAL(returnPressed()), this, SLOT(processCommand())); | 30 | connect(m_field, SIGNAL(returnPressed()), this, SLOT(processCommand())); |
30 | connect(m_mainWindow, SIGNAL(updateScroll()), this, SLOT(scrolling())); | 31 | connect(m_mainWindow, SIGNAL(updateScroll()), this, SLOT(scrolling())); |
31 | settingsChanged(); | 32 | settingsChanged(); |
33 | m_field->setFocus(); | ||
34 | m_field->setActiveWindow(); | ||
32 | } | 35 | } |
33 | 36 | ||
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 | |||
@@ -83,4 +83,9 @@ IRCServerList::IRCServerList(QWidget* parent, const char *name, bool modal, WFla | |||
83 | } | 83 | } |
84 | 84 | ||
85 | connect(m_list, SIGNAL(doubleClicked(QListBoxItem*)), | ||
86 | this, SLOT(acceptOnClick(QListBoxItem *))); | ||
87 | connect(m_list, SIGNAL(returnPressed(QListBoxItem*)), | ||
88 | this, SLOT(acceptOnClick(QListBoxItem*))); | ||
89 | |||
85 | QPEApplication::showDialog( this ); | 90 | QPEApplication::showDialog( this ); |
86 | } | 91 | } |
@@ -123,4 +128,8 @@ void IRCServerList::editServer() | |||
123 | } | 128 | } |
124 | 129 | ||
130 | void IRCServerList::acceptOnClick( QListBoxItem* ) { | ||
131 | accept(); | ||
132 | } | ||
133 | |||
125 | int IRCServerList::exec() | 134 | int IRCServerList::exec() |
126 | { | 135 | { |
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 | |||
@@ -37,5 +37,5 @@ public: | |||
37 | /* Return the selected server */ | 37 | /* Return the selected server */ |
38 | IRCServer server(); | 38 | IRCServer server(); |
39 | 39 | ||
40 | ~IRCServerList(); | 40 | ~IRCServerList(); |
41 | public slots: | 41 | public slots: |
@@ -43,4 +43,5 @@ public slots: | |||
43 | void delServer(); | 43 | void delServer(); |
44 | void editServer(); | 44 | void editServer(); |
45 | void acceptOnClick(QListBoxItem*); | ||
45 | protected: | 46 | protected: |
46 | Config *m_config; | 47 | Config *m_config; |
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 | |||
@@ -5,5 +5,6 @@ | |||
5 | 5 | ||
6 | bool IRCServerTab::containsPing( const QString& text, IRCServerTab* tab ) { | 6 | bool IRCServerTab::containsPing( const QString& text, IRCServerTab* tab ) { |
7 | return (text.find("ping") != -1 && text.find( tab->server()->nick() != -1)); | 7 | return (text.contains(IRCMessageParser::tr("Received a CTCP PING from "))) || |
8 | (text.find("ping") != -1 && text.find( tab->server()->nick() != -1)); | ||
8 | } | 9 | } |
9 | 10 | ||
@@ -31,8 +32,11 @@ IRCServerTab::IRCServerTab(IRCServer server, MainWindow *mainWindow, QWidget *pa | |||
31 | m_layout->add(m_field); | 32 | m_layout->add(m_field); |
32 | connect(m_field, SIGNAL(returnPressed()), this, SLOT(processCommand())); | 33 | connect(m_field, SIGNAL(returnPressed()), this, SLOT(processCommand())); |
33 | m_field->setFocus(); | ||
34 | connect(m_session, SIGNAL(outputReady(IRCOutput)), this, SLOT(display(IRCOutput))); | 34 | connect(m_session, SIGNAL(outputReady(IRCOutput)), this, SLOT(display(IRCOutput))); |
35 | connect(m_mainWindow, SIGNAL(updateScroll()), this, SLOT(scrolling())); | 35 | connect(m_mainWindow, SIGNAL(updateScroll()), this, SLOT(scrolling())); |
36 | settingsChanged(); | 36 | settingsChanged(); |
37 | |||
38 | m_field->setFocus(); | ||
39 | m_field->setActiveWindow(); | ||
40 | |||
37 | } | 41 | } |
38 | 42 | ||
@@ -44,5 +48,8 @@ void IRCServerTab::scrolling(){ | |||
44 | void IRCServerTab::appendText(QString text) { | 48 | void IRCServerTab::appendText(QString text) { |
45 | /* not using append because it creates layout problems */ | 49 | /* not using append because it creates layout problems */ |
46 | QString txt = m_textview->text() + text + "\n"; | 50 | QString txt = m_textview->text() + IRCTab::appendTimestamp( text ); |
51 | |||
52 | |||
53 | |||
47 | if (m_maxLines > 0 && m_lines >= m_maxLines) { | 54 | if (m_maxLines > 0 && m_lines >= m_maxLines) { |
48 | int firstBreak = txt.find('\n'); | 55 | int firstBreak = txt.find('\n'); |
@@ -235,9 +242,9 @@ void IRCServerTab::remove() { | |||
235 | m_channelTabs.first(); | 242 | m_channelTabs.first(); |
236 | while (m_channelTabs.current() != 0) { | 243 | while (m_channelTabs.current() != 0) { |
237 | m_mainWindow->killTab(m_channelTabs.current()); | 244 | m_mainWindow->killTab(m_channelTabs.current(), true); |
238 | } | 245 | } |
239 | m_queryTabs.first(); | 246 | m_queryTabs.first(); |
240 | while (m_queryTabs.current() != 0) { | 247 | while (m_queryTabs.current() != 0) { |
241 | m_mainWindow->killTab(m_queryTabs.current()); | 248 | m_mainWindow->killTab(m_queryTabs.current(), true); |
242 | } | 249 | } |
243 | m_mainWindow->killTab(this); | 250 | m_mainWindow->killTab(this); |
@@ -273,9 +280,9 @@ void IRCServerTab::display(IRCOutput output) { | |||
273 | m_channelTabs.first(); | 280 | m_channelTabs.first(); |
274 | while (m_channelTabs.current() != 0) { | 281 | while (m_channelTabs.current() != 0) { |
275 | m_mainWindow->killTab(m_channelTabs.current()); | 282 | m_mainWindow->killTab(m_channelTabs.current(), true); |
276 | } | 283 | } |
277 | m_queryTabs.first(); | 284 | m_queryTabs.first(); |
278 | while (m_queryTabs.current() != 0) { | 285 | while (m_queryTabs.current() != 0) { |
279 | m_mainWindow->killTab(m_queryTabs.current()); | 286 | m_mainWindow->killTab(m_queryTabs.current(), true); |
280 | } | 287 | } |
281 | m_mainWindow->killTab(this); | 288 | m_mainWindow->killTab(this); |
@@ -313,5 +320,5 @@ void IRCServerTab::display(IRCOutput output) { | |||
313 | IRCChannelTab *channelTab = getTabForChannel((IRCChannel *)output.getParam(0)); | 320 | IRCChannelTab *channelTab = getTabForChannel((IRCChannel *)output.getParam(0)); |
314 | if (channelTab) | 321 | if (channelTab) |
315 | m_mainWindow->killTab(channelTab); | 322 | m_mainWindow->killTab(channelTab, true); |
316 | } | 323 | } |
317 | break; | 324 | break; |
@@ -320,5 +327,5 @@ void IRCServerTab::display(IRCOutput output) { | |||
320 | IRCChannelTab *channelTab = getTabForChannel((IRCChannel *)output.getParam(0)); | 327 | IRCChannelTab *channelTab = getTabForChannel((IRCChannel *)output.getParam(0)); |
321 | if (channelTab) | 328 | if (channelTab) |
322 | m_mainWindow->killTab(channelTab); | 329 | m_mainWindow->killTab(channelTab, true); |
323 | } | 330 | } |
324 | break; | 331 | break; |
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 | |||
@@ -13,4 +13,5 @@ | |||
13 | #include <qvalidator.h> | 13 | #include <qvalidator.h> |
14 | #include <qwhatsthis.h> | 14 | #include <qwhatsthis.h> |
15 | #include <qcheckbox.h> | ||
15 | 16 | ||
16 | using namespace Opie; | 17 | using namespace Opie; |
@@ -26,5 +27,5 @@ IRCSettings::IRCSettings(QWidget* parent, const char* name, bool modal, WFlags) | |||
26 | /* General Configuration */ | 27 | /* General Configuration */ |
27 | QWidget *genwidget = new QWidget(tw); | 28 | QWidget *genwidget = new QWidget(tw); |
28 | QGridLayout *layout = new QGridLayout(genwidget, 1, 2, 5, 0); | 29 | QGridLayout *layout = new QGridLayout(genwidget, 1, 4, 5, 0); |
29 | QLabel *label = new QLabel(tr("Lines displayed :"), genwidget); | 30 | QLabel *label = new QLabel(tr("Lines displayed :"), genwidget); |
30 | layout->addWidget(label, 0, 0); | 31 | layout->addWidget(label, 0, 0); |
@@ -36,4 +37,17 @@ IRCSettings::IRCSettings(QWidget* parent, const char* name, bool modal, WFlags) | |||
36 | m_lines->setValidator(validator); | 37 | m_lines->setValidator(validator); |
37 | layout->addWidget(m_lines, 0, 1); | 38 | layout->addWidget(m_lines, 0, 1); |
39 | |||
40 | /* | ||
41 | * include timestamp | ||
42 | */ | ||
43 | m_displayTime = new QCheckBox( tr("Display time in chat log"), genwidget ); | ||
44 | m_displayTime->setChecked( m_config->readBoolEntry("DisplayTime", false) ); | ||
45 | layout->addMultiCellWidget(m_displayTime, 1, 1, 0, 4 ); | ||
46 | |||
47 | // add a spacer | ||
48 | layout->addItem( new QSpacerItem(1,1, QSizePolicy::Minimum, | ||
49 | QSizePolicy::MinimumExpanding), | ||
50 | 2, 0 ); | ||
51 | |||
38 | tw->addTab(genwidget, "opieirc/settings", tr("General")); | 52 | tw->addTab(genwidget, "opieirc/settings", tr("General")); |
39 | 53 | ||
@@ -118,4 +132,6 @@ void IRCSettings::accept() | |||
118 | m_config->writeEntry("NotificationColor", IRCTab::m_notificationColor); | 132 | m_config->writeEntry("NotificationColor", IRCTab::m_notificationColor); |
119 | m_config->writeEntry("Lines", m_lines->text()); | 133 | m_config->writeEntry("Lines", m_lines->text()); |
134 | m_config->writeEntry("DisplayTime", m_displayTime->isChecked() ); | ||
135 | IRCTab::setUseTimeStamps(m_displayTime->isChecked()); | ||
120 | IRCHistoryLineEdit::keyConfigInstance()->save(); | 136 | IRCHistoryLineEdit::keyConfigInstance()->save(); |
121 | 137 | ||
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 | |||
@@ -33,4 +33,5 @@ class OKeyConfigWidget; | |||
33 | } | 33 | } |
34 | 34 | ||
35 | class QCheckBox; | ||
35 | class IRCSettings : public QDialog { | 36 | class IRCSettings : public QDialog { |
36 | Q_OBJECT | 37 | Q_OBJECT |
@@ -51,4 +52,5 @@ protected: | |||
51 | Opie::Ui::OKeyConfigWidget *m_keyConf; | 52 | Opie::Ui::OKeyConfigWidget *m_keyConf; |
52 | QLineEdit *m_lines; | 53 | QLineEdit *m_lines; |
54 | QCheckBox *m_displayTime; | ||
53 | }; | 55 | }; |
54 | 56 | ||
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 | |||
@@ -19,4 +19,20 @@ QString IRCTab::m_notificationColor; | |||
19 | int IRCTab::m_maxLines; | 19 | int IRCTab::m_maxLines; |
20 | 20 | ||
21 | |||
22 | static bool g_useTime = false; | ||
23 | |||
24 | void IRCTab::setUseTimeStamps( bool b ) { | ||
25 | g_useTime = b; | ||
26 | } | ||
27 | |||
28 | // ## FIXME use TimeString later for AM/PM Setting | ||
29 | QString IRCTab::appendTimestamp( const QString& text ) { | ||
30 | return g_useTime ? | ||
31 | "[" +QTime::currentTime().toString()+"]" + text + "\n" : | ||
32 | text + "\n"; | ||
33 | |||
34 | } | ||
35 | |||
36 | |||
21 | IRCTab::IRCTab(QWidget *parent, const char *name, WFlags f) : QWidget(parent, name, f) { | 37 | IRCTab::IRCTab(QWidget *parent, const char *name, WFlags f) : QWidget(parent, name, f) { |
22 | m_layout = new QVBoxLayout(this); | 38 | m_layout = new QVBoxLayout(this); |
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 | |||
@@ -39,4 +39,8 @@ public: | |||
39 | void setID(int id); | 39 | void setID(int id); |
40 | int id(); | 40 | int id(); |
41 | |||
42 | static void setUseTimeStamps(bool b); | ||
43 | static QString appendTimestamp(const QString& tex); | ||
44 | |||
41 | virtual QString title() = 0; | 45 | virtual QString title() = 0; |
42 | virtual IRCSession *session() = 0; | 46 | virtual IRCSession *session() = 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 | |||
@@ -49,4 +49,5 @@ void MainWindow::loadSettings() { | |||
49 | IRCTab::m_notificationColor = config.readEntry("NotificationColor", "#AA3300"); | 49 | IRCTab::m_notificationColor = config.readEntry("NotificationColor", "#AA3300"); |
50 | IRCTab::m_maxLines = config.readNumEntry("Lines", 100); | 50 | IRCTab::m_maxLines = config.readNumEntry("Lines", 100); |
51 | IRCTab::setUseTimeStamps( config.readBoolEntry("DisplayTime", false ) ); | ||
51 | } | 52 | } |
52 | 53 | ||
@@ -61,5 +62,4 @@ void MainWindow::addTab(IRCTab *tab) { | |||
61 | connect(tab, SIGNAL(nextTab()), this, SLOT(slotNextTab())); | 62 | connect(tab, SIGNAL(nextTab()), this, SLOT(slotNextTab())); |
62 | connect(tab, SIGNAL(prevTab()), this, SLOT(slotPrevTab())); | 63 | connect(tab, SIGNAL(prevTab()), this, SLOT(slotPrevTab())); |
63 | connect(tab, SIGNAL(closeTab()), this, SLOT(slotCloseTab())); | ||
64 | 64 | ||
65 | m_tabWidget->addTab(tab, tab->title()); | 65 | m_tabWidget->addTab(tab, tab->title()); |
@@ -74,10 +74,22 @@ void MainWindow::changeEvent(IRCTab *tab) { | |||
74 | } | 74 | } |
75 | 75 | ||
76 | void MainWindow::killTab(IRCTab *tab) { | 76 | void MainWindow::killTab(IRCTab *tab, bool imediate) { |
77 | m_tabWidget->removePage(tab); | 77 | m_toDelete.append( tab ); |
78 | m_tabs.remove(tab); | ||
79 | 78 | ||
80 | /* there might be nicer ways to do this .. */ | 79 | if ( imediate ) |
81 | delete tab; | 80 | slotKillTabsLater(); |
81 | else | ||
82 | QTimer::singleShot(0, this, SLOT(slotKillTabsLater()) ); | ||
83 | } | ||
84 | |||
85 | void MainWindow::slotKillTabsLater() { | ||
86 | for ( QListIterator<IRCTab> it(m_toDelete); it.current(); ++it ) { | ||
87 | m_tabWidget->removePage( it.current() ); | ||
88 | m_tabs.remove( it.current() ); | ||
89 | } | ||
90 | |||
91 | m_toDelete.setAutoDelete( true ); | ||
92 | m_toDelete.clear(); | ||
93 | m_toDelete.setAutoDelete( false ); | ||
82 | } | 94 | } |
83 | 95 | ||
@@ -118,11 +130,5 @@ void MainWindow::slotPrevTab() { | |||
118 | } | 130 | } |
119 | 131 | ||
120 | void MainWindow::slotCloseTab() { | 132 | void MainWindow::slotPing( const QString& /*channel*/ ) { |
121 | IRCTab *tab = (IRCTab *) m_tabWidget->currentPage (); | ||
122 | if ( tab ) | ||
123 | killTab ( tab ); | ||
124 | } | ||
125 | |||
126 | void MainWindow::slotPing( const QString& channel ) { | ||
127 | raise(); | 133 | raise(); |
128 | } | 134 | } |
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 | |||
@@ -35,5 +35,5 @@ public: | |||
35 | // IRCTabWidget getTabWidget(); | 35 | // IRCTabWidget getTabWidget(); |
36 | void addTab(IRCTab *tab); | 36 | void addTab(IRCTab *tab); |
37 | void killTab(IRCTab *tab); | 37 | void killTab(IRCTab *tab, bool now = false); |
38 | static QString appName() { return QString::fromLatin1("opieirc"); } | 38 | static QString appName() { return QString::fromLatin1("opieirc"); } |
39 | static QString appCaption(); | 39 | static QString appCaption(); |
@@ -47,7 +47,7 @@ protected slots: | |||
47 | 47 | ||
48 | void slotNextTab(); | 48 | void slotNextTab(); |
49 | void slotPrevTab(); | 49 | void slotPrevTab(); |
50 | void slotCloseTab(); | ||
51 | void slotPing(const QString&); | 50 | void slotPing(const QString&); |
51 | void slotKillTabsLater(); | ||
52 | 52 | ||
53 | protected: | 53 | protected: |
@@ -56,4 +56,5 @@ protected: | |||
56 | IRCTabWidget *m_tabWidget; | 56 | IRCTabWidget *m_tabWidget; |
57 | QList<IRCTab> m_tabs; | 57 | QList<IRCTab> m_tabs; |
58 | QList<IRCTab> m_toDelete; | ||
58 | }; | 59 | }; |
59 | 60 | ||