1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
// Qt-Security score:significant reason:default
#ifndef QSIDEBAR_H
#define QSIDEBAR_H
//
// W A R N I N G
// -------------
//
// This file is not part of the Qt API. It exists purely as an
// implementation detail. This header file may change from version to
// version without notice, or even be removed.
//
// We mean it.
//
#include <QtWidgets/private/qtwidgetsglobal_p.h>
#include <qlist.h>
#include <qlistview.h>
#include <qstandarditemmodel.h>
#include <qstyleditemdelegate.h>
#include <qurl.h>
QT_REQUIRE_CONFIG(filedialog);
QT_BEGIN_NAMESPACE
class QFileSystemModel;
class QSideBarDelegate : public QStyledItemDelegate
{
public:
QSideBarDelegate(QWidget *parent = nullptr) : QStyledItemDelegate(parent) {}
void initStyleOption(QStyleOptionViewItem *option,
const QModelIndex &index) const override;
};
class Q_AUTOTEST_EXPORT QUrlModel : public QStandardItemModel
{
Q_OBJECT
public:
enum Roles {
UrlRole = Qt::UserRole + 1,
EnabledRole = Qt::UserRole + 2
};
QUrlModel(QObject *parent = nullptr);
~QUrlModel();
QStringList mimeTypes() const override;
QMimeData *mimeData(const QModelIndexList &indexes) const override;
#if QT_CONFIG(draganddrop)
bool canDrop(QDragEnterEvent *event);
bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override;
#endif
Qt::ItemFlags flags(const QModelIndex &index) const override;
bool setData(const QModelIndex &index, const QVariant &value, int role=Qt::EditRole) override;
void setUrls(const QList<QUrl> &list);
void addUrls(const QList<QUrl> &urls, int row = -1, bool move = true);
QList<QUrl> urls() const;
void setFileSystemModel(QFileSystemModel *model);
bool showFullPath;
private Q_SLOTS:
void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight);
void layoutChanged();
private:
void setUrl(const QModelIndex &index, const QUrl &url, const QModelIndex &dirIndex);
void changed(const QString &path);
void addIndexToWatch(const QString &path, const QModelIndex &index);
QFileSystemModel *fileSystemModel;
struct WatchItem {
QModelIndex index;
QString path;
};
friend class QTypeInfo<WatchItem>;
QList<WatchItem> watching;
QList<QUrl> invalidUrls;
std::array<QMetaObject::Connection, 3> modelConnections;
};
Q_DECLARE_TYPEINFO(QUrlModel::WatchItem, Q_RELOCATABLE_TYPE);
class Q_AUTOTEST_EXPORT QSidebar : public QListView
{
Q_OBJECT
Q_SIGNALS:
void goToUrl(const QUrl &url);
public:
QSidebar(QWidget *parent = nullptr);
void setModelAndUrls(QFileSystemModel *model, const QList<QUrl> &newUrls);
~QSidebar();
QSize sizeHint() const override;
void setUrls(const QList<QUrl> &list) { urlModel->setUrls(list); }
void addUrls(const QList<QUrl> &list, int row) { urlModel->addUrls(list, row); }
QList<QUrl> urls() const { return urlModel->urls(); }
void selectUrl(const QUrl &url);
protected:
bool event(QEvent * e) override;
void focusInEvent(QFocusEvent *event) override;
#if QT_CONFIG(draganddrop)
void dragEnterEvent(QDragEnterEvent *event) override;
#endif
private Q_SLOTS:
void clicked(const QModelIndex &index);
#if QT_CONFIG(menu)
void showContextMenu(const QPoint &position);
#endif
void removeEntry();
private:
QUrlModel *urlModel;
};
QT_END_NAMESPACE
#endif // QSIDEBAR_H
|