1/*
2 SPDX-FileCopyrightText: 2006 Peter Penz <peter.penz@gmx.at>
3 SPDX-FileCopyrightText: 2007 Kevin Ottens <ervin@kde.org>
4
5 SPDX-License-Identifier: LGPL-2.0-or-later
6*/
7
8#ifndef KURLNAVIGATORPLACESSELECTOR_P_H
9#define KURLNAVIGATORPLACESSELECTOR_P_H
10
11#include "kurlnavigatorbuttonbase_p.h"
12#include <QUrl>
13
14#include <QPersistentModelIndex>
15
16class KFilePlacesModel;
17class QMenu;
18
19namespace KDEPrivate
20{
21/**
22 * @brief Allows to select a bookmark from a popup menu.
23 *
24 * The icon from the current selected bookmark is shown
25 * inside the bookmark selector.
26 *
27 * @see KUrlNavigator
28 * @internal
29 */
30class KUrlNavigatorPlacesSelector : public KUrlNavigatorButtonBase
31{
32 Q_OBJECT
33
34public:
35 /**
36 * @param parent Parent widget where the bookmark selector
37 * is embedded into.
38 */
39 KUrlNavigatorPlacesSelector(KUrlNavigator *parent, KFilePlacesModel *placesModel);
40
41 ~KUrlNavigatorPlacesSelector() override;
42
43 using ActivationSignal = void (KUrlNavigatorPlacesSelector::*)(const QUrl &);
44
45 /**
46 * Updates the selection dependent from the given URL \a url. The
47 * URL must not match exactly to one of the available bookmarks:
48 * The bookmark which is equal to the URL or at least is a parent URL
49 * is selected. If there are more than one possible parent URL candidates,
50 * the bookmark which covers the bigger range of the URL is selected.
51 */
52 void updateSelection(const QUrl &url);
53
54 /** Returns the selected bookmark. */
55 QUrl selectedPlaceUrl() const;
56 /** Returns the selected bookmark. */
57 QString selectedPlaceText() const;
58
59 /** @see QWidget::sizeHint() */
60 QSize sizeHint() const override;
61
62Q_SIGNALS:
63 /**
64 * Is send when a bookmark has been activated by the user.
65 * @param url URL of the selected place.
66 */
67 void placeActivated(const QUrl &url);
68
69 /**
70 * Is sent when a bookmark was middle clicked by the user
71 * and thus should be opened in a new tab.
72 */
73 void tabRequested(const QUrl &url);
74
75protected:
76 /**
77 * Draws the icon of the selected Url as content of the Url
78 * selector.
79 */
80 void paintEvent(QPaintEvent *event) override;
81
82 void dragEnterEvent(QDragEnterEvent *event) override;
83 void dragLeaveEvent(QDragLeaveEvent *event) override;
84 void dropEvent(QDropEvent *event) override;
85 void mouseReleaseEvent(QMouseEvent *event) override;
86
87 bool eventFilter(QObject *watched, QEvent *event) override;
88
89private Q_SLOTS:
90 /**
91 * Updates the selected index and the icon to the bookmark
92 * which is indicated by the triggered action \a action.
93 */
94 void activatePlace(QAction *action, ActivationSignal activationSignal);
95
96 void updateMenu();
97
98 void onStorageSetupDone(const QModelIndex &index, bool success);
99
100private:
101 int m_selectedItem;
102 QPersistentModelIndex m_lastClickedIndex;
103 ActivationSignal m_lastActivationSignal = nullptr;
104 QMenu *m_placesMenu;
105 KFilePlacesModel *m_placesModel;
106 QUrl m_selectedUrl;
107};
108
109} // namespace KDEPrivate
110
111#endif
112

source code of kio/src/filewidgets/kurlnavigatorplacesselector_p.h