[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-19 0:02:07
Message-ID: 1182211327.385054.13833.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 677351 by gamaral:
Added more elavorate commentary on the inner workings of updateModified()
M +70 -29 katedocument.cpp
--- branches/KDE/3.5/kdelibs/kate/part/katedocument.cpp #677350:677351
@@ -1548,25 +1548,37 @@
void KateDocument::updateModified()
{
- // I noticed that there to many variables to take into consideration
- // with a simple 'if' or two.
- //
- // Patterns Detected:
- //
- // pattern=223 1==7:true 1==8:false 2==7:false 2==8:false
- // pattern=201 1==7:true 1==8:false 2==7:false 2==8:false
- // pattern=195 1==7:true 1==8:false 2==7:false 2==8:true
- // pattern=105 1==7:true 1==8:false 2==7:false 2==8:true
- // pattern=148 1==7:false 1==8:false 2==7:false 2==8:false
- // pattern=156 1==7:false 1==8:false 2==7:false 2==8:false
- // pattern=149 1==7:false 1==8:true 2==7:false 2==8:false
+ /*
+ How this works:
+ After noticing that there where to many scenarios to take into
+ consideration when using 'if's to toggle the "Modified" flag
+ I came up with this baby, flexible and repetitive calls are
+ minimal.
+
+ 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
+ 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
+
+ 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
+ */
+
+ bool doModify = false;
unsigned char pattern = 0;
- const bool oneEqualToSeven = (lastUndoGroupWhenSaved == undoItems.last());
- const bool oneEqualToEight = (lastUndoGroupWhenSaved == redoItems.last());
- const bool twoEqualToSeven = (lastRedoGroupWhenSaved == undoItems.last());
- const bool twoEqualToEight = (lastRedoGroupWhenSaved == redoItems.last());
- bool doModify = false;
if (lastUndoGroupWhenSaved) pattern |= 1;
if (lastRedoGroupWhenSaved) pattern |= 2;
@@ -1577,33 +1589,62 @@
if (undoItems.last()) pattern |= 64;
if (redoItems.last()) pattern |= 128;
+ const bool lastUndoGroupWhenSavedIsLastUndo = (lastUndoGroupWhenSaved == \
undoItems.last()); + const bool lastUndoGroupWhenSavedIsLastRedo = \
(lastUndoGroupWhenSaved == redoItems.last()); + const bool \
lastRedoGroupWhenSavedIsLastUndo = (lastRedoGroupWhenSaved == undoItems.last()); + \
const bool lastRedoGroupWhenSavedIsLastRedo = (lastRedoGroupWhenSaved == \
redoItems.last()); +
+ // 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;
+
+ /*
+ Detected Patterns:
+
+ 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: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)
{
- case 223: case 201:
- doModify = (oneEqualToSeven);
+ // No MODS are true
+ case 148: case 156:
+ doModify = true;
break;
- case 195: case 105:
- doModify = (oneEqualToSeven && twoEqualToEight);
+ // Only MOD 1 is true
+ case 201: case 223:
+ doModify = (lastUndoGroupWhenSavedIsLastUndo);
break;
- case 148: case 156:
- doModify = true;
+ // Only MOD 2 is true
+ case 149: case 151:
+ doModify = (lastUndoGroupWhenSavedIsLastRedo);
break;
- case 149: case 151:
- doModify = (oneEqualToEight);
+ // 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;
};
-
- kdDebug(13020) << k_funcinfo << "pattern=" << static_cast<unsigned int>(pattern) \
<< " 1==7:" << oneEqualToSeven
- << " 1==8:" << oneEqualToEight << " 2==7:" << twoEqualToSeven << " 2==8:" << \
twoEqualToEight << endl; }
void KateDocument::clearUndo()
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic