From ad67844c7af86e9fcc13cd3cc9dc82fde0573941 Mon Sep 17 00:00:00 2001 From: thunder2 Date: Thu, 30 Dec 2010 17:09:32 +0000 Subject: [PATCH] Enabled clickable links in forums and messages. Added new translation in messages (count of recommended files). Fixed german translation. git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@3946 b45a01b8-16f6-495d-af2f-9b41ad6348cc --- retroshare-gui/src/gui/ForumsDialog.cpp | 4 +- retroshare-gui/src/gui/MessagesDialog.cpp | 9 +-- retroshare-gui/src/gui/MessengerWindow.cpp | 2 + retroshare-gui/src/gui/chat/ChatStyle.cpp | 27 +-------- retroshare-gui/src/gui/chat/ChatStyle.h | 7 +-- .../src/gui/chat/HandleRichText.cpp | 27 ++++++++- retroshare-gui/src/gui/chat/HandleRichText.h | 10 +++- .../src/gui/chat/PopupChatWindow.cpp | 1 + retroshare-gui/src/gui/common/Emoticons.cpp | 3 +- retroshare-gui/src/gui/common/Emoticons.h | 3 - retroshare-gui/src/gui/feeds/ChatMsgItem.cpp | 9 ++- .../src/gui/im_history/ImHistoryBrowser.h | 1 + retroshare-gui/src/lang/retroshare_de.qm | Bin 277260 -> 277379 bytes retroshare-gui/src/lang/retroshare_de.ts | 54 +++++++++++------- 14 files changed, 80 insertions(+), 77 deletions(-) diff --git a/retroshare-gui/src/gui/ForumsDialog.cpp b/retroshare-gui/src/gui/ForumsDialog.cpp index c8ff3806d..d18c88228 100644 --- a/retroshare-gui/src/gui/ForumsDialog.cpp +++ b/retroshare-gui/src/gui/ForumsDialog.cpp @@ -1148,9 +1148,7 @@ void ForumsDialog::insertPost() } } - QString extraTxt; - extraTxt += QString::fromStdWString(msg.msg); - Emoticons::formatText(extraTxt); + QString extraTxt = RsHtml::formatText(QString::fromStdWString(msg.msg), RSHTML_FORMATTEXT_EMBED_SMILEYS | RSHTML_FORMATTEXT_EMBED_LINKS); ui.postText->setHtml(extraTxt); ui.threadTitle->setText(QString::fromStdWString(msg.title)); diff --git a/retroshare-gui/src/gui/MessagesDialog.cpp b/retroshare-gui/src/gui/MessagesDialog.cpp index 3a914ce5b..11be5ee97 100644 --- a/retroshare-gui/src/gui/MessagesDialog.cpp +++ b/retroshare-gui/src/gui/MessagesDialog.cpp @@ -1718,15 +1718,10 @@ void MessagesDialog::insertMsgTxtAndFiles(QModelIndex Index, bool bSetToRead) ui.subjectText->setText(QString::fromStdWString(msgInfo.title)); - text = QString::fromStdWString(msgInfo.msg); - Emoticons::formatText(text); + text = RsHtml::formatText(QString::fromStdWString(msgInfo.msg), RSHTML_FORMATTEXT_EMBED_SMILEYS | RSHTML_FORMATTEXT_EMBED_LINKS); ui.msgText->setHtml(text); - { - std::ostringstream out; - out << "(" << msgInfo.count << " Files)"; - ui.filesText->setText(QString::fromStdString(out.str())); - } + ui.filesText->setText(QString("(%1 %2)").arg(msgInfo.count).arg(msgInfo.count == 1 ? tr("File") : tr("Files"))); showTagLabels(); diff --git a/retroshare-gui/src/gui/MessengerWindow.cpp b/retroshare-gui/src/gui/MessengerWindow.cpp index 987c28912..09db3586a 100644 --- a/retroshare-gui/src/gui/MessengerWindow.cpp +++ b/retroshare-gui/src/gui/MessengerWindow.cpp @@ -23,6 +23,8 @@ #include #include #include +#include + #include "common/vmessagebox.h" #include "common/StatusDefs.h" diff --git a/retroshare-gui/src/gui/chat/ChatStyle.cpp b/retroshare-gui/src/gui/chat/ChatStyle.cpp index 55b23bb1b..afaf3d392 100644 --- a/retroshare-gui/src/gui/chat/ChatStyle.cpp +++ b/retroshare-gui/src/gui/chat/ChatStyle.cpp @@ -162,27 +162,6 @@ static QString getStyle(const QDir &styleDir, const QString &styleVariant, enumG return style; } -QString ChatStyle::formatText(const QString &message, unsigned int flag) -{ - if (flag == 0) { - // nothing to do - return message; - } - - QDomDocument doc; - doc.setContent(message); - - QDomElement body = doc.documentElement(); - if (flag & CHAT_FORMATTEXT_EMBED_LINKS) { - RsChat::embedHtml(doc, body, defEmbedAhref); - } - if (flag & CHAT_FORMATTEXT_EMBED_SMILEYS) { - RsChat::embedHtml(doc, body, Emoticons::defEmbedImg); - } - - return doc.toString(-1); // -1 removes any annoying carriage return misinterpreted by QTextEdit -} - QString ChatStyle::formatMessage(enumFormatMessage type, const QString &name, const QDateTime ×tamp, const QString &message, unsigned int flag) { QString style = m_style[type]; @@ -216,13 +195,13 @@ QString ChatStyle::formatMessage(enumFormatMessage type, const QString &name, co unsigned int formatFlag = 0; if (flag & CHAT_FORMATMSG_EMBED_SMILEYS) { - formatFlag |= CHAT_FORMATTEXT_EMBED_SMILEYS; + formatFlag |= RSHTML_FORMATTEXT_EMBED_SMILEYS; } if (flag & CHAT_FORMATMSG_EMBED_LINKS) { - formatFlag |= CHAT_FORMATTEXT_EMBED_LINKS; + formatFlag |= RSHTML_FORMATTEXT_EMBED_LINKS; } - QString msg = formatText(message, formatFlag); + QString msg = RsHtml::formatText(message, formatFlag); // //replace http://, https:// and www. with links // QRegExp rx("(retroshare://[^ <>]*)|(https?://[^ <>]*)|(www\\.[^ <>]*)"); diff --git a/retroshare-gui/src/gui/chat/ChatStyle.h b/retroshare-gui/src/gui/chat/ChatStyle.h index 456d9d436..c1c1f2009 100644 --- a/retroshare-gui/src/gui/chat/ChatStyle.h +++ b/retroshare-gui/src/gui/chat/ChatStyle.h @@ -27,8 +27,7 @@ #include #include #include - -#include "HandleRichText.h" +#include /* Flags for ChatStyle::formatMessage */ #define CHAT_FORMATMSG_EMBED_SMILEYS 1 @@ -88,7 +87,6 @@ public: bool setStyleFromSettings(enumStyleType styleType); QString formatMessage(enumFormatMessage type, const QString &name, const QDateTime ×tamp, const QString &message, unsigned int flag); - QString formatText(const QString &message, unsigned int flag); static bool getAvailableStyles(enumStyleType styleType, QList &styles); static bool getAvailableVariants(const QString &stylePath, QStringList &variants); @@ -102,9 +100,6 @@ private: QString m_styleVariant; QString m_style[FORMATMSG_COUNT]; - - /** store default information for embedding HTML */ - RsChat::EmbedInHtmlAhref defEmbedAhref; }; #endif // _CHATSTYLE_H diff --git a/retroshare-gui/src/gui/chat/HandleRichText.cpp b/retroshare-gui/src/gui/chat/HandleRichText.cpp index 8c9634972..48e24093f 100644 --- a/retroshare-gui/src/gui/chat/HandleRichText.cpp +++ b/retroshare-gui/src/gui/chat/HandleRichText.cpp @@ -22,8 +22,9 @@ #include "HandleRichText.h" -namespace RsChat { +namespace RsHtml { +EmbedInHtmlImg defEmbedImg; void EmbedInHtmlImg::InitFromAwkwardHash(const QHash< QString, QString >& hash) { @@ -40,6 +41,27 @@ void EmbedInHtmlImg::InitFromAwkwardHash(const QHash< QString, QString >& hash) myRE.setPattern(newRE); } +QString formatText(const QString &text, unsigned int flag) +{ + if (flag == 0) { + // nothing to do + return text; + } + + QDomDocument doc; + doc.setContent(text); + + QDomElement body = doc.documentElement(); + if (flag & RSHTML_FORMATTEXT_EMBED_SMILEYS) { + embedHtml(doc, body, defEmbedImg); + } + if (flag & RSHTML_FORMATTEXT_EMBED_LINKS) { + EmbedInHtmlAhref defEmbedAhref; + embedHtml(doc, body, defEmbedAhref); + } + + return doc.toString(-1); // -1 removes any annoying carriage return misinterpreted by QTextEdit +} /** * Parses a DOM tree and replaces text by HTML tags. @@ -123,5 +145,4 @@ void embedHtml(QDomDocument& doc, QDomElement& currentElement, EmbedInHtml& embe } } - -} // namespace RsChat +} // namespace RsHtml diff --git a/retroshare-gui/src/gui/chat/HandleRichText.h b/retroshare-gui/src/gui/chat/HandleRichText.h index bd6d481f2..a85d7de42 100644 --- a/retroshare-gui/src/gui/chat/HandleRichText.h +++ b/retroshare-gui/src/gui/chat/HandleRichText.h @@ -33,8 +33,11 @@ #include #include +/* Flags for RsHtml::formatText */ +#define RSHTML_FORMATTEXT_EMBED_SMILEYS 1 +#define RSHTML_FORMATTEXT_EMBED_LINKS 2 -namespace RsChat { +namespace RsHtml { /** @@ -80,6 +83,7 @@ public: }; + /** * This class is used to store information for embedding smileys into tags. * @@ -102,11 +106,13 @@ public: QHash smileys; }; +extern EmbedInHtmlImg defEmbedImg; +QString formatText(const QString &text, unsigned int flag); void embedHtml(QDomDocument& doc, QDomElement& currentElement, EmbedInHtml& embedInfos); -} // namespace RsChat +} // namespace RsHtml #endif // HANDLE_RICH_TEXT_H_ diff --git a/retroshare-gui/src/gui/chat/PopupChatWindow.cpp b/retroshare-gui/src/gui/chat/PopupChatWindow.cpp index c7ba08f0d..32b61f640 100644 --- a/retroshare-gui/src/gui/chat/PopupChatWindow.cpp +++ b/retroshare-gui/src/gui/chat/PopupChatWindow.cpp @@ -21,6 +21,7 @@ ****************************************************************/ #include +#include #include "PopupChatWindow.h" #include "PopupChatDialog.h" diff --git a/retroshare-gui/src/gui/common/Emoticons.cpp b/retroshare-gui/src/gui/common/Emoticons.cpp index a0d633471..7156a69d8 100644 --- a/retroshare-gui/src/gui/common/Emoticons.cpp +++ b/retroshare-gui/src/gui/common/Emoticons.cpp @@ -33,7 +33,6 @@ #include "Emoticons.h" static QHash Smileys; -RsChat::EmbedInHtmlImg Emoticons::defEmbedImg; void Emoticons::load() { @@ -119,7 +118,7 @@ void Emoticons::load() } // init embedder - defEmbedImg.InitFromAwkwardHash(Smileys); + RsHtml::defEmbedImg.InitFromAwkwardHash(Smileys); } void Emoticons::showSmileyWidget(QWidget *parent, QWidget *button, const char *slotAddMethod, bool above) diff --git a/retroshare-gui/src/gui/common/Emoticons.h b/retroshare-gui/src/gui/common/Emoticons.h index 60da3d24d..d9c722d6b 100644 --- a/retroshare-gui/src/gui/common/Emoticons.h +++ b/retroshare-gui/src/gui/common/Emoticons.h @@ -36,9 +36,6 @@ public: static void showSmileyWidget(QWidget *parent, QWidget *button, const char *slotAddMethod, bool above); static void formatText(QString &text); - -public: - static RsChat::EmbedInHtmlImg defEmbedImg; }; #endif diff --git a/retroshare-gui/src/gui/feeds/ChatMsgItem.cpp b/retroshare-gui/src/gui/feeds/ChatMsgItem.cpp index b166b4c14..c5f428f77 100644 --- a/retroshare-gui/src/gui/feeds/ChatMsgItem.cpp +++ b/retroshare-gui/src/gui/feeds/ChatMsgItem.cpp @@ -26,7 +26,7 @@ #include "FeedHolder.h" #include "../RsAutoUpdatePage.h" #include "gui/msgs/MessageComposer.h" -#include "gui/chat/ChatStyle.h" +#include "gui/chat/HandleRichText.h" #include "gui/settings/rsharesettings.h" #include "gui/notifyqt.h" @@ -149,15 +149,14 @@ void ChatMsgItem::insertChat(std::string &message) QString formatMsg = QString::fromStdString(message); - ChatStyle style; - unsigned int formatFlag = CHAT_FORMATTEXT_EMBED_LINKS; + unsigned int formatFlag = RSHTML_FORMATTEXT_EMBED_LINKS; // embed smileys ? if (Settings->valueFromGroup(QString("Chat"), QString::fromUtf8("Emoteicons_GroupChat"), true).toBool()) { - formatFlag |= CHAT_FORMATTEXT_EMBED_SMILEYS; + formatFlag |= RSHTML_FORMATTEXT_EMBED_SMILEYS; } - formatMsg = style.formatText(formatMsg, formatFlag); + formatMsg = RsHtml::formatText(formatMsg, formatFlag); chatTextlabel->setText(formatMsg); } diff --git a/retroshare-gui/src/gui/im_history/ImHistoryBrowser.h b/retroshare-gui/src/gui/im_history/ImHistoryBrowser.h index 04fbae624..c39bffc47 100644 --- a/retroshare-gui/src/gui/im_history/ImHistoryBrowser.h +++ b/retroshare-gui/src/gui/im_history/ImHistoryBrowser.h @@ -24,6 +24,7 @@ #define _IMHISTORYBROWSER_H #include +#include #include #include "IMHistoryKeeper.h" diff --git a/retroshare-gui/src/lang/retroshare_de.qm b/retroshare-gui/src/lang/retroshare_de.qm index f274d2acf6f36e9cdf714da001392c69b7d0daa2..68941fc782344527aeaf07a766b1dd7486ae88fa 100644 GIT binary patch delta 10326 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 delta 10284 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 - + Quick Message Schnelle Nachrricht @@ -1288,7 +1288,7 @@ p, li { white-space: pre-wrap; } ChatStyle - + Standard style for group chat Standard Stil für den Gruppenchat @@ -3585,7 +3585,7 @@ p, li { white-space: pre-wrap; } keine - + RetroShare @@ -3601,7 +3601,7 @@ p, li { white-space: pre-wrap; } Du kannst einem anonymen Autor nicht antworten - + Your Forums Deine Foren @@ -3739,7 +3739,7 @@ p, li { white-space: pre-wrap; } - + Start New Thread Erstelle neues Thema @@ -3767,7 +3767,7 @@ p, li { white-space: pre-wrap; } Inhalt - + Mark as read Als gelesen markieren @@ -6073,15 +6073,15 @@ p, li { white-space: pre-wrap; } - + Inbox Posteingang - - + + Outbox Postausgang @@ -6093,7 +6093,7 @@ p, li { white-space: pre-wrap; } - + Sent Gesendet @@ -6155,13 +6155,13 @@ p, li { white-space: pre-wrap; } Speichern unter... - + Print Document Dokument drucken - + Subject Betreff @@ -6226,7 +6226,17 @@ p, li { white-space: pre-wrap; } Empfohlene Dateien einblenden - + + File + Datei + + + + Files + Dateien + + + Save as... Speichern unter... @@ -6236,7 +6246,7 @@ p, li { white-space: pre-wrap; } HTML-Dateien (*.htm *.html);;Alle Dateien (*) - + Reply to All Allen antworten @@ -6276,7 +6286,7 @@ p, li { white-space: pre-wrap; } - + Trash Papierkorb @@ -6292,7 +6302,7 @@ p, li { white-space: pre-wrap; } Ordner - + Remove All Tags Alle Schlagwörter entfernen @@ -6323,13 +6333,13 @@ p, li { white-space: pre-wrap; } - + Drafts Entwürfe - + To An @@ -6339,7 +6349,7 @@ p, li { white-space: pre-wrap; } Editieren... - + @@ -6351,7 +6361,7 @@ p, li { white-space: pre-wrap; } MessengerWindow - + Expand all Alle erweitern @@ -8166,7 +8176,7 @@ Do you want to send them a Message instead Tab abdocken - + RetroShare RetroShare @@ -8674,7 +8684,7 @@ p, li { white-space: pre-wrap; } Die Datei wurde zur Downloadliste hinzugefügt. - + File Request canceled Dateianforderung abgebrochen