forked from qt-creator/qt-creator
Help: show ToolTips on links hovers
Change-Id: Icce21b848f38b4f45b58ccff626b2e23a7e8ef98 Reviewed-by: Eike Ziller <eike.ziller@theqtcompany.com>
This commit is contained in:
@@ -68,12 +68,15 @@ public:
|
|||||||
void setOpenInNewPageActionVisible(bool visible);
|
void setOpenInNewPageActionVisible(bool visible);
|
||||||
|
|
||||||
WebView *webView() const;
|
WebView *webView() const;
|
||||||
|
void startToolTipTimer(const QPoint &pos, const QString &text);
|
||||||
|
void hideToolTip();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void hideEvent(QHideEvent *);
|
void hideEvent(QHideEvent *);
|
||||||
void showEvent(QShowEvent *);
|
void showEvent(QShowEvent *);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void showToolTip();
|
||||||
MacWebKitHelpWidgetPrivate *d;
|
MacWebKitHelpWidgetPrivate *d;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -39,7 +39,10 @@
|
|||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
#include <QClipboard>
|
#include <QClipboard>
|
||||||
#include <QHelpEngine>
|
#include <QHelpEngine>
|
||||||
|
#include <QStyle>
|
||||||
|
#include <QTimer>
|
||||||
#include <QtMac>
|
#include <QtMac>
|
||||||
|
#include <QToolTip>
|
||||||
#include <QUrl>
|
#include <QUrl>
|
||||||
#include <QVBoxLayout>
|
#include <QVBoxLayout>
|
||||||
|
|
||||||
@@ -86,6 +89,22 @@ AutoreleasePool::~AutoreleasePool()
|
|||||||
[pool release];
|
[pool release];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// #pragma mark -- mac helpers
|
||||||
|
|
||||||
|
// copy from qcocoahelpers.mm
|
||||||
|
static int mainScreenHeight()
|
||||||
|
{
|
||||||
|
// The first screen in the screens array is documented
|
||||||
|
// to have the (0,0) origin.
|
||||||
|
NSRect screenFrame = [[[NSScreen screens] firstObject] frame];
|
||||||
|
return screenFrame.size.height;
|
||||||
|
}
|
||||||
|
|
||||||
|
static QPoint flipPoint(const NSPoint &p)
|
||||||
|
{
|
||||||
|
return QPoint(p.x, mainScreenHeight() - p.y);
|
||||||
|
}
|
||||||
|
|
||||||
// #pragma mark -- DOMNodeIterator (PrivateExtensions)
|
// #pragma mark -- DOMNodeIterator (PrivateExtensions)
|
||||||
|
|
||||||
@interface DOMNodeIterator (PrivateExtensions)
|
@interface DOMNodeIterator (PrivateExtensions)
|
||||||
@@ -264,22 +283,23 @@ static void ensureProtocolHandler()
|
|||||||
|
|
||||||
@interface UIDelegate : NSObject
|
@interface UIDelegate : NSObject
|
||||||
{
|
{
|
||||||
QWidget *widget;
|
Help::Internal::MacWebKitHelpWidget *widget;
|
||||||
}
|
}
|
||||||
|
|
||||||
@property (assign) BOOL openInNewPageActionVisible;
|
@property (assign) BOOL openInNewPageActionVisible;
|
||||||
|
|
||||||
- (id)initWithWidget:(QWidget *)theWidget;
|
- (id)initWithWidget:(Help::Internal::MacWebKitHelpWidget *)theWidget;
|
||||||
- (void)webView:(WebView *)sender makeFirstResponder:(NSResponder *)responder;
|
- (void)webView:(WebView *)sender makeFirstResponder:(NSResponder *)responder;
|
||||||
- (NSArray *)webView:(WebView *)sender contextMenuItemsForElement:(NSDictionary *)element
|
- (NSArray *)webView:(WebView *)sender contextMenuItemsForElement:(NSDictionary *)element
|
||||||
defaultMenuItems:(NSArray *)defaultMenuItems;
|
defaultMenuItems:(NSArray *)defaultMenuItems;
|
||||||
- (WebView *)webView:(WebView *)sender createWebViewWithRequest:(NSURLRequest *)request;
|
- (WebView *)webView:(WebView *)sender createWebViewWithRequest:(NSURLRequest *)request;
|
||||||
|
- (void)webView:(WebView *)sender mouseDidMoveOverElement:(NSDictionary *)elementInformation
|
||||||
|
modifierFlags:(NSUInteger)modifierFlags;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation UIDelegate
|
@implementation UIDelegate
|
||||||
|
|
||||||
- (id)initWithWidget:(QWidget *)theWidget
|
- (id)initWithWidget:(Help::Internal::MacWebKitHelpWidget *)theWidget
|
||||||
{
|
{
|
||||||
self = [super init];
|
self = [super init];
|
||||||
if (self) {
|
if (self) {
|
||||||
@@ -343,6 +363,23 @@ static void ensureProtocolHandler()
|
|||||||
return viewer->widget()->webView();
|
return viewer->widget()->webView();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)webView:(WebView *)sender mouseDidMoveOverElement:(NSDictionary *)elementInformation
|
||||||
|
modifierFlags:(NSUInteger)modifierFlags
|
||||||
|
{
|
||||||
|
Q_UNUSED(sender)
|
||||||
|
if (!elementInformation || (modifierFlags & NSDeviceIndependentModifierFlagsMask) != 0) {
|
||||||
|
widget->hideToolTip();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
NSURL *url = [elementInformation objectForKey:WebElementLinkURLKey];
|
||||||
|
if (!url) {
|
||||||
|
widget->hideToolTip();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
widget->startToolTipTimer(flipPoint(NSEvent.mouseLocation),
|
||||||
|
QString::fromNSString(url.absoluteString));
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
// #pragma mark -- MyWebView
|
// #pragma mark -- MyWebView
|
||||||
@@ -405,6 +442,9 @@ public:
|
|||||||
FrameLoadDelegate *m_frameLoadDelegate;
|
FrameLoadDelegate *m_frameLoadDelegate;
|
||||||
UIDelegate *m_uiDelegate;
|
UIDelegate *m_uiDelegate;
|
||||||
NSResponder *m_savedResponder;
|
NSResponder *m_savedResponder;
|
||||||
|
QTimer m_toolTipTimer;
|
||||||
|
QPoint m_toolTipPos;
|
||||||
|
QString m_toolTipText;
|
||||||
};
|
};
|
||||||
|
|
||||||
// #pragma mark -- MacWebKitHelpWidget
|
// #pragma mark -- MacWebKitHelpWidget
|
||||||
@@ -413,6 +453,8 @@ MacWebKitHelpWidget::MacWebKitHelpWidget(MacWebKitHelpViewer *parent)
|
|||||||
: QMacCocoaViewContainer(0, parent),
|
: QMacCocoaViewContainer(0, parent),
|
||||||
d(new MacWebKitHelpWidgetPrivate)
|
d(new MacWebKitHelpWidgetPrivate)
|
||||||
{
|
{
|
||||||
|
d->m_toolTipTimer.setSingleShot(true);
|
||||||
|
connect(&d->m_toolTipTimer, &QTimer::timeout, this, &MacWebKitHelpWidget::showToolTip);
|
||||||
AutoreleasePool pool; Q_UNUSED(pool)
|
AutoreleasePool pool; Q_UNUSED(pool)
|
||||||
d->m_webView = [[MyWebView alloc] init];
|
d->m_webView = [[MyWebView alloc] init];
|
||||||
// Turn layered rendering on.
|
// Turn layered rendering on.
|
||||||
@@ -442,6 +484,20 @@ WebView *MacWebKitHelpWidget::webView() const
|
|||||||
return d->m_webView;
|
return d->m_webView;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MacWebKitHelpWidget::startToolTipTimer(const QPoint &pos, const QString &text)
|
||||||
|
{
|
||||||
|
int delay = style()->styleHint(QStyle::SH_ToolTip_WakeUpDelay, 0, this, 0);
|
||||||
|
d->m_toolTipPos = pos;
|
||||||
|
d->m_toolTipText = text;
|
||||||
|
d->m_toolTipTimer.start(delay);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MacWebKitHelpWidget::hideToolTip()
|
||||||
|
{
|
||||||
|
d->m_toolTipTimer.stop();
|
||||||
|
QToolTip::showText(QPoint(), QString());
|
||||||
|
}
|
||||||
|
|
||||||
void MacWebKitHelpWidget::hideEvent(QHideEvent *)
|
void MacWebKitHelpWidget::hideEvent(QHideEvent *)
|
||||||
{
|
{
|
||||||
[d->m_webView setHidden:YES];
|
[d->m_webView setHidden:YES];
|
||||||
@@ -452,6 +508,11 @@ void MacWebKitHelpWidget::showEvent(QShowEvent *)
|
|||||||
[d->m_webView setHidden:NO];
|
[d->m_webView setHidden:NO];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MacWebKitHelpWidget::showToolTip()
|
||||||
|
{
|
||||||
|
QToolTip::showText(d->m_toolTipPos, d->m_toolTipText, this);
|
||||||
|
}
|
||||||
|
|
||||||
// #pragma mark -- MacWebKitHelpViewer
|
// #pragma mark -- MacWebKitHelpViewer
|
||||||
|
|
||||||
MacWebKitHelpViewer::MacWebKitHelpViewer(QWidget *parent)
|
MacWebKitHelpViewer::MacWebKitHelpViewer(QWidget *parent)
|
||||||
|
|||||||
@@ -38,6 +38,7 @@
|
|||||||
|
|
||||||
#include <coreplugin/find/findplugin.h>
|
#include <coreplugin/find/findplugin.h>
|
||||||
#include <utils/hostosinfo.h>
|
#include <utils/hostosinfo.h>
|
||||||
|
#include <utils/networkaccessmanager.h>
|
||||||
#include <utils/qtcassert.h>
|
#include <utils/qtcassert.h>
|
||||||
|
|
||||||
#include <QAction>
|
#include <QAction>
|
||||||
@@ -59,7 +60,6 @@
|
|||||||
#include <QNetworkReply>
|
#include <QNetworkReply>
|
||||||
#include <QNetworkRequest>
|
#include <QNetworkRequest>
|
||||||
|
|
||||||
#include <utils/networkaccessmanager.h>
|
|
||||||
|
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
@@ -411,6 +411,7 @@ QtWebKitHelpViewer::QtWebKitHelpViewer(QWidget *parent)
|
|||||||
connect(m_webView->page(), SIGNAL(printRequested(QWebFrame*)), this, SIGNAL(printRequested()));
|
connect(m_webView->page(), SIGNAL(printRequested(QWebFrame*)), this, SIGNAL(printRequested()));
|
||||||
connect(m_webView, SIGNAL(backwardAvailable(bool)), this, SIGNAL(backwardAvailable(bool)));
|
connect(m_webView, SIGNAL(backwardAvailable(bool)), this, SIGNAL(backwardAvailable(bool)));
|
||||||
connect(m_webView, SIGNAL(forwardAvailable(bool)), this, SIGNAL(forwardAvailable(bool)));
|
connect(m_webView, SIGNAL(forwardAvailable(bool)), this, SIGNAL(forwardAvailable(bool)));
|
||||||
|
connect(page(), &HelpPage::linkHovered, this, &QtWebKitHelpViewer::setToolTip);
|
||||||
}
|
}
|
||||||
|
|
||||||
QFont QtWebKitHelpViewer::viewerFont() const
|
QFont QtWebKitHelpViewer::viewerFont() const
|
||||||
|
|||||||
@@ -43,6 +43,7 @@
|
|||||||
#include <QHelpEngine>
|
#include <QHelpEngine>
|
||||||
#include <QKeyEvent>
|
#include <QKeyEvent>
|
||||||
#include <QMenu>
|
#include <QMenu>
|
||||||
|
#include <QToolTip>
|
||||||
#include <QVBoxLayout>
|
#include <QVBoxLayout>
|
||||||
|
|
||||||
using namespace Help;
|
using namespace Help;
|
||||||
@@ -405,6 +406,10 @@ bool TextBrowserHelpWidget::eventFilter(QObject *obj, QEvent *event)
|
|||||||
Core::FindPlugin::instance()->openFindToolBar(Core::FindPlugin::FindForwardDirection);
|
Core::FindPlugin::instance()->openFindToolBar(Core::FindPlugin::FindForwardDirection);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
} else if (event->type() == QEvent::ToolTip) {
|
||||||
|
QHelpEvent *e = static_cast<QHelpEvent *>(event);
|
||||||
|
QToolTip::showText(e->globalPos(), linkAt(e->pos()));
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return QTextBrowser::eventFilter(obj, event);
|
return QTextBrowser::eventFilter(obj, event);
|
||||||
|
|||||||
Reference in New Issue
Block a user