1 /*
2  * SPDX-FileCopyrightText: 2012 Peter Penz <peter.penz19@gmail.com>
3  *
4  * SPDX-License-Identifier: GPL-2.0-or-later
5  */
6 
7 #ifndef PLACESITEM_H
8 #define PLACESITEM_H
9 
10 #include "kitemviews/kstandarditem.h"
11 
12 #include <KBookmark>
13 #include <Solid/Device>
14 #include <Solid/OpticalDisc>
15 #include <Solid/PortableMediaPlayer>
16 #include <Solid/StorageAccess>
17 #include <Solid/StorageVolume>
18 
19 #include <QPointer>
20 #include <QUrl>
21 
22 
23 class KDirLister;
24 class PlacesItemSignalHandler;
25 
26 /**
27  * @brief Extends KStandardItem by places-specific properties.
28  */
29 class PlacesItem : public KStandardItem
30 {
31 
32 public:
33     explicit PlacesItem(const KBookmark& bookmark, PlacesItem* parent = nullptr);
34     ~PlacesItem() override;
35 
36     void setUrl(const QUrl& url);
37     QUrl url() const;
38 
39     void setUdi(const QString& udi);
40     QString udi() const;
41 
42     void setApplicationName(const QString& applicationName);
43     QString applicationName() const;
44 
45     void setHidden(bool hidden);
46     bool isHidden() const;
47 
48     void setGroupHidden(bool hidden);
49     bool isGroupHidden() const;
50 
51     void setSystemItem(bool isSystemItem);
52     bool isSystemItem() const;
53 
54     Solid::Device device() const;
55 
56     void setBookmark(const KBookmark& bookmark);
57     KBookmark bookmark() const;
58 
59     bool storageSetupNeeded() const;
60 
61     bool isSearchOrTimelineUrl() const;
62 
63     PlacesItemSignalHandler* signalHandler() const;
64 
65 protected:
66     void onDataValueChanged(const QByteArray& role,
67                                     const QVariant& current,
68                                     const QVariant& previous) override;
69 
70     void onDataChanged(const QHash<QByteArray, QVariant>& current,
71                                const QHash<QByteArray, QVariant>& previous) override;
72 
73 private:
74     PlacesItem(const PlacesItem& item);
75 
76     void initializeDevice(const QString& udi);
77 
78     /**
79      * Is invoked if the accessibility of the storage access
80      * m_access has been changed and updates the emblem.
81      */
82     void onAccessibilityChanged();
83 
84     /**
85      * Applies the data-value from the role to m_bookmark.
86      */
87     void updateBookmarkForRole(const QByteArray& role);
88 
89     static QString generateNewId();
90 
91 private:
92     Solid::Device m_device;
93     QPointer<Solid::StorageAccess> m_access;
94     QPointer<Solid::StorageVolume> m_volume;
95     QPointer<Solid::OpticalDisc> m_disc;
96     QPointer<Solid::PortableMediaPlayer> m_player;
97     QPointer<PlacesItemSignalHandler> m_signalHandler;
98     KBookmark m_bookmark;
99 
100     friend class PlacesItemSignalHandler; // Calls onAccessibilityChanged()
101 };
102 
103 #endif
104 
105 
106