UndoSupport.st
author Claus Gittinger <cg@exept.de>
Sat, 08 Mar 2008 11:53:23 +0100
changeset 1932 7bafb4c076d3
parent 1588 7a69b6a027b0
child 2136 2accac6ffb0f
permissions -rw-r--r--
also show \"what-would-be-done\" in redo item
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
6384f91af636 better info of replace action (compound-undo-action has info, too)
Claus Gittinger <cg@exept.de>
parents: 1522
diff changeset
    16
		infoOfCurrentTransaction'
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
6384f91af636 better info of replace action (compound-undo-action has info, too)
Claus Gittinger <cg@exept.de>
parents: 1522
diff changeset
    82
! !
6384f91af636 better info of replace action (compound-undo-action has info, too)
Claus Gittinger <cg@exept.de>
parents: 1522
diff changeset
    83
1454
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
!UndoSupport methodsFor:'initialization'!
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
actionPerformer:something
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
    actionPerformer := something.
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
!
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
initialize
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
    self resetHistories.
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
!
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
resetHistories
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
    transaction := nil.
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
    undoList := OrderedCollection new.
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
    redoList := OrderedCollection new.
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
! !
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
!UndoSupport methodsFor:'undo & again'!
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
addUndo:action
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
    transaction notNil ifTrue:[
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
        transaction add:action
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
    ].
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
!
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
closeTransactionAndAddTo:aList
1549
b35755379765 undo - combine multiple-single keystrokes
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
   109
    |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
   110
1454
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
    transaction notEmptyOrNil ifTrue:[
1549
b35755379765 undo - combine multiple-single keystrokes
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
   112
        canCombine := false.
1525
6384f91af636 better info of replace action (compound-undo-action has info, too)
Claus Gittinger <cg@exept.de>
parents: 1522
diff changeset
   113
        (transaction size == 1 and:[infoOfCurrentTransaction isNil]) ifTrue:[
1549
b35755379765 undo - combine multiple-single keystrokes
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
   114
            actionToAdd := transaction first.
b35755379765 undo - combine multiple-single keystrokes
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
   115
b35755379765 undo - combine multiple-single keystrokes
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
   116
            aList notEmpty ifTrue:[
b35755379765 undo - combine multiple-single keystrokes
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
   117
                lastAction := aList last.
1550
7710a4b44cc9 undo - combine multiple-single keystrokes
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
   118
                canCombine := lastAction perform:#canCombineWithNext: with:actionToAdd ifNotUnderstood:false.
1549
b35755379765 undo - combine multiple-single keystrokes
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
   119
            ].
1454
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   120
        ] ifFalse:[
1525
6384f91af636 better info of replace action (compound-undo-action has info, too)
Claus Gittinger <cg@exept.de>
parents: 1522
diff changeset
   121
            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
   122
            actionToAdd info:infoOfCurrentTransaction.
6384f91af636 better info of replace action (compound-undo-action has info, too)
Claus Gittinger <cg@exept.de>
parents: 1522
diff changeset
   123
        ].
1549
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
        canCombine ifTrue:[
b35755379765 undo - combine multiple-single keystrokes
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
   126
            lastAction combineWithNext:actionToAdd.
b35755379765 undo - combine multiple-single keystrokes
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
   127
        ] ifFalse:[
b35755379765 undo - combine multiple-single keystrokes
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
   128
            aList add:actionToAdd.
b35755379765 undo - combine multiple-single keystrokes
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
   129
        ].
1454
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
    ].
1525
6384f91af636 better info of replace action (compound-undo-action has info, too)
Claus Gittinger <cg@exept.de>
parents: 1522
diff changeset
   131
    infoOfCurrentTransaction := nil.
1454
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
    transaction := nil
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
!
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
executeActionFrom:doList addUndoTo:unDoList
1588
7a69b6a027b0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1550
diff changeset
   136
    |action previousTransaction|
1454
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
    doList notEmptyOrNil ifTrue:[
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   139
        action := doList removeLast.
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
1588
7a69b6a027b0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1550
diff changeset
   141
        previousTransaction := transaction.
7a69b6a027b0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1550
diff changeset
   142
        [
7a69b6a027b0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1550
diff changeset
   143
            transaction := OrderedCollection new.
1454
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   144
1588
7a69b6a027b0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1550
diff changeset
   145
            action executeIn:actionPerformer.
1454
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   146
1588
7a69b6a027b0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1550
diff changeset
   147
            self closeTransactionAndAddTo:unDoList.
7a69b6a027b0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1550
diff changeset
   148
        ] ensure:[
7a69b6a027b0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1550
diff changeset
   149
            transaction := previousTransaction.
7a69b6a027b0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1550
diff changeset
   150
        ]
1454
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   151
    ]
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   152
!
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   153
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   154
hasRedoAction
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   155
    ^ redoList size > 0
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   156
!
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   157
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   158
hasUndoAction
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   159
    ^ undoList size > 0
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   160
!
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   161
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   162
lastRedoAction
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   163
    ^ redoList removeLast
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
lastUndoAction
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   167
    ^ undoList removeLast
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   168
!
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   169
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   170
nonUndoableDo:aBlock
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   171
    |prev|
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   172
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   173
    prev := transaction.
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   174
    transaction := nil.
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   175
    aBlock 
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   176
        ensure:[
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   177
            transaction := prev.
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   178
        ].
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   179
!
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   180
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   181
redo
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   182
    self executeActionFrom:redoList addUndoTo:undoList
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   183
!
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   184
1932
7bafb4c076d3 also show \"what-would-be-done\" in redo item
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
   185
redoActionInfo
7bafb4c076d3 also show \"what-would-be-done\" in redo item
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
   186
    ^ redoList last info
7bafb4c076d3 also show \"what-would-be-done\" in redo item
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
   187
!
7bafb4c076d3 also show \"what-would-be-done\" in redo item
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
   188
1454
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   189
undo
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   190
    self executeActionFrom:undoList addUndoTo:redoList
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   191
!
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   192
1500
f94575558ca5 info string in undo
Claus Gittinger <cg@exept.de>
parents: 1454
diff changeset
   193
undoActionInfo
f94575558ca5 info string in undo
Claus Gittinger <cg@exept.de>
parents: 1454
diff changeset
   194
    ^ undoList last info
f94575558ca5 info string in undo
Claus Gittinger <cg@exept.de>
parents: 1454
diff changeset
   195
!
f94575558ca5 info string in undo
Claus Gittinger <cg@exept.de>
parents: 1454
diff changeset
   196
1454
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   197
undoableDo:aBlock
1526
f980a40d3c69 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1525
diff changeset
   198
    self undoableDo:aBlock info:nil.
f980a40d3c69 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1525
diff changeset
   199
!
f980a40d3c69 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1525
diff changeset
   200
f980a40d3c69 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1525
diff changeset
   201
undoableDo:aBlock info:aString
1454
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   202
    transaction notNil ifTrue:[
1526
f980a40d3c69 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1525
diff changeset
   203
        infoOfCurrentTransaction := infoOfCurrentTransaction ? aString.
1454
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   204
        aBlock value.
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   205
    ] ifFalse:[
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   206
        transaction := OrderedCollection new.
1526
f980a40d3c69 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1525
diff changeset
   207
        infoOfCurrentTransaction := aString.
1454
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   208
        aBlock 
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   209
            ensure:[  
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   210
                self closeTransactionAndAddTo:undoList.
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   211
            ].
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   212
    ].
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   213
! !
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   214
1525
6384f91af636 better info of replace action (compound-undo-action has info, too)
Claus Gittinger <cg@exept.de>
parents: 1522
diff changeset
   215
!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
   216
6384f91af636 better info of replace action (compound-undo-action has info, too)
Claus Gittinger <cg@exept.de>
parents: 1522
diff changeset
   217
info
6384f91af636 better info of replace action (compound-undo-action has info, too)
Claus Gittinger <cg@exept.de>
parents: 1522
diff changeset
   218
    ^ userFriendlyInfo
6384f91af636 better info of replace action (compound-undo-action has info, too)
Claus Gittinger <cg@exept.de>
parents: 1522
diff changeset
   219
!
6384f91af636 better info of replace action (compound-undo-action has info, too)
Claus Gittinger <cg@exept.de>
parents: 1522
diff changeset
   220
6384f91af636 better info of replace action (compound-undo-action has info, too)
Claus Gittinger <cg@exept.de>
parents: 1522
diff changeset
   221
info:aString
6384f91af636 better info of replace action (compound-undo-action has info, too)
Claus Gittinger <cg@exept.de>
parents: 1522
diff changeset
   222
    userFriendlyInfo := aString
6384f91af636 better info of replace action (compound-undo-action has info, too)
Claus Gittinger <cg@exept.de>
parents: 1522
diff changeset
   223
! !
6384f91af636 better info of replace action (compound-undo-action has info, too)
Claus Gittinger <cg@exept.de>
parents: 1522
diff changeset
   224
1454
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   225
!UndoSupport::CompoundAction methodsFor:'adding'!
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   226
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   227
actions:aCollection
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   228
    actions := aCollection
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   229
!
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   230
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   231
add:action
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   232
    actions isNil ifTrue:[
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   233
        actions := OrderedCollection new.
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   234
    ].
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   235
    actions add:action
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   236
! !
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   237
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   238
!UndoSupport::CompoundAction methodsFor:'execution'!
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   239
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   240
executeIn:editor 
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   241
    actions reverseDo:[:each | each executeIn:editor ]
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   242
! !
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   243
1549
b35755379765 undo - combine multiple-single keystrokes
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
   244
!UndoSupport::CompoundAction methodsFor:'queries'!
b35755379765 undo - combine multiple-single keystrokes
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
   245
b35755379765 undo - combine multiple-single keystrokes
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
   246
canCombineWithNext:nextAction
b35755379765 undo - combine multiple-single keystrokes
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
   247
    ^ false.
b35755379765 undo - combine multiple-single keystrokes
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
   248
! !
b35755379765 undo - combine multiple-single keystrokes
Claus Gittinger <cg@exept.de>
parents: 1526
diff changeset
   249
1454
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   250
!UndoSupport class methodsFor:'documentation'!
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   251
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   252
version
1932
7bafb4c076d3 also show \"what-would-be-done\" in redo item
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
   253
    ^ '$Header: /cvs/stx/stx/libbasic2/UndoSupport.st,v 1.9 2008-03-08 10:53:23 cg Exp $'
1454
d77bede2a767 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   254
! !