xref: /aoo41x/main/svtools/source/dialogs/colrdlg.cxx (revision cdf0e10c)
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