summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swift/QtUI/QtChatWindow.cpp')
-rw-r--r--Swift/QtUI/QtChatWindow.cpp77
1 files changed, 55 insertions, 22 deletions
diff --git a/Swift/QtUI/QtChatWindow.cpp b/Swift/QtUI/QtChatWindow.cpp
index d81de61..2dfef5a 100644
--- a/Swift/QtUI/QtChatWindow.cpp
+++ b/Swift/QtUI/QtChatWindow.cpp
@@ -17,5 +17,4 @@
#include "QtSettingsProvider.h"
#include "QtScaledAvatarCache.h"
-#include "QtInviteToChatWindow.h"
#include <Swift/QtUI/QtUISettingConstants.h>
@@ -69,5 +68,5 @@ const QString QtChatWindow::ButtonMUCInvite = QString("mucinvite");
-QtChatWindow::QtChatWindow(const QString &contact, QtChatTheme* theme, UIEventStream* eventStream, SettingsProvider* settings) : QtTabbable(), contact_(contact), previousMessageWasSelf_(false), previousMessageKind_(PreviosuMessageWasNone), eventStream_(eventStream), blockingState_(BlockingUnsupported) {
+QtChatWindow::QtChatWindow(const QString &contact, QtChatTheme* theme, UIEventStream* eventStream, SettingsProvider* settings) : QtTabbable(), contact_(contact), previousMessageWasSelf_(false), previousMessageKind_(PreviosuMessageWasNone), eventStream_(eventStream), blockingState_(BlockingUnsupported), isMUC_(false), supportsImpromptuChat_(false) {
settings_ = settings;
unreadCount_ = 0;
@@ -190,9 +189,8 @@ QtChatWindow::QtChatWindow(const QString &contact, QtChatTheme* theme, UIEventSt
jsBridge = new QtChatWindowJSBridge();
messageLog_->addToJSEnvironment("chatwindow", jsBridge);
- connect(jsBridge, SIGNAL(buttonClicked(QString,QString,QString,QString)), this, SLOT(handleHTMLButtonClicked(QString,QString,QString,QString)));
+ connect(jsBridge, SIGNAL(buttonClicked(QString,QString,QString,QString,QString,QString)), this, SLOT(handleHTMLButtonClicked(QString,QString,QString,QString,QString,QString)));
settings_->onSettingChanged.connect(boost::bind(&QtChatWindow::handleSettingChanged, this, _1));
showEmoticons_ = settings_->getSetting(QtUISettingConstants::SHOW_EMOTICONS);
-
}
@@ -426,8 +424,9 @@ void QtChatWindow::closeEvent(QCloseEvent* event) {
}
-void QtChatWindow::convertToMUC() {
- setAcceptDrops(false);
+void QtChatWindow::convertToMUC(bool impromptuMUC) {
+ impromptu_ = impromptuMUC;
+ isMUC_ = true;
treeWidget_->show();
- subject_->show();
+ subject_->setVisible(!impromptu_);
}
@@ -681,8 +680,8 @@ static QString decodeButtonArgument(const QString& str) {
}
-QString QtChatWindow::buildChatWindowButton(const QString& name, const QString& id, const QString& arg1, const QString& arg2, const QString& arg3) {
+QString QtChatWindow::buildChatWindowButton(const QString& name, const QString& id, const QString& arg1, const QString& arg2, const QString& arg3, const QString& arg4, const QString& arg5) {
QRegExp regex("[A-Za-z][A-Za-z0-9\\-\\_]+");
Q_ASSERT(regex.exactMatch(id));
- QString html = QString("<input id='%2' type='submit' value='%1' onclick='chatwindow.buttonClicked(\"%2\", \"%3\", \"%4\", \"%5\");' />").arg(name).arg(id).arg(encodeButtonArgument(arg1)).arg(encodeButtonArgument(arg2)).arg(encodeButtonArgument(arg3));
+ QString html = QString("<input id='%2' type='submit' value='%1' onclick='chatwindow.buttonClicked(\"%2\", \"%3\", \"%4\", \"%5\", \"%6\", \"%7\");' />").arg(name).arg(id).arg(encodeButtonArgument(arg1)).arg(encodeButtonArgument(arg2)).arg(encodeButtonArgument(arg3)).arg(encodeButtonArgument(arg4)).arg(encodeButtonArgument(arg5));
return html;
}
@@ -777,8 +776,10 @@ void QtChatWindow::setWhiteboardSessionStatus(std::string id, const ChatWindow::
}
-void QtChatWindow::handleHTMLButtonClicked(QString id, QString encodedArgument1, QString encodedArgument2, QString encodedArgument3) {
+void QtChatWindow::handleHTMLButtonClicked(QString id, QString encodedArgument1, QString encodedArgument2, QString encodedArgument3, QString encodedArgument4, QString encodedArgument5) {
QString arg1 = decodeButtonArgument(encodedArgument1);
QString arg2 = decodeButtonArgument(encodedArgument2);
QString arg3 = decodeButtonArgument(encodedArgument3);
+ QString arg4 = decodeButtonArgument(encodedArgument4);
+ QString arg5 = decodeButtonArgument(encodedArgument5);
if (id.startsWith(ButtonFileTransferCancel)) {
@@ -827,6 +828,7 @@ void QtChatWindow::handleHTMLButtonClicked(QString id, QString encodedArgument1,
QString password = arg2;
QString elementID = arg3;
-
- eventStream_->send(boost::make_shared<JoinMUCUIEvent>(Q2PSTRING(roomJID), Q2PSTRING(password)));
+ QString isImpromptu = arg4;
+ QString isContinuation = arg5;
+ eventStream_->send(boost::make_shared<JoinMUCUIEvent>(Q2PSTRING(roomJID), Q2PSTRING(password), boost::optional<std::string>(), false, false, isImpromptu.contains("true"), isContinuation.contains("true")));
messageLog_->setMUCInvitationJoined(elementID);
}
@@ -958,9 +960,16 @@ void QtChatWindow::dragEnterEvent(QDragEnterEvent *event) {
if (event->mimeData()->hasUrls() && event->mimeData()->urls().size() == 1) {
// TODO: check whether contact actually supports file transfer
+ if (!isMUC_) {
event->acceptProposedAction();
}
+ } else if (event->mimeData()->hasFormat("application/vnd.swift.contact-jid")) {
+ if (isMUC_ || supportsImpromptuChat_) {
+ event->acceptProposedAction();
+ }
+ }
}
void QtChatWindow::dropEvent(QDropEvent *event) {
+ if (event->mimeData()->hasUrls()) {
if (event->mimeData()->urls().size() == 1) {
onSendFileRequest(Q2PSTRING(event->mimeData()->urls().at(0).toLocalFile()));
@@ -971,4 +980,11 @@ void QtChatWindow::dropEvent(QDropEvent *event) {
addSystemMessage(message, DefaultDirection);
}
+ } else if (event->mimeData()->hasFormat("application/vnd.swift.contact-jid")) {
+ QByteArray dataBytes = event->mimeData()->data("application/vnd.swift.contact-jid");
+ QDataStream dataStream(&dataBytes, QIODevice::ReadOnly);
+ QString jidString;
+ dataStream >> jidString;
+ onInviteToChat(std::vector<JID>(1, JID(Q2PSTRING(jidString))));
+ }
}
@@ -1005,7 +1021,21 @@ void QtChatWindow::handleActionButtonClicked() {
block = contextMenu.addAction(tr("Block"));
}
+
+ if (supportsImpromptuChat_) {
+ invite = contextMenu.addAction(tr("Invite person to this chat…"));
+ }
+
} else {
foreach(ChatWindow::RoomAction availableAction, availableRoomActions_)
{
+ if (impromptu_) {
+ // hide options we don't need in impromptu chats
+ if (availableAction == ChatWindow::ChangeSubject ||
+ availableAction == ChatWindow::Configure ||
+ availableAction == ChatWindow::Affiliations ||
+ availableAction == ChatWindow::Destroy) {
+ continue;
+ }
+ }
switch(availableAction)
{
@@ -1053,5 +1083,5 @@ void QtChatWindow::handleActionButtonClicked() {
}
else if (result == invite) {
- onInvitePersonToThisMUCRequest();
+ onInviteToChat(std::vector<JID>());
}
else if (result == block) {
@@ -1080,4 +1110,8 @@ void QtChatWindow::setBlockingState(BlockingState state) {
}
+void QtChatWindow::setCanInitiateImpromptuChats(bool supportsImpromptu) {
+ supportsImpromptuChat_ = supportsImpromptu;
+}
+
void QtChatWindow::showRoomConfigurationForm(Form::ref form) {
if (mucConfigurationWindow_) {
@@ -1089,10 +1123,15 @@ void QtChatWindow::showRoomConfigurationForm(Form::ref form) {
}
-void QtChatWindow::addMUCInvitation(const std::string& senderName, const JID& jid, const std::string& reason, const std::string& password, bool direct) {
+void QtChatWindow::addMUCInvitation(const std::string& senderName, const JID& jid, const std::string& reason, const std::string& password, bool direct, bool isImpromptu, bool isContinuation) {
if (isWidgetSelected()) {
onAllMessagesRead();
}
- QString message = QObject::tr("You've been invited to enter the %1 room.").arg(P2QSTRING(jid.toString())) + "\n";
+ QString message;
+ if (isImpromptu) {
+ message = QObject::tr("You've been invited to join a chat.") + "\n";
+ } else {
+ message = QObject::tr("You've been invited to enter the %1 room.").arg(P2QSTRING(jid.toString())) + "\n";
+ }
QString htmlString = message;
if (!reason.empty()) {
@@ -1107,5 +1146,5 @@ void QtChatWindow::addMUCInvitation(const std::string& senderName, const JID& ji
QString id = QString(ButtonMUCInvite + "%1").arg(P2QSTRING(boost::lexical_cast<std::string>(idCounter_++)));
htmlString += "<div id='" + id + "'>" +
- buildChatWindowButton(chatMessageToHTML(ChatMessage(Q2PSTRING((tr("Accept Invite"))))), ButtonMUCInvite, QtUtilities::htmlEscape(P2QSTRING(jid.toString())), QtUtilities::htmlEscape(P2QSTRING(password)), id) +
+ buildChatWindowButton(chatMessageToHTML(ChatMessage(Q2PSTRING((tr("Accept Invite"))))), ButtonMUCInvite, QtUtilities::htmlEscape(P2QSTRING(jid.toString())), QtUtilities::htmlEscape(P2QSTRING(password)), id, QtUtilities::htmlEscape(isImpromptu ? "true" : "false"), QtUtilities::htmlEscape(isContinuation ? "true" : "false")) +
"</div>";
@@ -1125,9 +1164,3 @@ void QtChatWindow::addMUCInvitation(const std::string& senderName, const JID& ji
}
-
-InviteToChatWindow* QtChatWindow::createInviteToChatWindow() {
- return new QtInviteToChatWindow(this);
-}
-
-
}