From d478be344e2ba383a1e38d2a1705de1cdbe2e838 Mon Sep 17 00:00:00 2001 From: wazlaf Date: Tue, 10 Sep 2002 23:12:17 +0000 Subject: initial import of OpieIRC v0.1 --- (limited to 'noncore/net/opieirc/ircservertab.cpp') diff --git a/noncore/net/opieirc/ircservertab.cpp b/noncore/net/opieirc/ircservertab.cpp new file mode 100644 index 0000000..1f377aa --- a/dev/null +++ b/noncore/net/opieirc/ircservertab.cpp @@ -0,0 +1,147 @@ +#include +#include "ircservertab.h" + +IRCServerTab::IRCServerTab(IRCServer *server, MainWindow *mainWindow, QWidget *parent, const char *name, WFlags f) : IRCTab(parent, name, f) { + m_server = server; + m_session = new IRCSession(m_server); + m_mainWindow = mainWindow; + m_close = FALSE; + m_description->setText(tr("Connection to")+" " + server->hostname() + ":" + QString::number(server->port()) + ""); + m_textview = new QTextView(this); + m_textview->setHScrollBarMode(QScrollView::AlwaysOff); + m_textview->setVScrollBarMode(QScrollView::AlwaysOn); + m_layout->add(m_textview); + m_field = new QLineEdit(this); + m_layout->add(m_field); + connect(m_field, SIGNAL(returnPressed()), this, SLOT(processCommand())); + m_field->setFocus(); + connect(m_session, SIGNAL(outputReady(IRCOutput)), this, SLOT(display(IRCOutput))); +} + +void IRCServerTab::appendText(QString text) { + /* not using append because it creates layout problems */ + m_textview->setText(m_textview->text() + text); + m_textview->ensureVisible(0, m_textview->contentsHeight()); +} + +IRCServerTab::~IRCServerTab() { + QListIterator it(m_channelTabs); + for (; it.current(); ++it) { + m_mainWindow->killTab(it.current()); + } + delete m_session; + delete m_server; +} + +void IRCServerTab::removeChannelTab(IRCChannelTab *tab) { + m_channelTabs.remove(tab); +} + +QString IRCServerTab::title() { + return "Server"; +} + +IRCSession *IRCServerTab::session() { + return m_session; +} + +IRCServer *IRCServerTab::server() { + return m_server; +} + +void IRCServerTab::processCommand() { + m_field->clear(); + appendText("Not supported yet
"); +} + +void IRCServerTab::doConnect() { + m_session->beginSession(); +} + +void IRCServerTab::remove() { + if (m_session->isSessionActive()) { + m_close = TRUE; + m_session->endSession(); + } else { + m_mainWindow->killTab(this); + } +} + +IRCChannelTab *IRCServerTab::getTabForChannel(IRCChannel *channel) { + QListIterator it(m_channelTabs); + + for (; it.current(); ++it) { + if (it.current()->channel() == channel) + return it.current(); + } + return 0; +} + +void IRCServerTab::display(IRCOutput output) { + switch (output.type()) { + case OUTPUT_CONNCLOSE: + if (m_close) + m_mainWindow->killTab(this); + else + appendText("" + output.message() +"
"); + break; + case OUTPUT_SELFJOIN: { + IRCChannelTab *channeltab = new IRCChannelTab((IRCChannel *)output.getParam(0), this, m_mainWindow, (QWidget *)parent()); + m_channelTabs.append(channeltab); + m_mainWindow->addTab(channeltab); + } + break; + case OUTPUT_CHANPRIVMSG: { + IRCChannelTab *channelTab = getTabForChannel((IRCChannel *)output.getParam(0)); + channelTab->appendText("<"+((IRCChannelPerson *)output.getParam(1))->person->nick()+"> "+output.message()+"
"); + } + break; + case OUTPUT_SELFPART: { + IRCChannelTab *channelTab = getTabForChannel((IRCChannel *)output.getParam(0)); + if (channelTab) + m_mainWindow->killTab(channelTab); + } + break; + case OUTPUT_SELFKICK: { + appendText("" + output.message() + "
"); + IRCChannelTab *channelTab = getTabForChannel((IRCChannel *)output.getParam(0)); + if (channelTab) + m_mainWindow->killTab(channelTab); + } + break; + case OUTPUT_CHANACTION: { + IRCChannelTab *channelTab = getTabForChannel((IRCChannel *)output.getParam(0)); + channelTab->appendText(""+output.message()+"
"); + } + break; + case OUTPUT_QUIT: { + QString nick = ((IRCPerson *)output.getParam(0))->nick(); + QListIterator it(m_channelTabs); + for (; it.current(); ++it) { + if (it.current()->list()->hasPerson(nick)) { + it.current()->appendText(""+output.message()+"
"); + it.current()->list()->update(); + } + } + } + break; + case OUTPUT_OTHERJOIN: + case OUTPUT_OTHERKICK: + case OUTPUT_CHANPERSONMODE: + case OUTPUT_OTHERPART: { + IRCChannelTab *channelTab = getTabForChannel((IRCChannel *)output.getParam(0)); + channelTab->appendText(""+output.message()+"
"); + channelTab->list()->update(); + } + break; + case OUTPUT_CTCP: + appendText("" + output.message() + "
"); + break; + case OUTPUT_ERROR: + appendText("" + output.message() + "
"); + break; + default: + appendText("" + output.message() + "
"); + break; + } +} -- cgit v0.9.0.2