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