]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphinmodel.cpp
Fix infinite recursion if the default text is empty.
[dolphin.git] / src / dolphinmodel.cpp
index f399c33048476980894e905d8cf5ac39e9b66be3..04bf4486e677228dbf069ee3c7c26d33e22c8476 100644 (file)
@@ -68,9 +68,14 @@ bool DolphinModel::setData(const QModelIndex& index, const QVariant& value, int
         // TODO: remove data again when items are deleted...
 
         const QPersistentModelIndex key = index;
-        const RevisionState state = static_cast<RevisionState>(value.toInt());
-        if (m_revisionHash.value(key, LocalRevision) != state) {
-            m_hasRevisionData = true;
+        const RevisionControlPlugin::RevisionState state = static_cast<RevisionControlPlugin::RevisionState>(value.toInt());
+        if (m_revisionHash.value(key, RevisionControlPlugin::UnversionedRevision) != state) {
+            if (!m_hasRevisionData) {
+                connect(this, SIGNAL(rowsRemoved (const QModelIndex&, int, int)),
+                        this, SLOT(slotRowsRemoved(const QModelIndex&, int, int)));
+                m_hasRevisionData = true;
+            }
+
             m_revisionHash.insert(key, state);
             emit dataChanged(index, index);
             return true;
@@ -91,19 +96,28 @@ QVariant DolphinModel::data(const QModelIndex& index, int role) const
 
     case Qt::DecorationRole:
         if (index.column() == DolphinModel::Revision) {
-            return m_revisionHash.value(index, LocalRevision);
+            return m_revisionHash.value(index, RevisionControlPlugin::UnversionedRevision);
         }
         break;
 
     case Qt::DisplayRole:
         if (index.column() == DolphinModel::Revision) {
-            switch (m_revisionHash.value(index, LocalRevision)) {
-            case LatestRevision:
-                return i18nc("@item::intable", "Latest");
-
-            case LocalRevision:
+            switch (m_revisionHash.value(index, RevisionControlPlugin::UnversionedRevision)) {
+            case RevisionControlPlugin::NormalRevision:
+                return i18nc("@item::intable", "Normal");
+            case RevisionControlPlugin::UpdateRequiredRevision:
+                return i18nc("@item::intable", "Update required");
+            case RevisionControlPlugin::LocallyModifiedRevision:
+                return i18nc("@item::intable", "Locally modified");
+            case RevisionControlPlugin::AddedRevision:
+                return i18nc("@item::intable", "Added");
+            case RevisionControlPlugin::RemovedRevision:
+                return i18nc("@item::intable", "Removed");
+            case RevisionControlPlugin::ConflictingRevision:
+                return i18nc("@item::intable", "Conflicting");
+            case RevisionControlPlugin::UnversionedRevision:
             default:
-                return i18nc("@item::intable", "Local");
+                return i18nc("@item::intable", "Unversioned");
             }
         }
         break;
@@ -133,11 +147,27 @@ int DolphinModel::columnCount(const QModelIndex& parent) const
     return KDirModel::columnCount(parent) + (ExtraColumnCount - ColumnCount);
 }
 
+void DolphinModel::clearRevisionData()
+{
+    m_revisionHash.clear();
+    m_hasRevisionData = false;
+}
+
 bool DolphinModel::hasRevisionData() const
 {
     return m_hasRevisionData;
 }
 
+void DolphinModel::slotRowsRemoved(const QModelIndex& parent, int start, int end)
+{
+    if (m_hasRevisionData) {
+        const int column = parent.column();
+        for (int row = start; row <= end; ++row) {
+            m_revisionHash.remove(parent.child(row, column));
+        }
+    }
+}
+
 QVariant DolphinModel::displayRoleData(const QModelIndex& index) const
 {
     QString retString;