UndoSupport.st
author Claus Gittinger <cg@exept.de>
Mon, 04 May 2009 16:42:09 +0200
changeset 2136 2accac6ffb0f
parent 1932 7bafb4c076d3
child 3820 d4100babd7c8
permissions -rw-r--r--
allow for the undoList size to be limited
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1522
7a569eca4d68 copyright
Claus Gittinger <cg@exept.de>
parents: 1500
diff changeset
     1
"
7a569eca4d68 copyright
Claus Gittinger <cg@exept.de>
parents: 1500
diff changeset
     2
 COPYRIGHT (c) 2004 by eXept Software AG
7a569eca4d68 copyright
Claus Gittinger <cg@exept.de>
parents: 1500
diff changeset
     3
              All Rights Reserved
7a569eca4d68 copyright
Claus Gittinger <cg@exept.de>
parents: 1500
diff changeset
     4
7a569eca4d68 copyright
Claus Gittinger <cg@exept.de>
parents: 1500
diff changeset
     5
 This software is furnished under a license and may be used
7a569eca4d68 copyright
Claus Gittinger <cg@exept.de>
parents: 1500
diff changeset
     6
 only in accordance with the terms of that license and with the
7a569eca4d68 copyright
Claus Gittinger <cg@exept.de>
parents: 1500
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
7a569eca4d68 copyright
Claus Gittinger <cg@exept.de>
parents: 1500
diff changeset
     8
 be provided or otherwise made available to, or used by, any
7a569eca4d68 copyright
Claus Gittinger <cg@exept.de>
parents: 1500
diff changeset
     9
 other person.  No title to or ownership of the software is
7a569eca4d68 copyright
Claus Gittinger <cg@exept.de>
parents: 1500
diff changeset
    10
 hereby transferred.
7a569eca4d68 copyright
Claus Gittinger <cg@exept.de>
parents: 1500
diff changeset
    11
"
1454
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
"{ Package: 'stx:libbasic2' }"
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
Object subclass:#UndoSupport
1525
6384f91af636 better info of replace action (compound-undo-action has info, too)
Claus Gittinger <cg@exept.de>
parents: 1522
diff changeset
    15
	instanceVariableNames:'actionPerformer transaction undoList redoList
2136
2accac6ffb0f allow for the undoList size to be limited
Claus Gittinger <cg@exept.de>
parents: 1932
diff changeset
    16
		infoOfCurrentTransaction undoLimit'
1454
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
	classVariableNames:''
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
	poolDictionaries:''
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
	category:'Views-Text'
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
!
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
Object subclass:#CompoundAction
1525
6384f91af636 better info of replace action (compound-undo-action has info, too)
Claus Gittinger <cg@exept.de>
parents: 1522
diff changeset
    23
	instanceVariableNames:'actions userFriendlyInfo'
1454
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
	classVariableNames:''
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
	poolDictionaries:''
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
	privateIn:UndoSupport
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
!
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
!UndoSupport class methodsFor:'documentation'!
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
1522
7a569eca4d68 copyright
Claus Gittinger <cg@exept.de>
parents: 1500
diff changeset
    31
copyright
7a569eca4d68 copyright
Claus Gittinger <cg@exept.de>
parents: 1500
diff changeset
    32
"
7a569eca4d68 copyright
Claus Gittinger <cg@exept.de>
parents: 1500
diff changeset
    33
 COPYRIGHT (c) 2004 by eXept Software AG
7a569eca4d68 copyright
Claus Gittinger <cg@exept.de>
parents: 1500
diff changeset
    34
              All Rights Reserved
7a569eca4d68 copyright
Claus Gittinger <cg@exept.de>
parents: 1500
diff changeset
    35
7a569eca4d68 copyright
Claus Gittinger <cg@exept.de>
parents: 1500
diff changeset
    36
 This software is furnished under a license and may be used
7a569eca4d68 copyright
Claus Gittinger <cg@exept.de>
parents: 1500
diff changeset
    37
 only in accordance with the terms of that license and with the
7a569eca4d68 copyright
Claus Gittinger <cg@exept.de>
parents: 1500
diff changeset
    38
 inclusion of the above copyright notice.   This software may not
7a569eca4d68 copyright
Claus Gittinger <cg@exept.de>
parents: 1500
diff changeset
    39
 be provided or otherwise made available to, or used by, any
7a569eca4d68 copyright
Claus Gittinger <cg@exept.de>
parents: 1500
diff changeset
    40
 other person.  No title to or ownership of the software is
7a569eca4d68 copyright
Claus Gittinger <cg@exept.de>
parents: 1500
diff changeset
    41
 hereby transferred.
7a569eca4d68 copyright
Claus Gittinger <cg@exept.de>
parents: 1500
diff changeset
    42
"
7a569eca4d68 copyright
Claus Gittinger <cg@exept.de>
parents: 1500
diff changeset
    43
!
7a569eca4d68 copyright
Claus Gittinger <cg@exept.de>
parents: 1500
diff changeset
    44
1454
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
documentation
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
"
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
    Framework for undo & redo.
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
    See concrete usage in EditTextView.
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
    [author:]
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
         (cg@betti)
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
    [instance variables:]
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
    [class variables:]
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
    [see also:]
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
"
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
!
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
examples
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
"
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
    See usage in EditTextView
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
"
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
! !
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
!UndoSupport class methodsFor:'instance creation'!
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
for:anActionPerformer
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
    ^ self new actionPerformer:anActionPerformer.
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
!
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
new
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
    ^ self basicNew initialize.
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
! !
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
1525
6384f91af636 better info of replace action (compound-undo-action has info, too)
Claus Gittinger <cg@exept.de>
parents: 1522
diff changeset
    78
!UndoSupport methodsFor:'accessing'!
6384f91af636 better info of replace action (compound-undo-action has info, too)
Claus Gittinger <cg@exept.de>
parents: 1522
diff changeset
    79
6384f91af636 better info of replace action (compound-undo-action has info, too)
Claus Gittinger <cg@exept.de>
parents: 1522
diff changeset
    80
actionInfo:aString
6384f91af636 better info of replace action (compound-undo-action has info, too)
Claus Gittinger <cg@exept.de>
parents: 1522
diff changeset
    81
    infoOfCurrentTransaction := aString
2136
2accac6ffb0f allow for the undoList size to be limited
Claus Gittinger <cg@exept.de>
parents: 1932
diff changeset
    82
!
2accac6ffb0f allow for the undoList size to be limited
Claus Gittinger <cg@exept.de>
parents: 1932
diff changeset
    83
2accac6ffb0f allow for the undoList size to be limited
Claus Gittinger <cg@exept.de>
parents: 1932
diff changeset
    84
undoLimit
2accac6ffb0f allow for the undoList size to be limited
Claus Gittinger <cg@exept.de>
parents: 1932
diff changeset
    85
    ^ undoLimit
2accac6ffb0f allow for the undoList size to be limited
Claus Gittinger <cg@exept.de>
parents: 1932
diff changeset
    86
!
2accac6ffb0f allow for the undoList size to be limited
Claus Gittinger <cg@exept.de>
parents: 1932
diff changeset
    87
2accac6ffb0f allow for the undoList size to be limited
Claus Gittinger <cg@exept.de>
parents: 1932
diff changeset
    88
undoLimit:something
2accac6ffb0f allow for the undoList size to be limited
Claus Gittinger <cg@exept.de>
parents: 1932
diff changeset
    89
    undoLimit := something.
1525
6384f91af636 better info of replace action (compound-undo-action has info, too)
Claus Gittinger <cg@exept.de>
parents: 1522
diff changeset
    90
! !
6384f91af636 better info of replace action (compound-undo-action has info, too)
Claus Gittinger <cg@exept.de>
parents: 1522
diff changeset
    91
1454
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
!UndoSupport methodsFor:'initialization'!
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
actionPerformer:something
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
    actionPerformer := something.
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
!
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
initialize
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
    self resetHistories.
2136
2accac6ffb0f allow for the undoList size to be limited
Claus Gittinger <cg@exept.de>
parents: 1932
diff changeset
   100
    "/ undoLimit := 1000.
1454
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
!
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
resetHistories
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
    transaction := nil.
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
    undoList := OrderedCollection new.
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
    redoList := OrderedCollection new.
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
! !
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
!UndoSupport methodsFor:'undo & again'!
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
addUndo:action
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
    transaction notNil ifTrue:[
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
        transaction add:action
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
    ].
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
!
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
closeTransactionAndAddTo:aList
1549
b35755379765 undo - combine multiple-single keystrokes
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
   118
    |actionToAdd lastAction canCombine|
1525
6384f91af636 better info of replace action (compound-undo-action has info, too)
Claus Gittinger <cg@exept.de>
parents: 1522
diff changeset
   119
1454
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   120
    transaction notEmptyOrNil ifTrue:[
1549
b35755379765 undo - combine multiple-single keystrokes
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
   121
        canCombine := false.
1525
6384f91af636 better info of replace action (compound-undo-action has info, too)
Claus Gittinger <cg@exept.de>
parents: 1522
diff changeset
   122
        (transaction size == 1 and:[infoOfCurrentTransaction isNil]) ifTrue:[
1549
b35755379765 undo - combine multiple-single keystrokes
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
   123
            actionToAdd := transaction first.
b35755379765 undo - combine multiple-single keystrokes
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
   124
b35755379765 undo - combine multiple-single keystrokes
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
   125
            aList notEmpty ifTrue:[
b35755379765 undo - combine multiple-single keystrokes
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
   126
                lastAction := aList last.
1550
7710a4b44cc9 undo - combine multiple-single keystrokes
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
   127
                canCombine := lastAction perform:#canCombineWithNext: with:actionToAdd ifNotUnderstood:false.
1549
b35755379765 undo - combine multiple-single keystrokes
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
   128
            ].
1454
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
        ] ifFalse:[
1525
6384f91af636 better info of replace action (compound-undo-action has info, too)
Claus Gittinger <cg@exept.de>
parents: 1522
diff changeset
   130
            actionToAdd := (CompoundAction new actions:transaction).
6384f91af636 better info of replace action (compound-undo-action has info, too)
Claus Gittinger <cg@exept.de>
parents: 1522
diff changeset
   131
            actionToAdd info:infoOfCurrentTransaction.
6384f91af636 better info of replace action (compound-undo-action has info, too)
Claus Gittinger <cg@exept.de>
parents: 1522
diff changeset
   132
        ].
1549
b35755379765 undo - combine multiple-single keystrokes
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
   133
b35755379765 undo - combine multiple-single keystrokes
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
   134
        canCombine ifTrue:[
b35755379765 undo - combine multiple-single keystrokes
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
   135
            lastAction combineWithNext:actionToAdd.
b35755379765 undo - combine multiple-single keystrokes
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
   136
        ] ifFalse:[
b35755379765 undo - combine multiple-single keystrokes
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
   137
            aList add:actionToAdd.
2136
2accac6ffb0f allow for the undoList size to be limited
Claus Gittinger <cg@exept.de>
parents: 1932
diff changeset
   138
            (undoLimit notNil and:[aList size > undoLimit]) ifTrue:[
2accac6ffb0f allow for the undoList size to be limited
Claus Gittinger <cg@exept.de>
parents: 1932
diff changeset
   139
                Transcript showCR:'forget old undo-action'.
2accac6ffb0f allow for the undoList size to be limited
Claus Gittinger <cg@exept.de>
parents: 1932
diff changeset
   140
                aList removeFirst.
2accac6ffb0f allow for the undoList size to be limited
Claus Gittinger <cg@exept.de>
parents: 1932
diff changeset
   141
            ].
1549
b35755379765 undo - combine multiple-single keystrokes
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
   142
        ].
1454
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   143
    ].
1525
6384f91af636 better info of replace action (compound-undo-action has info, too)
Claus Gittinger <cg@exept.de>
parents: 1522
diff changeset
   144
    infoOfCurrentTransaction := nil.
1454
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   145
    transaction := nil
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   146
!
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   147
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   148
executeActionFrom:doList addUndoTo:unDoList
1588
7a69b6a027b0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1550
diff changeset
   149
    |action previousTransaction|
1454
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   150
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   151
    doList notEmptyOrNil ifTrue:[
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   152
        action := doList removeLast.
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   153
1588
7a69b6a027b0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1550
diff changeset
   154
        previousTransaction := transaction.
7a69b6a027b0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1550
diff changeset
   155
        [
7a69b6a027b0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1550
diff changeset
   156
            transaction := OrderedCollection new.
1454
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   157
1588
7a69b6a027b0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1550
diff changeset
   158
            action executeIn:actionPerformer.
1454
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   159
1588
7a69b6a027b0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1550
diff changeset
   160
            self closeTransactionAndAddTo:unDoList.
7a69b6a027b0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1550
diff changeset
   161
        ] ensure:[
7a69b6a027b0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1550
diff changeset
   162
            transaction := previousTransaction.
7a69b6a027b0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1550
diff changeset
   163
        ]
1454
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   164
    ]
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   165
!
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   166
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   167
hasRedoAction
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   168
    ^ redoList size > 0
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   169
!
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   170
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   171
hasUndoAction
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   172
    ^ undoList size > 0
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   173
!
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   174
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   175
lastRedoAction
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   176
    ^ redoList removeLast
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   177
!
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   178
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   179
lastUndoAction
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   180
    ^ undoList removeLast
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   181
!
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   182
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   183
nonUndoableDo:aBlock
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   184
    |prev|
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   185
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   186
    prev := transaction.
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   187
    transaction := nil.
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   188
    aBlock 
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   189
        ensure:[
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   190
            transaction := prev.
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   191
        ].
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   192
!
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   193
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   194
redo
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   195
    self executeActionFrom:redoList addUndoTo:undoList
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   196
!
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   197
1932
7bafb4c076d3 also show \"what-would-be-done\" in redo item
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
   198
redoActionInfo
7bafb4c076d3 also show \"what-would-be-done\" in redo item
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
   199
    ^ redoList last info
7bafb4c076d3 also show \"what-would-be-done\" in redo item
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
   200
!
7bafb4c076d3 also show \"what-would-be-done\" in redo item
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
   201
1454
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   202
undo
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   203
    self executeActionFrom:undoList addUndoTo:redoList
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   204
!
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   205
1500
f94575558ca5 info string in undo
Claus Gittinger <cg@exept.de>
parents: 1454
diff changeset
   206
undoActionInfo
f94575558ca5 info string in undo
Claus Gittinger <cg@exept.de>
parents: 1454
diff changeset
   207
    ^ undoList last info
f94575558ca5 info string in undo
Claus Gittinger <cg@exept.de>
parents: 1454
diff changeset
   208
!
f94575558ca5 info string in undo
Claus Gittinger <cg@exept.de>
parents: 1454
diff changeset
   209
1454
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   210
undoableDo:aBlock
1526
f980a40d3c69 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1525
diff changeset
   211
    self undoableDo:aBlock info:nil.
f980a40d3c69 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1525
diff changeset
   212
!
f980a40d3c69 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1525
diff changeset
   213
f980a40d3c69 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1525
diff changeset
   214
undoableDo:aBlock info:aString
1454
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   215
    transaction notNil ifTrue:[
1526
f980a40d3c69 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1525
diff changeset
   216
        infoOfCurrentTransaction := infoOfCurrentTransaction ? aString.
1454
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   217
        aBlock value.
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   218
    ] ifFalse:[
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   219
        transaction := OrderedCollection new.
1526
f980a40d3c69 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1525
diff changeset
   220
        infoOfCurrentTransaction := aString.
1454
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   221
        aBlock 
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   222
            ensure:[  
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   223
                self closeTransactionAndAddTo:undoList.
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   224
            ].
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   225
    ].
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   226
! !
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   227
1525
6384f91af636 better info of replace action (compound-undo-action has info, too)
Claus Gittinger <cg@exept.de>
parents: 1522
diff changeset
   228
!UndoSupport::CompoundAction methodsFor:'accessing'!
6384f91af636 better info of replace action (compound-undo-action has info, too)
Claus Gittinger <cg@exept.de>
parents: 1522
diff changeset
   229
6384f91af636 better info of replace action (compound-undo-action has info, too)
Claus Gittinger <cg@exept.de>
parents: 1522
diff changeset
   230
info
6384f91af636 better info of replace action (compound-undo-action has info, too)
Claus Gittinger <cg@exept.de>
parents: 1522
diff changeset
   231
    ^ userFriendlyInfo
6384f91af636 better info of replace action (compound-undo-action has info, too)
Claus Gittinger <cg@exept.de>
parents: 1522
diff changeset
   232
!
6384f91af636 better info of replace action (compound-undo-action has info, too)
Claus Gittinger <cg@exept.de>
parents: 1522
diff changeset
   233
6384f91af636 better info of replace action (compound-undo-action has info, too)
Claus Gittinger <cg@exept.de>
parents: 1522
diff changeset
   234
info:aString
6384f91af636 better info of replace action (compound-undo-action has info, too)
Claus Gittinger <cg@exept.de>
parents: 1522
diff changeset
   235
    userFriendlyInfo := aString
6384f91af636 better info of replace action (compound-undo-action has info, too)
Claus Gittinger <cg@exept.de>
parents: 1522
diff changeset
   236
! !
6384f91af636 better info of replace action (compound-undo-action has info, too)
Claus Gittinger <cg@exept.de>
parents: 1522
diff changeset
   237
1454
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   238
!UndoSupport::CompoundAction methodsFor:'adding'!
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   239
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   240
actions:aCollection
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   241
    actions := aCollection
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   242
!
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   243
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   244
add:action
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   245
    actions isNil ifTrue:[
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   246
        actions := OrderedCollection new.
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   247
    ].
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   248
    actions add:action
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   249
! !
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   250
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   251
!UndoSupport::CompoundAction methodsFor:'execution'!
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   252
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   253
executeIn:editor 
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   254
    actions reverseDo:[:each | each executeIn:editor ]
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   255
! !
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   256
1549
b35755379765 undo - combine multiple-single keystrokes
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
   257
!UndoSupport::CompoundAction methodsFor:'queries'!
b35755379765 undo - combine multiple-single keystrokes
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
   258
b35755379765 undo - combine multiple-single keystrokes
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
   259
canCombineWithNext:nextAction
b35755379765 undo - combine multiple-single keystrokes
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
   260
    ^ false.
b35755379765 undo - combine multiple-single keystrokes
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
   261
! !
b35755379765 undo - combine multiple-single keystrokes
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
   262
1454
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   263
!UndoSupport class methodsFor:'documentation'!
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   264
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   265
version
2136
2accac6ffb0f allow for the undoList size to be limited
Claus Gittinger <cg@exept.de>
parents: 1932
diff changeset
   266
    ^ '$Header: /cvs/stx/stx/libbasic2/UndoSupport.st,v 1.10 2009-05-04 14:42:09 cg Exp $'
1454
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   267
! !