Warning, file /libraries/baloo-widgets/src/filemetadataconfigwidget.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 /* 0002 SPDX-FileCopyrightText: 2013 Vishesh Handa <me@vhanda.in> 0003 SPDX-FileCopyrightText: 2009 Peter Penz <peter.penz@gmx.at> 0004 0005 SPDX-License-Identifier: LGPL-2.0-or-later 0006 */ 0007 0008 #include "filemetadataconfigwidget.h" 0009 #include "filemetadataprovider.h" 0010 0011 #include <KConfig> 0012 #include <KConfigGroup> 0013 0014 #include <QDebug> 0015 #include <QEvent> 0016 #include <QListWidget> 0017 #include <QVBoxLayout> 0018 0019 using namespace Baloo; 0020 0021 class Baloo::FileMetaDataConfigWidgetPrivate 0022 { 0023 public: 0024 explicit FileMetaDataConfigWidgetPrivate(FileMetaDataConfigWidget *parent); 0025 ~FileMetaDataConfigWidgetPrivate(); 0026 0027 FileMetaDataConfigWidgetPrivate(const FileMetaDataConfigWidgetPrivate&) = delete; 0028 FileMetaDataConfigWidget& operator=(const FileMetaDataConfigWidgetPrivate&) = delete; 0029 0030 void init(); 0031 void loadMetaData(); 0032 void addItem(const QString &property); 0033 0034 /** 0035 * Is invoked after the meta data model has finished the loading of 0036 * meta data. The meta data labels will be added to the configuration 0037 * list. 0038 */ 0039 void slotLoadingFinished(); 0040 0041 int m_visibleDataTypes; 0042 KFileItemList m_fileItems; 0043 FileMetaDataProvider *m_provider; 0044 QListWidget *m_metaDataList; 0045 0046 private: 0047 FileMetaDataConfigWidget *const q; 0048 }; 0049 0050 FileMetaDataConfigWidgetPrivate::FileMetaDataConfigWidgetPrivate(FileMetaDataConfigWidget *parent) 0051 : m_visibleDataTypes(0) 0052 , m_fileItems() 0053 , m_provider(nullptr) 0054 , m_metaDataList(nullptr) 0055 , q(parent) 0056 { 0057 m_metaDataList = new QListWidget(q); 0058 m_metaDataList->setSelectionMode(QAbstractItemView::NoSelection); 0059 m_metaDataList->setSortingEnabled(true); 0060 0061 auto layout = new QVBoxLayout(q); 0062 layout->addWidget(m_metaDataList); 0063 0064 m_provider = new FileMetaDataProvider(q); 0065 m_provider->setReadOnly(true); 0066 QObject::connect(m_provider, SIGNAL(loadingFinished()), q, SLOT(slotLoadingFinished())); 0067 } 0068 0069 FileMetaDataConfigWidgetPrivate::~FileMetaDataConfigWidgetPrivate() = default; 0070 0071 void FileMetaDataConfigWidgetPrivate::loadMetaData() 0072 { 0073 m_metaDataList->clear(); 0074 m_provider->setItems(m_fileItems); 0075 } 0076 0077 void FileMetaDataConfigWidgetPrivate::addItem(const QString &key) 0078 { 0079 // Meta information provided by Baloo that is already 0080 // available from KFileItem as "fixed item" (see above) 0081 // should not be shown as second entry. 0082 static const char *const hiddenProperties[] = { 0083 "comment", // = fixed item kfileitem#comment 0084 "contentSize", // = fixed item kfileitem#size 0085 0086 nullptr // mandatory last entry 0087 }; 0088 0089 int i = 0; 0090 while (hiddenProperties[i] != nullptr) { 0091 if (key == QLatin1String(hiddenProperties[i])) { 0092 // the item is hidden 0093 return; 0094 } 0095 ++i; 0096 } 0097 0098 // the item is not hidden, add it to the list 0099 KConfig config(QStringLiteral("baloofileinformationrc"), KConfig::NoGlobals); 0100 KConfigGroup settings = config.group("Show"); 0101 0102 const QString label = m_provider->label(key); 0103 0104 auto item = new QListWidgetItem(label, m_metaDataList); 0105 item->setData(Qt::UserRole, key); 0106 const bool show = settings.readEntry(key, true); 0107 item->setCheckState(show ? Qt::Checked : Qt::Unchecked); 0108 } 0109 0110 void FileMetaDataConfigWidgetPrivate::slotLoadingFinished() 0111 { 0112 // Get all meta information labels that are available for 0113 // the currently shown file item and add them to the list. 0114 Q_ASSERT(m_provider != nullptr); 0115 0116 m_metaDataList->clear(); 0117 0118 QVariantMap data = m_provider->data(); 0119 // Always show these 3 0120 data.remove(QStringLiteral("rating")); 0121 data.remove(QStringLiteral("tags")); 0122 data.remove(QStringLiteral("userComment")); 0123 0124 QVariantMap::const_iterator it = data.constBegin(); 0125 while (it != data.constEnd()) { 0126 addItem(it.key()); 0127 ++it; 0128 } 0129 0130 addItem(QStringLiteral("rating")); 0131 addItem(QStringLiteral("tags")); 0132 addItem(QStringLiteral("userComment")); 0133 } 0134 0135 FileMetaDataConfigWidget::FileMetaDataConfigWidget(QWidget *parent) 0136 : QWidget(parent) 0137 , d(new FileMetaDataConfigWidgetPrivate(this)) 0138 { 0139 } 0140 0141 FileMetaDataConfigWidget::~FileMetaDataConfigWidget() = default; 0142 0143 void FileMetaDataConfigWidget::setItems(const KFileItemList &items) 0144 { 0145 d->m_fileItems = items; 0146 d->loadMetaData(); 0147 } 0148 0149 KFileItemList FileMetaDataConfigWidget::items() const 0150 { 0151 return d->m_fileItems; 0152 } 0153 0154 void FileMetaDataConfigWidget::save() 0155 { 0156 KConfig config(QStringLiteral("baloofileinformationrc"), KConfig::NoGlobals); 0157 KConfigGroup showGroup = config.group("Show"); 0158 0159 const int count = d->m_metaDataList->count(); 0160 for (int i = 0; i < count; ++i) { 0161 QListWidgetItem *item = d->m_metaDataList->item(i); 0162 const bool show = (item->checkState() == Qt::Checked); 0163 const QString key = item->data(Qt::UserRole).toString(); 0164 showGroup.writeEntry(key, show); 0165 } 0166 0167 showGroup.sync(); 0168 } 0169 0170 bool FileMetaDataConfigWidget::event(QEvent *event) 0171 { 0172 if (event->type() == QEvent::Polish) { 0173 qDebug() << "GOT POLISH EVENT!!!"; 0174 // loadMetaData() must be invoked asynchronously, as the list 0175 // must finish it's initialization first 0176 QMetaObject::invokeMethod(this, "loadMetaData", Qt::QueuedConnection); 0177 } 0178 return QWidget::event(event); 0179 ; 0180 } 0181 0182 QSize FileMetaDataConfigWidget::sizeHint() const 0183 { 0184 return d->m_metaDataList->sizeHint(); 0185 } 0186 0187 #include "moc_filemetadataconfigwidget.cpp"