diff options
Diffstat (limited to 'Swift/QtUI/QtWebKitChatView.h')
-rw-r--r-- | Swift/QtUI/QtWebKitChatView.h | 145 |
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 |