/retroshare-gui/src/gui/common/RSTextBrowser.cpp
C++ | 136 lines | 102 code | 29 blank | 5 comment | 19 complexity | 0532905481404393ba4df816a90b68fb MD5 | raw file
Possible License(s): 0BSD, GPL-2.0
- #include <QDesktopServices>
- #include <QPainter>
-
- #include "RSTextBrowser.h"
- #include "RSImageBlockWidget.h"
-
- RSTextBrowser::RSTextBrowser(QWidget *parent) :
- QTextBrowser(parent)
- {
- setOpenExternalLinks(true);
- setOpenLinks(false);
-
- mShowImages = true;
- mImageBlockWidget = NULL;
- mLinkClickActive = true;
-
- connect(this, SIGNAL(anchorClicked(QUrl)), this, SLOT(linkClicked(QUrl)));
- }
-
- void RSTextBrowser::linkClicked(const QUrl &url)
- {
- if (!mLinkClickActive) {
- return;
- }
-
- // some links are opened directly in the QTextBrowser with open external links set to true,
- // so we handle links by our own
-
- #ifdef TO_DO
- // If we want extra file links to be anonymous, we need to insert the actual source here.
- if(url.host() == HOST_EXTRAFILE)
- {
- std::cerr << "Extra file link detected. Adding parent id " << _target_sslid << " to sourcelist" << std::endl;
-
- RetroShareLink link ;
- link.fromUrl(url) ;
-
- link.createExtraFile( link.name(),link.size(),link.hash(), _target_ssl_id) ;
-
- QDesktopServices::openUrl(link.toUrl());
- }
- else
- #endif
- QDesktopServices::openUrl(url);
- }
-
- void RSTextBrowser::setPlaceholderText(const QString &text)
- {
- mPlaceholderText = text;
- viewport()->repaint();
- }
-
- void RSTextBrowser::paintEvent(QPaintEvent *event)
- {
- QTextBrowser::paintEvent(event);
-
- if (mPlaceholderText.isEmpty() == false && document()->isEmpty()) {
- QWidget *vieportWidget = viewport();
- QPainter painter(vieportWidget);
-
- QPen pen = painter.pen();
- QColor color = pen.color();
- color.setAlpha(128);
- pen.setColor(color);
- painter.setPen(pen);
-
- painter.drawText(QRect(QPoint(), vieportWidget->size()), Qt::AlignHCenter | Qt::AlignVCenter | Qt::TextWordWrap, mPlaceholderText);
- }
- }
-
- QVariant RSTextBrowser::loadResource(int type, const QUrl &name)
- {
- if (mShowImages || type != QTextDocument::ImageResource || name.scheme().compare("data", Qt::CaseInsensitive) != 0) {
- return QTextBrowser::loadResource(type, name);
- }
-
- if (mImageBlockWidget) {
- mImageBlockWidget->show();
- }
-
- return QPixmap(":/trolltech/styles/commonstyle/images/file-16.png");
- }
-
- void RSTextBrowser::setImageBlockWidget(RSImageBlockWidget *widget)
- {
- if (mImageBlockWidget) {
- // disconnect
- disconnect(mImageBlockWidget, SIGNAL(destroyed()), this, SLOT(destroyImageBlockWidget()));
- disconnect(mImageBlockWidget, SIGNAL(showImages()), this, SLOT(showImages()));
- }
-
- mImageBlockWidget = widget;
-
- if (mImageBlockWidget) {
- // connect
- connect(mImageBlockWidget, SIGNAL(destroyed()), this, SLOT(destroyImageBlockWidget()));
- connect(mImageBlockWidget, SIGNAL(showImages()), this, SLOT(showImages()));
- }
-
- resetImagesStatus(false);
- }
-
- void RSTextBrowser::destroyImageBlockWidget()
- {
- mImageBlockWidget = NULL;
- }
-
- void RSTextBrowser::showImages()
- {
- if (mImageBlockWidget && sender() == mImageBlockWidget) {
- mImageBlockWidget->hide();
- }
-
- if (mShowImages) {
- return;
- }
-
- mShowImages = true;
-
- QString html = toHtml();
- clear();
- setHtml(html);
- }
-
- void RSTextBrowser::resetImagesStatus(bool load)
- {
- if (mImageBlockWidget) {
- mImageBlockWidget->hide();
- }
- mShowImages = load;
- }
-
- void RSTextBrowser::activateLinkClick(bool active)
- {
- mLinkClickActive = active;
- }