summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swift/QtUI/QtWebKitChatView.h')
-rw-r--r--Swift/QtUI/QtWebKitChatView.h145
1 files changed, 145 insertions, 0 deletions
diff --git a/Swift/QtUI/QtWebKitChatView.h b/Swift/QtUI/QtWebKitChatView.h
new file mode 100644
index 0000000..45585c8
--- /dev/null
+++ b/Swift/QtUI/QtWebKitChatView.h
@@ -0,0 +1,145 @@
+/*
+ * Copyright (c) 2010 Remko Tronçon
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+/*
+ * Copyright (c) 2012 Thilo Cestonaro
+ * Licensed under the simplified BSD license.
+ * See Documentation/Licenses/BSD-simplified.txt for more information.
+ */
+
+#ifndef SWIFT_QtWebKitChatView_H
+#define SWIFT_QtWebKitChatView_H
+
+#include <QString>
+#include <QWidget>
+#include <QList>
+#include <QWebElement>
+#include <QInputDialog>
+#include <QFileDialog>
+
+#include <boost/shared_ptr.hpp>
+
+#include "MessageSnippet.h"
+
+#include "QtChatView.h"
+#include <Swift/Controllers/UIInterfaces/ChatWindow.h>
+#include "Swift/Controllers/Settings/SettingsProvider.h"
+
+#include <SwifTools/LastLineTracker.h>
+
+class QWebPage;
+class QUrl;
+
+namespace Swift {
+ class QtWebView;
+ class QtChatTheme;
+ class UIEventStream;
+ class QtChatWindowJSBridge;
+
+ class QtWebKitChatView : public QtChatView {
+ Q_OBJECT
+
+ public:
+ static const QString ButtonFileTransferCancel;
+ static const QString ButtonFileTransferSetDescription;
+ static const QString ButtonFileTransferSendRequest;
+ static const QString ButtonFileTransferAcceptRequest;
+ static const QString ButtonMUCInvite;
+
+ public:
+ QtWebKitChatView(QtChatTheme* theme, QWidget* parent, UIEventStream* eventStream, SettingsProvider* settings, QMap<QString, QString> emoticons);
+ virtual ~QtWebKitChatView();
+ void addMessage(boost::shared_ptr<ChatSnippet> snippet);
+ void addLastSeenLine();
+ void replaceWithAction(const std::string& message, const std::string& id, const boost::posix_time::ptime& time);
+ void replaceLastMessage(const QString& newMessage);
+ void replaceLastMessage(const QString& newMessage, const QString& note);
+ void replaceMessage(const std::string& newMessage, const QString& id, const QDateTime& time, const QString& style);
+ void replaceMessage(const QString& message, const QString& id, const QDateTime& time, const QString& style);
+ void rememberScrolledToBottom();
+ void setAckXML(const QString& id, const QString& xml);
+ void setReceiptXML(const QString& id, const QString& xml);
+ void displayReceiptInfo(const QString& id, bool showIt);
+ QString linkimoticonify(const QString& message) const;
+
+ QString getLastSentMessage();
+ void addToJSEnvironment(const QString&, QObject*);
+ void setFileTransferStatus(QString id, const ChatWindow::FileTransferState state, const QString& msg);
+ void setFileTransferProgress(QString id, const int percentageDone);
+ void setMUCInvitationJoined(QString id);
+ void showEmoticons(bool show);
+ void setAckState(std::string const& id, ChatWindow::AckState);
+ void setMessageReceiptState(const std::string& id, ChatWindow::ReceiptState state);
+ std::string addMessage(const std::string &message, const std::string &senderName, bool senderIsSelf, boost::shared_ptr<SecurityLabel> label, const std::string& avatarPath, const QString& style, const boost::posix_time::ptime& time);
+ std::string addMessage(const QString& message, const std::string& senderName, bool senderIsSelf, boost::shared_ptr<SecurityLabel> label, const std::string& avatarPath, const QString& style, const boost::posix_time::ptime& time);
+ void setChatWindowHasFocus(bool focus);
+ std::string addAction(const std::string &message, const std::string &senderName, bool senderIsSelf, boost::shared_ptr<SecurityLabel> label, const std::string& avatarPath, const boost::posix_time::ptime& time);
+ std::string addFileTransfer(const std::string& senderName, bool senderIsSelf, const std::string& filename, const boost::uintmax_t sizeInBytes);
+ void addErrorMessage(const std::string& errorMessage);
+ void addSystemMessage(const std::string& message);
+ void addPresenceMessage(const std::string& message);
+ void addMUCInvitation(const std::string& senderName, const JID& jid, const std::string& reason, const std::string& password, bool direct);
+
+ static QString buildChatWindowButton(const QString& name, const QString& id, const QString& arg1 = QString(), const QString& arg2 = QString(), const QString& arg3 = QString());
+
+ public slots:
+ void copySelectionToClipboard();
+ void scrollToBottom();
+ void handleLinkClicked(const QUrl&);
+ void handleKeyPressEvent(QKeyEvent* event);
+ void resetView();
+ void increaseFontSize(int numSteps = 1);
+ void decreaseFontSize();
+ void resizeFont(int fontSizeSteps);
+
+ private slots:
+ void handleViewLoadFinished(bool);
+ void handleFrameSizeChanged();
+ void handleClearRequested();
+ void handleHTMLButtonClicked(QString id, QString arg1, QString arg2, QString arg3);
+
+ private:
+ enum PreviousMessageKind {
+ PreviosuMessageWasNone,
+ PreviousMessageWasMessage,
+ PreviousMessageWasSystem,
+ PreviousMessageWasPresence,
+ PreviousMessageWasFileTransfer,
+ PreviousMessageWasMUCInvite
+ };
+
+ void headerEncode();
+ void messageEncode();
+ void addToDOM(boost::shared_ptr<ChatSnippet> snippet);
+ QWebElement snippetToDOM(boost::shared_ptr<ChatSnippet> snippet);
+ bool appendToPreviousCheck(PreviousMessageKind messageKind, const std::string& senderName, bool senderIsSelf) const;
+ void handleSettingChanged(const std::string& setting);
+
+ bool viewReady_;
+ bool isAtBottom_;
+ QtWebView* webView_;
+ QWebPage* webPage_;
+ int fontSizeSteps_;
+ QtChatTheme* theme_;
+ QWebElement newInsertPoint_;
+ QWebElement lineSeparator_;
+ QWebElement lastElement_;
+ QWebElement document_;
+ bool previousMessageWasSelf_;
+ QString previousSenderName_;
+ PreviousMessageKind previousMessageKind_;
+ int idCounter_;
+ LastLineTracker lastLineTracker_;
+ UIEventStream* eventStream_;
+ std::map<QString, QString> descriptions_;
+ QtChatWindowJSBridge* jsBridge_;
+ SettingsProvider* settings_;
+ QMap<QString, QString> emoticons_;
+ bool showEmoticons_;
+ };
+}
+
+#endif