1 /*
2     This file is part of the KDE project
3     SPDX-FileCopyrightText: 2007 Kevin Ottens <ervin@kde.org>
4 
5     SPDX-License-Identifier: LGPL-2.0-only
6 */
7 
8 #ifndef KFILEPLACESITEM_P_H
9 #define KFILEPLACESITEM_P_H
10 
11 #include "kfileplacesmodel.h"
12 #include <KBookmark>
13 #include <QObject>
14 #include <QPointer>
15 #include <QStringList>
16 #include <QUrl>
17 #include <solid/device.h>
18 
19 class KDirLister;
20 namespace Solid
21 {
22 class StorageAccess;
23 class StorageVolume;
24 class StorageDrive;
25 class NetworkShare;
26 class OpticalDisc;
27 class PortableMediaPlayer;
28 }
29 
30 class KFilePlacesItem : public QObject
31 {
32     Q_OBJECT
33 public:
34     enum GroupType {
35         PlacesType,
36         RemoteType,
37         RecentlySavedType,
38         SearchForType,
39         DevicesType,
40         RemovableDevicesType,
41         TagsType,
42     };
43 
44     KFilePlacesItem(KBookmarkManager *manager, const QString &address, const QString &udi, KFilePlacesModel *parent);
45     ~KFilePlacesItem() override;
46 
47     QString id() const;
48 
49     bool isDevice() const;
50     KBookmark bookmark() const;
51     void setBookmark(const KBookmark &bookmark);
52     Solid::Device device() const;
53     QVariant data(int role) const;
54     KFilePlacesModel::GroupType groupType() const;
55     bool isHidden() const;
56     void setHidden(bool hide);
57 
58     bool hasSupportedScheme(const QStringList &schemes) const;
59 
60     static KBookmark
61     createBookmark(KBookmarkManager *manager, const QString &label, const QUrl &url, const QString &iconName, KFilePlacesItem *after = nullptr);
62     static KBookmark createSystemBookmark(KBookmarkManager *manager,
63                                           const char *translationContext,
64                                           const QByteArray &untranslatedLabel,
65                                           const QUrl &url,
66                                           const QString &iconName,
67                                           const KBookmark &after = KBookmark());
68     static KBookmark createDeviceBookmark(KBookmarkManager *manager, const QString &udi);
69     static KBookmark createTagBookmark(KBookmarkManager *manager, const QString &tag);
70 
71 Q_SIGNALS:
72     void itemChanged(const QString &id);
73 
74 private Q_SLOTS:
75     void onAccessibilityChanged(bool);
76 
77 private:
78     QVariant bookmarkData(int role) const;
79     QVariant deviceData(int role) const;
80 
81     QString iconNameForBookmark(const KBookmark &bookmark) const;
82 
83     static QString generateNewId();
84     bool updateDeviceInfo(const QString &udi);
85 
86     KBookmarkManager *m_manager;
87     KBookmark m_bookmark;
88     bool m_folderIsEmpty;
89     bool m_isCdrom;
90     bool m_isAccessible;
91     QString m_text;
92     Solid::Device m_device;
93     QPointer<Solid::StorageAccess> m_access;
94     QPointer<Solid::StorageVolume> m_volume;
95     QPointer<Solid::StorageDrive> m_drive;
96     QPointer<Solid::OpticalDisc> m_disc;
97     QPointer<Solid::PortableMediaPlayer> m_player;
98     QPointer<Solid::NetworkShare> m_networkShare;
99     QString m_deviceIconName;
100     QStringList m_emblems;
101     QString m_groupName;
102 };
103 
104 #endif
105