[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    branches/KDE/3.5/kdelibs/kate/part
From:       Guillermo Antonio Amaral Bastidas <me () guillermoamaral ! com>
Date:       2007-06-20 23:44:45
Message-ID: 1182383085.411219.14422.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 678255 by gamaral:

Added new KateDocument::updateModified() code



 M  +52 -79    katedocument.cpp  


--- branches/KDE/3.5/kdelibs/kate/part/katedocument.cpp #678254:678255
@@ -1559,94 +1559,63 @@
     A numeric unique pattern is generated by toggleing a set of bits,
     each bit symbolizes a different state in the Undo Redo structure.
 
-      lastUndoGroupWhenSaved != null       BIT 1
-      lastRedoGroupWhenSaved != null       BIT 2
+      undoItems.isEmpty() != null          BIT 1
+      redoItems.isEmpty() != null          BIT 2
       docWasSavedWhenUndoWasEmpty == true  BIT 3
       docWasSavedWhenRedoWasEmpty == true  BIT 4
-      undoItems.isEmpty() == true          BIT 5
-      redoItems.isEmpty() == true          BIT 6
-      undoItems.last() != null             BIT 7
-      redoItems.last() != null             BIT 8
+      lastUndoGroupWhenSavedIsLastUndo     BIT 5
+      lastUndoGroupWhenSavedIsLastRedo     BIT 6
+      lastRedoGroupWhenSavedIsLastUndo     BIT 7
+      lastRedoGroupWhenSavedIsLastRedo     BIT 8
 
-    Since there is still a change that a pattern might repeat I also
-    created a set of modifies.
-
-      lastUndoGroupWhenSavedIsLastUndo     MOD 1
-      lastUndoGroupWhenSavedIsLastRedo     MOD 2
-      lastRedoGroupWhenSavedIsLastUndo     MOD 3
-      lastRedoGroupWhenSavedIsLastRedo     MOD 4
+    If you find a new pattern, please add it to the patterns array
   */
 
-  bool doModify = false;
-  unsigned char pattern = 0;
+  unsigned char currentPattern = 0;
+  const unsigned char patterns[] = {5,16,24,26,88,90,93,133,144,149,165};
+  const unsigned char patternCount = sizeof(patterns);
+  KateUndoGroup* undoLast = 0;
+  KateUndoGroup* redoLast = 0;
 
-  if (lastUndoGroupWhenSaved) pattern |= 1;
-  if (lastRedoGroupWhenSaved) pattern |= 2;
-  if (docWasSavedWhenUndoWasEmpty) pattern |= 4;
-  if (docWasSavedWhenRedoWasEmpty) pattern |= 8;
-  if (undoItems.isEmpty()) pattern |= 16;
-  if (redoItems.isEmpty()) pattern |= 32;
-  if (undoItems.last()) pattern |= 64;
-  if (redoItems.last()) pattern |= 128;
+  if (undoItems.isEmpty())
+  {
+    currentPattern |= 1;
+  }
+  else
+  {
+    undoLast = undoItems.last();
+  }
 
-  const bool lastUndoGroupWhenSavedIsLastUndo = (lastUndoGroupWhenSaved == undoItems.last());
-  const bool lastUndoGroupWhenSavedIsLastRedo = (lastUndoGroupWhenSaved == redoItems.last());
-  const bool lastRedoGroupWhenSavedIsLastUndo = (lastRedoGroupWhenSaved == undoItems.last());
-  const bool lastRedoGroupWhenSavedIsLastRedo = (lastRedoGroupWhenSaved == redoItems.last());
+  if (redoItems.isEmpty())
+  {
+    currentPattern |= 2;
+  }
+  else
+  {
+    redoLast = redoItems.last();
+  }
 
+  if (docWasSavedWhenUndoWasEmpty) currentPattern |= 4;
+  if (docWasSavedWhenRedoWasEmpty) currentPattern |= 8;
+  if (lastUndoGroupWhenSaved == undoLast) currentPattern |= 16;
+  if (lastUndoGroupWhenSaved == redoLast) currentPattern |= 32;
+  if (lastRedoGroupWhenSaved == undoLast) currentPattern |= 64;
+  if (lastRedoGroupWhenSaved == redoLast) currentPattern |= 128;
+
   // This will print out the pattern information
 
   kdDebug(13020) << k_funcinfo
-    << "Pattern:" << static_cast<unsigned int>(pattern)
-    << " MOD 1:" << lastUndoGroupWhenSavedIsLastUndo
-    << " MOD 2:" << lastUndoGroupWhenSavedIsLastRedo
-    << " MOD 3:" << lastRedoGroupWhenSavedIsLastUndo
-    << " MOD 4:" << lastRedoGroupWhenSavedIsLastRedo << endl;
+    << "Pattern:" << static_cast<unsigned int>(currentPattern) << endl;
 
-  /*
-      Detected Patterns:
-
-      Pattern:103  MOD 1:false MOD 2:false  MOD 3:false  MOD 4:false
-      Pattern:105  MOD 1:true  MOD 2:false  MOD 3:false  MOD 4:true
-      Pattern:148  MOD 1:false MOD 2:false  MOD 3:false  MOD 4:false
-      Pattern:149  MOD 1:false MOD 2:true   MOD 3:false  MOD 4:false
-      Pattern:149  MOD 1:false MOD 2:false  MOD 3:true   MOD 4:false
-      Pattern:159  MOD 1:false MOD 2:true   MOD 3:false  MOD 4:false
-      Pattern:156  MOD 1:false MOD 2:false  MOD 3:false  MOD 4:false
-      Pattern:195  MOD 1:true  MOD 2:false  MOD 3:false  MOD 4:true
-      Pattern:201  MOD 1:true  MOD 2:false  MOD 3:false  MOD 4:false
-      Pattern:223  MOD 1:true  MOD 2:false  MOD 3:false  MOD 4:false
-
-  */
-
-  switch (pattern)
+  for (uint patternIndex = 0; patternIndex < patternCount; ++patternIndex)
   {
-    // No MODS are true
-    case 103: case 148: case 149: case 156:
-        doModify = true;
+    if ( currentPattern == patterns[patternIndex] )
+    {
+      setModified( false );
+      kdDebug(13020) << k_funcinfo << "setting modified to false!" << endl;
       break;
-
-    // Only MOD 1 is true
-    case 201: case 223:
-        doModify = (lastUndoGroupWhenSavedIsLastUndo);
-      break;
-
-    // Only MOD 2 is true
-    case 151:
-        doModify = (lastUndoGroupWhenSavedIsLastRedo);
-      break;
-
-    // MOD 1 and MOD 4 are true
-    case 105: case 195:
-        doModify = (lastUndoGroupWhenSavedIsLastUndo && lastRedoGroupWhenSavedIsLastRedo);
-      break;
+    }
   }
-
-  if (doModify)
-  {
-    setModified( false );
-    kdDebug(13020) << k_funcinfo << "setting modified to false!" << endl;
-  };
 }
 
 void KateDocument::clearUndo()
@@ -2876,14 +2845,18 @@
     emit modifiedChanged ();
     emit modStateChanged ((Kate::Document *)this);
   }
-  if ( m == false && ! undoItems.isEmpty() )
-  {
-    lastUndoGroupWhenSaved = undoItems.last();
-    lastRedoGroupWhenSaved = redoItems.last();
-  }
-
   if ( m == false )
   {
+    if ( ! undoItems.isEmpty() )
+    {
+      lastUndoGroupWhenSaved = undoItems.last();
+    }
+
+    if ( ! redoItems.isEmpty() )
+    {
+      lastRedoGroupWhenSaved = redoItems.last();
+    }
+
     docWasSavedWhenUndoWasEmpty = undoItems.isEmpty();
     docWasSavedWhenRedoWasEmpty = redoItems.isEmpty();
   }
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic