ColorEditDialog.st
changeset 2224 6ec083adc6bf
parent 1846 65558eb9f4d3
child 2228 6736186fc553
--- a/ColorEditDialog.st	Tue Jan 08 15:35:12 2008 +0100
+++ b/ColorEditDialog.st	Tue Jan 08 21:08:27 2008 +0100
@@ -9,11 +9,11 @@
  other person.  No title to or ownership of the software is
  hereby transferred.
 "
-
 "{ Package: 'stx:libtool2' }"
 
 SimpleDialog subclass:#ColorEditDialog
-	instanceVariableNames:'red green blue hue light saturation colorNameHolder'
+	instanceVariableNames:'red green blue hue light saturation colorNameHolder
+		htmlColorNameHolder'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'Interface-UIPainter'
@@ -66,9 +66,9 @@
      the UIPainter may not be able to read the specification."
 
     "
-     UIPainter new openOnClass:ColorEditor andSelector:#windowSpec
-     ColorEditor new openInterface:#windowSpec
-     ColorEditor open
+     UIPainter new openOnClass:ColorEditDialog andSelector:#windowSpec
+     ColorEditDialog new openInterface:#windowSpec
+     ColorEditDialog open
     "
 
     <resource: #canvas>
@@ -80,9 +80,9 @@
        (WindowSpec
           label: 'Define Color'
           name: 'Define Color'
-          min: (Point 340 260)
-          max: (Point nil 260)
-          bounds: (Rectangle 0 0 453 260)
+          min: (Point 440 300)
+          max: (Point 440 300)
+          bounds: (Rectangle 0 0 436 300)
         )
         component: 
        (SpecCollection
@@ -124,7 +124,7 @@
             )
            (VerticalPanelViewSpec
               name: 'RGBSliderPanel'
-              layout: (LayoutFrame 62 0 0 0 -166 1 76 0)
+              layout: (LayoutFrame 62 0 0 0 -177 1 76 0)
               horizontalLayout: fit
               verticalLayout: spreadSpace
               horizontalSpace: 3
@@ -140,7 +140,7 @@
                     stop: 255
                     step: 1
                     backgroundColor: (Color 100.0 0.0 0.0)
-                    extent: (Point 225 16)
+                    extent: (Point 197 16)
                   )
                  (SliderSpec
                     name: 'GreenSlider'
@@ -150,7 +150,7 @@
                     stop: 255
                     step: 1
                     backgroundColor: (Color 0.0 100.0 0.0)
-                    extent: (Point 225 16)
+                    extent: (Point 197 16)
                   )
                  (SliderSpec
                     name: 'BlueSlider'
@@ -160,7 +160,7 @@
                     stop: 255
                     step: 1
                     backgroundColor: (Color 0.0 0.0 100.0)
-                    extent: (Point 225 16)
+                    extent: (Point 197 16)
                   )
                  )
                
@@ -168,7 +168,7 @@
             )
            (VerticalPanelViewSpec
               name: 'RGBFieldPanel'
-              layout: (LayoutFrame -161 1 0 0 -123 1 76 0)
+              layout: (LayoutFrame -173 1 0 0 -143 1 76 0)
               horizontalLayout: fit
               verticalLayout: spreadSpace
               horizontalSpace: 3
@@ -184,7 +184,7 @@
                     minValue: 0
                     maxValue: 255
                     acceptOnPointerLeave: false
-                    extent: (Point 38 20)
+                    extent: (Point 30 20)
                   )
                  (InputFieldSpec
                     name: 'GreenField'
@@ -194,7 +194,7 @@
                     minValue: 0
                     maxValue: 255
                     acceptOnPointerLeave: false
-                    extent: (Point 38 20)
+                    extent: (Point 30 20)
                   )
                  (InputFieldSpec
                     name: 'BlueField'
@@ -204,7 +204,51 @@
                     minValue: 0
                     maxValue: 255
                     acceptOnPointerLeave: false
-                    extent: (Point 38 20)
+                    extent: (Point 30 20)
+                  )
+                 )
+               
+              )
+            )
+           (VerticalPanelViewSpec
+              name: 'RGBFieldPanelHex'
+              layout: (LayoutFrame -141 1 0 0 -121 1 76 0)
+              horizontalLayout: fit
+              verticalLayout: spreadSpace
+              horizontalSpace: 3
+              verticalSpace: 3
+              component: 
+             (SpecCollection
+                collection: (
+                 (InputFieldSpec
+                    name: 'EntryField4'
+                    model: red
+                    type: hexIntegerInRange
+                    numChars: 3
+                    minValue: 0
+                    maxValue: 255
+                    acceptOnPointerLeave: false
+                    extent: (Point 20 20)
+                  )
+                 (InputFieldSpec
+                    name: 'EntryField5'
+                    model: green
+                    type: hexIntegerInRange
+                    numChars: 3
+                    minValue: 0
+                    maxValue: 255
+                    acceptOnPointerLeave: false
+                    extent: (Point 20 20)
+                  )
+                 (InputFieldSpec
+                    name: 'EntryField6'
+                    model: blue
+                    type: hexIntegerInRange
+                    numChars: 3
+                    minValue: 0
+                    maxValue: 255
+                    acceptOnPointerLeave: false
+                    extent: (Point 20 20)
                   )
                  )
                
@@ -247,7 +291,7 @@
             )
            (VerticalPanelViewSpec
               name: 'HLSSliderPanel'
-              layout: (LayoutFrame 62 0 86 0 -166 1 163 0)
+              layout: (LayoutFrame 62 0 86 0 -177 1 163 0)
               horizontalLayout: fit
               verticalLayout: spreadSpace
               horizontalSpace: 3
@@ -263,7 +307,7 @@
                     stop: 359
                     step: 1
                     keyboardStep: 1
-                    extent: (Point 225 16)
+                    extent: (Point 197 16)
                   )
                  (SliderSpec
                     name: 'Slider2'
@@ -271,9 +315,9 @@
                     model: light
                     orientation: horizontal
                     step: 1
-                    backgroundColor: (Color 66.9993 66.9993 66.9993)
+                    backgroundColor: (Color 66.999313344015 66.999313344015 66.999313344015)
                     keyboardStep: 1
-                    extent: (Point 225 16)
+                    extent: (Point 197 16)
                   )
                  (SliderSpec
                     name: 'Slider3'
@@ -281,9 +325,9 @@
                     model: saturation
                     orientation: horizontal
                     step: 1
-                    backgroundColor: (Color 66.9993 66.9993 66.9993)
+                    backgroundColor: (Color 66.999313344015 66.999313344015 66.999313344015)
                     keyboardStep: 1
-                    extent: (Point 225 16)
+                    extent: (Point 197 16)
                   )
                  )
                
@@ -291,7 +335,7 @@
             )
            (VerticalPanelViewSpec
               name: 'HLSFieldPanel'
-              layout: (LayoutFrame -161 1 86 0 -123 1 163 0)
+              layout: (LayoutFrame -173 1 86 0 -143 1 163 0)
               horizontalLayout: fit
               verticalLayout: spreadSpace
               horizontalSpace: 3
@@ -307,7 +351,7 @@
                     minValue: 0
                     maxValue: 359
                     acceptOnPointerLeave: false
-                    extent: (Point 38 20)
+                    extent: (Point 30 20)
                   )
                  (InputFieldSpec
                     name: 'EntryField2'
@@ -317,7 +361,7 @@
                     minValue: 0
                     maxValue: 100
                     acceptOnPointerLeave: false
-                    extent: (Point 38 20)
+                    extent: (Point 30 20)
                   )
                  (InputFieldSpec
                     name: 'EntryField3'
@@ -327,7 +371,7 @@
                     minValue: 0
                     maxValue: 100
                     acceptOnPointerLeave: false
-                    extent: (Point 38 20)
+                    extent: (Point 30 20)
                   )
                  )
                
@@ -354,13 +398,13 @@
            (LabelSpec
               label: 'Color Name:'
               name: 'ColorNameLabel'
-              layout: (LayoutFrame 0 0 190 0 106 0 212 0)
+              layout: (LayoutFrame 0 0 176 0 106 0 198 0)
               translateLabel: true
               adjust: right
             )
            (InputFieldSpec
               name: 'ColorNameField'
-              layout: (LayoutFrame 110 0 190 0 -123 1 212 0)
+              layout: (LayoutFrame 108 0 176 0 -162 1 198 0)
               model: colorNameHolder
               immediateAccept: true
               acceptOnReturn: true
@@ -403,6 +447,41 @@
                
               )
             )
+           (LabelSpec
+              label: 'HTML Color Name:'
+              name: 'HTMLColorNameLabel'
+              layout: (LayoutFrame 4 0 204 0 110 0 226 0)
+              translateLabel: true
+              adjust: right
+            )
+           (InputFieldSpec
+              name: 'MLHTColorNameFieldField'
+              layout: (LayoutFrame 108 0 204 0 -162 1 226 0)
+              model: htmlColorNameHolder
+              immediateAccept: true
+              acceptOnReturn: true
+              acceptOnTab: true
+              acceptOnLostFocus: true
+              acceptOnPointerLeave: false
+            )
+           (ActionButtonSpec
+              label: 'Copy Color'
+              name: 'CopyColor'
+              layout: (LayoutFrame 12 0 236 0 100 0 258 0)
+              translateLabel: true
+              resizeForLabel: true
+              tabable: true
+              model: copyColor
+            )
+           (ActionButtonSpec
+              label: 'Paste Color'
+              name: 'PasteColor'
+              layout: (LayoutFrame 108 0 236 0 196 0 258 0)
+              translateLabel: true
+              resizeForLabel: true
+              tabable: true
+              model: pasteColor
+            )
            )
          
         )
@@ -425,6 +504,10 @@
 
 colorName
     ^ colorNameHolder value
+!
+
+htmlColorName
+    ^ htmlColorNameHolder value
 ! !
 
 !ColorEditDialog methodsFor:'actions'!
@@ -440,6 +523,8 @@
     box foregroundColor:(clr brightness < 0.5 
                             ifTrue:[Color white] 
                             ifFalse:[Color black]).
+
+    self htmlColorNameHolder value:('#',clr hex).
 !
 
 colorNameChanged
@@ -466,6 +551,14 @@
     self colorChanged
 !
 
+copyColor
+    self window setClipboardObject:self color
+!
+
+copyColorName
+    self window setClipboardText:self htmlColorName
+!
+
 hlsSliderChanged
     "compute rgb"
 
@@ -478,6 +571,17 @@
     self colorChanged
 !
 
+pasteColor
+    |copyBufferColor|
+
+    copyBufferColor := self window getClipboardObject.
+    copyBufferColor isColor ifFalse:[
+        self window beep.
+        ^ self
+    ].
+    self color:copyBufferColor
+!
+
 rgbSliderChanged
     "compute hls"
 
@@ -526,6 +630,13 @@
     ^green
 !
 
+htmlColorNameHolder
+    htmlColorNameHolder isNil ifTrue:[
+        htmlColorNameHolder := '' asValue.
+    ].
+    ^htmlColorNameHolder
+!
+
 hue
     hue isNil ifTrue:[
         hue := 0 asValue.