option(WITH_OPENSSL "Enable OpenSSL support if present on the system" ON)
option(WITH_DBUS "Enable D-Bus support if present on the system" ON)
+option(WITH_WEBKIT "Enable WebKit support if present on the system" ON)
option(STATIC "Enable static building (might not be portable)" OFF)
option(DEPLOY "Mac OS X only! Adds required libs to bundle resources and create a dmg. Note: requires Qt to be built with 10.4u SDK" OFF)
message(STATUS "Disabling D-Bus support")
endif(WITH_DBUS)
+# Setup QtWebKit support
+if(WITH_WEBKIT)
+ if(QT_QTWEBKIT_FOUND)
+ message(STATUS "Found QtWebKit, enabling WebKit support")
+ add_definitions(-DHAVE_WEBKIT)
+ set(LINK_WEBKIT WEBKIT)
+ set(HAVE_WEBKIT true)
+ set(MOC_DEFINES ${MOC_DEFINES} -DHAVE_WEBKIT)
+ else(QT_QTWEBKIT_FOUND)
+ message(STATUS "QtWebKit not found, disabling D-Bus support")
+ endif(QT_QTWEBKIT_FOUND)
+else(WITH_WEBKIT)
+ message(STATUS "Disabling WebKit support")
+endif(WITH_WEBKIT)
+
+
# Set global buildflags
# This is very much non-portable, so don't use -DSTATIC until you know what
# you do.
endif(WANT_CORE)
if(WANT_QTCLIENT)
- setup_qt4_variables(${LINK_DBUS} GUI NETWORK WEBKIT)
+ setup_qt4_variables(${LINK_DBUS} GUI NETWORK ${LINK_WEBKIT})
add_executable(quasselclient WIN32 common/main.cpp ${COMMON_DEPS} ${CLIENT_DEPS})
add_dependencies(quasselclient icons)
set_target_properties(quasselclient PROPERTIES
endif(WANT_QTCLIENT)
if(WANT_MONO)
- setup_qt4_variables(${LINK_DBUS} GUI NETWORK SCRIPT SQL WEBKIT)
+ setup_qt4_variables(${LINK_DBUS} GUI NETWORK SCRIPT SQL ${LINK_WEBKIT})
add_executable(quassel WIN32 common/main.cpp qtui/monoapplication.cpp ${COMMON_DEPS} ${CLIENT_DEPS} ${CORE_DEPS})
add_dependencies(quassel icons)
set_target_properties(quassel PROPERTIES
aboutdlg.h
bufferwidget.h
channellistdlg.h
- chatitem.h
chatlinemodel.h
chatmonitorfilter.h
chatmonitorview.h
topicwidget.h
verticaldock.h)
+if(HAVE_WEBKIT)
+ set(MOC_HDRS ${MOC_HDRS} chatitem.h)
+endif(HAVE_WEBKIT)
+
set(HEADERS
chatline.h
chatlinemodelitem.h
qtuisettings.h
qtuistyle.h)
+if(NOT HAVE_WEBKIT)
+ set(HEADERS ${HEADERS} chatitem.h)
+endif(NOT HAVE_WEBKIT)
+
set(FORMS
aboutdlg.ui
bufferviewwidget.ui
#include <QPainter>
#include <QPalette>
#include <QTextLayout>
+#ifdef HAVE_WEBKIT
#include <QWebView>
+#endif
#include <QGraphicsProxyWidget>
#include "chatitem.h"
if(hasLayout() && privateData()->currentClickable.isValid()) {
setCursor(Qt::ArrowCursor);
privateData()->currentClickable = Clickable();
+#ifdef HAVE_WEBKIT
privateData()->clearPreview();
+#endif
update();
}
}
if(!hasLayout())
updateLayout();
+#ifdef HAVE_WEBKIT
QTextLine line = layout()->lineForTextPosition(click.start);
qreal x = line.cursorToX(click.start);
qreal width = line.cursorToX(click.start + click.length) - x;
if(!url.contains("://"))
url = "http://" + url;
privateData()->loadWebPreview(url, urlRect);
+#endif
} else if(click.type == Clickable::Channel) {
// TODO: don't make clickable if it's our own name
//onClickable = true; //FIXME disabled for now
// ContentsChatItemPrivate
// ****************************************
ContentsChatItemPrivate::~ContentsChatItemPrivate() {
+#ifdef HAVE_WEBKIT
clearPreview();
+#endif
}
+#ifdef HAVE_WEBKIT
void ContentsChatItemPrivate::loadWebPreview(const QString &url, const QRectF &urlRect) {
if(!controller)
controller = new PreviewController(contentsItem);
QString text = QString::number(zValue());
painter->drawText(_boundingRect.center(), text);
}
+#endif // #ifdef HAVE_WEBKIT
/*************************************************************************************************/
ContentsChatItem::Clickable currentClickable;
bool hasDragged;
+#ifdef HAVE_WEBKIT
ContentsChatItemPrivate(QTextLayout *l, const QList<ContentsChatItem::Clickable> &c, ContentsChatItem *parent) : ChatItemPrivate(l), contentsItem(parent), clickables(c), hasDragged(false), controller(0) {}
+#else
+ ContentsChatItemPrivate(QTextLayout *l, const QList<ContentsChatItem::Clickable> &c, ContentsChatItem *parent) : ChatItemPrivate(l), contentsItem(parent), clickables(c), hasDragged(false) {}
+#endif
~ContentsChatItemPrivate();
+#ifdef HAVE_WEBKIT
void loadWebPreview(const QString &url, const QRectF &urlRect);
void clearPreview();
class PreviewController;
class PreviewItem;
PreviewController *controller;
+#endif //#ifdef HAVE_WEBKIT
};
+#ifdef HAVE_WEBKIT
class ContentsChatItemPrivate::PreviewController : public QObject {
Q_OBJECT
public:
private:
QRectF _boundingRect;
};
+#endif //#ifdef HAVE_WEBKIT
//inlines regarding ContentsChatItemPrivate
ContentsChatItemPrivate *ContentsChatItem::privateData() const { return (ContentsChatItemPrivate *)ChatItem::privateData(); }