From 6a9bf598885fde2244f2975d94b1232e29a02130 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexis=20M=C3=A9nard?= Date: Wed, 16 Jul 2008 15:18:02 +0000 Subject: [PATCH] lot of API changes for more clarity, fix some bugs svn path=/trunk/KDE/kdebase/workspace/libs/plasma/; revision=833276 --- applet.cpp | 4 ++-- tooltip.cpp | 2 +- tooltip_p.h | 2 +- tooltipmanager.cpp | 42 +++++++++++++++++++++++++++++++----------- tooltipmanager.h | 33 ++++++++++++++++++++++++++------- 5 files changed, 61 insertions(+), 22 deletions(-) diff --git a/applet.cpp b/applet.cpp index 13a7aa3cd..3974536ee 100644 --- a/applet.cpp +++ b/applet.cpp @@ -1437,14 +1437,14 @@ bool Applet::sceneEvent(QEvent *event) case QEvent::GraphicsSceneHoverMove: // If the tooltip isn't visible, run through showing the tooltip again // so that it only becomes visible after a stationary hover - if (Plasma::ToolTipManager::self()->isVisible(this)) { + if (Plasma::ToolTipManager::self()->isWidgetToolTipDisplayed(this)) { break; } case QEvent::GraphicsSceneHoverEnter: { // Check that there is a tooltip to show - if (!Plasma::ToolTipManager::self()->hasToolTip(this)) { + if (!Plasma::ToolTipManager::self()->widgetHasToolTip(this)) { break; } diff --git a/tooltip.cpp b/tooltip.cpp index 19130a8a2..f3c8a5b61 100644 --- a/tooltip.cpp +++ b/tooltip.cpp @@ -105,7 +105,7 @@ ToolTip::~ToolTip() delete d; } -void ToolTip::setData(const ToolTipManager::ToolTipData &data) +void ToolTip::setContent(const ToolTipManager::ToolTipContent &data) { //reset our size d->label->setText("" + data.mainText + "
" + data.subText + "
"); diff --git a/tooltip_p.h b/tooltip_p.h index fc62c15f7..739671b87 100644 --- a/tooltip_p.h +++ b/tooltip_p.h @@ -46,7 +46,7 @@ public: ToolTip(); ~ToolTip(); void updateTheme(); - void setData(const ToolTipManager::ToolTipData &data); + void setContent(const ToolTipManager::ToolTipContent &data); void prepareShowing(); protected: diff --git a/tooltipmanager.cpp b/tooltipmanager.cpp index b9009da10..a09b9c648 100644 --- a/tooltipmanager.cpp +++ b/tooltipmanager.cpp @@ -42,9 +42,9 @@ class ToolTipManagerPrivate { public : ToolTipManagerPrivate() - : showTimer(0) + : currentWidget(0) + , showTimer(0) , hideTimer(0) - , currentWidget(0) { } @@ -122,7 +122,7 @@ void ToolTipManager::showToolTip(QGraphicsWidget *widget) } } -bool ToolTipManager::isVisible(QGraphicsWidget *widget) +bool ToolTipManager::isWidgetToolTipDisplayed(QGraphicsWidget *widget) { ToolTip * tooltip = d->tooltips.value(widget); if (tooltip) { @@ -151,18 +151,17 @@ void ToolTipManager::hideToolTip(QGraphicsWidget *widget) } } -void ToolTipManager::registerToolTipData(QGraphicsWidget *widget,const ToolTipManager::ToolTipData &data) +void ToolTipManager::registerWidget(QGraphicsWidget *widget) { if (!d->tooltips.contains(widget)) { //the tooltip is not registered we add it in our map of tooltips d->tooltips.insert(widget,new ToolTip()); - ToolTip * tooltip = d->tooltips.value(widget); - tooltip->setData(data); - tooltip->updateTheme(); + //connect to object destruction + connect(widget,SIGNAL(destroyed(QObject *)),this,SLOT(onWidgetDestroyed(QObject *))); } } -void ToolTipManager::unregisterToolTip(QGraphicsWidget *widget) +void ToolTipManager::unregisterWidget(QGraphicsWidget *widget) { if (d->tooltips.contains(widget)) { ToolTip * tooltip = d->tooltips.take(widget); @@ -172,18 +171,19 @@ void ToolTipManager::unregisterToolTip(QGraphicsWidget *widget) } } -void ToolTipManager::updateToolTipData(QGraphicsWidget *widget,const ToolTipData &data) +void ToolTipManager::setWidgetToolTipContent(QGraphicsWidget *widget,const ToolTipContent &data) { if (!d->tooltips.contains(widget)) { return; } else { ToolTip * tooltip = d->tooltips.value(widget); - tooltip->setData(data); + tooltip->setContent(data); + tooltip->updateTheme(); } } -bool ToolTipManager::hasToolTip(QGraphicsWidget *widget) +bool ToolTipManager::widgetHasToolTip(QGraphicsWidget *widget) { return d->tooltips.contains(widget); } @@ -197,6 +197,26 @@ void ToolTipManager::themeUpdated() } } +void ToolTipManager::onWidgetDestroyed(QObject * object) +{ + if (object) { + QMapIterator iterator(d->tooltips); + while (iterator.hasNext()) { + iterator.next(); + if (iterator.key() == object) { + ToolTip * tooltip = iterator.value(); + d->tooltips.remove(iterator.key()); + kDebug()<<"Tooltip destroyed"<<(int)object; + d->showTimer->stop(); // stop the timer to show the tooltip + d->delayedHide = false; + d->currentWidget = 0; + tooltip->hide(); + delete tooltip; + } + } + } +} + void ToolTipManagerPrivate::resetShownState() { if (currentWidget) { diff --git a/tooltipmanager.h b/tooltipmanager.h index a6e6d4469..c911683db 100644 --- a/tooltipmanager.h +++ b/tooltipmanager.h @@ -51,33 +51,52 @@ namespace Plasma { Q_OBJECT public: - struct ToolTipData + struct ToolTipContent { - ToolTipData() : windowToPreview( 0 ) {} + ToolTipContent() : windowToPreview( 0 ) {} QString mainText; //Important information QString subText; //Elaborates on the Main Text QPixmap image; // Icon to show; WId windowToPreview; // Id of window to show preview }; + /** + * + * @return The singleton instance of the manager. + **/ static ToolTipManager *self(); + /** * Default constructor. Usually you want to use the singleton instead. */ explicit ToolTipManager(QObject* parent = 0); + + /** + * Default destructor. + */ ~ToolTipManager(); + void showToolTip(QGraphicsWidget *widget); - bool isVisible(QGraphicsWidget *widget); + + bool isWidgetToolTipDisplayed(QGraphicsWidget *widget); + void delayedHideToolTip(); + void hideToolTip(QGraphicsWidget *widget); - void registerToolTipData(QGraphicsWidget *widget,const ToolTipData &data); - void unregisterToolTip(QGraphicsWidget *widget); - void updateToolTipData(QGraphicsWidget *widget,const ToolTipData &data); - bool hasToolTip(QGraphicsWidget *widget); + + void registerWidget(QGraphicsWidget *widget); + + void unregisterWidget(QGraphicsWidget *widget); + + void setWidgetToolTipContent(QGraphicsWidget *widget,const ToolTipContent &data); + + bool widgetHasToolTip(QGraphicsWidget *widget); + static QPoint popupPosition(const QGraphicsItem * item, const QSize &s); private Q_SLOTS: void themeUpdated(); + void onWidgetDestroyed(QObject * object); private: friend class ToolTipManagerSingleton;