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