]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/kstandarditem.cpp
InformationPanel: Allow to refresh the panel when its displayed content changes
[dolphin.git] / src / kitemviews / kstandarditem.cpp
index 1754c531bac472b822016f7dbc3e5b5a81b6dfb9..fcaa50b9d04d46d3870730dc3a82bd111d337383 100644 (file)
@@ -1,47 +1,30 @@
-/***************************************************************************
- *   Copyright (C) 2012 by Peter Penz <peter.penz19@gmail.com>             *
- *                                                                         *
- *   This program is free software; you can redistribute it and/or modify  *
- *   it under the terms of the GNU General Public License as published by  *
- *   the Free Software Foundation; either version 2 of the License, or     *
- *   (at your option) any later version.                                   *
- *                                                                         *
- *   This program is distributed in the hope that it will be useful,       *
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
- *   GNU General Public License for more details.                          *
- *                                                                         *
- *   You should have received a copy of the GNU General Public License     *
- *   along with this program; if not, write to the                         *
- *   Free Software Foundation, Inc.,                                       *
- *   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA            *
- ***************************************************************************/
+/*
+ * SPDX-FileCopyrightText: 2012 Peter Penz <peter.penz19@gmail.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
 
 #include "kstandarditem.h"
-
-#include <KDebug>
+#include "kstandarditemmodel.h"
 
 KStandardItem::KStandardItem(KStandardItem* parent) :
-    m_parent(parent),
-    m_children(),
-    m_model(0),
+    QObject(parent),
+    m_model(nullptr),
     m_data()
 {
 }
 
 KStandardItem::KStandardItem(const QString& text, KStandardItem* parent) :
-    m_parent(parent),
-    m_children(),
-    m_model(0),
+    QObject(parent),
+    m_model(nullptr),
     m_data()
 {
     setText(text);
 }
 
-KStandardItem::KStandardItem(const QIcon& icon, const QString& text, KStandardItem* parent) :
-    m_parent(parent),
-    m_children(),
-    m_model(0),
+KStandardItem::KStandardItem(const QString& icon, const QString& text, KStandardItem* parent) :
+    QObject(parent),
+    m_model(nullptr),
     m_data()
 {
     setIcon(icon);
@@ -54,7 +37,7 @@ KStandardItem::~KStandardItem()
 
 void KStandardItem::setText(const QString& text)
 {
-    m_data.insert("text", text);
+    setDataValue("text", text);
 }
 
 QString KStandardItem::text() const
@@ -62,19 +45,29 @@ QString KStandardItem::text() const
     return m_data["text"].toString();
 }
 
-void KStandardItem::setIcon(const QIcon& icon)
+void KStandardItem::setIcon(const QString& icon)
+{
+    setDataValue("iconName", icon);
+}
+
+QString KStandardItem::icon() const
+{
+    return m_data["iconName"].toString();
+}
+
+void KStandardItem::setIconOverlays(const QStringList& overlays)
 {
-    m_data.insert("iconName", icon.name());
+    setDataValue("iconOverlays", overlays);
 }
 
-QIcon KStandardItem::icon() const
+QStringList KStandardItem::iconOverlays() const
 {
-    return QIcon(m_data["iconName"].toString());
+    return m_data["iconOverlays"].toStringList();
 }
 
 void KStandardItem::setGroup(const QString& group)
 {
-    m_data.insert("group", group);
+    setDataValue("group", group);
 }
 
 QString KStandardItem::group() const
@@ -84,7 +77,21 @@ QString KStandardItem::group() const
 
 void KStandardItem::setDataValue(const QByteArray& role, const QVariant& value)
 {
+    const QVariant previous = m_data.value(role);
+    if (previous == value) {
+        return;
+    }
+
     m_data.insert(role, value);
+    onDataValueChanged(role, value, previous);
+
+    if (m_model) {
+        const int index = m_model->index(this);
+        QSet<QByteArray> changedRoles;
+        changedRoles.insert(role);
+        m_model->onItemChanged(index, changedRoles);
+        Q_EMIT m_model->itemsChanged(KItemRangeList() << KItemRange(index, 1), changedRoles);
+    }
 }
 
 QVariant KStandardItem::dataValue(const QByteArray& role) const
@@ -92,23 +99,31 @@ QVariant KStandardItem::dataValue(const QByteArray& role) const
     return m_data[role];
 }
 
-void KStandardItem::setParent(KStandardItem* parent)
+void KStandardItem::setData(const QHash<QByteArray, QVariant>& values)
 {
-    // TODO: not implemented yet
-    m_parent = parent;
+    const QHash<QByteArray, QVariant> previous = m_data;
+    m_data = values;
+    onDataChanged(values, previous);
 }
 
-KStandardItem* KStandardItem::parent() const
+QHash<QByteArray, QVariant> KStandardItem::data() const
 {
-    return m_parent;
+    return m_data;
 }
 
-QHash<QByteArray, QVariant> KStandardItem::data() const
+void KStandardItem::onDataValueChanged(const QByteArray& role,
+                                       const QVariant& current,
+                                       const QVariant& previous)
 {
-    return m_data;
+    Q_UNUSED(role)
+    Q_UNUSED(current)
+    Q_UNUSED(previous)
 }
 
-QList<KStandardItem*> KStandardItem::children() const
+void KStandardItem::onDataChanged(const QHash<QByteArray, QVariant>& current,
+                                  const QHash<QByteArray, QVariant>& previous)
 {
-    return m_children;
+    Q_UNUSED(current)
+    Q_UNUSED(previous)
 }
+