Merge jv
authorJan Vrany <jan.vrany@fit.cvut.cz>
Sat, 16 Jan 2016 10:40:59 +0000
branchjv
changeset 5552 58ac0bd34b7b
parent 5551 692afe1918ed (current diff)
parent 5549 d5139642e637 (diff)
child 5562 0219152fb99f
Merge
EditTextView.st
GenericToolbarIconLibrary.st
ListView.st
SelectionInListView.st
TextCollector.st
TextView.st
--- a/.hgtags	Sat Jan 16 10:13:48 2016 +0000
+++ b/.hgtags	Sat Jan 16 10:40:59 2016 +0000
@@ -65,6 +65,7 @@
 dd4c2dace4f5f7e23959ba725936f5e459aeed4f expecco_1_7_1rc4
 dff9b289c19586cf79de5357fd6f15d49c631f06 expecco_2_7_5
 e2520b170fbb5c41cfe44c2724a7aa7a2bb5fcc3 rel2_10_8_5
+e382c1abb5f4a9414258be865da595bf10f744ee expecco_ALM_1_9_7
 e6f058434ea1899ef7e0a99f1a38c1aef6556875 rel3_6_4
 eb4576429ff066a0e588b449ea653e12c987bcdf expecco_1_7_0rc5
 eb4576429ff066a0e588b449ea653e12c987bcdf expecco_1_7_0rc8
--- a/Button.st	Sat Jan 16 10:13:48 2016 +0000
+++ b/Button.st	Sat Jan 16 10:40:59 2016 +0000
@@ -1950,7 +1950,8 @@
 
 nativeWindowType
     "return a symbol describing my native window type 
-     (may be used internally by the device as a native window creation hint)"
+     (may be used internally by the device as a native window creation hint,
+      if the device supports native windows)"
 
     self class == Button ifTrue:[
         ^ #Button
--- a/CodeView.st	Sat Jan 16 10:13:48 2016 +0000
+++ b/CodeView.st	Sat Jan 16 10:40:59 2016 +0000
@@ -11,6 +11,8 @@
 "
 "{ Package: 'stx:libwidg' }"
 
+"{ NameSpace: Smalltalk }"
+
 Workspace subclass:#CodeView
 	instanceVariableNames:'explainAction formatAction pointerOverWordAction'
 	classVariableNames:''
@@ -78,7 +80,7 @@
 !CodeView class methodsFor:'others'!
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libwidg/CodeView.st,v 1.66 2014-01-23 16:11:20 stefan Exp $'
+    ^ '$Header$'
 ! !
 
 !CodeView methodsFor:'accessing'!
@@ -111,6 +113,13 @@
 !CodeView methodsFor:'cursor handling'!
 
 cursorReturn
+    self cursorReturn:false
+!
+
+cursorReturn:withPossibleAutoindent
+    "added an argument to disable autoindent, because this method is called from other
+     places as well..."
+     
     |wasOn line newCol |
 
     "/ make Jan's enhancement dependent on
@@ -122,9 +131,10 @@
     "/ 
     "/ and saved/restored with the userPreferences.
 
-    (autoIndent "self st80EditMode" not
+    (withPossibleAutoindent not
+    or:[ autoIndent not
     or:[ cursorLine == 1
-    or:[ self sensor shiftDown]]) ifTrue:[
+    or:[ self sensor shiftDown]]]) ifTrue:[
         super cursorReturn.
         ^ self.
     ].
@@ -334,6 +344,6 @@
 !CodeView class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libwidg/CodeView.st,v 1.66 2014-01-23 16:11:20 stefan Exp $'
+    ^ '$Header$'
 ! !
 
--- a/EditField.st	Sat Jan 16 10:13:48 2016 +0000
+++ b/EditField.st	Sat Jan 16 10:40:59 2016 +0000
@@ -2071,7 +2071,8 @@
 
 nativeWindowType
     "return a symbol describing my native window type 
-     (may be used internally by the device as a native window creation hint)"
+     (may be used internally by the device as a native window creation hint,
+      if the device supports native windows)"
 
     ^ #EditField
 ! !
--- a/EditTextView.st	Sat Jan 16 10:13:48 2016 +0000
+++ b/EditTextView.st	Sat Jan 16 10:40:59 2016 +0000
@@ -1889,6 +1889,12 @@
     self basicCursorReturn
 !
 
+cursorReturn:withPossibleAutoIndent
+    "move cursor to start of next line; scroll if at end of visible text"
+
+    self basicCursorReturn
+!
+
 cursorRight
     "move cursor to right"
 
@@ -1897,8 +1903,8 @@
     self st80EditMode ifTrue:[
         l := (self listAt:cursorLine).
         cursorCol >= (l size + 1) ifTrue:[
-            cursorLine < list size ifTrue:[
-                self cursorReturn.
+            cursorLine <= list size ifTrue:[
+                self cursorReturn:false. "/ no autoindent
             ].
             ^ self
         ]
@@ -5319,7 +5325,7 @@
             self cursorReturn
         ] ifFalse:[
             self isInInsertMode ifFalse:[
-                self cursorReturn.
+                self cursorReturn:true.
                 autoIndent == true ifTrue:[
                     i := self leftIndentForLine:(cursorLine + 1).
                     (self listAt:cursorLine) isEmptyOrNil ifTrue:[
@@ -6345,6 +6351,7 @@
                     ('Goto Line...'     gotoLine       GotoLine )
                     ('-'                                        )
                     ('Tools'            tools                   )
+                    ('Font...'           changeFont             )
                     ('Insert Unicode...' insertUnicode )
             ).
     CharacterSetView notNil ifTrue:[
@@ -6378,19 +6385,21 @@
                     ('-'                                        )
                     ('Insert File as String Literal...' insertFileAsStringLiteral  )
                     ('Paste as String Literal'          pasteAsStringLiteral       )
-                    ('-'                                        )
                 ).
 "/    CharacterSetView notNil ifTrue:[
 "/        miscItems := miscItems ,
 "/                    #(
+"/                        ('-'                                        )
 "/                        ('Special Characters...'    specialCharacters  OpenSpecialCharacterWindow )
+"/                        ('Font...'                  changeFont              )
 "/                    ).
-"/    ].
-    miscItems := miscItems ,
-                #(
-                    ('Font...'                  changeFont              )
-"/                    ('Encoding...'      changeEncoding          )
-                ).
+"/    ] ifFalse:[
+"/        miscItems := miscItems ,
+"/                #(
+"/                    ('Font...'                  changeFont              )
+"/"/                    ('Encoding...'      changeEncoding          )
+"/                ).
+"/    ]. 
 
     translateItems := #(
                     ('English -> German'      (babelFishTranslate: 'en_de')   )
--- a/FontPanel.st	Sat Jan 16 10:13:48 2016 +0000
+++ b/FontPanel.st	Sat Jan 16 10:40:59 2016 +0000
@@ -19,7 +19,9 @@
 		currentStyle currentFaceAndStyle currentSize sizeUnit
 		currentEncoding selectedFont nameLabel encodingFilter
 		encodingLabel filter combinedFilter encoding sizeLabelHolder
-		pixelPointSwitch xftFontsOnlyHolder'
+		pixelPointSwitch xftFontsOnlyHolder changeFontInAllViewsHolder
+		withChangeFontInAllViewsCheckBox
+		withChangeFontInAllViewsCheckBoxVisibleHolder'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'Views-DialogBoxes'
@@ -45,12 +47,12 @@
 
 documentation
 "
-    this class implements a font chooser.
+    this class implements the font chooser.
 
     Notice: 
         this is a very old dialog; 
-        it was written before the UI-framework was available and is completely
-        setup manually (initialize method).
+        it was written before the UI-framework was available and the UI is completely
+        programmed manually (see initialize method).
         Therefore, it desperately asks to be rewritten using the UIPainter...
 
     [author:]
@@ -290,15 +292,10 @@
 !FontPanel class methodsFor:'startup'!
 
 fontFromUser
-    "open a fontPanel and return the selected font, or nil
-     if abort is pressed"
+    "open a fontPanel and return the selected font, 
+     or nil if abort is pressed"
 
-    ^ self 
-        fontFromUserInitial:nil
-        title:nil
-        filter:nil
-        encoding:nil
-        enabled:true
+    ^ self new fontFromUser
 
     "
      FontPanel fontFromUser
@@ -311,12 +308,7 @@
     "open a fontPanel showing aFont initially,
      and return the selected font, or nil if abort is pressed"
 
-    ^ self 
-        fontFromUserInitial:aFont 
-        title:nil
-        filter:nil
-        encoding:nil
-        enabled:true
+    ^ self new fontFromUserInitial:aFont
 
     "
      FontPanel fontFromUserInitial:(Font family:'courier' size:12)
@@ -328,12 +320,8 @@
     "open a fontPanel with title and return the selected font, 
      or nil if abort is pressed"
 
-    ^ self 
-        fontFromUserInitial:aFont 
-        title:someTitle 
-        filter:nil
-        encoding:nil
-        enabled:true
+    ^ self new 
+        fontFromUserInitial:aFont title:someTitle
 
     "
      FontPanel fontFromUserInitial:(Font family:'courier' size:12) title:'select some font'
@@ -347,12 +335,9 @@
     "open a fontPanel with title and font-filter
      and return the selected font, or nil if abort is pressed"
 
-    ^ self 
-        fontFromUserInitial:initialFont 
-        title:someTitle 
-        filter:aFilterBlock 
-        encoding:nil
-        enabled:true
+    ^ self new 
+        fontFromUserInitial:initialFont title:someTitle 
+        filter:aFilterBlock
 
     "
      FontPanel fontFromUserInitial:(Font family:'courier' size:12) title:'select some font'
@@ -366,12 +351,9 @@
     "open a fontPanel with title and font-filter
      and return the selected font, or nil if abort is pressed"
 
-    ^ self
-        fontFromUserInitial:initialFont 
-        title:someTitle 
-        filter:aFilterBlock 
-        encoding:encoding 
-        enabled:true
+    ^ self new 
+        fontFromUserInitial:initialFont title:someTitle 
+        filter:aFilterBlock encoding:encoding
 
     "
      FontPanel fontFromUserInitial:(Font family:'courier' size:12) title:'select some font'
@@ -382,28 +364,10 @@
     "open a fontPanel with title and font-filter
      and return the selected font, or nil if abort is pressed"
 
-    |fontPanel selectedFont|
-
-    fontPanel := self new.
-    fontPanel filter:aFilterBlock.
-    someTitle notNil ifTrue:[
-        fontPanel label:someTitle
-    ].
-    fontPanel action:[:aFontDescription | selectedFont := aFontDescription].
-    initialFont notNil ifTrue:[
-        fontPanel initialFont:initialFont.
-    ].
-    encoding notNil ifTrue:[
-        fontPanel encoding:encoding.
-    ] ifFalse:[
-        initialFont notNil ifTrue:[
-            fontPanel encoding:initialFont encoding
-        ].
-    ].
-    fontPanel enabled:enabled.
-    fontPanel showAtPointer.
-    fontPanel destroy.
-    ^ selectedFont
+    ^ self new
+        fontFromUserInitial:initialFont title:someTitle 
+        filter:aFilterBlock encoding:encoding 
+        enabled:enabled
 
     "
      FontPanel fontFromUserInitial:(Font family:'courier' size:12) title:'select some font'
@@ -442,6 +406,19 @@
     "Modified: 10.4.1997 / 09:49:58 / cg"
 !
 
+changeFontInAllViews
+    "valid after closing"
+    
+    ^ self changeFontInAllViewsHolder value    
+!
+
+changeFontInAllViewsHolder
+    changeFontInAllViewsHolder isNil ifTrue:[
+        changeFontInAllViewsHolder := false asValue
+    ].
+    ^ changeFontInAllViewsHolder
+!
+
 encoding:aPattern
     "set the encoding goal"
 
@@ -509,6 +486,20 @@
     "Modified: 23.2.1996 / 00:51:32 / cg"
 !
 
+withChangeFontInAllViewsCheckBoxVisibleHolder
+    withChangeFontInAllViewsCheckBoxVisibleHolder isNil ifTrue:[
+        withChangeFontInAllViewsCheckBoxVisibleHolder := false asValue
+    ].
+    ^ withChangeFontInAllViewsCheckBoxVisibleHolder
+!
+
+withChangeFontInViewsAllCheckBox:aBoolean
+    "to make that check box visible;
+     call before opening"
+     
+    self withChangeFontInAllViewsCheckBoxVisibleHolder value:true
+!
+
 xftFontsOnlyHolder
     xftFontsOnlyHolder isNil ifTrue:[
         xftFontsOnlyHolder := true asValue
@@ -524,12 +515,28 @@
     sizeList enabled:aBoolean.
     encodingFilter notNil ifTrue:[
         encodingFilter enabled:aBoolean.
-    ]
+    ].
+    aBoolean ifTrue:[
+        self abortButton label:(resources string:'Cancel').
+        self okButton beVisible.        
+    ] ifFalse:[
+        self abortButton label:(resources string:'Close').
+        self okButton beInvisible.
+    ].
+
+    "
+     FontPanel openOn:(Font family:'courier' size:12)
+     FontPanel openOn:MenuPanel defaultFont
+     FontPanel fontFromUser
+    "
 !
 
 initialize
+    "sigh: hand-crafted box creation; TODO: rewrite using UI painter"
+    
     |familyLabel faceLabel sizeLabel panel panel2 fontBrowserView fp v1 v2 v3
-     mm fH l box1 box2 showFontNameLabel xftCheckBox vPanel|
+     mm fH l box1 box2 showFontNameLabel xftCheckBox vPanel changeInAllCheckBox
+     xftFlushFontList|
 
     super initialize.
 
@@ -552,25 +559,25 @@
     fontBrowserView := View in:vPanel.
     fp := View in:fontBrowserView.
     fp layout:(0.0@0.0 corner:1.0@1.0) asFractionalLayout. 
-    fp layout bottomOffset:-75.
+    fp layout bottomOffset:-150.
 
     label := resources string:'Font dialog'.
 
     panel2 := VerticalPanelView in:fontBrowserView.
     panel2 layout:(0.0@1.0 corner:1.0@1.0) asFractionalLayout.
-    panel2 layout topOffset:-75.
+    panel2 layout topOffset:-150.
     
     panel2 horizontalLayout:#fit.
     panel2 verticalLayout:#top.
 
+    box2 := HorizontalPanelView in:panel2.
+    box2 height:25.
+    box2 horizontalLayout:#right.
+
     box1 := HorizontalPanelView in:panel2.
     box1 height:25.
     box1 horizontalLayout:#leftSpace.
 
-    box2 := HorizontalPanelView in:panel2.
-    box2 height:25.
-    box2 horizontalLayout:#right.
-
     l := Label label:(resources string:'Encoding:') in:box1.
     l borderWidth:0.
     l adjust:#left.
@@ -604,9 +611,12 @@
 
     Screen current supportsXFTFonts ifTrue:[
         self xftFontsOnlyHolder value: (UserPreferences current useXftFontsOnly).
-        xftCheckBox := CheckBox label:'XFT Fonts Only' in:box1.
+        xftCheckBox := CheckBox label:(resources string:'XFT Fonts Only') in:box1.
         xftCheckBox model:xftFontsOnlyHolder.
         xftFontsOnlyHolder onChangeEvaluate:[ self xftFontsOnlyChanged ].
+
+        xftFlushFontList := Button label:(resources string:'Flush Cached List of Fonts') in:box1.
+        xftFlushFontList action:[ self flushListOfAvailableFonts].
     ].
 
 "/    sep := View in:box1.
@@ -625,7 +635,13 @@
 "/        encodingFilter beInvisible
 "/    ].
 
+    (View in:panel2) height:8. "/ separator
+    changeInAllCheckBox := CheckBox label:(resources string:'Change all Textviews and Default for New Views') in:panel2.
+    changeInAllCheckBox model:self changeFontInAllViewsHolder.
+    changeInAllCheckBox visibilityChannel:self withChangeFontInAllViewsCheckBoxVisibleHolder.
+    
     showFontNameLabel ifTrue:[
+        (View in:panel2) height:8. "/ separator
         nameLabel := Label label:'' in:panel2.
         "/ nameLabel origin:0.0@1.0 corner:1.0@1.0.
         "/ nameLabel bottomInset:(buttonPanel preferredHeight + (mm*2)).
@@ -1218,6 +1234,139 @@
     "Modified: 19.7.1996 / 20:44:08 / cg"
 ! !
 
+!FontPanel methodsFor:'startup'!
+
+fontFromUser
+    "open this fontPanel and return the selected font, 
+     or nil if abort is pressed"
+
+    ^ self 
+        fontFromUserInitial:nil
+        title:nil
+        filter:nil
+        encoding:nil
+        enabled:true
+
+    "
+     FontPanel fontFromUser
+
+     FontPanel new
+        withChangeFontInViewsAllCheckBox:true;
+        fontFromUser
+    "
+
+    "Modified: 27.2.1996 / 00:51:59 / cg"
+!
+
+fontFromUserInitial:aFont
+    "open this fontPanel showing aFont initially,
+     and return the selected font, or nil if abort is pressed"
+
+    ^ self 
+        fontFromUserInitial:aFont 
+        title:nil
+        filter:nil
+        encoding:nil
+        enabled:true
+
+    "
+     FontPanel fontFromUserInitial:(Font family:'courier' size:12)
+     FontPanel fontFromUserInitial:MenuPanel defaultFont
+    "
+!
+
+fontFromUserInitial:aFont title:someTitle
+    "open this fontPanel with title and return the selected font, 
+     or nil if abort is pressed"
+
+    ^ self 
+        fontFromUserInitial:aFont 
+        title:someTitle 
+        filter:nil
+        encoding:nil
+        enabled:true
+
+    "
+     FontPanel fontFromUserInitial:(Font family:'courier' size:12) title:'select some font'
+    "
+
+    "Created: 27.2.1996 / 00:59:46 / cg"
+    "Modified: 29.4.1996 / 09:45:34 / cg"
+!
+
+fontFromUserInitial:initialFont title:someTitle filter:aFilterBlock
+    "open this fontPanel with title and font-filter
+     and return the selected font, or nil if abort is pressed"
+
+    ^ self 
+        fontFromUserInitial:initialFont 
+        title:someTitle 
+        filter:aFilterBlock 
+        encoding:nil
+        enabled:true
+
+    "
+     FontPanel fontFromUserInitial:(Font family:'courier' size:12) title:'select some font'
+    "
+
+    "Created: 27.2.1996 / 00:59:46 / cg"
+    "Modified: 10.4.1997 / 09:53:03 / cg"
+!
+
+fontFromUserInitial:initialFont title:someTitle filter:aFilterBlock encoding:encoding
+    "open this fontPanel with title and font-filter
+     and return the selected font, or nil if abort is pressed"
+
+    ^ self
+        fontFromUserInitial:initialFont 
+        title:someTitle 
+        filter:aFilterBlock 
+        encoding:encoding 
+        enabled:true
+
+    "
+     FontPanel fontFromUserInitial:(Font family:'courier' size:12) title:'select some font'
+    "
+!
+
+fontFromUserInitial:initialFont title:someTitle filter:aFilterBlock encoding:encoding enabled:enabled
+    "open this fontPanel with title and font-filter
+     and return the selected font, or nil if abort is pressed"
+
+    |selectedFont|
+
+    self filter:aFilterBlock.
+    someTitle notNil ifTrue:[
+        self label:someTitle
+    ].
+    self action:[:aFontDescription | selectedFont := aFontDescription].
+    initialFont notNil ifTrue:[
+        self initialFont:initialFont.
+    ].
+    encoding notNil ifTrue:[
+        self encoding:encoding.
+    ] ifFalse:[
+        initialFont notNil ifTrue:[
+            self encoding:initialFont encoding
+        ].
+    ].
+    self enabled:enabled.
+    self showAtPointer.
+    self destroy.
+    ^ selectedFont
+
+    "
+     FontPanel fontFromUserInitial:(Font family:'courier' size:12) title:'select some font'.
+     
+     FontPanel new
+        withChangeFontInViewsAllCheckBox:true;
+        fontFromUserInitial:(Font family:'courier' size:12) title:'select some font'
+    "
+
+    "Created: 27.2.1996 / 00:59:46 / cg"
+    "Modified: 10.4.1997 / 09:53:03 / cg"
+! !
+
 !FontPanel methodsFor:'user interaction'!
 
 copyFontName
@@ -1412,6 +1561,11 @@
     "Modified: 26.5.1996 / 15:04:29 / cg"
 !
 
+flushListOfAvailableFonts
+    XftFontDescription flushListOfAvailableFonts.
+    self updateFamilyList
+!
+
 okPressed
     "ok was pressed; hide myself and evaluate the okAction, passing
      family, face, style and size as arguments"
--- a/GenericToolbarIconLibrary.st	Sat Jan 16 10:13:48 2016 +0000
+++ b/GenericToolbarIconLibrary.st	Sat Jan 16 10:40:59 2016 +0000
@@ -310,6 +310,26 @@
 QVE**71&QS-0G AST5MST5MSQTT9DJ@@T5MST5MST5MST5MST5MST5MST5MST5MST5MST5MS') ; colorMapFromArray:#[254 201 107 255 238 154 231 208 160 194 135 4 196 136 7 255 255 199 209 157 23 209 166 33 255 242 193 217 175 45 217 158 32 217 165 32 201 152 48 248 240 224 255 255 238 231 172 54 209 168 80 255 242 119 255 221 103 251 230 118 255 254 147 255 212 110 255 201 106 255 252 167 238 221 165 255 251 187 191 130 2 197 139 10 255 233 177 203 146 20 239 224 192 247 238 206 222 173 41 222 177 44 213 165 49 239 239 231 255 255 237 213 174 74 235 177 62 255 252 128 255 255 136 255 202 86 218 184 112 255 224 122 230 206 136 255 225 139 255 217 142 191 131 2 196 138 8 198 140 12 202 144 16 213 167 32 202 143 11 217 176 45 226 197 61 222 159 31 213 174 59 192 136 16 241 240 236 205 160 64 255 255 248 248 183 66 222 189 103 255 198 83 122 152 175 255 252 150 255 255 159 234 213 147 255 255 176 189 129 1 192 131 3 242 230 186 255 255 202 204 147 20 204 151 25 247 237 204 251 244 211 255 255 222 255 242 213 255 255 230 238 209 79 238 199 71 242 198 74 255 255 255 255 251 127 255 229 108 255 204 88 255 191 80 255 206 103 255 238 140 238 217 147 255 252 173 238 222 173 193 135 4 198 140 11 201 144 16 204 146 19 242 230 193 247 237 203 217 154 26 251 247 217 230 196 63 197 138 6 241 242 237 217 175 68 247 238 109 242 191 74 251 216 94 242 187 79 247 188 80 255 206 95 255 238 135 222 192 127 234 209 143 238 222 156 255 255 189 194 136 6 251 242 188 201 143 14 203 146 19 202 147 21 255 255 213 213 154 28 222 166 36 213 156 24 255 255 229 234 187 59 238 197 70 252 248 240 247 202 80 255 255 129 255 230 109 255 213 96 255 212 94 238 211 121 230 203 129 255 246 158 255 255 172 255 238 167 192 132 4 197 138 9 201 142 13 203 145 18 202 151 29 202 146 13 213 173 46 213 159 38 235 216 176 217 169 52 238 222 89 217 173 66 240 244 246 247 209 86 0 0 0 213 176 96 255 206 89 255 189 76 248 194 95 136 162 181 247 238 154 227 200 144 255 252 181 191 130 1 191 129 1 255 254 196 255 238 187 255 255 206 255 255 212 247 238 207 243 232 208 202 144 11 226 169 41 240 240 233 213 173 70 238 181 57 251 247 119 255 238 116 255 222 103 255 199 84 226 197 119 255 254 154 237 237 237 167 167 167 151 151 151 229 229 229 175 175 175 252 252 252 150 150 150 250 250 250 244 244 244 207 207 207 193 193 193 242 242 242 154 154 154 244 244 244 216 216 216 205 205 205 163 163 163 239 239 239 245 245 245 166 166 166 248 248 248 244 244 244 246 246 246 210 210 210 240 240 240 225 225 225 150 150 150 147 147 147 145 145 145 142 142 142 199 199 199 139 139 139 140 140 140 143 143 143 214 214 214 204 204 204 178 178 178 195 195 195 199 199 199 214 214 214 186 186 186]; mask:((ImageMask new) width:18; height:18; bits:(ByteArray fromPackedString:'@@@@_@@@??0@??0@??0@???@???@???@??>@??>@??>@??<@??<@??8@??0@?<@@>@@@@@@@') ; yourself); yourself]
 !
 
+lineTracePoint9x9Icon
+    "This resource specification was automatically generated
+     by the ImageEditor of ST/X."
+
+    "Do not manually edit this!! If it is corrupted,
+     the ImageEditor may not be able to read the specification."
+
+    "
+     self lineTracePoint9x9Icon inspect
+     ImageEditor openOnClass:self andSelector:#lineTracePoint9x9Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary lineTracePoint9x9Icon'
+        ifAbsentPut:[(Depth4Image width:9 height:9) bits:(ByteArray fromPackedString:'L0L3@C@0Y5] L@:8FK8@M9DQ%3@54QGULC_AD\\0C+)B/ @0Y5] @C@CL0L0') colorMapFromArray:#[255 255 255 86 186 196 67 156 164 176 176 176 66 174 182 26 71 79 78 181 193 37 86 96 78 162 171 70 151 158 67 157 165 32 77 88 60 140 148 56 150 159 65 175 184] mask:((Depth1Image width:9 height:9) bits:(ByteArray fromPackedString:'G@@>@G<@?8C? O>@_0@>@A0@'); yourself); yourself]
+!
+
 radioOffDisabledIcon
     "This resource specification was automatically generated
      by the ImageEditor of ST/X."
--- a/Label.st	Sat Jan 16 10:13:48 2016 +0000
+++ b/Label.st	Sat Jan 16 10:40:59 2016 +0000
@@ -1,5 +1,3 @@
-"{ Encoding: utf8 }"
-
 "
  COPYRIGHT (c) 1989 by Claus Gittinger
 	      All Rights Reserved
@@ -1487,7 +1485,8 @@
 
 nativeWindowType
     "return a symbol describing my native window type 
-     (may be used internally by the device as a native window creation hint)"
+     (may be used internally by the device as a native window creation hint,
+      if the device supports native windows)"
 
     self class == Label ifTrue:[
         ^ #Label
--- a/ListView.st	Sat Jan 16 10:13:48 2016 +0000
+++ b/ListView.st	Sat Jan 16 10:40:59 2016 +0000
@@ -1,5 +1,3 @@
-"{ Encoding: utf8 }"
-
 "
  COPYRIGHT (c) 1989 by Claus Gittinger
 	      All Rights Reserved
@@ -41,7 +39,7 @@
 
 Object subclass:#SearchSpec
 	instanceVariableNames:'pattern match ignoreCase variable fullWord forward
-		atBeginOfLineOnly ignoreDiacritics'
+		atBeginOfLineOnly ignoreDiacritics regexMatch wrapAtEndOfText'
 	classVariableNames:''
 	poolDictionaries:''
 	privateIn:ListView
@@ -4704,7 +4702,8 @@
 searchBackwardUsingSpec:searchSpec startingAtLine:startLine col:startCol ifFound:block1 ifAbsent:block2
     "search for a pattern, if found evaluate block1 with row/col as arguments, if not
      found evaluate block2.
-     Sorry, but pattern is no regular expression pattern (yet)"
+     Sorry, but pattern is no regular expression pattern (yet).
+     Also, wraps are not done when searching backward."
 
     |lineString
      pattern ignCase match fullWord atBeginOfLineOnly
@@ -4753,10 +4752,8 @@
                     lineString isString ifTrue:[
                         "/ quick check if pattern is present
                         col1 := lineString
-                                findString:pattern
-                                startingAt:1
-                                ifAbsent:0
-                                caseSensitive: ignCase not.
+                                findString:pattern startingAt:1
+                                ifAbsent:0 caseSensitive: ignCase not.
                         col1 ~~ 0 ifTrue:[
                             lineSize := lineString size.
                             col == -999 ifTrue:[col := lineSize - patternSize + 1].
@@ -4849,20 +4846,23 @@
 !
 
 searchForwardUsingSpec:searchSpec startingAtLine:startLine col:startCol ifFound:block1 ifAbsent:block2
-    "search for a pattern, if found evaluate block1 with row/col as arguments, if not
-     found evaluate block2."
-
-    |lineString col pattern match ignCase fullWord atBeginOfLineOnly
-     patternSize
+    "search for a pattern, if found evaluate block1 with row/col as arguments, 
+     if not found evaluate block2. 
+     If the block is a three-arg block, it gets the end-col (or nil, if not found)"
+
+    |lineString col pattern match regexMatch ignCase fullWord atBeginOfLineOnly
+     wrapAtEndOfText patternSize matcher lnr   "{Class: SmallInteger}"  
      line1 "{Class: SmallInteger}"
      line2 "{Class: SmallInteger}"
-     p realPattern|
+     p realPattern runner foundCol endCol|
 
     pattern := searchSpec pattern.
     match := searchSpec match.
+    regexMatch := searchSpec regexMatch.
     ignCase := searchSpec ignoreCase.
     fullWord := searchSpec fullWord.
     atBeginOfLineOnly := searchSpec atBeginOfLineOnly.
+    wrapAtEndOfText := searchSpec wrapAtEndOfText.
 
     patternSize := pattern size.
     (list notNil and:[patternSize ~~ 0]) ifTrue:[
@@ -4872,76 +4872,92 @@
             line1 := startLine.
             line2 := list size.
 
-            (match and:[pattern includesUnescapedMatchCharacters]) ifTrue:[
-                "perform a findMatchString (matching)"
-                p := pattern species new:0.
-                (pattern startsWith:$*) ifFalse:[
-                    p := p , '*'
-                ].
-                p := p , pattern.
-                (pattern endsWith:$*) ifFalse:[
-                    p := p , '*'
+            "/ call searchBlock with lnr, col, and line. Cares for wrap
+            runner := 
+                [:searchBlock |
+                    |didWrap|
+                    
+                    lnr := line1.
+                    didWrap := false.
+                    [lnr <= line2] whileTrue:[
+                        lineString := list at:lnr.
+                        lineString notNil ifTrue:[
+                            lineString := lineString asString string.
+                            lineString isString ifTrue:[
+                                searchBlock value:lnr value:col value:lineString
+                            ]
+                        ].
+                        col := 1.
+                        lnr := lnr + 1.
+                        lnr > line2 ifTrue:[
+                            (wrapAtEndOfText and:[didWrap not]) ifTrue:[
+                                didWrap := true.
+                                lnr := 1.
+                                line2 := line1-1.
+                            ].   
+                        ].    
+                   ].
+                    
                 ].
-                realPattern := pattern.
-                (realPattern startsWith:$*) ifTrue:[
-                    realPattern := realPattern copyFrom:2
-                ].
-                line1 to:line2 do:[:lnr |
-                    lineString := list at:lnr.
-                    lineString notNil ifTrue:[
-                        lineString := lineString asString string.
-                        lineString isString ifTrue:[
-                            "/ first a crude check ...
+                
+            (match and:[regexMatch]) ifTrue:[
+                "perform a findMatchString (regex matching)"
+                matcher := ignCase ifTrue:[pattern asRegexIgnoringCase] ifFalse:[pattern asRegex]. 
+                runner 
+                    value:[:lnr :col :lineString |
+                        "/ first a crude check ...
+                        (matcher hasMatchesIn:lineString) ifTrue:[
+                            "/ find which match to show
+                            1 to:matcher subexpressionCount do:[:i | 
+                                foundCol := matcher subBeginning:i.
+                                endCol := matcher subEnd:i.
+                                (foundCol notNil and: [endCol notNil]) ifTrue: [
+                                    foundCol := foundCol + 1. "/ regex uses 0-based indexes (sigh)
+                                    foundCol >= col ifTrue:[
+                                        (atBeginOfLineOnly not or:[foundCol == 1]) ifTrue:[
+                                            ^ block1 value:lnr value:foundCol optionalArgument:endCol.
+                                        ]]]]]].
+            ] ifFalse:[    
+                (match and:[regexMatch or:[pattern includesUnescapedMatchCharacters]]) ifTrue:[
+                    "perform a findMatchString (glob matching)"
+                    p := pattern species new:0.
+                    (pattern startsWith:$*) ifFalse:[p := p , '*'].
+                    p := p , pattern.
+                    (pattern endsWith:$*) ifFalse:[p := p , '*'].
+                    realPattern := pattern.
+                    (realPattern startsWith:$*) ifTrue:[
+                        realPattern := realPattern copyFrom:2
+                    ].
+                    runner 
+                        value:[:lnr :col :lineString |
                             (p match:lineString caseSensitive:ignCase not) ifTrue:[
                                 "/ ok, there it is; look at which position
-                                col := lineString
-                                        findMatchString:realPattern
-                                        startingAt:col
-                                        caseSensitive:ignCase not
-                                        ifAbsent:0.
-                                col ~~ 0 ifTrue:[
-                                    (atBeginOfLineOnly not or:[col == 1]) ifTrue:[
-                                        ^ block1 value:lnr value:col.
+                                foundCol := lineString
+                                        findMatchString:realPattern startingAt:col
+                                        caseSensitive:ignCase not ifAbsent:0.
+                                foundCol ~~ 0 ifTrue:[
+                                    (atBeginOfLineOnly not or:[foundCol == 1]) ifTrue:[
+                                        ^ block1 value:lnr value:foundCol optionalArgument:nil.
+                                    ]]]].
+                ] ifFalse:[
+                    "perform a findString (no matching)"
+                    p := pattern.
+                    runner 
+                        value:[:lnr :col :lineString |
+                            foundCol := lineString
+                                    findString:p startingAt:col ifAbsent:0 caseSensitive: ignCase not.
+                            foundCol ~~ 0 ifTrue:[
+                                (fullWord not
+                                    or:[ (self findBeginOfWordAtLine:lnr col:foundCol) == foundCol
+                                          and:[ (self findEndOfWordAtLine:lnr col:foundCol) == (foundCol + patternSize - 1) ]]
+                                ) ifTrue:[
+                                    (atBeginOfLineOnly not or:[foundCol == 1]) ifTrue:[
+                                        ^ block1 value:lnr value:foundCol optionalArgument:nil.
                                     ]
                                 ]
                             ]
                         ].
-                    ].
-                    col := 1
-                ]
-            ] ifFalse:[
-                "perform a findString (no matching)"
-                p := pattern "withoutMatchEscapes".
-                line1 to:line2 do:[:lnr |
-                    lineString := list at:lnr.
-                    lineString notNil ifTrue:[
-                        lineString := lineString asString string.
-                        lineString isString ifTrue:[
-                            col := lineString
-                                    findString:p
-                                    startingAt:col
-                                    ifAbsent:0
-                                    caseSensitive: ignCase not.
-                            col ~~ 0 ifTrue:[
-"/Transcript showCR:'---'.
-"/Transcript showCR:lineString.
-"/Transcript showCR:col.
-"/Transcript showCR:(self findBeginOfWordAtLine:lnr col:col).
-"/Transcript showCR:(self findEndOfWordAtLine:lnr col:col).
-"/Transcript showCR:(lineString copyFrom:(self findBeginOfWordAtLine:lnr col:col) to:(self findEndOfWordAtLine:lnr col:col)).
-                                (fullWord not
-                                    or:[ (self findBeginOfWordAtLine:lnr col:col) == col
-                                          and:[ (self findEndOfWordAtLine:lnr col:col) == (col + patternSize - 1) ]]
-                                ) ifTrue:[
-                                    (atBeginOfLineOnly not or:[col == 1]) ifTrue:[
-                                        ^ block1 value:lnr value:col.
-                                    ]
-                                ]
-                            ]
-                        ]
-                    ].
-                    col := 1
-                ]
+                ].
             ].
         ]
     ].
@@ -5288,6 +5304,38 @@
     forward := forwardBoolean
 !
 
+pattern:patternString ignoreCase:ignoredCaseBoolean 
+          match:matchBoolean regexMatch:regexMatchBoolean
+          variable:variableBoolen 
+          fullWord:fullWordBoolen forward:forwardBoolean
+          atBeginOfLineOnly:atBeginOfLineOnlyArg
+    pattern := patternString.
+    ignoreCase := ignoredCaseBoolean.
+    match := matchBoolean.
+    regexMatch := regexMatchBoolean.
+    variable := variableBoolen.
+    fullWord := fullWordBoolen.
+    forward := forwardBoolean.
+    atBeginOfLineOnly := atBeginOfLineOnlyArg
+!
+
+pattern:patternString ignoreCase:ignoredCaseBoolean 
+          match:matchBoolean regexMatch:regexMatchBoolean
+          variable:variableBoolen 
+          fullWord:fullWordBoolen forward:forwardBoolean
+          atBeginOfLineOnly:atBeginOfLineOnlyArg
+          wrapAtEnd:wrapAtEndOfTextArg
+    pattern := patternString.
+    ignoreCase := ignoredCaseBoolean.
+    match := matchBoolean.
+    regexMatch := regexMatchBoolean.
+    variable := variableBoolen.
+    fullWord := fullWordBoolen.
+    forward := forwardBoolean.
+    atBeginOfLineOnly := atBeginOfLineOnlyArg.
+    wrapAtEndOfText := wrapAtEndOfTextArg.
+!
+
 pattern:patternString ignoreCase:ignoredCaseBoolean match:matchBoolean variable:variableBoolen forward:forwardBoolean
     pattern := patternString.
     ignoreCase := ignoredCaseBoolean.
@@ -5317,12 +5365,28 @@
     atBeginOfLineOnly := atBeginOfLineOnlyArg
 !
 
+regexMatch
+    ^ regexMatch
+!
+
+regexMatch:something
+    regexMatch := something.
+!
+
 variable
     ^ variable
 !
 
 variable:variableBoolean
     variable := variableBoolean
+!
+
+wrapAtEndOfText
+    ^ wrapAtEndOfText
+!
+
+wrapAtEndOfText:aBoolean
+    wrapAtEndOfText := aBoolean.
 ! !
 
 !ListView class methodsFor:'documentation'!
--- a/PanelView.st	Sat Jan 16 10:13:48 2016 +0000
+++ b/PanelView.st	Sat Jan 16 10:40:59 2016 +0000
@@ -347,7 +347,9 @@
 
     super removeSubView:aView.
     aView removeDependent:self.
-    self layoutChanged
+    self isBeingDestroyed ifFalse:[
+        self layoutChanged
+    ].
 ! !
 
 !PanelView methodsFor:'enumerating subviews'!
--- a/RadioButton.st	Sat Jan 16 10:13:48 2016 +0000
+++ b/RadioButton.st	Sat Jan 16 10:40:59 2016 +0000
@@ -11,6 +11,8 @@
 "
 "{ Package: 'stx:libwidg' }"
 
+"{ NameSpace: Smalltalk }"
+
 Toggle subclass:#RadioButton
 	instanceVariableNames:'buttonStyle buttonOnLevel buttonOffLevel offImage onImage
 		buttonOffImage buttonOnImage disabledOnImage disabledOffImage
@@ -1089,7 +1091,8 @@
 
 nativeWindowType
     "return a symbol describing my native window type 
-     (may be used internally by the device as a native window creation hint)"
+     (may be used internally by the device as a native window creation hint,
+      if the device supports native windows)"
 
     self class == RadioButton ifTrue:[
         ^ #RadioButton
@@ -1148,10 +1151,10 @@
 !RadioButton class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libwidg/RadioButton.st,v 1.56 2014-08-18 18:28:19 stefan Exp $'
+    ^ '$Header$'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libwidg/RadioButton.st,v 1.56 2014-08-18 18:28:19 stefan Exp $'
+    ^ '$Header$'
 ! !
 
--- a/ScrollBar.st	Sat Jan 16 10:13:48 2016 +0000
+++ b/ScrollBar.st	Sat Jan 16 10:40:59 2016 +0000
@@ -1,5 +1,3 @@
-"{ Encoding: utf8 }"
-
 "
  COPYRIGHT (c) 1989 by Claus Gittinger
 	      All Rights Reserved
@@ -976,7 +974,8 @@
 
 nativeWindowType
     "return a symbol describing my native window type 
-     (may be used internally by the device as a native window creation hint)"
+     (may be used internally by the device as a native window creation hint,
+      if the device supports native windows)"
 
     orientation == #vertical ifTrue:[
         ^ #VerticalScrollBar
--- a/SelectionInListView.st	Sat Jan 16 10:13:48 2016 +0000
+++ b/SelectionInListView.st	Sat Jan 16 10:40:59 2016 +0000
@@ -2992,7 +2992,8 @@
 
 nativeWindowType
     "return a symbol describing my native window type 
-     (may be used internally by the device as a native window creation hint)"
+     (may be used internally by the device as a native window creation hint,
+      if the device supports native windows)"
 
     ^ #SelectionInListView
 ! !
--- a/TextCollector.st	Sat Jan 16 10:13:48 2016 +0000
+++ b/TextCollector.st	Sat Jan 16 10:40:59 2016 +0000
@@ -82,8 +82,9 @@
 !TextCollector class methodsFor:'instance creation'!
 
 initialize
-    TranscriptQuerySignal := QuerySignal new.
-
+    TranscriptQuerySignal isNil ifTrue:[
+        TranscriptQuerySignal := QuerySignal new.
+    ]
 !
 
 newTranscript
--- a/TextView.st	Sat Jan 16 10:13:48 2016 +0000
+++ b/TextView.st	Sat Jan 16 10:40:59 2016 +0000
@@ -29,7 +29,8 @@
 		DefaultAlternativeSelectionBackgroundColor MatchDelayTime
 		WordSelectCatchesBlanks LastSearchPatterns
 		NumRememberedSearchPatterns LastSearchIgnoredCase
-		LastSearchWasMatch DefaultParenthesisSpecification'
+		LastSearchWasMatch DefaultParenthesisSpecification
+		LastSearchWasMatchWithRegex LastSearchWasWrapAtEndOfText'
 	poolDictionaries:''
 	category:'Views-Text'
 !
@@ -381,7 +382,7 @@
 	 name: 'String search'
 	 min: (Point 10 10)
 	 max: (Point 1280 1024)
-         bounds: (Rectangle 0 0 319 266)
+         bounds: (Rectangle 0 0 420 323)
        )
        component:
       (SpecCollection
@@ -425,17 +426,36 @@
 		   tabable: true
 		   model: caseSensitive
 		   translateLabel: true
-                   extent: (Point 319 24)
+                   extent: (Point 420 24)
 		 )
-		(CheckBoxSpec
-		   label: 'Match (forward only)'
-		   name: 'matchCheckBox'
-		   activeHelpKey: matchSearch
-		   level: 0
-		   tabable: true
-		   model: match
-		   translateLabel: true
-                   extent: (Point 319 24)
+                (ViewSpec
+                   name: 'MatchBox'
+                   component: 
+                  (SpecCollection
+                     collection: (
+                      (CheckBoxSpec
+                         label: 'Match (forward only)'
+                         name: 'matchCheckBox'
+                         layout: (LayoutFrame 0 0 0 0 260 0 0 1)
+                         activeHelpKey: matchSearch
+                         level: 0
+                         tabable: true
+                         model: match
+                         translateLabel: true
+                       )
+                      (CheckBoxSpec
+                         label: 'Regex Match'
+                         name: 'CheckBox6'
+                         layout: (LayoutFrame -151 1 0 0 0 1 22 0)
+                         visibilityChannel: matchWithRegexVisible
+                         enableChannel: match
+                         model: matchWithRegex
+                         translateLabel: true
+                       )
+                      )
+                    
+                   )
+                   extent: (Point 420 24)
 		 )
 		(CheckBoxSpec
 		   label: 'Search Full Words'
@@ -446,7 +466,7 @@
 		   tabable: true
 		   model: searchFullWord
 		   translateLabel: true
-                   extent: (Point 319 24)
+                   extent: (Point 420 24)
                  )
                 (CheckBoxSpec
                    label: 'At Begin of Line Only'
@@ -456,7 +476,7 @@
                    tabable: true
                    model: searchAtBeginOfLineOnly
                    translateLabel: true
-                   extent: (Point 319 24)
+                   extent: (Point 420 24)
 		 )
 		(CheckBoxSpec
 		   label: 'Variable Only'
@@ -469,7 +489,7 @@
 		   model: searchVariable
 		   translateLabel: true
 		   labelChannel: stringWithVariableUnderCursorHolder
-                   extent: (Point 319 24)
+                   extent: (Point 420 24)
 		 )
 		(CheckBoxSpec
 		   label: 'Select Lines'
@@ -482,15 +502,25 @@
 		   translateLabel: true
 		   extent: (Point 302 24)
 		 )
+                (CheckBoxSpec
+                   label: 'Wrap at End of Text (forward only)'
+                   name: 'CheckBox7'
+                   activeHelpKey: searchAtBeginOfLineOnly
+                   level: 0
+                   tabable: true
+                   model: wrapAtEndOfTextHolder
+                   translateLabel: true
+                   extent: (Point 420 24)
+                 )
 		(ViewSpec
-		   name: 'Box1'
+                   name: 'ReplaceBox'
 		   component:
 		  (SpecCollection
 		     collection: (
 		      (CheckBoxSpec
 			 label: 'Global Replace With:'
 			 name: 'CheckBox4'
-			 layout: (LayoutFrame 0 0 0 0 162 0 23 0)
+                         layout: (LayoutFrame 0 0 0 0 180 0 23 0)
 			 activeHelpKey: replaceText
 			 level: 0
 			 enableChannel: replaceEnabled
@@ -500,7 +530,7 @@
 		       )
 		      (InputFieldSpec
 			 name: 'ReplaceEntryField'
-			 layout: (LayoutFrame 164 0 0 0 -2 1 22 0)
+                         layout: (LayoutFrame 180 0 0 0 -2 1 22 0)
 			 activeHelpKey: replaceText
 			 visibilityChannel: replaceBoolean
 			 enableChannel: replaceBoolean
@@ -512,7 +542,7 @@
 		      )
 
 		   )
-                   extent: (Point 319 24)
+                   extent: (Point 420 24)
 		 )
 		)
 
@@ -1981,13 +2011,27 @@
 changeFont
     "pop up a fontPanel to change font"
 
-    |newFont|
+    |newFont fp|
 
     self withWaitCursorDo:[
-	newFont := FontPanel fontFromUserInitial:gc font.
+        fp := FontPanel new.
+        fp withChangeFontInViewsAllCheckBox:true.
+        newFont := fp fontFromUserInitial:self font.
     ].
     newFont notNil ifTrue:[
 	self font:newFont.
+        fp changeFontInAllViews ifTrue:[
+            "/ user checked this box - change the defaults,
+            "/ and update all other textviews now.
+
+            TextView defaultFont:newFont.
+            UserPreferences current fontPreferences
+                at:#Text put:(newFont storeString).
+            DebugView newDebugger.
+            TextView allSubInstances do:[:v |
+                v font:newFont
+            ].    
+        ].    
     ]
 
     "Modified: 27.2.1996 / 00:53:51 / cg"
@@ -2163,7 +2207,8 @@
      Q: is it a good idea to preserve the last searchstring between views?
      cg: yes - turns out to be useful and less confusing than keeping last per view
     "
-    |searchBox patternHolder caseHolder matchHolder fwd ign match initialString
+    |searchBox patternHolder caseHolder matchHolder matchWithRegexHolder wrapAtEndHolder
+     fwd ign match initialString
      bindings bldr doSearch modal searchVariableHolder selectedVariable searchFullWordHolder
      replaceBooleanEnabledHolder replaceBooleanHolder replaceTextHolder
      searchAtBeginOfLineOnlyHolder|
@@ -2181,6 +2226,8 @@
 
     match := lastSearchWasMatch ? LastSearchWasMatch ? false.
     matchHolder := match asValue.
+    matchWithRegexHolder := (LastSearchWasMatchWithRegex ? false) asValue.
+    wrapAtEndHolder := (LastSearchWasWrapAtEndOfText ? false) asValue.
     searchVariableHolder := (lastSearchWasVariableSearch ? false) asValue.
     searchFullWordHolder := false asValue.
     searchAtBeginOfLineOnlyHolder := false asValue.
@@ -2226,6 +2273,8 @@
 	    lastSearchWasVariableSearch := false.
 	    LastSearchIgnoredCase := lastSearchIgnoredCase := (caseHolder value not).
 	    LastSearchWasMatch := lastSearchWasMatch := matchHolder value.
+            LastSearchWasMatchWithRegex := matchWithRegexHolder value.
+            LastSearchWasWrapAtEndOfText := wrapAtEndHolder value.
 	    pattern := patternHolder value.
 	    pattern notEmptyOrNil ifTrue:[
 		searchAction := [
@@ -2233,11 +2282,13 @@
 			ListView::SearchSpec new
 			    pattern:pattern
 			    ignoreCase:lastSearchIgnoredCase
-			    match: lastSearchWasMatch
+                            match: lastSearchWasMatch 
+                            regexMatch:matchWithRegexHolder value 
 			    variable: searchVariableHolder value
 			    fullWord: searchFullWordHolder value
                             forward:fwd
-                            atBeginOfLineOnly:searchAtBeginOfLineOnlyHolder value).
+                            atBeginOfLineOnly:searchAtBeginOfLineOnlyHolder value
+                            wrapAtEnd:wrapAtEndHolder value).
 		]
 	    ]
 	].
@@ -2285,6 +2336,12 @@
     ].
     bindings at:#caseSensitive put:caseHolder.
     bindings at:#match put:matchHolder.
+    bindings at:#matchWithRegex put:matchWithRegexHolder.
+    Regex::RxMatcher isNil ifTrue:[
+        bindings at:#matchWithRegexVisible put:false.
+    ] ifFalse:[
+        bindings at:#matchWithRegexVisible put:matchHolder
+    ].
     bindings at:#patternList put:LastSearchPatterns.
 
     self supportsSyntaxElements ifFalse:[
@@ -2297,7 +2354,7 @@
 	    bindings
 		at:#stringWithVariableUnderCursorHolder
                 put:(resources string:'Variable ("%1")' with:selectedVariable name).
-	    searchVariableHolder value:true.
+            "/ searchVariableHolder value:true.
 	] ifFalse:[
 	    bindings
 		at:#stringWithVariableUnderCursorHolder
@@ -2309,7 +2366,8 @@
     bindings at:#searchFullWord put:searchFullWordHolder.
     bindings at:#searchFullWordEnabled put:true.
     bindings at:#searchAtBeginOfLineOnly put:searchAtBeginOfLineOnlyHolder.
-
+    bindings at:#wrapAtEndOfTextHolder put:wrapAtEndHolder.
+    
     bindings at:#replaceEnabled put:replaceBooleanEnabledHolder.
     bindings at:#replaceBoolean put:replaceBooleanHolder.
     bindings at:#replaceTextHolder put:replaceTextHolder.
@@ -2553,7 +2611,8 @@
 
 nativeWindowType
     "return a symbol describing my native window type
-     (may be used internally by the device as a native window creation hint)"
+     (may be used internally by the device as a native window creation hint,
+      if the device supports native windows)"
 
     ^ #TextView
 
@@ -4246,10 +4305,12 @@
     "do a forward search"
 
     self
-	searchForwardUsingSpec:searchSpec
-	startingAtLine:startLine col:startCol
-	ifFound:[:line :col | self showMatch:searchSpec pattern isMatch:searchSpec match atLine:line col:col]
-	ifAbsent:aBlock
+        searchForwardUsingSpec:searchSpec
+        startingAtLine:startLine col:startCol
+        ifFound:[:line :col | 
+            self showMatch:searchSpec pattern isMatch:searchSpec match atLine:line col:col
+        ]
+        ifAbsent:aBlock
 !
 
 searchPattern
--- a/VariablePanel.st	Sat Jan 16 10:13:48 2016 +0000
+++ b/VariablePanel.st	Sat Jan 16 10:40:59 2016 +0000
@@ -1,5 +1,3 @@
-"{ Encoding: utf8 }"
-
 "
  COPYRIGHT (c) 1991 by Claus Gittinger
 	      All Rights Reserved
@@ -1354,8 +1352,10 @@
         realized 
         "/ (superView isNil or:[superView shown]) 
         ifTrue:[
-            self setupSubviews.
-            self resizeSubviews.
+            self isBeingDestroyed ifFalse:[
+                self setupSubviews.
+                self resizeSubviews.
+            ]
         ]
     ]
 ! !