Changeset View
Changeset View
Standalone View
Standalone View
Modules/samba/ksambasharemodel.cpp
- This file was added.
1 | /* | ||||
---|---|---|---|---|---|
2 | SPDX-FileCopyrightText: 2020 Harald Sitter <sitter@kde.org> | ||||
3 | SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL | ||||
4 | */ | ||||
5 | | ||||
6 | #include "ksambasharemodel.h" | ||||
7 | | ||||
8 | #include <KSambaShare> | ||||
9 | #include <KLocalizedString> | ||||
10 | | ||||
11 | KSambaShareModel::KSambaShareModel(QObject *parent) | ||||
12 | : QAbstractListModel(parent) | ||||
13 | { | ||||
14 | connect(KSambaShare::instance(), &KSambaShare::changed, | ||||
15 | this, &KSambaShareModel::reloadData); | ||||
16 | reloadData(); | ||||
17 | } | ||||
18 | | ||||
19 | KSambaShareModel::~KSambaShareModel() = default; | ||||
20 | | ||||
21 | int KSambaShareModel::rowCount(const QModelIndex &parent) const | ||||
22 | { | ||||
23 | Q_UNUSED(parent) | ||||
24 | return m_list.size(); | ||||
25 | } | ||||
26 | | ||||
27 | int KSambaShareModel::columnCount(const QModelIndex &parent) const | ||||
28 | { | ||||
29 | Q_UNUSED(parent) | ||||
30 | return static_cast<int>(ColumnRole::ColumnCount); | ||||
31 | } | ||||
32 | | ||||
33 | QVariant KSambaShareModel::headerData(int section, Qt::Orientation orientation, int role) const | ||||
34 | { | ||||
35 | if (orientation != Qt::Horizontal || role != Qt::DisplayRole) { | ||||
36 | return {}; // we only have column headers. | ||||
37 | } | ||||
38 | | ||||
39 | Q_ASSERT(section < static_cast<int>(ColumnRole::ColumnCount)); | ||||
40 | switch (static_cast<ColumnRole>(section)) { | ||||
41 | case ColumnRole::Name: | ||||
42 | return i18nc("@title:column samba share name", "Name"); | ||||
43 | case ColumnRole::Path: | ||||
44 | return i18nc("@title:column samba share dir path", "Path"); | ||||
45 | case ColumnRole::Comment: | ||||
46 | return i18nc("@title:column samba share text comment/description", "Comment"); | ||||
47 | case ColumnRole::ColumnCount: | ||||
48 | break; // noop | ||||
49 | } | ||||
50 | | ||||
51 | return {}; | ||||
52 | } | ||||
53 | | ||||
54 | QVariant KSambaShareModel::data(const QModelIndex &index, int role) const | ||||
55 | { | ||||
56 | if (!index.isValid()) { | ||||
57 | return {}; | ||||
58 | } | ||||
59 | | ||||
60 | Q_ASSERT(index.row() < m_list.length()); | ||||
61 | Q_ASSERT(index.column() < static_cast<int>(ColumnRole::ColumnCount)); | ||||
62 | if (role == Qt::DisplayRole) { | ||||
63 | switch (static_cast<ColumnRole>(index.column())) { | ||||
64 | case ColumnRole::Name: | ||||
65 | return m_list.at(index.row()).name(); | ||||
66 | case ColumnRole::Path: | ||||
67 | return m_list.at(index.row()).path(); | ||||
68 | case ColumnRole::Comment: | ||||
69 | return m_list.at(index.row()).comment(); | ||||
70 | case ColumnRole::ColumnCount: | ||||
71 | break; // noop | ||||
72 | } | ||||
73 | } | ||||
74 | | ||||
75 | return {}; | ||||
76 | } | ||||
77 | | ||||
78 | void KSambaShareModel::reloadData() | ||||
79 | { | ||||
80 | beginResetModel(); | ||||
81 | m_list.clear(); | ||||
82 | const auto samba = KSambaShare::instance(); | ||||
83 | for (const auto &path : samba->sharedDirectories()) { | ||||
84 | m_list += samba->getSharesByPath(path); | ||||
85 | } | ||||
86 | endResetModel(); | ||||
87 | } | ||||
88 | | ||||
89 | bool KSambaShareModel::hasChildren(const QModelIndex &parent) const | ||||
90 | { | ||||
91 | return !parent.isValid() ? false : (rowCount(parent) > 0); | ||||
92 | } |