Tools__ChangeList.st
branchjv
changeset 12292 ecc23f7c8dde
parent 12287 400a99059170
child 12401 4714b9640528
child 12405 76f9a872362b
--- a/Tools__ChangeList.st	Wed Sep 12 12:00:27 2012 +0100
+++ b/Tools__ChangeList.st	Thu Sep 13 10:15:20 2012 +0100
@@ -1,6 +1,6 @@
 "
  COPYRIGHT (c) 2010 by Jan Vrany, SWING Research Group. CTU in Prague
-              All Rights Reserved
+	      All Rights Reserved
 
 Permission is hereby granted, free of charge, to any person
 obtaining a copy of this software and associated documentation
@@ -29,7 +29,7 @@
 
 Tools::BrowserListWithFilter subclass:#ChangeList
 	instanceVariableNames:'listHolder showRemovedHolder showSameHolder showTimestampHolder
-		allowRemoveHolder allowAcceptHolder scrollToBottom'
+		allowRemoveHolder allowAcceptHolder scrollToBottom applyAction'
 	classVariableNames:'LastSelectionConditionString'
 	poolDictionaries:''
 	category:'Interface-Browsers-ChangeSet'
@@ -47,7 +47,7 @@
 copyright
 "
  COPYRIGHT (c) 2010 by Jan Vrany, SWING Research Group. CTU in Prague
-              All Rights Reserved
+	      All Rights Reserved
 
 Permission is hereby granted, free of charge, to any person
 obtaining a copy of this software and associated documentation
@@ -127,57 +127,57 @@
 
     <resource: #canvas>
 
-    ^ 
+    ^
      #(FullSpec
-        name: windowSpec
-        window: 
+	name: windowSpec
+	window:
        (WindowSpec
-          label: 'Change List'
-          name: 'Change List'
-          min: (Point 10 10)
-          bounds: (Rectangle 0 0 300 300)
-        )
-        component: 
+	  label: 'Change List'
+	  name: 'Change List'
+	  min: (Point 10 10)
+	  bounds: (Rectangle 0 0 300 300)
+	)
+	component:
        (SpecCollection
-          collection: (
-           (InputFieldSpec
-              name: 'Filter'
-              layout: (LayoutFrame 0 0 0 0 0 1 25 0)
-              initiallyInvisible: true
-              model: filterPatternHolder
-              immediateAccept: true
-              acceptOnLeave: false
-              acceptOnReturn: false
-              acceptOnTab: false
-              acceptOnPointerLeave: false
-              emptyFieldReplacementText: 'Search Filter...'
-              postBuildCallback: postBuildFilterView:
-            )
-           (DataSetSpec
-              name: 'List'
-              layout: (LayoutFrame 0 0 0 0 0 1 0 1)
-              model: selectionHolder
-              menu: menuHolderWithShowFilter
-              hasHorizontalScrollBar: true
-              hasVerticalScrollBar: true
-              dataList: listHolder
-              useIndex: false
-              doubleClickSelector: selectionDoubleclicked
-              columnHolder: listColumns
-              showLabels: false
-              multipleSelectOk: true
-              postBuildCallback: postBuildListView:
-              properties: 
-             (PropertyListDictionary
-                startDragSelector: nil
-                dropObjectSelector: dragObjects:
-                canDropSelector: canDrop:
-                dropSelector: dropObjects:
-              )
-            )
-           )
-         
-        )
+	  collection: (
+	   (InputFieldSpec
+	      name: 'Filter'
+	      layout: (LayoutFrame 0 0 0 0 0 1 25 0)
+	      initiallyInvisible: true
+	      model: filterPatternHolder
+	      immediateAccept: true
+	      acceptOnLeave: false
+	      acceptOnReturn: false
+	      acceptOnTab: false
+	      acceptOnPointerLeave: false
+	      emptyFieldReplacementText: 'Search Filter...'
+	      postBuildCallback: postBuildFilterView:
+	    )
+	   (DataSetSpec
+	      name: 'List'
+	      layout: (LayoutFrame 0 0 0 0 0 1 0 1)
+	      model: selectionHolder
+	      menu: menuHolderWithShowFilter
+	      hasHorizontalScrollBar: true
+	      hasVerticalScrollBar: true
+	      dataList: listHolder
+	      useIndex: false
+	      doubleClickSelector: selectionDoubleclicked
+	      columnHolder: listColumns
+	      showLabels: false
+	      multipleSelectOk: true
+	      postBuildCallback: postBuildListView:
+	      properties:
+	     (PropertyListDictionary
+		startDragSelector: nil
+		dropObjectSelector: dragObjects:
+		canDropSelector: canDrop:
+		dropSelector: dropObjects:
+	      )
+	    )
+	   )
+
+	)
       )
 ! !
 
@@ -198,100 +198,100 @@
 
     ^#(
       (DataSetColumnSpec
-         label: 'Removed'
-         id: 'removed'
-         labelButtonType: Button
-         width: 20
-         minWidth: 20
-         editorType: CheckToggle
-         rendererType: CheckToggle
-         model: notRemoved
-         menuFromApplication: false
-         printSelector: notRemoved
-         isResizeable: false
-         showRowSeparator: false
-         showSelectionHighLighted: false
-         showColSeparator: false
+	 label: 'Removed'
+	 id: 'removed'
+	 labelButtonType: Button
+	 width: 20
+	 minWidth: 20
+	 editorType: CheckToggle
+	 rendererType: CheckToggle
+	 model: notRemoved
+	 menuFromApplication: false
+	 printSelector: notRemoved
+	 isResizeable: false
+	 showRowSeparator: false
+	 showSelectionHighLighted: false
+	 showColSeparator: false
        )
       (DataSetColumnSpec
-         label: 'Delta'
-         id: 'delta'
-         labelButtonType: Button
-         width: 20
-         minWidth: 20
-         menuFromApplication: false
-         printSelector: iconDelta
-         canSelect: false
-         isResizeable: false
-         showRowSeparator: false
-         showSelectionHighLighted: false
-         showColSeparator: false
+	 label: 'Delta'
+	 id: 'delta'
+	 labelButtonType: Button
+	 width: 20
+	 minWidth: 20
+	 menuFromApplication: false
+	 printSelector: iconDelta
+	 canSelect: false
+	 isResizeable: false
+	 showRowSeparator: false
+	 showSelectionHighLighted: false
+	 showColSeparator: false
        )
       (DataSetColumnSpec
-         label: 'Change'
-         id: change
-         labelAlignment: left
-         labelButtonType: Button
-         menuFromApplication: false
-         printSelector: label
-         canSelect: false
-         showRowSeparator: false
-         showColSeparator: false
+	 label: 'Change'
+	 id: change
+	 labelAlignment: left
+	 labelButtonType: Button
+	 menuFromApplication: false
+	 printSelector: label
+	 canSelect: false
+	 showRowSeparator: false
+	 showColSeparator: false
        )
       (DataSetColumnSpec
-         label: 'Class'
-         id: 'className'
-         labelAlignment: left
-         activeHelpKey: ''
-         activeHelpKeyForLabel: ''
-         labelButtonType: Button
-         usePreferredWidth: true
-         model: className
-         menuFromApplication: false
-         canSelect: false
-         showRowSeparator: false
-         showColSeparator: false
+	 label: 'Class'
+	 id: 'className'
+	 labelAlignment: left
+	 activeHelpKey: ''
+	 activeHelpKeyForLabel: ''
+	 labelButtonType: Button
+	 usePreferredWidth: true
+	 model: className
+	 menuFromApplication: false
+	 canSelect: false
+	 showRowSeparator: false
+	 showColSeparator: false
        )
       (DataSetColumnSpec
-         label: 'Selector'
-         id: 'selector'
-         labelAlignment: left
-         activeHelpKey: ''
-         activeHelpKeyForLabel: ''
-         labelButtonType: Button
-         usePreferredWidth: true
-         model: selector
-         menuFromApplication: false
-         canSelect: false
-         showRowSeparator: false
-         showColSeparator: false
+	 label: 'Selector'
+	 id: 'selector'
+	 labelAlignment: left
+	 activeHelpKey: ''
+	 activeHelpKeyForLabel: ''
+	 labelButtonType: Button
+	 usePreferredWidth: true
+	 model: selector
+	 menuFromApplication: false
+	 canSelect: false
+	 showRowSeparator: false
+	 showColSeparator: false
        )
       (DataSetColumnSpec
-         label: 'Category'
-         id: category
-         labelAlignment: left
-         labelButtonType: Button
-         usePreferredWidth: true
-         model: category
-         menuFromApplication: false
-         canSelect: false
-         showRowSeparator: false
-         showColSeparator: false
+	 label: 'Category'
+	 id: category
+	 labelAlignment: left
+	 labelButtonType: Button
+	 usePreferredWidth: true
+	 model: category
+	 menuFromApplication: false
+	 canSelect: false
+	 showRowSeparator: false
+	 showColSeparator: false
        )
       (DataSetColumnSpec
-         label: 'Time Stamp'
-         id: timeStamp
-         labelAlignment: left
-         labelButtonType: Button
-         usePreferredWidth: true
-         model: timeStamp
-         menuFromApplication: false
-         canSelect: false
-         showRowSeparator: false
-         showColSeparator: false
+	 label: 'Time Stamp'
+	 id: timeStamp
+	 labelAlignment: left
+	 labelButtonType: Button
+	 usePreferredWidth: true
+	 model: timeStamp
+	 menuFromApplication: false
+	 canSelect: false
+	 showRowSeparator: false
+	 showColSeparator: false
        )
       )
-    
+
 ! !
 
 !ChangeList class methodsFor:'menu specs'!
@@ -311,108 +311,108 @@
 
     <resource: #menu>
 
-    ^ 
+    ^
      #(Menu
-        (
-         (MenuItem
-            enabled: hasChangeSelectedAndNotRemoved
-            label: 'Apply'
-            itemValue: listMenuApply
-            translateLabel: true
-            isVisible: allowAcceptHolder
-            shortcutKey: Accept
-          )
-         (MenuItem
-            label: 'Apply all'
-            itemValue: listMenuApplyAll
-            translateLabel: true
-            isVisible: allowAcceptHolder
-          )
-         (MenuItem
-            enabled: hasSingleChangeSelectedAndCanBrowse
-            label: 'Browse'
-            itemValue: listMenuBrowse
-            translateLabel: true
-          )
-         (MenuItem
-            label: '-'
-          )
-         (MenuItem
-            label: 'Delete'
-            itemValue: listMenuDeleteSelection
-            nameKey: Delete
-            translateLabel: true
-            isVisible: allowRemoveHolder
-            shortcutKey: Delete
-          )
-         (MenuItem
-            label: '-'
-            isVisible: allowRemoveHolder
-          )
-         (MenuItem
-            label: 'Select...'
-            translateLabel: true
-            submenu: 
-           (Menu
-              (
-               (MenuItem
-                  label: 'Select same'
-                  itemValue: listMenuSelectSame
-                  translateLabel: true
-                )
-               (MenuItem
-                  label: 'Select additions (new classes/methods)'
-                  itemValue: listMenuSelectAdditions
-                  translateLabel: true
-                )
-               (MenuItem
-                  label: 'Select removals'
-                  itemValue: listMenuSelectRemovals
-                  translateLabel: true
-                )
-               (MenuItem
-                  label: '-'
-                )
-               (MenuItem
-                  label: 'Select all'
-                  itemValue: listMenuSelectAll
-                  translateLabel: true
-                )
-               (MenuItem
-                  label: 'Select none'
-                  itemValue: listMenuSelectNone
-                  translateLabel: true
-                )
-               (MenuItem
-                  label: '-'
-                )
-               (MenuItem
-                  label: 'Select using block'
-                  itemValue: listMenuSelectUsingBlock
-                  translateLabel: true
-                )
-               )
-              nil
-              nil
-            )
-          )
-         (MenuItem
-            label: '-'
-          )
-         (MenuItem
-            label: 'Show Deleted'
-            translateLabel: true
-            isVisible: allowRemoveHolder
-            indication: showRemovedHolder
-          )
-         (MenuItem
-            label: 'Inspect change'
-            itemValue: listMenuInspect
-            translateLabel: true
-          )
-         )
-        nil
-        nil
+	(
+	 (MenuItem
+	    enabled: hasChangeSelectedAndNotRemoved
+	    label: 'Apply'
+	    itemValue: listMenuApply
+	    translateLabel: true
+	    isVisible: allowAcceptHolder
+	    shortcutKey: Accept
+	  )
+	 (MenuItem
+	    label: 'Apply all'
+	    itemValue: listMenuApplyAll
+	    translateLabel: true
+	    isVisible: allowAcceptHolder
+	  )
+	 (MenuItem
+	    enabled: hasSingleChangeSelectedAndCanBrowse
+	    label: 'Browse'
+	    itemValue: listMenuBrowse
+	    translateLabel: true
+	  )
+	 (MenuItem
+	    label: '-'
+	  )
+	 (MenuItem
+	    label: 'Delete'
+	    itemValue: listMenuDeleteSelection
+	    nameKey: Delete
+	    translateLabel: true
+	    isVisible: allowRemoveHolder
+	    shortcutKey: Delete
+	  )
+	 (MenuItem
+	    label: '-'
+	    isVisible: allowRemoveHolder
+	  )
+	 (MenuItem
+	    label: 'Select...'
+	    translateLabel: true
+	    submenu:
+	   (Menu
+	      (
+	       (MenuItem
+		  label: 'Select same'
+		  itemValue: listMenuSelectSame
+		  translateLabel: true
+		)
+	       (MenuItem
+		  label: 'Select additions (new classes/methods)'
+		  itemValue: listMenuSelectAdditions
+		  translateLabel: true
+		)
+	       (MenuItem
+		  label: 'Select removals'
+		  itemValue: listMenuSelectRemovals
+		  translateLabel: true
+		)
+	       (MenuItem
+		  label: '-'
+		)
+	       (MenuItem
+		  label: 'Select all'
+		  itemValue: listMenuSelectAll
+		  translateLabel: true
+		)
+	       (MenuItem
+		  label: 'Select none'
+		  itemValue: listMenuSelectNone
+		  translateLabel: true
+		)
+	       (MenuItem
+		  label: '-'
+		)
+	       (MenuItem
+		  label: 'Select using block'
+		  itemValue: listMenuSelectUsingBlock
+		  translateLabel: true
+		)
+	       )
+	      nil
+	      nil
+	    )
+	  )
+	 (MenuItem
+	    label: '-'
+	  )
+	 (MenuItem
+	    label: 'Show Deleted'
+	    translateLabel: true
+	    isVisible: allowRemoveHolder
+	    indication: showRemovedHolder
+	  )
+	 (MenuItem
+	    label: 'Inspect change'
+	    itemValue: listMenuInspect
+	    translateLabel: true
+	  )
+	 )
+	nil
+	nil
       )
 ! !
 
@@ -430,16 +430,16 @@
      (if this app is embedded in a subCanvas)."
 
     ^ #(
-        #allowAcceptHolder
-        #allowRemoveHolder
-        #inGeneratorHolder
-        #menuHolder
-        #outGeneratorHolder
-        #selectionHolder
-        #showFilterHolder
-        #showRemovedHolder
-        #showSameHolder
-        #showTimestampHolder
+	#allowAcceptHolder
+	#allowRemoveHolder
+	#inGeneratorHolder
+	#menuHolder
+	#outGeneratorHolder
+	#selectionHolder
+	#showFilterHolder
+	#showRemovedHolder
+	#showSameHolder
+	#showTimestampHolder
       ).
 
 ! !
@@ -470,6 +470,12 @@
     "Created: / 05-12-2009 / 14:28:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+applyAction:aBlock
+    applyAction := aBlock.
+
+    "Modified (format): / 10-09-2012 / 14:15:30 / cg"
+!
+
 list
     ^ listHolder value
 
@@ -479,7 +485,7 @@
 
 scrollToBottom:aBoolean
     "If set to true, list will automaticallu scroll to bottom
-     ehen the list is updated and clears this flag. 
+     ehen the list is updated and clears this flag.
 
      This is required as the list is updated asynchronously"
 
@@ -540,7 +546,7 @@
     "return/create the valueHolder 'acceptEnabledHolder'"
 
     allowAcceptHolder isNil ifTrue:[
-        allowAcceptHolder := ValueHolder with:nil "defaultValue here".
+	allowAcceptHolder := ValueHolder with:nil "defaultValue here".
     ].
     ^ allowAcceptHolder
 
@@ -555,35 +561,35 @@
 
 allowRemoveHolder
     "return/create the 'allowRemoveHolder' value holder (automatically generated)"
-    
+
     allowRemoveHolder isNil ifTrue:[
-        allowRemoveHolder := ValueHolder with:true.
-        allowRemoveHolder addDependent:self.
+	allowRemoveHolder := ValueHolder with:true.
+	allowRemoveHolder addDependent:self.
     ].
     ^ allowRemoveHolder
 
     "Modified (comment): / 24-01-2012 / 19:44:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
-allowRemoveHolder:something 
+allowRemoveHolder:something
     "set the 'showRemovedHolder' value holder (automatically generated)"
-    
+
     |oldValue newValue|
 
     allowRemoveHolder notNil ifTrue:[
-        oldValue := allowRemoveHolder value.
-        allowRemoveHolder removeDependent:self.
+	oldValue := allowRemoveHolder value.
+	allowRemoveHolder removeDependent:self.
     ].
     allowRemoveHolder := something.
     allowRemoveHolder notNil ifTrue:[
-        allowRemoveHolder addDependent:self.
+	allowRemoveHolder addDependent:self.
     ].
     newValue := allowRemoveHolder value.
     oldValue ~~ newValue ifTrue:[
-        self 
-            update:#value
-            with:newValue
-            from:allowRemoveHolder.
+	self
+	    update:#value
+	    with:newValue
+	    from:allowRemoveHolder.
     ].
 !
 
@@ -591,9 +597,9 @@
 
     |holder|
     (holder := builder bindingAt:#listColumns) isNil ifTrue:[
-        builder aspectAt:#listColumns put:(holder := List new).
-        self listColumnShow: #delta.
-        self listColumnShow: #change.
+	builder aspectAt:#listColumns put:(holder := List new).
+	self listColumnShow: #delta.
+	self listColumnShow: #change.
     ].
     ^ holder
 
@@ -602,7 +608,7 @@
 
 listHolder
     listHolder isNil ifTrue:[
-        listHolder := ValueHolder new.
+	listHolder := ValueHolder new.
     ].
     ^ listHolder
 !
@@ -611,8 +617,8 @@
     "return/create the 'showRemovedHolder' value holder (automatically generated)"
 
     showRemovedHolder isNil ifTrue:[
-        showRemovedHolder := ValueHolder with: true.
-        showRemovedHolder addDependent: self.
+	showRemovedHolder := ValueHolder with: true.
+	showRemovedHolder addDependent: self.
     ].
     ^ showRemovedHolder
 !
@@ -623,16 +629,16 @@
     |oldValue newValue|
 
     showRemovedHolder notNil ifTrue:[
-        oldValue := showRemovedHolder value.
-        showRemovedHolder removeDependent:self.
+	oldValue := showRemovedHolder value.
+	showRemovedHolder removeDependent:self.
     ].
     showRemovedHolder := something.
     showRemovedHolder notNil ifTrue:[
-        showRemovedHolder addDependent:self.
+	showRemovedHolder addDependent:self.
     ].
     newValue := showRemovedHolder value.
     oldValue ~~ newValue ifTrue:[
-        self update:#value with:newValue from:showRemovedHolder.
+	self update:#value with:newValue from:showRemovedHolder.
     ].
 !
 
@@ -640,8 +646,8 @@
     "return/create the 'showSameHolder' value holder (automatically generated)"
 
     showSameHolder isNil ifTrue:[
-        showSameHolder := ValueHolder with: true.
-        showSameHolder addDependent:self.
+	showSameHolder := ValueHolder with: true.
+	showSameHolder addDependent:self.
     ].
     ^ showSameHolder
 
@@ -654,16 +660,16 @@
     |oldValue newValue|
 
     showSameHolder notNil ifTrue:[
-        oldValue := showSameHolder value.
-        showSameHolder removeDependent:self.
+	oldValue := showSameHolder value.
+	showSameHolder removeDependent:self.
     ].
     showSameHolder := something.
     showSameHolder notNil ifTrue:[
-        showSameHolder addDependent:self.
+	showSameHolder addDependent:self.
     ].
     newValue := showSameHolder value.
     oldValue ~~ newValue ifTrue:[
-        self update:#value with:newValue from:showSameHolder.
+	self update:#value with:newValue from:showSameHolder.
     ].
 !
 
@@ -671,8 +677,8 @@
     "return/create the 'showTimestampHolder' value holder (automatically generated)"
 
     showTimestampHolder isNil ifTrue:[
-        showTimestampHolder := ValueHolder new.
-        showTimestampHolder addDependent:self.
+	showTimestampHolder := ValueHolder new.
+	showTimestampHolder addDependent:self.
     ].
     ^ showTimestampHolder
 !
@@ -683,16 +689,16 @@
     |oldValue newValue|
 
     showTimestampHolder notNil ifTrue:[
-        oldValue := showTimestampHolder value.
-        showTimestampHolder removeDependent:self.
+	oldValue := showTimestampHolder value.
+	showTimestampHolder removeDependent:self.
     ].
     showTimestampHolder := something.
     showTimestampHolder notNil ifTrue:[
-        showTimestampHolder addDependent:self.
+	showTimestampHolder addDependent:self.
     ].
     newValue := showTimestampHolder value.
     oldValue ~~ newValue ifTrue:[
-        self update:#value with:newValue from:showTimestampHolder.
+	self update:#value with:newValue from:showTimestampHolder.
     ].
 ! !
 
@@ -701,27 +707,27 @@
 update: aspect with: param from: sender
 
     sender == allowRemoveHolder ifTrue:[
-        self listColumn: #removed visible: allowRemoveHolder value.
-        ^self.
+	self listColumn: #removed visible: allowRemoveHolder value.
+	^self.
     ].
 
     sender == showTimestampHolder ifTrue:[
-        self listColumn: #timeStamp visible: showTimestampHolder value.
-        ^self.
+	self listColumn: #timeStamp visible: showTimestampHolder value.
+	^self.
     ].
 
 
     sender == selectionHolder ifTrue:[
-        self selectionChanged.
-        ^self
+	self selectionChanged.
+	^self
     ].
     sender == showSameHolder ifTrue:[
-        self updateList.
-        ^self.
+	self updateList.
+	^self.
     ].
     sender == showRemovedHolder ifTrue:[
-        self updateList.
-        ^self.
+	self updateList.
+	^self.
     ].
 
     ^super update: aspect with: param from: sender
@@ -736,7 +742,7 @@
 canDrop: aDropContext
 
     ^(self inGeneratorHolder value isKindOf: Iterator) not
-        and:[aDropContext dropObjects allSatisfy:[:obj|(obj theObject isKindOf: Change)]].
+	and:[aDropContext dropObjects allSatisfy:[:obj|(obj theObject isKindOf: Change)]].
 
     "Created: / 01-08-2012 / 17:53:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
@@ -764,17 +770,21 @@
 
 !ChangeList methodsFor:'event processing'!
 
+
+
+
+
 handlesKeyPress:key inView:aView
-    ^(key == #Accept or:[ key == #Ctrls]) 
-        and:[ listView scrolledView == aView ]
+    ^(key == #Accept or:[ key == #Ctrls])
+	and:[ listView scrolledView == aView ]
 
     "Created: / 08-02-2012 / 14:43:11 / cg"
 !
 
 keyPress:key x:x y:y view:aView
     (key == #Accept or:[ key == #Ctrls]) ifTrue:[
-        self listMenuApply.
-        ^ self
+	self listMenuApply.
+	^ self
     ].
 
     "Created: / 08-02-2012 / 14:42:18 / cg"
@@ -786,13 +796,13 @@
     "Superclass Tools::BrowserList says that I am responsible to implement this method"
 
     ^Iterator on:
-        [:whatToDo|
-        selectionHolder value do:
-            [:changeListItem| | change |
-            changeListItem notNil ifTrue:[
-                change := changeListItem change.
-                change isCompositeChange ifTrue:
-                    [change changes do: whatToDo]]]]
+	[:whatToDo|
+	selectionHolder value do:
+	    [:changeListItem| | change |
+	    changeListItem notNil ifTrue:[
+		change := changeListItem change.
+		change isCompositeChange ifTrue:
+		    [change changes do: whatToDo]]]]
 
     "Modified: / 24-07-2009 / 23:00:41 / Jan Vrany <vranyj1@fel.cvut.cz>"
     "Modified: / 25-07-2012 / 15:39:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
@@ -815,6 +825,9 @@
     super initialize.
     menuHolder := [self menuFor: #listMenu].
     scrollToBottom := false.
+    applyAction isNil ifTrue:[
+	applyAction := [:change | change apply ].
+    ].
 
     "Created: / 29-10-2010 / 12:50:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
@@ -826,19 +839,19 @@
 
     self acceptEnabled ifFalse:[^self].
 
-    (sel := self selectionHolder value) do:[:e|e change apply].
+    (sel := self selectionHolder value) do:[:e| applyAction value:e change].
     sel size == 1 ifTrue:[
-        list := self listHolder value. 
-        idx := list indexOf:(sel first). 
-        idx < list size ifTrue:[
-            self selectionHolder value:(Array with:(list at:idx+1))
-        ] ifFalse:[
-            self selectionHolder value:#()
-        ].
+	list := self listHolder value.
+	idx := list indexOf:(sel first).
+	idx < list size ifTrue:[
+	    self selectionHolder value:(Array with:(list at:idx+1))
+	] ifFalse:[
+	    self selectionHolder value:#()
+	].
     ].
 
     "Modified: / 24-10-2009 / 22:02:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 08-02-2012 / 14:53:25 / cg"
+    "Modified: / 10-09-2012 / 13:57:46 / cg"
 !
 
 listMenuApplyAll
@@ -846,15 +859,16 @@
     self acceptEnabled ifFalse:[^self].
 
     self selection value do:
-        [:e|e removed ifFalse:[e change apply]].
+	[:e|e removed ifFalse:[applyAction value:e change]].
 
     "Created: / 05-12-2009 / 14:53:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 10-09-2012 / 13:57:58 / cg"
 !
 
 listMenuBrowse
 
     self listMenuBrowseChanges:
-        ((self selectionHolder value ? #()) collect:[:e|e change])
+	((self selectionHolder value ? #()) collect:[:e|e change])
 
     "Modified: / 24-01-2012 / 22:00:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
@@ -866,25 +880,25 @@
     methods := Set new.
     methodsOnly := true.
     changes do:
-        [:each|
-        each  isClassChange ifTrue:
-            [each  changeClass ifNotNil:
-                [classes add: each  changeClass.
-                each isMethodCodeChange 
-                    ifTrue:
-                        [each changeMethod ifNotNil:
-                            [methods add:each changeMethod]]
-                    ifFalse:
-                        [methodsOnly := false]]]].
-    methodsOnly 
-        ifTrue:
-            [methods size = 1 
-                ifTrue:[Smalltalk browserClass openInMethod: methods anyOne]
-                ifFalse:[Smalltalk browserClass browseMethods: methods asArray title: 'Selected methods from changeset' sort: true]]
-        ifFalse:
-            [classes size = 1
-                ifTrue:[Smalltalk browserClass browseClass: classes anyOne]
-                ifFalse:[Smalltalk browserClass browseClasses: classes]]
+	[:each|
+	each  isClassChange ifTrue:
+	    [each  changeClass ifNotNil:
+		[classes add: each  changeClass.
+		each isMethodCodeChange
+		    ifTrue:
+			[each changeMethod ifNotNil:
+			    [methods add:each changeMethod]]
+		    ifFalse:
+			[methodsOnly := false]]]].
+    methodsOnly
+	ifTrue:
+	    [methods size = 1
+		ifTrue:[Smalltalk browserClass openInMethod: methods anyOne]
+		ifFalse:[Smalltalk browserClass browseMethods: methods asArray title: 'Selected methods from changeset' sort: true]]
+	ifFalse:
+	    [classes size = 1
+		ifTrue:[Smalltalk browserClass browseClass: classes anyOne]
+		ifFalse:[Smalltalk browserClass browseClasses: classes]]
 
     "Modified: / 24-10-2009 / 22:02:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
     "Created: / 24-01-2012 / 22:00:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
@@ -893,7 +907,7 @@
 listMenuDeleteSelection
 
     self selectionHolder value do:
-        [:each|each removed: true].
+	[:each|each removed: true].
     self updateList
 !
 
@@ -903,8 +917,8 @@
 
     selection := self selectionHolder value collect:[:e|e change].
     selection size = 1
-        ifTrue:[selection anyOne inspect]
-        ifFalse:[selection inspect].
+	ifTrue:[selection anyOne inspect]
+	ifFalse:[selection inspect].
 
     "Modified: / 24-10-2009 / 22:02:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
@@ -919,11 +933,11 @@
     self listMenuSelectAllSuchThat:[:change|true]
 !
 
-listMenuSelectAllSuchThat:conditionBlock 
+listMenuSelectAllSuchThat:conditionBlock
     |newSelection|
 
-    newSelection := self listHolder value 
-                select:[:entry | conditionBlock value:entry change ].
+    newSelection := self listHolder value
+		select:[:entry | conditionBlock value:entry change ].
     self selectionHolder value:newSelection
 !
 
@@ -952,23 +966,23 @@
      "/ change is an instance of Change
      "/ change will be selected if and only if block returns true
 
-    
+
      true"/always select the change
 ]
 '.
 
     LastSelectionConditionString isNil ifTrue:[
-        LastSelectionConditionString := template.
+	LastSelectionConditionString := template.
     ].
 
 
     textHolder := ValueHolder new.
     dialog := Dialog
-                 forRequestText:(resources string:'Enter condition for selection')
-                 lines:20
-                 columns:70
-                 initialAnswer:LastSelectionConditionString
-                 model:textHolder.
+		 forRequestText:(resources string:'Enter condition for selection')
+		 lines:20
+		 columns:70
+		 initialAnswer:LastSelectionConditionString
+		 model:textHolder.
     dialog addButton:(Button label:'Template' action:[textHolder value:template. textHolder changed:#value.]).
     dialog open.
     dialog accepted ifFalse:[^ self].
@@ -978,8 +992,8 @@
 
     conditionBlock := Parser evaluate:conditionBlockString.
     conditionBlock isBlock ifFalse:[
-        self error:'Bad selection block (syntax error?)'.
-        ^ self
+	self error:'Bad selection block (syntax error?)'.
+	^ self
     ].
 
     self listMenuSelectAllSuchThat: conditionBlock
@@ -988,7 +1002,7 @@
 listMenuUndeleteSelection
 
     self selectionHolder value do:
-        [:each|each removed: false].
+	[:each|each removed: false].
     self updateList
 ! !
 
@@ -1010,9 +1024,9 @@
 
 listColumn: columnId visible: visible
     visible ifTrue:[
-        self listColumnShow: columnId 
+	self listColumnShow: columnId
     ] ifFalse:[
-        self listColumnHide: columnId
+	self listColumnHide: columnId
     ]
 
     "Created: / 26-07-2012 / 18:20:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
@@ -1020,13 +1034,13 @@
 
 listColumnHide: columnId
     self listColumns do:[:spec|
-        spec id = columnId ifTrue:[
-            self listColumns remove: spec.
-            listView notNil ifTrue:[
-                listView invalidate.
-            ].
-            ^self
-        ].
+	spec id = columnId ifTrue:[
+	    self listColumns remove: spec.
+	    listView notNil ifTrue:[
+		listView invalidate.
+	    ].
+	    ^self
+	].
     ]
 
     "Created: / 26-07-2012 / 18:19:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
@@ -1038,33 +1052,33 @@
     columns := self listColumns.
 
     columns do:[:spec|
-        spec id = columnId ifTrue:[
-            ^self.
-        ]
+	spec id = columnId ifTrue:[
+	    ^self.
+	]
     ].
 
     self class listColumnSpec do:[:specArray|
-        | spec |
+	| spec |
 
-        spec := specArray decodeAsLiteralArray.
-        spec id = columnId ifTrue:[
-            columnId == #removed ifTrue:[
-                columns addFirst: spec.
-            ] ifFalse:[
-                columns add: spec.
-            ].
-            listView notNil ifTrue:[
-                listView invalidate.
-            ].
-            ^self.
-        ]
+	spec := specArray decodeAsLiteralArray.
+	spec id = columnId ifTrue:[
+	    columnId == #removed ifTrue:[
+		columns addFirst: spec.
+	    ] ifFalse:[
+		columns add: spec.
+	    ].
+	    listView notNil ifTrue:[
+		listView invalidate.
+	    ].
+	    ^self.
+	]
 
     ].
 
     "Created: / 26-07-2012 / 17:56:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
-listEntryFor:chg 
+listEntryFor:chg
     ^ListEntry change:chg application: self
 
     "Modified: / 05-12-2009 / 14:39:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
@@ -1092,38 +1106,38 @@
 
     inGenerator := self inGeneratorHolder value.
     listView notNil ifTrue:[
-        ((listView isKindOf: ScrollableView) not or:[listView scrolledView notNil]) ifTrue:[
-            firstLineShown := listView firstLineShown
-        ].
+	((listView isKindOf: ScrollableView) not or:[listView scrolledView notNil]) ifTrue:[
+	    firstLineShown := listView firstLineShown
+	].
     ].
     oldSel := self selection.
 
     changeset := inGenerator isNil ifTrue:[ #() ] ifFalse:[ inGenerator ].
-    newList := changeset 
-                select:
-                    [:chg | 
-                    (self showRemovedHolder value or:[ chg removed not ])
-                        and:[self showSameHolder value or:[chg delta ~~ #=]]
-                    ].
+    newList := changeset
+		select:
+		    [:chg |
+		    (self showRemovedHolder value or:[ chg removed not ])
+			and:[self showSameHolder value or:[chg delta ~~ #=]]
+		    ].
     newList := self filterList: newList.
     newList := newList collect:[:chg | self listEntryFor:chg ].
     self listHolder value ~= newList ifTrue:[
-        self listHolder value: newList.
-        ((newList size ~~ 0) and:[scrollToBottom]) ifTrue:[
-            self selection: { newList last }
-        ] ifFalse:[
-            oldSel notEmptyOrNil ifTrue:[
-                newSel := OrderedCollection new: oldSel size.
-                oldSel := oldSel reject:[:e|e isNil].
-                oldSel := oldSel collect:[:e|e change].
-                newList do:[:e|(oldSel includes:e change) ifTrue:[newSel add:e]].
-                self selection: newSel.
-            ].
-            (listView notNil and:[firstLineShown notNil]) ifTrue:[
-                listView scrollToLine: (newList size min: firstLineShown).
-            ].
-        ].
-        scrollToBottom := false.
+	self listHolder value: newList.
+	((newList size ~~ 0) and:[scrollToBottom]) ifTrue:[
+	    self selection: { newList last }
+	] ifFalse:[
+	    oldSel notEmptyOrNil ifTrue:[
+		newSel := OrderedCollection new: oldSel size.
+		oldSel := oldSel reject:[:e|e isNil].
+		oldSel := oldSel collect:[:e|e change].
+		newList do:[:e|(oldSel includes:e change) ifTrue:[newSel add:e]].
+		self selection: newSel.
+	    ].
+	    (listView notNil and:[firstLineShown notNil]) ifTrue:[
+		listView scrollToLine: (newList size min: firstLineShown).
+	    ].
+	].
+	scrollToBottom := false.
 
     ]
 
@@ -1143,7 +1157,7 @@
     | selection |
     selection := self selectionHolder value ? #().
     ^selection size > 0 and:
-        [selection allSatisfy:[:e|e removed not]].
+	[selection allSatisfy:[:e|e removed not]].
 !
 
 hasSingleChangeSelected
@@ -1155,10 +1169,10 @@
 
 
     self selectionHolder value ? #() do:
-        [:each|
-        (each change isClassChange and:
-            [each change isMethodChange not
-                or:[each change isMethodCodeChange]]) ifFalse:[^false]].
+	[:each|
+	(each change isClassChange and:
+	    [each change isMethodChange not
+		or:[each change isMethodCodeChange]]) ifFalse:[^false]].
     ^true
 !
 
@@ -1235,18 +1249,18 @@
 children
 
     children isNil ifTrue:[
-        change isCompositeChange ifTrue:[
-            children := OrderedCollection new: change changes size.
-            change changes do:[:chg|
-                ((self application showRemovedHolder value or:[ chg removed not ])
-                    and:[self application showSameHolder value or:[chg delta ~~ #=]]) 
-                        ifTrue:[
-                            children add: ((self application listEntryFor: chg) parent: self)
-                        ]
-            ].
-        ] ifFalse:[
-            children :=  #()
-        ]
+	change isCompositeChange ifTrue:[
+	    children := OrderedCollection new: change changes size.
+	    change changes do:[:chg|
+		((self application showRemovedHolder value or:[ chg removed not ])
+		    and:[self application showSameHolder value or:[chg delta ~~ #=]])
+			ifTrue:[
+			    children add: ((self application listEntryFor: chg) parent: self)
+			]
+	    ].
+	] ifFalse:[
+	    children :=  #()
+	]
     ].
     ^children
 
@@ -1286,9 +1300,9 @@
 
 iconRemoved
 
-    ^self removed 
-        ifTrue: [self application class uncheckedIcon ]
-        ifFalse:[self application class checkedIcon ]
+    ^self removed
+	ifTrue: [self application class uncheckedIcon ]
+	ifFalse:[self application class checkedIcon ]
 
     "Created: / 05-12-2009 / 14:11:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
@@ -1311,17 +1325,17 @@
      if there are just 2 lines, then merge them, otherwise add
      ... to the first line"
     (label includes: Character cr) ifTrue:[
-        | firstCR secondCR |
-        firstCR := label indexOf: Character cr.
-        firstCR ~~ label size ifTrue:[
-            secondCR := label indexOf: Character cr startingAt: firstCR + 1.
-        ].
-        secondCR isNil ifTrue:[
-            "/2 lines only
-            label := label copy at: firstCR put: Character space.
-        ] ifFalse:[
-            label := (label copyTo: firstCR - 1) , '...'
-        ].
+	| firstCR secondCR |
+	firstCR := label indexOf: Character cr.
+	firstCR ~~ label size ifTrue:[
+	    secondCR := label indexOf: Character cr startingAt: firstCR + 1.
+	].
+	secondCR isNil ifTrue:[
+	    "/2 lines only
+	    label := label copy at: firstCR put: Character space.
+	] ifFalse:[
+	    label := (label copyTo: firstCR - 1) , '...'
+	].
     ].
     self removed ifTrue:[label := label asText colorizeAllWith: Color gray].
     ^label
@@ -1377,19 +1391,19 @@
 
 !ChangeList::ListEntry methodsFor:'displaying'!
 
-displayLabel:aLabel h:lH on:aGC x:newX y:y h:h 
+displayLabel:aLabel h:lH on:aGC x:newX y:y h:h
 
     | list cx icon colW colS |
     list := self application.
     cx := x := newX.
     (list allowRemoveHolder value and:[list showRemovedHolder value]) ifTrue: [
-        (icon := self iconRemoved) notNil ifTrue:[
-            icon displayOn: aGC x: cx y: y + (h / 2) - (icon height / 2) 
-        ].
-        cx := cx + 22."experimental value - this looks good"
+	(icon := self iconRemoved) notNil ifTrue:[
+	    icon displayOn: aGC x: cx y: y + (h / 2) - (icon height / 2)
+	].
+	cx := cx + 22."experimental value - this looks good"
     ].
     (icon := self iconDelta) notNil ifTrue:[
-        icon displayOn: aGC x: cx y: y + (h / 2) - (icon height / 2) 
+	icon displayOn: aGC x: cx y: y + (h / 2) - (icon height / 2)
     ].
     cx := cx + 16."12 + 2px gap"
 
@@ -1398,7 +1412,7 @@
 "/    "Now, display additional columns..."
 "/    (list showColumn: #timestamp) ifTrue:[
 "/        cx := cx + (aLabel widthOn: aGC) + 5."px - padding"
-"/        colS := change timeOfChangeIfKnown notNil 
+"/        colS := change timeOfChangeIfKnown notNil
 "/                    ifTrue:[change timeOfChangeIfKnown printString]
 "/                    ifFalse:['???'].
 "/        [ (colW := colS widthOn: aGC) > (aGC width - cx - 5) ] whileTrue:[
@@ -1438,13 +1452,13 @@
 !ChangeList class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libtool/Tools__ChangeList.st,v 1.17 2012/07/27 23:27:04 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/Tools__ChangeList.st,v 1.19 2012/09/10 12:16:47 cg Exp $'
 !
 
 version_CVS
-    ^ '§Header: /cvs/stx/stx/libtool/Tools__ChangeList.st,v 1.17 2012/07/27 23:27:04 cg Exp §'
+    ^ '§Header: /cvs/stx/stx/libtool/Tools__ChangeList.st,v 1.19 2012/09/10 12:16:47 cg Exp §'
 !
 
 version_SVN
-    ^ '$Id: Tools__ChangeList.st 8048 2012-09-07 17:28:09Z vranyj1 $'
+    ^ '$Id: Tools__ChangeList.st 8054 2012-09-13 09:15:20Z vranyj1 $'
 ! !