ColorMenu.st
changeset 1057 db1bd14803e3
parent 895 d1c9210e796b
child 1058 2a6e0c07b336
--- a/ColorMenu.st	Wed Aug 05 17:16:02 1998 +0200
+++ b/ColorMenu.st	Thu Aug 06 16:20:51 1998 +0200
@@ -19,6 +19,13 @@
 	category:'Interface-UIPainter'
 !
 
+SimpleDialog subclass:#DefineColor
+	instanceVariableNames:'red green blue'
+	classVariableNames:''
+	poolDictionaries:''
+	privateIn:ColorMenu
+!
+
 !ColorMenu class methodsFor:'documentation'!
 
 copyright
@@ -117,11 +124,6 @@
             #( lightened 100 87 67 50 33)
         )
 
-        #(  orange
-            #orange:
-            #( lightened 100 87 67 50 33)
-        )
-
     )
 !
 
@@ -180,7 +182,7 @@
 
     |item holder color|
 
-    (item := super accept:anItem) notNil 
+    ((item := super accept:anItem) notNil and: [item label ~= '?']) 
     ifTrue:
     [
         (holder := self colorHolder) == item ifTrue:
@@ -188,7 +190,7 @@
             enabledChannel value ifTrue:[color := self color]
         ] 
         ifFalse:
-        [
+        [  
             color := item argument.
             holder label:(Text string:'   ' emphasis:(#backgroundColor->color)).
         ].
@@ -219,11 +221,12 @@
     ifTrue:
     [
         self disabledRedrawDo:
-        [
+        [                 
             holder := self colorHolder.     
             label  := Text string: '   ' emphasis:(#backgroundColor->aColor).
             enabledChannel value:true.
-            holder label:label
+            holder label:label.
+            model value: aColor
         ]
     ]
 !
@@ -314,7 +317,15 @@
 
     menu := self class colorMenu:labelsAreColored value:nil.
     menu itemsDo:[:el| el isButton:true].
-    menu addItem:(MenuItem labeled:' ') beforeIndex:8.
+    menu addItem:((MenuItem labeled:'?') value: 
+    [
+        |defineColor|
+        defineColor := DefineColor new color: self color.
+        defineColor open.
+        defineColor accept value ifTrue: [self color: defineColor color]
+
+    ]; isButton: true) beforeIndex:8.
+    menu addItem:(MenuItem labeled:'') beforeIndex:8.
     menu addItem:(MenuItem labeled:' ') beforeIndex:5.
     menu addItem:(MenuItem labeled:' ') beforeIndex:2.
     menu addItem:(MenuItem labeled:' ') beforeIndex:1.
@@ -331,7 +342,8 @@
             anItem enabled:enabledChannel.
         ] ifFalse:[
             anItem value == #selection ifTrue:[anItem indication:enabledChannel] 
-                                      ifFalse:[anItem enabled:false]
+                                      ifFalse:[anItem enabled:false]. 
+            anItem label = '?' ifTrue:[anItem enabled:enabledChannel] 
         ]
     ]
 ! !
@@ -344,8 +356,264 @@
   ^ self itemAt:#selection
 ! !
 
+!ColorMenu::DefineColor class methodsFor:'interface specs'!
+
+windowSpec
+    "This resource specification was automatically generated
+     by the UIPainter of ST/X."
+
+    "Do not manually edit this!! If it is corrupted,
+     the UIPainter may not be able to read the specification."
+
+    "
+     UIPainter new openOnClass:ColorMenu::DefineColor andSelector:#windowSpec
+     ColorMenu::DefineColor new openInterface:#windowSpec
+     ColorMenu::DefineColor open
+    "
+
+    <resource: #canvas>
+
+    ^
+     
+       #(#FullSpec
+          #window: 
+           #(#WindowSpec
+              #name: 'Define Color'
+              #layout: #(#LayoutFrame 154 0 369 0 493 0 488 0)
+              #label: 'Define Color'
+              #min: #(#Point 340 110)
+              #max: #(#Point 1152 900)
+              #bounds: #(#Rectangle 154 369 494 489)
+              #usePreferredExtent: false
+          )
+          #component: 
+           #(#SpecCollection
+              #collection: 
+               #(
+                 #(#VerticalPanelViewSpec
+                    #name: 'VerticalPanel1'
+                    #layout: #(#LayoutFrame 0 0.0 0 0.0 60 0 -32 1.0)
+                    #component: 
+                     #(#SpecCollection
+                        #collection: 
+                         #(
+                           #(#LabelSpec
+                              #name: 'RedLabel'
+                              #label: 'Red:'
+                              #translateLabel: true
+                              #adjust: #right
+                              #extent: #(#Point 60 27)
+                          )
+                           #(#LabelSpec
+                              #name: 'GreenLabel'
+                              #label: 'Green:'
+                              #translateLabel: true
+                              #adjust: #right
+                              #extent: #(#Point 60 28)
+                          )
+                           #(#LabelSpec
+                              #name: 'BlueLabel'
+                              #label: 'Blue:'
+                              #translateLabel: true
+                              #adjust: #right
+                              #extent: #(#Point 60 27)
+                          )
+                        )
+                    )
+                    #horizontalLayout: #fit
+                    #verticalLayout: #fit
+                    #horizontalSpace: 3
+                    #verticalSpace: 3
+                )
+                 #(#VerticalPanelViewSpec
+                    #name: 'VerticalPanel2'
+                    #layout: #(#LayoutFrame 60 0 0 0.0 -160 1.0 -32 1.0)
+                    #component: 
+                     #(#SpecCollection
+                        #collection: 
+                         #(
+                           #(#SliderSpec
+                              #name: 'RedSlider'
+                              #model: #red
+                              #orientation: #horizontal
+                              #stop: 255
+                              #step: 1
+                              #backgroundColor: #(#Color 100.0 0.0 0.0)
+                              #extent: #(#Point 120 27)
+                          )
+                           #(#SliderSpec
+                              #name: 'GreenSlider'
+                              #model: #green
+                              #orientation: #horizontal
+                              #stop: 255
+                              #step: 1
+                              #backgroundColor: #(#Color 0.0 100.0 0.0)
+                              #extent: #(#Point 120 28)
+                          )
+                           #(#SliderSpec
+                              #name: 'BlueSlider'
+                              #model: #blue
+                              #orientation: #horizontal
+                              #stop: 255
+                              #step: 1
+                              #backgroundColor: #(#Color 0.0 0.0 100.0)
+                              #extent: #(#Point 120 27)
+                          )
+                        )
+                    )
+                    #horizontalLayout: #fit
+                    #verticalLayout: #fit
+                    #horizontalSpace: 3
+                    #verticalSpace: 3
+                )
+                 #(#VerticalPanelViewSpec
+                    #name: 'VerticalPanel3'
+                    #layout: #(#LayoutFrame -160 1 0 0.0 -120 1 -32 1.0)
+                    #component: 
+                     #(#SpecCollection
+                        #collection: 
+                         #(
+                           #(#InputFieldSpec
+                              #name: 'RedField'
+                              #model: #red
+                              #type: #numberInRange
+                              #numChars: 3
+                              #minValue: 0
+                              #maxValue: 255
+                              #extent: #(#Point 40 27)
+                          )
+                           #(#InputFieldSpec
+                              #name: 'GreenField'
+                              #model: #green
+                              #type: #numberInRange
+                              #numChars: 3
+                              #minValue: 0
+                              #maxValue: 255
+                              #extent: #(#Point 40 28)
+                          )
+                           #(#InputFieldSpec
+                              #name: 'BlueField'
+                              #model: #blue
+                              #type: #numberInRange
+                              #numChars: 3
+                              #minValue: 0
+                              #maxValue: 255
+                              #extent: #(#Point 40 27)
+                          )
+                        )
+                    )
+                    #horizontalLayout: #fit
+                    #verticalLayout: #fit
+                    #horizontalSpace: 3
+                    #verticalSpace: 3
+                )
+                 #(#LabelSpec
+                    #name: 'PreviewBox'
+                    #layout: #(#LayoutFrame -118 1 0 0.0 -2 1.0 -32 1.0)
+                    #label: 'Preview'
+                    #translateLabel: true
+                    #level: -1
+                )
+                 #(#HorizontalPanelViewSpec
+                    #name: 'HorizontalPanel1'
+                    #layout: #(#LayoutFrame 0 0.0 -32 1 0 1.0 0 1.0)
+                    #component: 
+                     #(#SpecCollection
+                        #collection: 
+                         #(
+                           #(#ActionButtonSpec
+                              #name: 'CancelButton'
+                              #label: 'Cancel'
+                              #translateLabel: true
+                              #model: #cancel
+                              #extent: #(#Point 165 26)
+                          )
+                           #(#ActionButtonSpec
+                              #name: 'OKButton'
+                              #label: 'OK'
+                              #translateLabel: true
+                              #model: #accept
+                              #extent: #(#Point 166 26)
+                          )
+                        )
+                    )
+                    #horizontalLayout: #fitSpace
+                    #verticalLayout: #fitSpace
+                    #horizontalSpace: 3
+                    #verticalSpace: 3
+                )
+              )
+          )
+      )
+! !
+
+!ColorMenu::DefineColor methodsFor:'accessing'!
+
+color
+
+    ^Color redByte: red value greenByte: green value blueByte: blue value
+  
+!
+
+color: aColor
+
+    aColor notNil
+    ifTrue:
+    [
+        self red   value: aColor redByte.
+        self green value: aColor greenByte.
+        self blue  value: aColor blueByte.
+    ]
+  
+! !
+
+!ColorMenu::DefineColor methodsFor:'aspects'!
+
+blue
+
+    blue isNil ifTrue:[
+        blue := 0 asValue
+    ].
+    ^blue
+!
+
+green
+
+    green isNil ifTrue:[
+        green := 0 asValue
+    ].
+    ^green
+!
+
+red
+
+    red isNil ifTrue:[
+        red := 0 asValue
+    ].
+    ^red
+! !
+
+!ColorMenu::DefineColor methodsFor:'startup / release'!
+
+postBuildWith:aBuilder
+
+    |updateBlock|
+
+    super postBuildWith:aBuilder.
+
+    updateBlock := [(builder componentAt: #PreviewBox) backgroundColor: self color].
+
+    red   onChangeSend: #value to: updateBlock.
+    green onChangeSend: #value to: updateBlock.
+    blue  onChangeSend: #value to: updateBlock.
+
+    updateBlock value
+
+
+! !
+
 !ColorMenu class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libwidg2/ColorMenu.st,v 1.14 1998-05-21 01:07:34 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libwidg2/ColorMenu.st,v 1.15 1998-08-06 14:20:51 tz Exp $'
 ! !