-/*******************************************************************************
- * Copyright (C) 2008 by Konstantin Heil <konst.heil@stud.uni-heidelberg.de> *
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
- *******************************************************************************/
+/*
+ * SPDX-FileCopyrightText: 2008 Konstantin Heil <konst.heil@stud.uni-heidelberg.de>
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
#ifndef TOOLTIPMANAGER_H
#define TOOLTIPMANAGER_H
+#include <KFileItem>
+
#include <QObject>
#include <QRect>
-#include <KFileItem>
-
-class DolphinModel;
-class DolphinSortFilterProxyModel;
-class FileMetaDataToolTip;
-class QAbstractItemView;
-class QModelIndex;
+class DolphinFileMetaDataWidget;
+class KToolTipWidget;
class QTimer;
+class QWindow;
/**
* @brief Manages the tooltips for an item view.
Q_OBJECT
public:
- explicit ToolTipManager(QAbstractItemView* parent,
- DolphinSortFilterProxyModel* model);
- virtual ~ToolTipManager();
+ enum class HideBehavior {
+ Instantly,
+ Later
+ };
+
+ explicit ToolTipManager(QWidget* parent);
+ ~ToolTipManager() override;
-public slots:
/**
- * Hides the currently shown tooltip. Invoking this method is
- * only needed when the tooltip should be hidden although
- * an item is hovered.
+ * Triggers the showing of the tooltip for the item \p item
+ * where the item has the maximum boundaries of \p itemRect.
+ * The tooltip manager takes care that the tooltip is shown
+ * slightly delayed and with a proper \p transientParent.
*/
- void hideToolTip();
+ void showToolTip(const KFileItem& item, const QRectF& itemRect, QWindow *transientParent);
-protected:
- virtual bool eventFilter(QObject* watched, QEvent* event);
+ /**
+ * Hides the currently shown tooltip.
+ */
+ void hideToolTip(const HideBehavior behavior = HideBehavior::Later);
-private slots:
- void requestToolTip(const QModelIndex& index);
+Q_SIGNALS:
+ /**
+ * Is emitted when the user clicks a tag or a link
+ * in the metadata widget.
+ */
+ void urlActivated(const QUrl& url);
+
+private Q_SLOTS:
void startContentRetrieval();
void setPreviewPix(const KFileItem& item, const QPixmap& pix);
void previewFailed();
void showToolTip();
private:
- QAbstractItemView* m_view;
- DolphinModel* m_dolphinModel;
- DolphinSortFilterProxyModel* m_proxyModel;
-
/// Timeout from requesting a tooltip until the tooltip
/// should be shown
QTimer* m_showToolTipTimer;
/// the tooltip content like preview and meta data gets started.
QTimer* m_contentRetrievalTimer;
- FileMetaDataToolTip* m_fileMetaDataToolTip;
+ /// Transient parent of the tooltip, mandatory on Wayland.
+ QWindow* m_transientParent;
+
+ QScopedPointer<KToolTipWidget> m_tooltipWidget;
+ QScopedPointer<DolphinFileMetaDataWidget> m_fileMetaDataWidget;
bool m_toolTipRequested;
bool m_metaDataRequested;
bool m_appliedWaitCursor;
+ int m_margin;
KFileItem m_item;
QRect m_itemRect;
};