AbstractSettingsApplication.st
changeset 14505 a45081b27fc3
parent 14485 9e8140add846
child 14514 d18c6b0a399f
--- a/AbstractSettingsApplication.st	Sat Jun 14 13:13:19 2014 +0200
+++ b/AbstractSettingsApplication.st	Sat Jun 14 13:39:01 2014 +0200
@@ -571,7 +571,7 @@
     "
 
     aListOfAspects do:[:eachAspectSymbol |
-        (self perform:eachAspectSymbol) value ~= (anAspectProvider perform:eachAspectSymbol) ifTrue:[
+        (self myAspectHolderFor:eachAspectSymbol) value ~= (anAspectProvider perform:eachAspectSymbol) ifTrue:[
             self debuggingCodeFor:#cg is:[
                 Transcript showCR:'settings aspect is different: ',eachAspectSymbol.
                 Transcript showCR:'  here: ',((self perform:eachAspectSymbol) value) printString.
@@ -585,6 +585,24 @@
     "Modified: / 23-03-2011 / 15:45:11 / cg"
 !
 
+myAspectHolderFor:aspectSymbol
+    "/ used to be (self perform:aspectSymbol),
+    "/ but I am tired of having to add all those aspect getters.
+
+    ^ self 
+        perform:aspectSymbol 
+        ifNotUnderstood:[
+            |holder|
+
+            self createBuilder.
+            (holder := builder bindingAt:aspectSymbol) isNil ifTrue:[
+                builder aspectAt:aspectSymbol put:(holder := nil asValue).
+                holder onChangeSend:#updateModifiedChannel to:self.
+            ].
+            holder
+        ].
+!
+
 readAspects:aListOfAspects from:anAspectProvider
     "this code-sharing helper reads a bunch of aspect values from some object.
      The object is typically the current userPreferences object, or a flag-holder, such
@@ -599,7 +617,7 @@
     "
 
     aListOfAspects do:[:eachAspectSymbol |
-        (self perform:eachAspectSymbol) 
+        (self myAspectHolderFor:eachAspectSymbol)
             value:(anAspectProvider perform:eachAspectSymbol)
             withoutNotifying:self
     ].
@@ -621,7 +639,9 @@
     "
 
     aListOfAspects do:[:eachAspectSymbol |   
-        anAspectProvider perform:eachAspectSymbol asMutator with:(self perform:eachAspectSymbol) value
+        anAspectProvider 
+            perform:eachAspectSymbol asMutator 
+            with:(self myAspectHolderFor:eachAspectSymbol) value
     ].
 
     "Modified: / 24-08-2010 / 16:52:42 / sr"
@@ -3835,6 +3855,9 @@
 #codeCompletionOnTabKey
 'Show code completion suggestions when you hit the TAB key, and the character before the cursor is non-blank.\This is an experimental feature, please disable it if you encounter problems.'
 
+#codeCompletionViewKeyboardNavigationNeedsModifier
+'If on, cursor up/down are only passed to the floating completion view,\if a shift- or control modifier is pressed.\Check this, if you find it annoying, that cursor up/down is intercepted by a floating completion view.'
+
 #alwaysPasteFileContents
 'When pasting a file (from the Filebrowser or Explorer), always paste the file''s contents\without asking. If off, a dialog appears to ask the name or the contents of the file should be pasted'
 
@@ -3967,19 +3990,37 @@
                    translateLabel: true
                    extent: (Point 658 25)
                  )
-                (CheckBoxSpec
-                   label: 'Code Completion on CTRL Key (experimental)'
-                   name: 'CheckBox6'
-                   activeHelpKey: codeCompletionOnControlKey
-                   model: codeCompletionOnControlKey
-                   translateLabel: true
+                (ViewSpec
+                   name: 'Box1'
+                   component: 
+                  (SpecCollection
+                     collection: (
+                      (CheckBoxSpec
+                         label: 'Code Completion on CTRL Key (experimental)'
+                         name: 'CheckBox6'
+                         layout: (LayoutFrame 0 0 0 0 350 0 25 0)
+                         activeHelpKey: codeCompletionOnControlKey
+                         model: codeCompletionOnControlKey
+                         translateLabel: true
+                       )
+                      (CheckBoxSpec
+                         label: 'On TAB Key (experimental)'
+                         name: 'CheckBox7'
+                         layout: (LayoutFrame 380 0 0 0 658 0 25 0)
+                         activeHelpKey: codeCompletionOnTabKey
+                         model: codeCompletionOnTabKey
+                         translateLabel: true
+                       )
+                      )
+                    
+                   )
                    extent: (Point 658 25)
                  )
                 (CheckBoxSpec
-                   label: 'Code Completion on TAB Key (experimental)'
-                   name: 'CheckBox7'
-                   activeHelpKey: codeCompletionOnTabKey
-                   model: codeCompletionOnTabKey
+                   label: 'Shift/Control for Navigation in Completion View'
+                   name: 'CheckBox8'
+                   activeHelpKey: codeCompletionViewKeyboardNavigationNeedsModifier
+                   model: codeCompletionViewKeyboardNavigationNeedsModifier
                    translateLabel: true
                    extent: (Point 658 25)
                  )
@@ -4155,6 +4196,7 @@
          #immediateCodeCompletion
          #codeCompletionOnControlKey
          #codeCompletionOnTabKey
+         #codeCompletionViewKeyboardNavigationNeedsModifier
          #selectionExtensionMode
     )
 
@@ -18316,10 +18358,10 @@
 !AbstractSettingsApplication class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libtool/AbstractSettingsApplication.st,v 1.547 2014-06-10 14:27:40 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/AbstractSettingsApplication.st,v 1.548 2014-06-14 11:39:01 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libtool/AbstractSettingsApplication.st,v 1.547 2014-06-10 14:27:40 cg Exp $'
-! !
-
+    ^ '$Header: /cvs/stx/stx/libtool/AbstractSettingsApplication.st,v 1.548 2014-06-14 11:39:01 cg Exp $'
+! !
+