ToolTip->ToolTipArea
This commit is contained in:
parent
798b7665d4
commit
6a0525c1c3
@ -91,103 +91,67 @@ PlasmaComponents.Page {
|
||||
|
||||
Row {
|
||||
spacing: _s
|
||||
PlasmaCore.IconItem {
|
||||
id: akonadiIcon
|
||||
objectName: "akonadiIcon"
|
||||
source: "akonadi"
|
||||
width: height
|
||||
height: _h
|
||||
//anchors.horizontalCenter: parent.horizontalCenter
|
||||
Rectangle { color: "orange"; opacity: 0.3; anchors.fill: parent; }
|
||||
PlasmaCore.ToolTip {
|
||||
anchors.fill: parent
|
||||
target: akonadiIcon
|
||||
icon: "klipper"
|
||||
mainText: "Fish sighted in the wild, in the wild, a fish was seen."
|
||||
subText: "A mean-looking grouper swam by."
|
||||
PlasmaCore.ToolTipArea {
|
||||
width: childrenRect.width
|
||||
height: childrenRect.height
|
||||
icon: "klipper"
|
||||
mainText: "Fish sighted in the wild, in the wild, a fish was seen."
|
||||
subText: "A mean-looking grouper swam by."
|
||||
PlasmaCore.IconItem {
|
||||
id: akonadiIcon
|
||||
objectName: "akonadiIcon"
|
||||
source: "akonadi"
|
||||
width: height
|
||||
height: _h
|
||||
//anchors.horizontalCenter: parent.horizontalCenter
|
||||
Rectangle { color: "orange"; opacity: 0.3; anchors.fill: parent; }
|
||||
}
|
||||
}
|
||||
Image {
|
||||
objectName: "bridgeimage"
|
||||
PlasmaCore.ToolTipArea {
|
||||
height: _h
|
||||
width: height
|
||||
fillMode: Image.PreserveAspectFit
|
||||
source: "../images/bridge.jpg"
|
||||
PlasmaCore.ToolTip {
|
||||
target: parent
|
||||
image: parent.source
|
||||
mainText: "Bridge"
|
||||
subText: "Waalbrug."
|
||||
image: bridgeimage.source
|
||||
mainText: "Bridge"
|
||||
subText: "Waalbrug."
|
||||
Image {
|
||||
id: bridgeimage
|
||||
objectName: "bridgeimage"
|
||||
height: _h
|
||||
width: height
|
||||
fillMode: Image.PreserveAspectFit
|
||||
source: "../images/bridge.jpg"
|
||||
}
|
||||
}
|
||||
Image {
|
||||
objectName: "surfboardimage"
|
||||
height: _h
|
||||
width: height
|
||||
fillMode: Image.PreserveAspectFit
|
||||
source: "../images/surfboard.jpg"
|
||||
PlasmaCore.ToolTip {
|
||||
anchors.fill: parent
|
||||
image: parent.source
|
||||
mainItem: PlasmaComponents.Label {
|
||||
text: "Nijmegen North Beach"
|
||||
anchors.centerIn: parent
|
||||
}
|
||||
PlasmaCore.ToolTipArea {
|
||||
width: childrenRect.width
|
||||
height: childrenRect.height
|
||||
mainItem: PlasmaComponents.Label {
|
||||
text: "Nijmegen North Beach"
|
||||
anchors.centerIn: parent
|
||||
}
|
||||
Image {
|
||||
objectName: "surfboardimage"
|
||||
height: _h
|
||||
width: height
|
||||
fillMode: Image.PreserveAspectFit
|
||||
source: "../images/surfboard.jpg"
|
||||
|
||||
//subText: "A surfboard on the beach. <br />The photo shows the Waal river's north beach, \
|
||||
//across the water from Nijmegen, Netherlands. It was taken during the summer festivals a few years back."
|
||||
}
|
||||
}
|
||||
PlasmaComponents.Button {
|
||||
text: "Button"
|
||||
iconSource: "call-start"
|
||||
PlasmaCore.ToolTip {
|
||||
target: parent
|
||||
mainText: "Tooltip on button"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
QtExtras.MouseEventListener {
|
||||
id: task1
|
||||
|
||||
width: height
|
||||
height: _h*2
|
||||
|
||||
hoverEnabled: true
|
||||
|
||||
onContainsMouseChanged: {
|
||||
if (containsMouse) {
|
||||
print("Setting target to task1");
|
||||
tooltip.target = task1;
|
||||
tooltip.mainText = "Bridge"
|
||||
tooltip.subText = "in Nijmegen"
|
||||
} else {
|
||||
print("Setting target to null");
|
||||
tooltip.target = null;
|
||||
}
|
||||
}
|
||||
Image {
|
||||
objectName: "bridgeimage1"
|
||||
anchors.fill: parent
|
||||
fillMode: Image.PreserveAspectFit
|
||||
source: "../images/bridge.jpg"
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
onClicked: {
|
||||
print("bridgeimage1 clicked");
|
||||
}
|
||||
}
|
||||
PlasmaCore.ToolTipArea {
|
||||
width: childrenRect.width
|
||||
height: childrenRect.height
|
||||
mainText: "Tooltip on button"
|
||||
PlasmaComponents.Button {
|
||||
id: button
|
||||
text: "Button"
|
||||
iconSource: "call-start"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
PlasmaCore.ToolTip {
|
||||
id: tooltip
|
||||
target: null
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -85,7 +85,7 @@ void CoreBindingsPlugin::registerTypes(const char *uri)
|
||||
qmlRegisterType<Plasma::SortFilterModel>(uri, 2, 0, "SortFilterModel");
|
||||
|
||||
qmlRegisterType<DialogProxy>(uri, 2, 0, "Dialog");
|
||||
qmlRegisterType<ToolTip>(uri, 2, 0, "ToolTip");
|
||||
qmlRegisterType<ToolTip>(uri, 2, 0, "ToolTipArea");
|
||||
|
||||
qmlRegisterInterface<Plasma::Service>("Service");
|
||||
qRegisterMetaType<Plasma::Service*>("Service");
|
||||
|
@ -90,7 +90,6 @@ Item {
|
||||
PlasmaExtras.Heading {
|
||||
id: tooltipMaintext
|
||||
level: 3
|
||||
width: parent.preferredTextWidth
|
||||
wrapMode: Text.WordWrap
|
||||
text: toolTip ? toolTip.mainText : ""
|
||||
anchors {
|
||||
|
@ -35,9 +35,11 @@ ToolTip::ToolTip(QQuickItem *parent)
|
||||
m_showTimer = new QTimer(this);
|
||||
m_showTimer->setSingleShot(true);
|
||||
connect(m_showTimer, &QTimer::timeout, [=]() {
|
||||
setVisible(true);
|
||||
showToolTip();
|
||||
});
|
||||
|
||||
setAcceptHoverEvents(true);
|
||||
setFiltersChildMouseEvents(true);
|
||||
}
|
||||
|
||||
ToolTip::~ToolTip()
|
||||
@ -58,60 +60,26 @@ void ToolTip::setMainItem(QQuickItem *mainItem)
|
||||
}
|
||||
}
|
||||
|
||||
QQuickItem *ToolTip::target() const
|
||||
{
|
||||
if (m_target.data()) {
|
||||
return m_target.data();
|
||||
} else {
|
||||
QQuickItem *qqi = qobject_cast<QQuickItem*>(parent());
|
||||
return qqi;
|
||||
}
|
||||
}
|
||||
|
||||
void ToolTip::setTarget(QQuickItem *target)
|
||||
{
|
||||
if (m_target.data() == target) {
|
||||
return;
|
||||
}
|
||||
|
||||
m_target = target;
|
||||
setParentItem(target);
|
||||
|
||||
property("anchors").value<QObject *>()->setProperty("fill", QVariant::fromValue(parentItem()));
|
||||
|
||||
emit targetChanged();
|
||||
}
|
||||
|
||||
bool ToolTip::isVisible() const
|
||||
void ToolTip::showToolTip()
|
||||
{
|
||||
ToolTipDialog *dlg = ToolTipDialog::instance();
|
||||
return (dlg->mainItem() == mainItem() && mainItem() && mainItem()->isVisible());
|
||||
}
|
||||
|
||||
void ToolTip::setVisible(const bool visible)
|
||||
{
|
||||
ToolTipDialog *dlg = ToolTipDialog::instance();
|
||||
if (visible) {
|
||||
|
||||
if (!mainItem()) {
|
||||
setMainItem(dlg->loadDefaultItem());
|
||||
}
|
||||
|
||||
if (dlg->mainItem()) {
|
||||
dlg->mainItem()->setVisible(false);
|
||||
}
|
||||
|
||||
if (mainItem()) {
|
||||
mainItem()->setProperty("toolTip", QVariant::fromValue(this));
|
||||
mainItem()->setVisible(true);
|
||||
}
|
||||
|
||||
dlg->setMainItem(mainItem());
|
||||
dlg->setVisualParent(target());
|
||||
dlg->setVisible(true);
|
||||
} else {
|
||||
dlg->setVisible(false);
|
||||
if (!mainItem()) {
|
||||
setMainItem(dlg->loadDefaultItem());
|
||||
}
|
||||
|
||||
if (dlg->mainItem()) {
|
||||
dlg->mainItem()->setVisible(false);
|
||||
}
|
||||
|
||||
if (mainItem()) {
|
||||
mainItem()->setProperty("toolTip", QVariant::fromValue(this));
|
||||
mainItem()->setVisible(true);
|
||||
}
|
||||
|
||||
dlg->setMainItem(mainItem());
|
||||
dlg->setVisible(true);
|
||||
dlg->setVisualParent(this);
|
||||
}
|
||||
|
||||
QString ToolTip::mainText() const
|
||||
@ -185,24 +153,20 @@ void ToolTip::setImage(const QVariant &image)
|
||||
void ToolTip::hoverEnterEvent(QHoverEvent *event)
|
||||
{
|
||||
if (ToolTipDialog::instance()->isVisible()) {
|
||||
//FIXME: setVisible needs to be renamed in sync or something like that
|
||||
setVisible(true);
|
||||
//FIXME: showToolTip needs to be renamed in sync or something like that
|
||||
showToolTip();
|
||||
} else {
|
||||
m_showTimer->start(500);
|
||||
}
|
||||
|
||||
//relay the event
|
||||
if (window()) {
|
||||
window()->sendEvent(target(), event);
|
||||
}
|
||||
}
|
||||
|
||||
void ToolTip::hoverLeaveEvent(QHoverEvent *event)
|
||||
{
|
||||
m_showTimer->stop();
|
||||
|
||||
//relay the event
|
||||
if (window()) {
|
||||
window()->sendEvent(target(), event);
|
||||
}
|
||||
}
|
||||
|
||||
bool ToolTip::childMouseEventFilter(QQuickItem *item, QEvent *event)
|
||||
{
|
||||
return QQuickItem::childMouseEventFilter(item, event);
|
||||
}
|
||||
|
||||
|
@ -43,16 +43,6 @@ class ToolTip : public QQuickItem
|
||||
*/
|
||||
Q_PROPERTY(QQuickItem *mainItem READ mainItem WRITE setMainItem NOTIFY mainItemChanged)
|
||||
|
||||
/**
|
||||
* The main QML item that will be displayed in the Dialog
|
||||
*/
|
||||
Q_PROPERTY(QQuickItem *target READ target WRITE setTarget NOTIFY targetChanged)
|
||||
|
||||
/**
|
||||
* Visibility of the Dialog window. Doesn't have anything to do with the visibility of the mainItem.
|
||||
*/
|
||||
Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged)
|
||||
|
||||
/**
|
||||
* The main text of this tooltip
|
||||
*/
|
||||
@ -81,11 +71,7 @@ public:
|
||||
QQuickItem *mainItem() const;
|
||||
void setMainItem(QQuickItem *mainItem);
|
||||
|
||||
QQuickItem *target() const;
|
||||
void setTarget(QQuickItem *target);
|
||||
|
||||
bool isVisible() const;
|
||||
void setVisible(const bool visible);
|
||||
void showToolTip();
|
||||
|
||||
QString mainText() const;
|
||||
void setMainText(const QString &mainText);
|
||||
@ -100,12 +86,12 @@ public:
|
||||
void setImage(const QVariant &image);
|
||||
|
||||
protected:
|
||||
bool childMouseEventFilter(QQuickItem *item, QEvent *event);
|
||||
void hoverEnterEvent(QHoverEvent *event);
|
||||
void hoverLeaveEvent(QHoverEvent *event);
|
||||
|
||||
Q_SIGNALS:
|
||||
void mainItemChanged();
|
||||
void targetChanged();
|
||||
void visibleChanged();
|
||||
void mainTextChanged();
|
||||
void subTextChanged();
|
||||
@ -114,7 +100,6 @@ Q_SIGNALS:
|
||||
|
||||
private:
|
||||
QWeakPointer<QQuickItem> m_mainItem;
|
||||
QWeakPointer<QQuickItem> m_target;
|
||||
QTimer *m_showTimer;
|
||||
QString m_mainText;
|
||||
QString m_subText;
|
||||
|
@ -60,7 +60,7 @@ QUrl PackageUrlInterceptor::intercept(const QUrl &path, QQmlAbstractUrlIntercept
|
||||
|
||||
if (path.scheme() == QStringLiteral("plasmapackage")) {
|
||||
//FIXME: this is incorrect but works around a bug in qml in resolution of urls of qmldir files
|
||||
if (type == QQmlAbstractUrlInterceptor::QmldirFile) {
|
||||
if (0&&type == QQmlAbstractUrlInterceptor::QmldirFile) {
|
||||
return QUrl(m_package.filePath(0, path.path()));
|
||||
} else {
|
||||
return QUrl::fromLocalFile(m_package.filePath(0, path.path()));
|
||||
|
Loading…
Reference in New Issue
Block a user