1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 // MARKER(update_precomp.py): autogen include statement, do not remove 29 #include "precompiled_svtools.hxx" 30 #ifndef GCC 31 #endif 32 33 #include <svtools/svtdata.hxx> 34 #include "colrdlg.hrc" 35 #include <svtools/colrdlg.hxx> 36 37 // --------------- 38 // - ColorDialog - 39 // --------------- 40 41 SvColorDialog::SvColorDialog( Window* pWindow ) : 42 ModalDialog ( pWindow, SvtResId( DLG_COLOR ) ), 43 maColMixCtrl ( this, SvtResId( VAL_SET_COLOR ), 8, 8 ), 44 maBtn1 ( this, SvtResId( BTN_1 ) ), 45 maBtn2 ( this, SvtResId( BTN_2 ) ), 46 //maBtn3 ( this, SvtResId( BTN_3 ) ), 47 //maBtn4 ( this, SvtResId( BTN_4 ) ), 48 //maFtRGB ( this, SvtResId( FT_RGB ) ), 49 maCtlColor ( this, SvtResId( CTL_COLOR ) ), 50 51 maFtCyan ( this, SvtResId( FT_CYAN ) ), 52 maNumCyan ( this, SvtResId( NUM_CYAN ) ), 53 maFtMagenta ( this, SvtResId( FT_MAGENTA ) ), 54 maNumMagenta ( this, SvtResId( NUM_MAGENTA ) ), 55 maFtYellow ( this, SvtResId( FT_YELLOW ) ), 56 maNumYellow ( this, SvtResId( NUM_YELLOW ) ), 57 maFtKey ( this, SvtResId( FT_KEY ) ), 58 maNumKey ( this, SvtResId( NUM_KEY ) ), 59 60 maFtRed ( this, SvtResId( FT_RED ) ), 61 maNumRed ( this, SvtResId( NUM_RED ) ), 62 maFtGreen ( this, SvtResId( FT_GREEN ) ), 63 maNumGreen ( this, SvtResId( NUM_GREEN ) ), 64 maFtBlue ( this, SvtResId( FT_BLUE ) ), 65 maNumBlue ( this, SvtResId( NUM_BLUE ) ), 66 67 maFtHue ( this, SvtResId( FT_HUE ) ), 68 maNumHue ( this, SvtResId( NUM_HUE ) ), 69 maFtSaturation ( this, SvtResId( FT_SATURATION ) ), 70 maNumSaturation ( this, SvtResId( NUM_SATURATION ) ), 71 maFtLuminance ( this, SvtResId( FT_LUMINANCE ) ), 72 maNumLuminance ( this, SvtResId( NUM_LUMINANCE ) ), 73 74 maCtlPreview ( this, SvtResId( CTL_PREVIEW ) ), 75 maCtlPreviewOld ( this, SvtResId( CTL_PREVIEW_OLD ) ), 76 77 maBtnOK ( this, SvtResId( BTN_OK ) ), 78 maBtnCancel ( this, SvtResId( BTN_CANCEL ) ), 79 maBtnHelp ( this, SvtResId( BTN_HELP ) ) 80 { 81 FreeResource(); 82 83 maColMixCtrl.SetDoubleClickHdl( LINK( this, SvColorDialog, ClickMixCtrlHdl ) ); 84 maColMixCtrl.SetSelectHdl( LINK( this, SvColorDialog, SelectMixCtrlHdl ) ); 85 86 Link aLink( LINK( this, SvColorDialog, ColorModifyHdl ) ); 87 maCtlColor.SetModifyHdl( aLink ); 88 89 maNumRed.SetModifyHdl( aLink ); 90 maNumGreen.SetModifyHdl( aLink ); 91 maNumBlue.SetModifyHdl( aLink ); 92 93 maNumCyan.SetModifyHdl( aLink ); 94 maNumMagenta.SetModifyHdl( aLink ); 95 maNumYellow.SetModifyHdl( aLink ); 96 maNumKey.SetModifyHdl( aLink ); 97 98 maNumHue.SetModifyHdl( aLink ); 99 maNumSaturation.SetModifyHdl( aLink ); 100 maNumLuminance.SetModifyHdl( aLink ); 101 102 aLink = ( LINK( this, SvColorDialog, ClickBtnHdl ) ); 103 maBtn1.SetClickHdl( aLink ); 104 maBtn2.SetClickHdl( aLink ); 105 //maBtn3.SetClickHdl( aLink ); 106 //maBtn4.SetClickHdl( aLink ); 107 108 maColMixCtrl.SetExtraSpacing( 0 ); 109 } 110 111 112 // ----------------------------------------------------------------------- 113 SvColorDialog::~SvColorDialog() 114 { 115 } 116 117 // ----------------------------------------------------------------------- 118 void SvColorDialog::Initialize() 119 { 120 maNumRed.SetValue( maColor.GetRed() ); 121 maNumGreen.SetValue( maColor.GetGreen() ); 122 maNumBlue.SetValue( maColor.GetBlue() ); 123 124 ColorCMYK aColorCMYK( maColor ); 125 126 long aCyan = (long) ( (double)aColorCMYK.GetCyan() * 100.0 / 255.0 + 0.5 ); 127 long aMagenta = (long) ( (double)aColorCMYK.GetMagenta() * 100.0 / 255.0 + 0.5 ); 128 long aYellow = (long) ( (double)aColorCMYK.GetYellow() * 100.0 / 255.0 + 0.5 ); 129 long aKey = (long) ( (double)aColorCMYK.GetKey() * 100.0 / 255.0 + 0.5 ); 130 maNumCyan.SetValue( aCyan ); 131 maNumMagenta.SetValue( aMagenta ); 132 maNumYellow.SetValue( aYellow ); 133 maNumKey.SetValue( aKey ); 134 135 ColorHSB aColorHSB( maColor ); 136 maNumHue.SetValue( aColorHSB.GetHue() ); 137 maNumSaturation.SetValue( aColorHSB.GetSat() ); 138 maNumLuminance.SetValue( aColorHSB.GetBri() ); 139 140 maCtlColor.SetColor( aColorHSB ); 141 142 maColMixCtrl.SelectItem( 1 ); 143 144 maCtlPreview.SetColor( maColor ); 145 maCtlPreviewOld.SetColor( maColor ); 146 } 147 148 // ----------------------------------------------------------------------- 149 void SvColorDialog::SetColor( const Color& rColor ) 150 { 151 maColor = rColor; 152 } 153 154 // ----------------------------------------------------------------------- 155 const Color& SvColorDialog::GetColor() const 156 { 157 return( maColor ); 158 } 159 160 // ----------------------------------------------------------------------- 161 IMPL_LINK( SvColorDialog, ColorModifyHdl, void *, p ) 162 { 163 sal_uInt16 n = 0x00; // 1 == RGB, 2 == CMYK, 4 == HSB 164 165 if( p == &maCtlColor ) 166 { 167 maColor = maCtlColor.GetColor(); 168 maNumRed.SetValue( maColor.GetRed() ); 169 maNumGreen.SetValue( maColor.GetGreen() ); 170 maNumBlue.SetValue( maColor.GetBlue() ); 171 172 n = 7; 173 } 174 else if( p == &maNumRed ) 175 { 176 maColor.SetRed( (sal_uInt8)maNumRed.GetValue() ); 177 maCtlColor.SetColor( maColor ); 178 n = 6; 179 } 180 else if( p == &maNumGreen ) 181 { 182 maColor.SetGreen( (sal_uInt8)maNumGreen.GetValue() ); 183 maCtlColor.SetColor( maColor ); 184 n = 6; 185 } 186 else if( p == &maNumBlue ) 187 { 188 maColor.SetBlue( (sal_uInt8)maNumBlue.GetValue() ); 189 maCtlColor.SetColor( maColor ); 190 n = 6; 191 } 192 else if( p == &maNumHue || 193 p == &maNumSaturation || 194 p == &maNumLuminance ) 195 { 196 197 ColorHSB aColorHSB( (sal_uInt16) maNumHue.GetValue(), 198 (sal_uInt16) maNumSaturation.GetValue(), 199 (sal_uInt16) maNumLuminance.GetValue() ); 200 maCtlColor.SetColor( aColorHSB ); 201 maColor = maCtlColor.GetColor(); 202 n = 3; 203 } 204 else if( p == &maNumCyan || 205 p == &maNumMagenta || 206 p == &maNumYellow || 207 p == &maNumKey ) 208 { 209 long aCyan = (long) ( (double)maNumCyan.GetValue() * 255.0 / 100.0 + 0.5 ); 210 long aMagenta = (long) ( (double)maNumMagenta.GetValue() * 255.0 / 100.0 + 0.5 ); 211 long aYellow = (long) ( (double)maNumYellow.GetValue() * 255.0 / 100.0 + 0.5 ); 212 long aKey = (long) ( (double)maNumKey.GetValue() * 255.0 / 100.0 + 0.5 ); 213 214 ColorCMYK aColorCMYK( (sal_uInt16) aCyan, 215 (sal_uInt16) aMagenta, 216 (sal_uInt16) aYellow, 217 (sal_uInt16) aKey ); 218 maColor = aColorCMYK.GetRGB(); 219 maCtlColor.SetColor( maColor ); 220 n = 5; 221 } 222 223 if( n & 1 ) // RGB setzen 224 { 225 maNumRed.SetValue( maColor.GetRed() ); 226 maNumGreen.SetValue( maColor.GetGreen() ); 227 maNumBlue.SetValue( maColor.GetBlue() ); 228 } 229 if( n & 2 ) // CMYK setzen 230 { 231 ColorCMYK aColorCMYK( maColor ); 232 long aCyan = (long) ( (double)aColorCMYK.GetCyan() * 100.0 / 255.0 + 0.5 ); 233 long aMagenta = (long) ( (double)aColorCMYK.GetMagenta() * 100.0 / 255.0 + 0.5 ); 234 long aYellow = (long) ( (double)aColorCMYK.GetYellow() * 100.0 / 255.0 + 0.5 ); 235 long aKey = (long) ( (double)aColorCMYK.GetKey() * 100.0 / 255.0 + 0.5 ); 236 maNumCyan.SetValue( aCyan ); 237 maNumMagenta.SetValue( aMagenta ); 238 maNumYellow.SetValue( aYellow ); 239 maNumKey.SetValue( aKey ); 240 } 241 if( n & 4 ) // HSB setzen 242 { 243 ColorHSB aColorHSB( maColor ); 244 maNumHue.SetValue( aColorHSB.GetHue() ); 245 maNumSaturation.SetValue( aColorHSB.GetSat() ); 246 maNumLuminance.SetValue( aColorHSB.GetBri() ); 247 } 248 249 maCtlPreview.SetColor( maColor ); 250 251 return 0; 252 } 253 254 // ----------------------------------------------------------------------- 255 IMPL_LINK( SvColorDialog, ClickBtnHdl, void *, p ) 256 { 257 /* 258 Color aColor = maCtlColor.GetColor(); 259 if( p == &maBtn1 ) 260 maColMixCtrl.SetColor( CMC_TOPLEFT, aColor ); 261 if( p == &maBtn2 ) 262 maColMixCtrl.SetColor( CMC_TOPRIGHT, aColor ); 263 if( p == &maBtn3 ) 264 maColMixCtrl.SetColor( CMC_BOTTOMLEFT, aColor ); 265 if( p == &maBtn4 ) 266 maColMixCtrl.SetColor( CMC_BOTTOMRIGHT, aColor ); 267 */ 268 269 if( p == &maBtn1 ) 270 { 271 CMCPosition ePos = maColMixCtrl.GetCMCPosition(); 272 if( ePos != CMC_OTHER ) 273 maColMixCtrl.SetColor( ePos, maColor ); 274 } 275 else if( p == &maBtn2 ) 276 { 277 sal_uInt16 nPos = maColMixCtrl.GetSelectItemId(); 278 maColor = maColMixCtrl.GetItemColor( nPos ); 279 maCtlColor.SetColor( maColor ); 280 ColorModifyHdl( &maCtlColor ); 281 } 282 283 return 0; 284 } 285 286 // ----------------------------------------------------------------------- 287 IMPL_LINK( SvColorDialog, ClickMixCtrlHdl, void *, EMPTYARG ) 288 { 289 sal_uInt16 nPos = maColMixCtrl.GetSelectItemId(); 290 CMCPosition ePos = maColMixCtrl.GetCMCPosition(); 291 292 if( ePos != CMC_OTHER ) 293 maColMixCtrl.SetColor( ePos, maColor ); 294 else 295 { 296 maColor = maColMixCtrl.GetItemColor( nPos ); 297 maCtlColor.SetColor( maColor ); 298 ColorModifyHdl( &maCtlColor ); 299 } 300 301 return 0; 302 } 303 304 // ----------------------------------------------------------------------- 305 IMPL_LINK( SvColorDialog, SelectMixCtrlHdl, void *, EMPTYARG ) 306 { 307 //sal_uInt16 nPos = maColMixCtrl.GetSelectItemId(); 308 //maFtRGB.SetText( maColMixCtrl.GetItemText( nPos ) ); 309 310 CMCPosition ePos = maColMixCtrl.GetCMCPosition(); 311 if( ePos == CMC_OTHER ) 312 maBtn1.Enable( sal_False ); 313 else 314 maBtn1.Enable(); 315 316 return 0; 317 } 318 319 // ----------------------------------------------------------------------- 320 short SvColorDialog::Execute() 321 { 322 Initialize(); 323 324 short nRet = ModalDialog::Execute(); 325 326 return( nRet ); 327 } 328 329