bool YahooClient::send(Message *msg, void *_data) { if ((getState() != Connected) || (_data == NULL)) return false; YahooUserData *data = (YahooUserData*)_data; switch (msg->type()) { case MessageTypingStart: sendTyping(data, true); return true; case MessageTypingStop: sendTyping(data, false); return true; case MessageGeneric: sendMessage(msg->getRichText(), msg, data); return true; case MessageUrl: { QString msgText = static_cast<UrlMessage*>(msg)->getUrl(); if (!msg->getPlainText().isEmpty()) { msgText += "<br>"; msgText += msg->getRichText(); } sendMessage(msgText, msg, data); return true; } } return false; }
ChatWindow::ChatWindow(Account* account, ChatSession* s, EmoticonSelector* emoticonSelector, MultSelector* multSelector) : QWidget(), m_account(account), session(s), messageEditor(0), smsEditor(0), flashPlayer(0) { qDebug() << Q_FUNC_INFO << "{"; transferStatus = None; QVBoxLayout* layout = new QVBoxLayout; layout->setContentsMargins(0, 0, 0, 0); isNewMessage = false; connect(s->contact(), SIGNAL(renamed(QString)), this, SLOT(contactUpdated())); connect(s->contact(), SIGNAL(ignoredChanged()), this, SLOT(contactIgnored())); timer = new QTimer(this); timer->setSingleShot(true); connect(timer, SIGNAL(timeout()), this, SLOT(slotTimeout())); QHBoxLayout* mainLayout = new QHBoxLayout; splitter = new QSplitter(Qt::Vertical, this); QWidget* chatWidget = new QWidget; QHBoxLayout* chatWidgetLayout = new QHBoxLayout; chatWidgetLayout->setContentsMargins(1, 1, 1, 1); chatWidgetLayout->setSpacing(1); QToolBar* topToolbar = new QToolBar; QAction* games = new QAction(QIcon(), "", this); games->setCheckable(true); connect(games, SIGNAL(triggered(bool)), this, SLOT(showGameMenu(bool))); topToolbar->addAction(games); layout->addWidget(topToolbar); chatView = new AnimatedTextBrowser; chatWidgetLayout->addWidget(chatView); connect(chatView, SIGNAL(anchorClicked(QUrl)), this, SLOT(slotAnchorClicked(QUrl))); if (!s->contact()->isPhone() && !session->contact()->isConference()) { AvatarBoxWithHandle* avatarBoxWithHandle = new AvatarBoxWithHandle(m_account->avatarsPath(), session->contact()->email()); avatarBoxWithHandle->toggle(m_account->settings()->value("ChatWindow/TopAvatarBoxState", false).toBool()); connect(avatarBoxWithHandle, SIGNAL(toggled(bool)), SLOT(saveTopAvatarBoxState(bool))); chatWidgetLayout->addWidget(avatarBoxWithHandle); } chatWidget->setLayout(chatWidgetLayout); splitter->addWidget(chatWidget); if (!s->contact()->isPhone()) { QWidget* bottomWidget = new QWidget; QHBoxLayout* bottomWidgetLayout = new QHBoxLayout; bottomWidgetLayout->setContentsMargins(1, 1, 1, 1); bottomWidgetLayout->setSpacing(1); editorsWidget = new QTabWidget; editorsWidget->setStyleSheet("QTabWidget::pane { border: 0px; } QTabWidget::tab-bar { left: 1px; } QTabBar::tab { padding: 0px 32px 0px 32px; font: bold 9px; }"); editorsWidget->setTabPosition(QTabWidget::South); editorsWidget->setTabShape(QTabWidget::Triangular); messageEditor = new MessageEditor(m_account, session->contact(), emoticonSelector, multSelector); connect(messageEditor, SIGNAL(sendPressed()), this, SLOT(sendMessage())); connect(messageEditor, SIGNAL(textChanged()), session, SLOT(sendTyping())); connect(messageEditor, SIGNAL(wakeupPressed()), this, SLOT(wakeupContact())); connect(messageEditor, SIGNAL(showMult(const QString&)), this, SLOT(sendMult(const QString&))); connect(this, SIGNAL(messageEditorActivate()), messageEditor, SLOT(messageEditorActivate())); connect(messageEditor, SIGNAL(setIgnore(bool)), this, SIGNAL(setIgnore(bool))); connect(this, SIGNAL(ignoreSet(bool)), messageEditor, SLOT(slotIgnoreSet(bool))); connect(messageEditor, SIGNAL(setSignalCheckSpelling(bool)), this, SIGNAL(setSignalCheckSpelling(bool))); connect(this, SIGNAL(signalCheckSpellingSet(bool)), messageEditor, SLOT(setCheckSpelling(bool))); fileMessageOut = new FileMessage(FileMessage::Outgoing, this); fileMessageIn = new FileMessage(FileMessage::Incoming, this); fileMessageIn->setAccEmail(account->email()); fileMessageIn->setContEmail(session->contact()->email()); fileMessageOut->setAccEmail(account->email()); fileMessageOut->setContEmail(session->contact()->email()); connect(fileMessageOut, SIGNAL(fileTransferred(FileMessage::Status, QString, QString)), this, SLOT(slotFileTransferred(FileMessage::Status, QString, QString))); connect(fileMessageOut, SIGNAL(progress(FileMessage::Status, int)), messageEditor, SLOT(slotProgress(FileMessage::Status, int))); connect(fileMessageIn, SIGNAL(startTransferring(quint32)), this, SLOT(transferStarted(quint32))); connect(fileMessageIn, SIGNAL(fileTransferred(FileMessage::Status, QString, QString)), this, SLOT(slotFileTransferred(FileMessage::Status, QString, QString))); connect(fileMessageIn, SIGNAL(progress(FileMessage::Status, int)), messageEditor, SLOT(slotProgress(FileMessage::Status, int))); connect(m_account->client(), SIGNAL(fileTransferAck(quint32, QByteArray, quint32, QByteArray)), fileMessageOut, SLOT(slotFileTransferStatus(quint32, QByteArray, quint32, QByteArray))); connect(m_account->client(), SIGNAL(proxyAck(quint32, QByteArray, quint32, quint32, QByteArray, QByteArray, quint32, quint32, quint32, quint32)), fileMessageOut, SLOT(slotProxyAck(quint32, QByteArray, quint32, quint32, QByteArray, QByteArray, quint32, quint32, quint32, quint32))); connect(m_account->client(), SIGNAL(fileTransferAck(quint32, QByteArray, quint32, QByteArray)), fileMessageIn, SLOT(slotFileTransferStatus(quint32, QByteArray, quint32, QByteArray))); connect(m_account->client(), SIGNAL(proxy(QByteArray, quint32, quint32, QByteArray, QByteArray, quint32, quint32, quint32, quint32)), fileMessageIn, SLOT(slotProxy(QByteArray, quint32, quint32, QByteArray, QByteArray, quint32, quint32, quint32, quint32))); connect(messageEditor, SIGNAL(transferringCancel()), this, SLOT(transferringCancelled())); editorsWidget->addTab(messageEditor, tr("Text")); if (!session->contact()->isConference()) { smsEditor = new SmsEditor(m_account, session->contact()); connect(smsEditor, SIGNAL(sendPressed()), this, SLOT(sendSms())); editorsWidget->addTab(smsEditor, tr("SMS")); connect(editorsWidget, SIGNAL(currentChanged(int)), this, SLOT(slotEditorActivate(int))); }