]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/tooltips/ktooltip.cpp
Restore the "Edit->Selection" menu from Konqueror 3 for file
[dolphin.git] / src / tooltips / ktooltip.cpp
index 52a4d4a5f5beb5e010859d3339d03510d2158cab..d0da7983b56c833762b45cdcbd094bbe1a86f009 100644 (file)
  ***************************************************************************/
 
 #include "ktooltip.h"
-#include "ktooltip_p.h"
-#include "ktooltipdelegate.h"
-
-#include <QApplication>
-#include <QPainter>
+#include "ktooltipwindow_p.h"
+#include <QLabel>
+#include <QPoint>
 #include <QWidget>
-#include <QToolTip>
-
-#ifdef Q_WS_X11
-#  include <QX11Info>
-#  include <X11/Xlib.h>
-#  include <X11/extensions/shape.h>
-#endif
-
-// compile with XShape older than 1.0
-#ifndef ShapeInput
-const int ShapeInput = 2;
-#endif
-
 
-// ----------------------------------------------------------------------------
-
-
-class KTipLabel : public QWidget
+class KToolTipManager
 {
 public:
-    KTipLabel();
-    void showTip(const QPoint &pos, const KToolTipItem *item);
-    void moveTip(const QPoint &pos);
+    ~KToolTipManager();
+
+    static KToolTipManager* instance();
+
+    void showTip(const QPoint& pos, QWidget* content);
     void hideTip();
 
 private:
-    void paintEvent(QPaintEvent*);
-    QSize sizeHint() const;
-    KStyleOptionToolTip styleOption() const;
-    KToolTipDelegate *delegate() const;
+    KToolTipManager();
 
-private:
-    const KToolTipItem *m_currentItem;
+    KToolTipWindow* m_window;
+    static KToolTipManager *s_instance;
 };
 
-KTipLabel::KTipLabel() : QWidget(0, Qt::ToolTip)
-{
-#ifdef Q_WS_X11
-    if (QX11Info::isCompositingManagerRunning()) {
-        setAttribute(Qt::WA_TranslucentBackground);
-    }
-#endif
-}
-
-void KTipLabel::showTip(const QPoint &pos, const KToolTipItem *item)
-{
-    m_currentItem = item;
-    move(pos);
-    show();
-}
-
-void KTipLabel::hideTip()
-{
-    hide();
-    m_currentItem = 0;
-}
-
-void KTipLabel::moveTip(const QPoint &pos)
-{
-    move(pos);
-}
-
-void KTipLabel::paintEvent(QPaintEvent*)
-{
-    if (!m_currentItem)
-        return;
-    
-    KStyleOptionToolTip option = styleOption();
-    option.rect = rect();
-
-#ifdef Q_WS_X11
-    if (QX11Info::isCompositingManagerRunning())
-        XShapeCombineRegion(x11Info().display(), winId(), ShapeInput, 0, 0,
-                            delegate()->inputShape(option).handle(), ShapeSet);
-    else
-#endif
-    setMask(delegate()->shapeMask(option));
-
-    QPainter p(this);
-    p.setFont(option.font);
-    p.setPen(QPen(option.palette.brush(QPalette::Text), 0));
-    delegate()->paint(&p, option, *m_currentItem);
-}
-
-QSize KTipLabel::sizeHint() const
-{
-    if (!m_currentItem)
-        return QSize();
-
-    KStyleOptionToolTip option = styleOption();
-    return delegate()->sizeHint(option, *m_currentItem);
-}
-
-KStyleOptionToolTip KTipLabel::styleOption() const
-{
-     KStyleOptionToolTip option;
-     KToolTipManager::instance()->initStyleOption(&option);
-     return option;
-}
-
-KToolTipDelegate *KTipLabel::delegate() const
-{
-    return KToolTipManager::instance()->delegate();
-}
-
-
-// ----------------------------------------------------------------------------
-
-
 KToolTipManager *KToolTipManager::s_instance = 0;
 
-KToolTipManager::KToolTipManager()
-    : m_label(new KTipLabel), m_currentItem(0), m_delegate(0)
+KToolTipManager::KToolTipManager() :
+    m_window(0)
 {
 }
 
 KToolTipManager::~KToolTipManager()
 {
-    delete m_label;
-    delete m_currentItem;
-}
-
-void KToolTipManager::showTip(const QPoint &pos, KToolTipItem *item)
-{
-    hideTip();
-    m_label->showTip(pos, item);
-    m_currentItem = item;
-    m_tooltipPos = pos;
-}
-
-void KToolTipManager::hideTip()
-{
-    m_label->hideTip();
-    delete m_currentItem;
-    m_currentItem = 0;
+    delete m_window;
+    m_window = 0;
 }
 
-void KToolTipManager::initStyleOption(KStyleOptionToolTip *option) const
+KToolTipManager* KToolTipManager::instance()
 {
-    option->direction      = QApplication::layoutDirection();
-    option->fontMetrics    = QFontMetrics(QToolTip::font());
-    option->activeCorner   = KStyleOptionToolTip::TopLeftCorner;
-    option->palette        = QToolTip::palette();
-    option->font           = QToolTip::font();
-    option->rect           = QRect();
-    option->state          = QStyle::State_None;
-    option->decorationSize = QSize(32, 32);
-}
+    if (s_instance == 0) {
+        s_instance = new KToolTipManager();
+    }
 
-void KToolTipManager::setDelegate(KToolTipDelegate *delegate)
-{
-    m_delegate = delegate;
+    return s_instance;
 }
 
-void KToolTipManager::update()
+void KToolTipManager::showTip(const QPoint& pos, QWidget* content)
 {
-    if (m_currentItem == 0)
-        return;
-    m_label->showTip(m_tooltipPos, m_currentItem);
+    hideTip();
+    Q_ASSERT(m_window == 0);
+    m_window = new KToolTipWindow(content);
+    m_window->move(pos);
+    m_window->show();
 }
 
-KToolTipDelegate *KToolTipManager::delegate() const
+void KToolTipManager::hideTip()
 {
-    return m_delegate;
+    if (m_window != 0) {
+        m_window->hide();
+        delete m_window;
+        m_window = 0;
+    }
 }
 
-
-// ----------------------------------------------------------------------------
-
-
 namespace KToolTip
 {
-    void showText(const QPoint &pos, const QString &text, QWidget *widget, const QRect &rect)
-    {
-        Q_UNUSED(widget)
-        Q_UNUSED(rect)
-        KToolTipItem *item = new KToolTipItem(text);
-        KToolTipManager::instance()->showTip(pos, item);
-    }
-
-    void showText(const QPoint &pos, const QString &text, QWidget *widget)
+    void showText(const QPoint& pos, const QString& text)
     {
-        showText(pos, text, widget, QRect());
+        QLabel* label = new QLabel(text);
+        label->setForegroundRole(QPalette::ToolTipText);
+        showTip(pos, label);
     }
 
-    void showTip(const QPoint &pos, KToolTipItem *item)
+    void showTip(const QPoint& pos, QWidget* content)
     {
-        KToolTipManager::instance()->showTip(pos, item);
+        KToolTipManager::instance()->showTip(pos, content);
     }
 
     void hideTip()
     {
         KToolTipManager::instance()->hideTip();
     }
-
-    void setToolTipDelegate(KToolTipDelegate *delegate)
-    {
-        KToolTipManager::instance()->setDelegate(delegate);
-    }
 }