summaryrefslogtreecommitdiff
path: root/noncore
Unidiff
Diffstat (limited to 'noncore') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/opieirc/ircchanneltab.cpp8
-rw-r--r--noncore/net/opieirc/ircchanneltab.h1
-rw-r--r--noncore/net/opieirc/ircquerytab.cpp6
-rw-r--r--noncore/net/opieirc/ircquerytab.h1
-rw-r--r--noncore/net/opieirc/ircservertab.cpp111
-rw-r--r--noncore/net/opieirc/ircservertab.h6
-rw-r--r--noncore/net/opieirc/ircsession.cpp37
-rw-r--r--noncore/net/opieirc/ircsession.h10
-rw-r--r--noncore/net/opieirc/mainwindow.cpp5
-rw-r--r--noncore/net/opieirc/mainwindow.h4
10 files changed, 172 insertions, 17 deletions
diff --git a/noncore/net/opieirc/ircchanneltab.cpp b/noncore/net/opieirc/ircchanneltab.cpp
index c1964c8..beb8bce 100644
--- a/noncore/net/opieirc/ircchanneltab.cpp
+++ b/noncore/net/opieirc/ircchanneltab.cpp
@@ -22,41 +22,44 @@ IRCChannelTab::IRCChannelTab(IRCChannel *channel, IRCServerTab *parentTab, MainW
22 QWhatsThis::add(m_textview, tr("Channel discussion")); 22 QWhatsThis::add(m_textview, tr("Channel discussion"));
23 connect(m_listButton, SIGNAL(clicked()), this, SLOT(toggleList())); 23 connect(m_listButton, SIGNAL(clicked()), this, SLOT(toggleList()));
24 m_list = new IRCChannelList(m_channel, hbox); 24 m_list = new IRCChannelList(m_channel, hbox);
25 m_list->update(); 25 m_list->update();
26 m_list->setMaximumWidth(LISTWIDTH); 26 m_list->setMaximumWidth(LISTWIDTH);
27 m_field = new IRCHistoryLineEdit(this); 27 m_field = new IRCHistoryLineEdit(this);
28 QWhatsThis::add(m_field, tr("Type your message here to participate in the channel discussion")); 28 QWhatsThis::add(m_field, tr("Type your message here to participate in the channel discussion"));
29 m_popup = new QPopupMenu(m_list); 29 m_popup = new QPopupMenu(m_list);
30 m_lines = 0; 30 m_lines = 0;
31 /* Required so that embedded-style "right" clicks work */ 31 /* Required so that embedded-style "right" clicks work */
32 QPEApplication::setStylusOperation(m_list->viewport(), QPEApplication::RightOnHold); 32 QPEApplication::setStylusOperation(m_list->viewport(), QPEApplication::RightOnHold);
33 connect(m_list, SIGNAL(mouseButtonPressed(int, QListBoxItem *, const QPoint&)), this, SLOT(mouseButtonPressed(int, QListBoxItem *, const QPoint &))); 33 connect(m_list, SIGNAL(mouseButtonPressed(int, QListBoxItem *, const QPoint&)), this, SLOT(mouseButtonPressed(int, QListBoxItem *, const QPoint &)));
34
35 /* Construct the popup menu */ 34 /* Construct the popup menu */
36 QPopupMenu *ctcpMenu = new QPopupMenu(m_list); 35 QPopupMenu *ctcpMenu = new QPopupMenu(m_list);
37 m_popup->insertItem(Resource::loadPixmap("opieirc/ctcp"), tr("CTCP"), ctcpMenu); 36 m_popup->insertItem(Resource::loadPixmap("opieirc/ctcp"), tr("CTCP"), ctcpMenu);
38 m_popup->insertItem(Resource::loadPixmap("opieirc/query"), tr("Query"), this, SLOT(popupQuery())); 37 m_popup->insertItem(Resource::loadPixmap("opieirc/query"), tr("Query"), this, SLOT(popupQuery()));
39 ctcpMenu->insertItem(Resource::loadPixmap("opieirc/ping"), tr("Ping"), this, SLOT(popupPing())); 38 ctcpMenu->insertItem(Resource::loadPixmap("opieirc/ping"), tr("Ping"), this, SLOT(popupPing()));
40 ctcpMenu->insertItem(Resource::loadPixmap("opieirc/version"), tr("Version"), this, SLOT(popupVersion())); 39 ctcpMenu->insertItem(Resource::loadPixmap("opieirc/version"), tr("Version"), this, SLOT(popupVersion()));
41 ctcpMenu->insertItem(Resource::loadPixmap("opieirc/whois"), tr("Whois"), this, SLOT(popupWhois())); 40 ctcpMenu->insertItem(Resource::loadPixmap("opieirc/whois"), tr("Whois"), this, SLOT(popupWhois()));
42 41 connect(m_mainWindow, SIGNAL(updateScroll()), this, SLOT(scrolling()));
43 m_layout->add(hbox); 42 m_layout->add(hbox);
44 hbox->show(); 43 hbox->show();
45 m_layout->add(m_field); 44 m_layout->add(m_field);
46 m_field->setFocus(); 45 m_field->setFocus();
47 connect(m_field, SIGNAL(returnPressed()), this, SLOT(processCommand())); 46 connect(m_field, SIGNAL(returnPressed()), this, SLOT(processCommand()));
48 settingsChanged(); 47 settingsChanged();
49} 48}
50 49
50void IRCChannelTab::scrolling(){
51 m_textview->ensureVisible(0, m_textview->contentsHeight());
52}
53
51void IRCChannelTab::appendText(QString text) { 54void IRCChannelTab::appendText(QString text) {
52 /* not using append because it creates layout problems */ 55 /* not using append because it creates layout problems */
53 QString txt = m_textview->text() + text + "\n"; 56 QString txt = m_textview->text() + text + "\n";
54 if (m_maxLines > 0 && m_lines >= m_maxLines) { 57 if (m_maxLines > 0 && m_lines >= m_maxLines) {
55 int firstBreak = txt.find('\n'); 58 int firstBreak = txt.find('\n');
56 if (firstBreak != -1) { 59 if (firstBreak != -1) {
57 txt = "<qt bgcolor=\"" + m_backgroundColor + "\"/>" + txt.right(txt.length() - (firstBreak + 1)); 60 txt = "<qt bgcolor=\"" + m_backgroundColor + "\"/>" + txt.right(txt.length() - (firstBreak + 1));
58 } 61 }
59 } else { 62 } else {
60 m_lines++; 63 m_lines++;
61 } 64 }
62 m_textview->setText(txt); 65 m_textview->setText(txt);
@@ -120,24 +123,25 @@ void IRCChannelTab::popupQuery() {
120 if (person) { 123 if (person) {
121 IRCQueryTab *tab = m_parentTab->getTabForQuery(person); 124 IRCQueryTab *tab = m_parentTab->getTabForQuery(person);
122 if (!tab) { 125 if (!tab) {
123 tab = new IRCQueryTab(person, m_parentTab, m_mainWindow, (QWidget *)parent()); 126 tab = new IRCQueryTab(person, m_parentTab, m_mainWindow, (QWidget *)parent());
124 m_parentTab->addQueryTab(tab); 127 m_parentTab->addQueryTab(tab);
125 m_mainWindow->addTab(tab); 128 m_mainWindow->addTab(tab);
126 } 129 }
127 } 130 }
128 } 131 }
129} 132}
130 133
131void IRCChannelTab::popupPing() { 134void IRCChannelTab::popupPing() {
135 //HAHA, no wonder these don't work
132} 136}
133 137
134void IRCChannelTab::popupVersion() { 138void IRCChannelTab::popupVersion() {
135} 139}
136 140
137void IRCChannelTab::popupWhois() { 141void IRCChannelTab::popupWhois() {
138} 142}
139 143
140QString IRCChannelTab::title() { 144QString IRCChannelTab::title() {
141 return m_channel->channelname(); 145 return m_channel->channelname();
142} 146}
143 147
diff --git a/noncore/net/opieirc/ircchanneltab.h b/noncore/net/opieirc/ircchanneltab.h
index a03ee3e..001c96d 100644
--- a/noncore/net/opieirc/ircchanneltab.h
+++ b/noncore/net/opieirc/ircchanneltab.h
@@ -38,24 +38,25 @@ public:
38 /* IRCTab implementation */ 38 /* IRCTab implementation */
39 IRCChannelTab(IRCChannel *channel, IRCServerTab *parentTab, MainWindow *mainWindow, QWidget *parent = 0, const char *name = 0, WFlags f = 0); 39 IRCChannelTab(IRCChannel *channel, IRCServerTab *parentTab, MainWindow *mainWindow, QWidget *parent = 0, const char *name = 0, WFlags f = 0);
40 ~IRCChannelTab(); 40 ~IRCChannelTab();
41 QString title(); 41 QString title();
42 IRCSession *session(); 42 IRCSession *session();
43 IRCChannel *channel(); 43 IRCChannel *channel();
44 IRCChannelList *list(); 44 IRCChannelList *list();
45public: 45public:
46 void appendText(QString text); 46 void appendText(QString text);
47public slots: 47public slots:
48 void remove(); 48 void remove();
49 void settingsChanged(); 49 void settingsChanged();
50 void scrolling();
50protected slots: 51protected slots:
51 void processCommand(); 52 void processCommand();
52 void toggleList(); 53 void toggleList();
53 void mouseButtonPressed(int mouse, QListBoxItem *item, const QPoint &point); 54 void mouseButtonPressed(int mouse, QListBoxItem *item, const QPoint &point);
54 /* Popup slots */ 55 /* Popup slots */
55 void popupQuery(); 56 void popupQuery();
56 void popupPing(); 57 void popupPing();
57 void popupVersion(); 58 void popupVersion();
58 void popupWhois(); 59 void popupWhois();
59protected: 60protected:
60 IRCServerTab *m_parentTab; 61 IRCServerTab *m_parentTab;
61 IRCChannel *m_channel; 62 IRCChannel *m_channel;
diff --git a/noncore/net/opieirc/ircquerytab.cpp b/noncore/net/opieirc/ircquerytab.cpp
index 21a53dc..a113b04 100644
--- a/noncore/net/opieirc/ircquerytab.cpp
+++ b/noncore/net/opieirc/ircquerytab.cpp
@@ -13,27 +13,33 @@ IRCQueryTab::IRCQueryTab(IRCPerson *person, IRCServerTab *parentTab, MainWindow
13 m_textview = new QTextView(hbox); 13 m_textview = new QTextView(hbox);
14 m_textview->setHScrollBarMode(QScrollView::AlwaysOff); 14 m_textview->setHScrollBarMode(QScrollView::AlwaysOff);
15 m_textview->setVScrollBarMode(QScrollView::AlwaysOn); 15 m_textview->setVScrollBarMode(QScrollView::AlwaysOn);
16 m_textview->setTextFormat(RichText); 16 m_textview->setTextFormat(RichText);
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 QWhatsThis::add(m_field, tr("Type your text here in order to send a message to the other person")); 19 QWhatsThis::add(m_field, tr("Type your text here in order to send a message to the other person"));
20 m_layout->add(hbox); 20 m_layout->add(hbox);
21 hbox->show(); 21 hbox->show();
22 m_layout->add(m_field); 22 m_layout->add(m_field);
23 m_field->setFocus(); 23 m_field->setFocus();
24 connect(m_field, SIGNAL(returnPressed()), this, SLOT(processCommand())); 24 connect(m_field, SIGNAL(returnPressed()), this, SLOT(processCommand()));
25 connect(m_mainWindow, SIGNAL(updateScroll()), this, SLOT(scrolling()));
25 settingsChanged(); 26 settingsChanged();
26} 27}
27 28
29void IRCQueryTab::scrolling(){
30 m_textview->ensureVisible(0, m_textview->contentsHeight());
31}
32
33
28void IRCQueryTab::appendText(QString text) { 34void IRCQueryTab::appendText(QString text) {
29 /* not using append because it creates layout problems */ 35 /* not using append because it creates layout problems */
30 QString txt = m_textview->text() + text + "\n"; 36 QString txt = m_textview->text() + text + "\n";
31 if (m_maxLines > 0 && m_lines >= m_maxLines) { 37 if (m_maxLines > 0 && m_lines >= m_maxLines) {
32 int firstBreak = txt.find('\n'); 38 int firstBreak = txt.find('\n');
33 if (firstBreak != -1) { 39 if (firstBreak != -1) {
34 txt = "<qt bgcolor=\"" + m_backgroundColor + "\"/>" + txt.right(txt.length() - (firstBreak + 1)); 40 txt = "<qt bgcolor=\"" + m_backgroundColor + "\"/>" + txt.right(txt.length() - (firstBreak + 1));
35 } 41 }
36 } else { 42 } else {
37 m_lines++; 43 m_lines++;
38 } 44 }
39 m_textview->setText(txt); 45 m_textview->setText(txt);
diff --git a/noncore/net/opieirc/ircquerytab.h b/noncore/net/opieirc/ircquerytab.h
index f9cc8e1..b3b04fb 100644
--- a/noncore/net/opieirc/ircquerytab.h
+++ b/noncore/net/opieirc/ircquerytab.h
@@ -28,24 +28,25 @@
28class IRCServerTab; 28class IRCServerTab;
29class IRCQueryTab : public IRCTab { 29class IRCQueryTab : public IRCTab {
30 Q_OBJECT 30 Q_OBJECT
31public: 31public:
32 /* IRCTab implementation */ 32 /* IRCTab implementation */
33 IRCQueryTab(IRCPerson *person, IRCServerTab *parentTab, MainWindow *mainWindow, QWidget *parent = 0, const char *name = 0, WFlags f = 0); 33 IRCQueryTab(IRCPerson *person, IRCServerTab *parentTab, MainWindow *mainWindow, QWidget *parent = 0, const char *name = 0, WFlags f = 0);
34 ~IRCQueryTab(); 34 ~IRCQueryTab();
35 QString title(); 35 QString title();
36 IRCSession *session(); 36 IRCSession *session();
37 IRCPerson *person(); 37 IRCPerson *person();
38 void appendText(QString text); 38 void appendText(QString text);
39public slots: 39public slots:
40 void scrolling();
40 void remove(); 41 void remove();
41 void processCommand(); 42 void processCommand();
42 void display(IRCOutput output); 43 void display(IRCOutput output);
43 void settingsChanged(); 44 void settingsChanged();
44protected: 45protected:
45 bool m_close; 46 bool m_close;
46 MainWindow *m_mainWindow; 47 MainWindow *m_mainWindow;
47 IRCServerTab *m_parentTab; 48 IRCServerTab *m_parentTab;
48 IRCPerson *m_person; 49 IRCPerson *m_person;
49 QTextView *m_textview; 50 QTextView *m_textview;
50 IRCHistoryLineEdit *m_field; 51 IRCHistoryLineEdit *m_field;
51 int m_lines; 52 int m_lines;
diff --git a/noncore/net/opieirc/ircservertab.cpp b/noncore/net/opieirc/ircservertab.cpp
index 5aa447f..1d9520a 100644
--- a/noncore/net/opieirc/ircservertab.cpp
+++ b/noncore/net/opieirc/ircservertab.cpp
@@ -13,27 +13,33 @@ IRCServerTab::IRCServerTab(IRCServer server, MainWindow *mainWindow, QWidget *pa
13 m_textview = new QTextView(this); 13 m_textview = new QTextView(this);
14 m_textview->setHScrollBarMode(QScrollView::AlwaysOff); 14 m_textview->setHScrollBarMode(QScrollView::AlwaysOff);
15 m_textview->setVScrollBarMode(QScrollView::AlwaysOn); 15 m_textview->setVScrollBarMode(QScrollView::AlwaysOn);
16 m_textview->setTextFormat(RichText); 16 m_textview->setTextFormat(RichText);
17 QWhatsThis::add(m_textview, tr("Server messages")); 17 QWhatsThis::add(m_textview, tr("Server messages"));
18 m_layout->add(m_textview); 18 m_layout->add(m_textview);
19 m_field = new IRCHistoryLineEdit(this); 19 m_field = new IRCHistoryLineEdit(this);
20 QWhatsThis::add(m_field, tr("Type commands here. A list of available commands can be found inside the OpieIRC help")); 20 QWhatsThis::add(m_field, tr("Type commands here. A list of available commands can be found inside the OpieIRC help"));
21 m_layout->add(m_field); 21 m_layout->add(m_field);
22 connect(m_field, SIGNAL(returnPressed()), this, SLOT(processCommand())); 22 connect(m_field, SIGNAL(returnPressed()), this, SLOT(processCommand()));
23 m_field->setFocus(); 23 m_field->setFocus();
24 connect(m_session, SIGNAL(outputReady(IRCOutput)), this, SLOT(display(IRCOutput))); 24 connect(m_session, SIGNAL(outputReady(IRCOutput)), this, SLOT(display(IRCOutput)));
25 connect(m_mainWindow, SIGNAL(updateScroll()), this, SLOT(scrolling()));
25 settingsChanged(); 26 settingsChanged();
26} 27}
27 28
29void IRCServerTab::scrolling(){
30 m_textview->ensureVisible(0, m_textview->contentsHeight());
31}
32
33
28void IRCServerTab::appendText(QString text) { 34void IRCServerTab::appendText(QString text) {
29 /* not using append because it creates layout problems */ 35 /* not using append because it creates layout problems */
30 QString txt = m_textview->text() + text + "\n"; 36 QString txt = m_textview->text() + text + "\n";
31 if (m_maxLines > 0 && m_lines >= m_maxLines) { 37 if (m_maxLines > 0 && m_lines >= m_maxLines) {
32 int firstBreak = txt.find('\n'); 38 int firstBreak = txt.find('\n');
33 if (firstBreak != -1) { 39 if (firstBreak != -1) {
34 txt = "<qt bgcolor=\"" + m_backgroundColor + "\"/>" + txt.right(txt.length() - (firstBreak + 1)); 40 txt = "<qt bgcolor=\"" + m_backgroundColor + "\"/>" + txt.right(txt.length() - (firstBreak + 1));
35 } 41 }
36 } else { 42 } else {
37 m_lines++; 43 m_lines++;
38 } 44 }
39 m_textview->setText(txt); 45 m_textview->setText(txt);
@@ -55,75 +61,158 @@ void IRCServerTab::removeQueryTab(IRCQueryTab *tab) {
55 61
56void IRCServerTab::addQueryTab(IRCQueryTab *tab) { 62void IRCServerTab::addQueryTab(IRCQueryTab *tab) {
57 m_queryTabs.append(tab); 63 m_queryTabs.append(tab);
58} 64}
59 65
60QString IRCServerTab::title() { 66QString IRCServerTab::title() {
61 return "Server"; 67 return "Server";
62} 68}
63 69
64IRCSession *IRCServerTab::session() { 70IRCSession *IRCServerTab::session() {
65 return m_session; 71 return m_session;
66} 72}
73/*
74QString *IRCServerTab::mynick() {
75 return (*m_server->nick());
76} */
67 77
68IRCServer *IRCServerTab::server() { 78IRCServer *IRCServerTab::server() {
69 return &m_server; 79 return &m_server;
70} 80}
71 81
72void IRCServerTab::settingsChanged() { 82void IRCServerTab::settingsChanged() {
73 m_textview->setText("<qt bgcolor=\"" + m_backgroundColor + "\"/>"); 83 m_textview->setText("<qt bgcolor=\"" + m_backgroundColor + "\"/>");
74 m_lines = 0; 84 m_lines = 0;
75} 85}
76 86
77void IRCServerTab::executeCommand(IRCTab *tab, QString line) { 87void IRCServerTab::executeCommand(IRCTab *tab, QString line) {
78 QTextIStream stream(&line); 88 QTextIStream stream(&line);
79 QString command; 89 QString command;
80 stream >> command; 90 stream >> command;
81 command = command.upper().right(command.length()-1); 91 command = command.upper().right(command.length()-1);
82 92
83 if (command == "JOIN") { 93 //JOIN
94 if (command == "JOIN" || command == "J") {
84 QString channel; 95 QString channel;
85 stream >> channel; 96 stream >> channel;
86 if (channel.length() > 0 && (channel.startsWith("#") || channel.startsWith("+"))) { 97 if (channel.length() > 0 && (channel.startsWith("#") || channel.startsWith("+"))) {
87 m_session->join(channel); 98 m_session->join(channel);
88 } else { 99 } else {
89 tab->appendText("<font color=\"" + m_errorColor + "\">Unknown channel format!</font><br>"); 100 tab->appendText("<font color=\"" + m_errorColor + "\">Unknown channel format!</font><br>");
90 } 101 }
91 } else if (command == "ME") { 102 }
103
104 //KICK
105 else if (command == "KICK"){
106 QString nickname;
107 stream >> nickname;
108 if (nickname.length() > 0) {
109 if (line.length() > 7 + nickname.length()) {
110 QString text = line.right(line.length()-nickname.length()-7);
111 IRCPerson person;
112 person.setNick(nickname);
113 m_session->kick(((IRCChannelTab *)tab)->channel(), &person, text);
114 } else {
115 IRCPerson person;
116 person.setNick(nickname);
117 m_session->kick(((IRCChannelTab *)tab)->channel(), &person);
118 }
119 }
120 }
121
122 else if (command == "OP"){
123 QString nickname;
124 stream >> nickname;
125 if (nickname.length() > 0) {
126 if (line.length() > 7 + nickname.length()) {
127 QString text = line.right(line.length()-nickname.length()-7);
128 IRCPerson person;
129 person.setNick(nickname);
130 m_session->kick(((IRCChannelTab *)tab)->channel(), &person, text);
131 } else {
132 IRCPerson person;
133 person.setNick(nickname);
134 m_session->kick(((IRCChannelTab *)tab)->channel(), &person);
135 }
136 }
137 }
138
139 //SEND MODES
140 else if (command == "MODE"){
141 QString text = line.right(line.length()-6);
142 if (text.length() > 0) {
143 m_session->mode(text);
144 } else {
145 tab->appendText("<font color=\"" + m_errorColor + "\">/mode channel {[+|-]|o|p|s|i|t|n|b|v} [limit] [user] [ban mask]<br>/mode nickname {[+|-]|i|w|s|o}</font><br>");
146 }
147 }
148 //SEND RAW MESSAGE TO SERVER, COMPLETELY UNCHECKED - anything in the RFC...or really anything you want
149 else if (command == "RAW"){
150 QString text = line.right(line.length()-5);
151 if (text.length() > 0) {
152 m_session->raw(text);
153 }
154 }
155 else if (command == "SUSPEND"){
156 QString text = line.right(line.length()-9);
157 if (text.upper() == "ON") {
158 QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable;
159 }
160 else if (text.upper() == "OFF"){
161 QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Disable;
162 } else {
163 tab->appendText("<font color=\"" + m_errorColor + "\">Line: "+ line +"</font><br>Text: "+text);
164 }
165 }
166
167 else if (command == "QUIT"){
168 QString text = line.right(line.length()-6);
169 if (text.length() > 0) {
170 m_session->quit(text);
171 } else {
172 m_session->quit();
173 }
174 }
175
176 //SEND ACTION
177 else if (command == "ME") {
92 QString text = line.right(line.length()-4); 178 QString text = line.right(line.length()-4);
93 if (text.length() > 0) { 179 if (text.length() > 0) {
94 if (tab->isA("IRCChannelTab")) { 180 if (tab->isA("IRCChannelTab")) {
95 tab->appendText("<font color=\"" + m_selfColor + "\">*" + IRCOutput::toHTML(m_server.nick()) + " " + IRCOutput::toHTML(text) + "</font><br>"); 181 tab->appendText("<font color=\"" + m_selfColor + "\">*" + IRCOutput::toHTML(m_server.nick()) + " " + IRCOutput::toHTML(text) + "</font><br>");
96 m_session->sendAction(((IRCChannelTab *)tab)->channel(), text); 182 m_session->sendAction(((IRCChannelTab *)tab)->channel(), text);
97 } else if (tab->isA("IRCQueryTab")) { 183 } else if (tab->isA("IRCQueryTab")) {
98 tab->appendText("<font color=\"" + m_selfColor + "\">*" + IRCOutput::toHTML(m_server.nick()) + " " + IRCOutput::toHTML(text) + "</font><br>"); 184 tab->appendText("<font color=\"" + m_selfColor + "\">*" + IRCOutput::toHTML(m_server.nick()) + " " + IRCOutput::toHTML(text) + "</font><br>");
99 m_session->sendAction(((IRCQueryTab *)tab)->person(), text); 185 m_session->sendAction(((IRCQueryTab *)tab)->person(), text);
100 } else { 186 } else {
101 tab->appendText("<font color=\"" + m_errorColor + "\">Invalid tab for this command</font><br>"); 187 tab->appendText("<font color=\"" + m_errorColor + "\">Invalid tab for this command</font><br>");
102 } 188 }
103 } 189 }
104 } else if (command == "MSG") { 190 }
191 //SEND PRIVMSG
192 else if (command == "MSG") {
105 QString nickname; 193 QString nickname;
106 stream >> nickname; 194 stream >> nickname;
107 if (nickname.length() > 0) { 195 if (nickname.length() > 0) {
108 if (line.length() > 6 + nickname.length()) { 196 if (line.length() > 6 + nickname.length()) {
109 QString text = line.right(line.length()-nickname.length()-6); 197 QString text = line.right(line.length()-nickname.length()-6);
110 IRCPerson person; 198 IRCPerson person;
111 person.setNick(nickname); 199 person.setNick(nickname);
112 tab->appendText("<font color=\"" + m_textColor + "\">&gt;</font><font color=\"" + m_otherColor + "\">"+IRCOutput::toHTML(nickname)+"</font><font color=\"" + m_textColor + "\">&lt; "+IRCOutput::toHTML(text)+"</font><br>"); 200 tab->appendText("<font color=\"" + m_textColor + "\">&gt;</font><font color=\"" + m_otherColor + "\">"+IRCOutput::toHTML(nickname)+"</font><font color=\"" + m_textColor + "\">&lt; "+IRCOutput::toHTML(text)+"</font><br>");
113 m_session->sendMessage(&person, text); 201 m_session->sendMessage(&person, text);
114 } 202 }
115 } 203 }
116 } else { 204 }
117 tab->appendText("<font color=\"" + m_errorColor + "\">Unknown command</font><br>"); 205 else {
206 tab->appendText("<font color=\"" + m_errorColor + "\">Unknown command</font><br>");
118 } 207 }
119} 208}
120 209
121void IRCServerTab::processCommand() { 210void IRCServerTab::processCommand() {
122 QString text = m_field->text(); 211 QString text = m_field->text();
123 if (text.startsWith("/") && !text.startsWith("//")) { 212 if (text.startsWith("/") && !text.startsWith("//")) {
124 /* Command mode */ 213 /* Command mode */
125 executeCommand(this, text); 214 executeCommand(this, text);
126 } 215 }
127 m_field->clear(); 216 m_field->clear();
128} 217}
129 218
@@ -144,35 +233,35 @@ void IRCServerTab::remove() {
144 m_mainWindow->killTab(m_channelTabs.current()); 233 m_mainWindow->killTab(m_channelTabs.current());
145 } 234 }
146 m_queryTabs.first(); 235 m_queryTabs.first();
147 while (m_queryTabs.current() != 0) { 236 while (m_queryTabs.current() != 0) {
148 m_mainWindow->killTab(m_queryTabs.current()); 237 m_mainWindow->killTab(m_queryTabs.current());
149 } 238 }
150 m_mainWindow->killTab(this); 239 m_mainWindow->killTab(this);
151 } 240 }
152} 241}
153 242
154IRCChannelTab *IRCServerTab::getTabForChannel(IRCChannel *channel) { 243IRCChannelTab *IRCServerTab::getTabForChannel(IRCChannel *channel) {
155 QListIterator<IRCChannelTab> it(m_channelTabs); 244 QListIterator<IRCChannelTab> it(m_channelTabs);
156 245
157 for (; it.current(); ++it) { 246 for (; it.current(); ++it) {
158 if (it.current()->channel() == channel) 247 if (it.current()->channel() == channel)
159 return it.current(); 248 return it.current();
160 } 249 }
161 return 0; 250 return 0;
162} 251}
163 252
164IRCQueryTab *IRCServerTab::getTabForQuery(IRCPerson *person) { 253IRCQueryTab *IRCServerTab::getTabForQuery(IRCPerson *person) {
165 QListIterator<IRCQueryTab> it(m_queryTabs); 254 QListIterator<IRCQueryTab> it(m_queryTabs);
166 255
167 for (; it.current(); ++it) { 256 for (; it.current(); ++it) {
168 if (it.current()->person()->nick() == person->nick()) 257 if (it.current()->person()->nick() == person->nick())
169 return it.current(); 258 return it.current();
170 } 259 }
171 return 0; 260 return 0;
172} 261}
173 262
174void IRCServerTab::display(IRCOutput output) { 263void IRCServerTab::display(IRCOutput output) {
175 264
176 /* All messages to be displayed inside the GUI get here */ 265 /* All messages to be displayed inside the GUI get here */
177 switch (output.type()) { 266 switch (output.type()) {
178 case OUTPUT_CONNCLOSE: 267 case OUTPUT_CONNCLOSE:
diff --git a/noncore/net/opieirc/ircservertab.h b/noncore/net/opieirc/ircservertab.h
index 8d24cba..48200d7 100644
--- a/noncore/net/opieirc/ircservertab.h
+++ b/noncore/net/opieirc/ircservertab.h
@@ -11,57 +11,61 @@
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 18
19*/ 19*/
20 20
21#ifndef __IRCSERVERTAB_H 21#ifndef __IRCSERVERTAB_H
22#define __IRCSERVERTAB_H 22#define __IRCSERVERTAB_H
23 23#include <qpe/qpeapplication.h>
24#include <qpe/qcopenvelope_qws.h>
24#include "irctab.h" 25#include "irctab.h"
25#include "ircsession.h" 26#include "ircsession.h"
26#include "mainwindow.h" 27#include "mainwindow.h"
27#include "ircchanneltab.h" 28#include "ircchanneltab.h"
28#include "ircquerytab.h" 29#include "ircquerytab.h"
29#include "ircmisc.h" 30#include "ircmisc.h"
30 31
32
31class IRCServerTab : public IRCTab { 33class IRCServerTab : public IRCTab {
32 Q_OBJECT 34 Q_OBJECT
33public: 35public:
34 /* IRCTab implementation */ 36 /* IRCTab implementation */
35 IRCServerTab(IRCServer server, MainWindow *mainWindow, QWidget *parent = 0, const char *name = 0, WFlags f = 0); 37 IRCServerTab(IRCServer server, MainWindow *mainWindow, QWidget *parent = 0, const char *name = 0, WFlags f = 0);
36 ~IRCServerTab(); 38 ~IRCServerTab();
37 QString title(); 39 QString title();
38 IRCSession *session(); 40 IRCSession *session();
39 IRCServer *server(); 41 IRCServer *server();
40 42
41 /* Start the server session */ 43 /* Start the server session */
42 void doConnect(); 44 void doConnect();
45// QString *mynick();
43 /* Remove tabs from the internal tab lists */ 46 /* Remove tabs from the internal tab lists */
44 void removeChannelTab(IRCChannelTab *tab); 47 void removeChannelTab(IRCChannelTab *tab);
45 void removeQueryTab(IRCQueryTab *tab); 48 void removeQueryTab(IRCQueryTab *tab);
46 /* Return tabs from the internal tab lists */ 49 /* Return tabs from the internal tab lists */
47 IRCChannelTab *getTabForChannel(IRCChannel *channel); 50 IRCChannelTab *getTabForChannel(IRCChannel *channel);
48 IRCQueryTab *getTabForQuery(IRCPerson *person); 51 IRCQueryTab *getTabForQuery(IRCPerson *person);
49 /* Add tabs to the internal tab lists */ 52 /* Add tabs to the internal tab lists */
50 void addQueryTab(IRCQueryTab *tab); 53 void addQueryTab(IRCQueryTab *tab);
51 /* Execute a user command such as /join, /msg etc */ 54 /* Execute a user command such as /join, /msg etc */
52 void executeCommand(IRCTab *tab, QString line); 55 void executeCommand(IRCTab *tab, QString line);
53protected: 56protected:
54 void appendText(QString text); 57 void appendText(QString text);
55public slots: 58public slots:
59 void scrolling();
56 void remove(); 60 void remove();
57 void processCommand(); 61 void processCommand();
58 void settingsChanged(); 62 void settingsChanged();
59protected slots: 63protected slots:
60 void display(IRCOutput output); 64 void display(IRCOutput output);
61protected: 65protected:
62 int m_lines; 66 int m_lines;
63 bool m_close; 67 bool m_close;
64 IRCServer m_server; 68 IRCServer m_server;
65 IRCSession *m_session; 69 IRCSession *m_session;
66 MainWindow *m_mainWindow; 70 MainWindow *m_mainWindow;
67 QTextView *m_textview; 71 QTextView *m_textview;
diff --git a/noncore/net/opieirc/ircsession.cpp b/noncore/net/opieirc/ircsession.cpp
index 122a943..1cc1ee2 100644
--- a/noncore/net/opieirc/ircsession.cpp
+++ b/noncore/net/opieirc/ircsession.cpp
@@ -19,24 +19,60 @@ IRCSession::~IRCSession() {
19 delete m_parser; 19 delete m_parser;
20 delete m_connection; 20 delete m_connection;
21} 21}
22 22
23void IRCSession::beginSession() { 23void IRCSession::beginSession() {
24 m_connection->doConnect(); 24 m_connection->doConnect();
25} 25}
26 26
27void IRCSession::join(QString channelname) { 27void IRCSession::join(QString channelname) {
28 m_connection->sendLine("JOIN "+channelname); 28 m_connection->sendLine("JOIN "+channelname);
29} 29}
30 30
31void IRCSession::quit(){
32 m_connection->sendLine("QUIT :[OI] I'm too good to need a reason");
33}
34
35void IRCSession::quit(QString message){
36 m_connection->sendLine("QUIT :" + message);
37}
38
39void IRCSession::topic(IRCChannel *channel, QString message){
40 m_connection->sendLine("TOPIC :" + channel->channelname() + " " + message);
41}
42
43void IRCSession::mode(IRCChannel *channel, QString message){
44 m_connection->sendLine("MODE " + channel->channelname() + " " + message);
45}
46
47void IRCSession::mode(IRCPerson *person, QString message){
48 m_connection->sendLine("MODE " + person->nick() + " " + message);
49}
50
51void IRCSession::mode(QString message){
52 m_connection->sendLine("MODE " + message);
53}
54
55void IRCSession::raw(QString message){
56 m_connection->sendLine(message);
57}
58
59void IRCSession::kick(IRCChannel *channel, IRCPerson *person) {
60 m_connection->sendLine("KICK "+ channel->channelname() + " " + person->nick() +" :0wn3d - no reason");
61}
62
63void IRCSession::kick(IRCChannel *channel, IRCPerson *person, QString message) {
64 m_connection->sendLine("KICK "+ channel->channelname() + " " + person->nick() +" :" + message);
65}
66
31void IRCSession::sendMessage(IRCPerson *person, QString message) { 67void IRCSession::sendMessage(IRCPerson *person, QString message) {
32 m_connection->sendLine("PRIVMSG " + person->nick() + " :" + message); 68 m_connection->sendLine("PRIVMSG " + person->nick() + " :" + message);
33} 69}
34 70
35void IRCSession::sendMessage(IRCChannel *channel, QString message) { 71void IRCSession::sendMessage(IRCChannel *channel, QString message) {
36 m_connection->sendLine("PRIVMSG " + channel->channelname() + " :" + message); 72 m_connection->sendLine("PRIVMSG " + channel->channelname() + " :" + message);
37} 73}
38 74
39void IRCSession::sendAction(IRCChannel *channel, QString message) { 75void IRCSession::sendAction(IRCChannel *channel, QString message) {
40 m_connection->sendLine("PRIVMSG " + channel->channelname() + " :\001ACTION " + message + "\001"); 76 m_connection->sendLine("PRIVMSG " + channel->channelname() + " :\001ACTION " + message + "\001");
41} 77}
42 78
@@ -99,13 +135,12 @@ void IRCSession::addChannel(IRCChannel *channel) {
99 135
100void IRCSession::removeChannel(IRCChannel *channel) { 136void IRCSession::removeChannel(IRCChannel *channel) {
101 m_channels.remove(channel); 137 m_channels.remove(channel);
102} 138}
103 139
104void IRCSession::removePerson(IRCPerson *person) { 140void IRCSession::removePerson(IRCPerson *person) {
105 m_people.remove(person); 141 m_people.remove(person);
106} 142}
107 143
108void IRCSession::handleMessage(IRCMessage *message) { 144void IRCSession::handleMessage(IRCMessage *message) {
109 m_parser->parse(message); 145 m_parser->parse(message);
110} 146}
111
diff --git a/noncore/net/opieirc/ircsession.h b/noncore/net/opieirc/ircsession.h
index aa4bed3..a6a3e50 100644
--- a/noncore/net/opieirc/ircsession.h
+++ b/noncore/net/opieirc/ircsession.h
@@ -34,29 +34,37 @@ class IRCMessageParser;
34/* The IRCSession stores all information relating to the connection 34/* The IRCSession stores all information relating to the connection
35 to one IRC server. IRCSession makes it possible to run multiple 35 to one IRC server. IRCSession makes it possible to run multiple
36 IRC server connections from within the same program */ 36 IRC server connections from within the same program */
37 37
38class IRCSession : public QObject { 38class IRCSession : public QObject {
39friend class IRCMessageParser; 39friend class IRCMessageParser;
40 Q_OBJECT 40 Q_OBJECT
41public: 41public:
42 IRCSession(IRCServer *server); 42 IRCSession(IRCServer *server);
43 ~IRCSession(); 43 ~IRCSession();
44 44
45 void join(QString channel); 45 void join(QString channel);
46 void quit(QString message);
47 void quit();
48 void raw(QString message);
49 void topic(IRCChannel *channel, QString message);
50 void mode(IRCChannel *channel, QString message);
51 void mode(IRCPerson *person, QString message);
52 void mode(QString message);
46 void part(IRCChannel *channel); 53 void part(IRCChannel *channel);
54 void kick(IRCChannel *channel, IRCPerson *person);
55 void kick(IRCChannel *channel, IRCPerson *person, QString message);
47 void beginSession(); 56 void beginSession();
48 bool isSessionActive(); 57 bool isSessionActive();
49 void endSession(); 58 void endSession();
50
51 void sendMessage(IRCPerson *person, QString message); 59 void sendMessage(IRCPerson *person, QString message);
52 void sendMessage(IRCChannel *channel, QString message); 60 void sendMessage(IRCChannel *channel, QString message);
53 void sendAction(IRCPerson *person, QString message); 61 void sendAction(IRCPerson *person, QString message);
54 void sendAction(IRCChannel *channel, QString message); 62 void sendAction(IRCChannel *channel, QString message);
55 IRCChannel *getChannel(QString channelname); 63 IRCChannel *getChannel(QString channelname);
56 IRCPerson *getPerson(QString nickname); 64 IRCPerson *getPerson(QString nickname);
57protected: 65protected:
58 void addPerson(IRCPerson *person); 66 void addPerson(IRCPerson *person);
59 void addChannel(IRCChannel *channel); 67 void addChannel(IRCChannel *channel);
60 void removeChannel(IRCChannel *channel); 68 void removeChannel(IRCChannel *channel);
61 void removePerson(IRCPerson *person); 69 void removePerson(IRCPerson *person);
62 void getChannelsByPerson(IRCPerson *person, QList<IRCChannel> &channels); 70 void getChannelsByPerson(IRCPerson *person, QList<IRCChannel> &channels);
diff --git a/noncore/net/opieirc/mainwindow.cpp b/noncore/net/opieirc/mainwindow.cpp
index 3ed29e3..8f76cdd 100644
--- a/noncore/net/opieirc/mainwindow.cpp
+++ b/noncore/net/opieirc/mainwindow.cpp
@@ -21,39 +21,44 @@ MainWindow::MainWindow(QWidget *parent, const char *name, WFlags) : QMainWindow(
21 menuBar->insertItem(tr("IRC"), irc); 21 menuBar->insertItem(tr("IRC"), irc);
22 QAction *a = new QAction(tr("New connection"), Resource::loadPixmap("pass"), QString::null, 0, this, 0); 22 QAction *a = new QAction(tr("New connection"), Resource::loadPixmap("pass"), QString::null, 0, this, 0);
23 connect(a, SIGNAL(activated()), this, SLOT(newConnection())); 23 connect(a, SIGNAL(activated()), this, SLOT(newConnection()));
24 a->setWhatsThis(tr("Create a new connection to an IRC server")); 24 a->setWhatsThis(tr("Create a new connection to an IRC server"));
25 a->addTo(irc); 25 a->addTo(irc);
26 a = new QAction(tr("Settings"), Resource::loadPixmap("SettingsIcon"), QString::null, 0, this, 0); 26 a = new QAction(tr("Settings"), Resource::loadPixmap("SettingsIcon"), QString::null, 0, this, 0);
27 a->setWhatsThis(tr("Configure OpieIRC's behavior and appearance")); 27 a->setWhatsThis(tr("Configure OpieIRC's behavior and appearance"));
28 connect(a, SIGNAL(activated()), this, SLOT(settings())); 28 connect(a, SIGNAL(activated()), this, SLOT(settings()));
29 a->addTo(irc); 29 a->addTo(irc);
30 loadSettings(); 30 loadSettings();
31} 31}
32 32
33/*IRCTabWidget MainWindow::getTabWidget(){
34 return m_tabWidget;
35} */
36
33void MainWindow::loadSettings() { 37void MainWindow::loadSettings() {
34 Config config("OpieIRC"); 38 Config config("OpieIRC");
35 config.setGroup("OpieIRC"); 39 config.setGroup("OpieIRC");
36 IRCTab::m_backgroundColor = config.readEntry("BackgroundColor", "#FFFFFF"); 40 IRCTab::m_backgroundColor = config.readEntry("BackgroundColor", "#FFFFFF");
37 IRCTab::m_textColor = config.readEntry("TextColor", "#000000"); 41 IRCTab::m_textColor = config.readEntry("TextColor", "#000000");
38 IRCTab::m_errorColor = config.readEntry("ErrorColor", "#FF0000"); 42 IRCTab::m_errorColor = config.readEntry("ErrorColor", "#FF0000");
39 IRCTab::m_selfColor = config.readEntry("SelfColor", "#CC0000"); 43 IRCTab::m_selfColor = config.readEntry("SelfColor", "#CC0000");
40 IRCTab::m_otherColor = config.readEntry("OtherColor", "#0000BB"); 44 IRCTab::m_otherColor = config.readEntry("OtherColor", "#0000BB");
41 IRCTab::m_serverColor = config.readEntry("ServerColor", "#0000FF"); 45 IRCTab::m_serverColor = config.readEntry("ServerColor", "#0000FF");
42 IRCTab::m_notificationColor = config.readEntry("NotificationColor", "#AA3300"); 46 IRCTab::m_notificationColor = config.readEntry("NotificationColor", "#AA3300");
43 IRCTab::m_maxLines = config.readNumEntry("Lines", 100); 47 IRCTab::m_maxLines = config.readNumEntry("Lines", 100);
44} 48}
45 49
46void MainWindow::selected(QWidget *) { 50void MainWindow::selected(QWidget *) {
47 m_tabWidget->setTabColor(m_tabWidget->currentPageIndex(), black); 51 m_tabWidget->setTabColor(m_tabWidget->currentPageIndex(), black);
52 emit updateScroll();
48} 53}
49 54
50void MainWindow::addTab(IRCTab *tab) { 55void MainWindow::addTab(IRCTab *tab) {
51 connect(tab, SIGNAL(changed(IRCTab *)), this, SLOT(changeEvent(IRCTab *))); 56 connect(tab, SIGNAL(changed(IRCTab *)), this, SLOT(changeEvent(IRCTab *)));
52 m_tabWidget->addTab(tab, tab->title()); 57 m_tabWidget->addTab(tab, tab->title());
53 m_tabWidget->showPage(tab); 58 m_tabWidget->showPage(tab);
54 tab->setID(m_tabWidget->currentPageIndex()); 59 tab->setID(m_tabWidget->currentPageIndex());
55 m_tabs.append(tab); 60 m_tabs.append(tab);
56} 61}
57 62
58void MainWindow::changeEvent(IRCTab *tab) { 63void MainWindow::changeEvent(IRCTab *tab) {
59 if (tab->id() != m_tabWidget->currentPageIndex()) 64 if (tab->id() != m_tabWidget->currentPageIndex())
diff --git a/noncore/net/opieirc/mainwindow.h b/noncore/net/opieirc/mainwindow.h
index 9946f10..bd1a9ce 100644
--- a/noncore/net/opieirc/mainwindow.h
+++ b/noncore/net/opieirc/mainwindow.h
@@ -23,27 +23,29 @@
23 23
24#include <qmainwindow.h> 24#include <qmainwindow.h>
25#include <qaction.h> 25#include <qaction.h>
26#include <qlist.h> 26#include <qlist.h>
27#include "mainwindow.h" 27#include "mainwindow.h"
28#include "ircmisc.h" 28#include "ircmisc.h"
29#include "irctab.h" 29#include "irctab.h"
30 30
31class MainWindow : public QMainWindow { 31class MainWindow : public QMainWindow {
32 Q_OBJECT 32 Q_OBJECT
33public: 33public:
34 MainWindow(QWidget *parent = 0, const char *name = 0, WFlags f = 0); 34 MainWindow(QWidget *parent = 0, const char *name = 0, WFlags f = 0);
35 35// IRCTabWidget getTabWidget();
36 void addTab(IRCTab *tab); 36 void addTab(IRCTab *tab);
37 void killTab(IRCTab *tab); 37 void killTab(IRCTab *tab);
38signals:
39 void updateScroll();
38protected slots: 40protected slots:
39 void newConnection(); 41 void newConnection();
40 void settings(); 42 void settings();
41 void selected(QWidget *); 43 void selected(QWidget *);
42 void changeEvent(IRCTab *); 44 void changeEvent(IRCTab *);
43protected: 45protected:
44 void loadSettings(); 46 void loadSettings();
45protected: 47protected:
46 IRCTabWidget *m_tabWidget; 48 IRCTabWidget *m_tabWidget;
47 QList<IRCTab> m_tabs; 49 QList<IRCTab> m_tabs;
48}; 50};
49 51