diff options
Diffstat (limited to 'svtools/source/dialogs/colrdlg.cxx')
-rw-r--r-- | svtools/source/dialogs/colrdlg.cxx | 331 |
1 files changed, 331 insertions, 0 deletions
diff --git a/svtools/source/dialogs/colrdlg.cxx b/svtools/source/dialogs/colrdlg.cxx new file mode 100644 index 000000000000..3b40f498c656 --- /dev/null +++ b/svtools/source/dialogs/colrdlg.cxx @@ -0,0 +1,331 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: colrdlg.cxx,v $ + * $Revision: 1.7 $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_svtools.hxx" +#ifndef GCC +#endif + +#include <svtools/svtdata.hxx> +#include "colrdlg.hrc" +#include <svtools/colrdlg.hxx> + +// --------------- +// - ColorDialog - +// --------------- + +SvColorDialog::SvColorDialog( Window* pWindow ) : + ModalDialog ( pWindow, SvtResId( DLG_COLOR ) ), + maColMixCtrl ( this, SvtResId( VAL_SET_COLOR ), 8, 8 ), + maBtn1 ( this, SvtResId( BTN_1 ) ), + maBtn2 ( this, SvtResId( BTN_2 ) ), + //maBtn3 ( this, SvtResId( BTN_3 ) ), + //maBtn4 ( this, SvtResId( BTN_4 ) ), + //maFtRGB ( this, SvtResId( FT_RGB ) ), + maCtlColor ( this, SvtResId( CTL_COLOR ) ), + + maFtCyan ( this, SvtResId( FT_CYAN ) ), + maNumCyan ( this, SvtResId( NUM_CYAN ) ), + maFtMagenta ( this, SvtResId( FT_MAGENTA ) ), + maNumMagenta ( this, SvtResId( NUM_MAGENTA ) ), + maFtYellow ( this, SvtResId( FT_YELLOW ) ), + maNumYellow ( this, SvtResId( NUM_YELLOW ) ), + maFtKey ( this, SvtResId( FT_KEY ) ), + maNumKey ( this, SvtResId( NUM_KEY ) ), + + maFtRed ( this, SvtResId( FT_RED ) ), + maNumRed ( this, SvtResId( NUM_RED ) ), + maFtGreen ( this, SvtResId( FT_GREEN ) ), + maNumGreen ( this, SvtResId( NUM_GREEN ) ), + maFtBlue ( this, SvtResId( FT_BLUE ) ), + maNumBlue ( this, SvtResId( NUM_BLUE ) ), + + maFtHue ( this, SvtResId( FT_HUE ) ), + maNumHue ( this, SvtResId( NUM_HUE ) ), + maFtSaturation ( this, SvtResId( FT_SATURATION ) ), + maNumSaturation ( this, SvtResId( NUM_SATURATION ) ), + maFtLuminance ( this, SvtResId( FT_LUMINANCE ) ), + maNumLuminance ( this, SvtResId( NUM_LUMINANCE ) ), + + maCtlPreview ( this, SvtResId( CTL_PREVIEW ) ), + maCtlPreviewOld ( this, SvtResId( CTL_PREVIEW_OLD ) ), + + maBtnOK ( this, SvtResId( BTN_OK ) ), + maBtnCancel ( this, SvtResId( BTN_CANCEL ) ), + maBtnHelp ( this, SvtResId( BTN_HELP ) ) +{ + FreeResource(); + + maColMixCtrl.SetDoubleClickHdl( LINK( this, SvColorDialog, ClickMixCtrlHdl ) ); + maColMixCtrl.SetSelectHdl( LINK( this, SvColorDialog, SelectMixCtrlHdl ) ); + + Link aLink( LINK( this, SvColorDialog, ColorModifyHdl ) ); + maCtlColor.SetModifyHdl( aLink ); + + maNumRed.SetModifyHdl( aLink ); + maNumGreen.SetModifyHdl( aLink ); + maNumBlue.SetModifyHdl( aLink ); + + maNumCyan.SetModifyHdl( aLink ); + maNumMagenta.SetModifyHdl( aLink ); + maNumYellow.SetModifyHdl( aLink ); + maNumKey.SetModifyHdl( aLink ); + + maNumHue.SetModifyHdl( aLink ); + maNumSaturation.SetModifyHdl( aLink ); + maNumLuminance.SetModifyHdl( aLink ); + + aLink = ( LINK( this, SvColorDialog, ClickBtnHdl ) ); + maBtn1.SetClickHdl( aLink ); + maBtn2.SetClickHdl( aLink ); + //maBtn3.SetClickHdl( aLink ); + //maBtn4.SetClickHdl( aLink ); + + maColMixCtrl.SetExtraSpacing( 0 ); +} + + +// ----------------------------------------------------------------------- +SvColorDialog::~SvColorDialog() +{ +} + +// ----------------------------------------------------------------------- +void SvColorDialog::Initialize() +{ + maNumRed.SetValue( maColor.GetRed() ); + maNumGreen.SetValue( maColor.GetGreen() ); + maNumBlue.SetValue( maColor.GetBlue() ); + + ColorCMYK aColorCMYK( maColor ); + + long aCyan = (long) ( (double)aColorCMYK.GetCyan() * 100.0 / 255.0 + 0.5 ); + long aMagenta = (long) ( (double)aColorCMYK.GetMagenta() * 100.0 / 255.0 + 0.5 ); + long aYellow = (long) ( (double)aColorCMYK.GetYellow() * 100.0 / 255.0 + 0.5 ); + long aKey = (long) ( (double)aColorCMYK.GetKey() * 100.0 / 255.0 + 0.5 ); + maNumCyan.SetValue( aCyan ); + maNumMagenta.SetValue( aMagenta ); + maNumYellow.SetValue( aYellow ); + maNumKey.SetValue( aKey ); + + ColorHSB aColorHSB( maColor ); + maNumHue.SetValue( aColorHSB.GetHue() ); + maNumSaturation.SetValue( aColorHSB.GetSat() ); + maNumLuminance.SetValue( aColorHSB.GetBri() ); + + maCtlColor.SetColor( aColorHSB ); + + maColMixCtrl.SelectItem( 1 ); + + maCtlPreview.SetColor( maColor ); + maCtlPreviewOld.SetColor( maColor ); +} + +// ----------------------------------------------------------------------- +void SvColorDialog::SetColor( const Color& rColor ) +{ + maColor = rColor; +} + +// ----------------------------------------------------------------------- +const Color& SvColorDialog::GetColor() const +{ + return( maColor ); +} + +// ----------------------------------------------------------------------- +IMPL_LINK( SvColorDialog, ColorModifyHdl, void *, p ) +{ + UINT16 n = 0x00; // 1 == RGB, 2 == CMYK, 4 == HSB + + if( p == &maCtlColor ) + { + maColor = maCtlColor.GetColor(); + maNumRed.SetValue( maColor.GetRed() ); + maNumGreen.SetValue( maColor.GetGreen() ); + maNumBlue.SetValue( maColor.GetBlue() ); + + n = 7; + } + else if( p == &maNumRed ) + { + maColor.SetRed( (UINT8)maNumRed.GetValue() ); + maCtlColor.SetColor( maColor ); + n = 6; + } + else if( p == &maNumGreen ) + { + maColor.SetGreen( (UINT8)maNumGreen.GetValue() ); + maCtlColor.SetColor( maColor ); + n = 6; + } + else if( p == &maNumBlue ) + { + maColor.SetBlue( (UINT8)maNumBlue.GetValue() ); + maCtlColor.SetColor( maColor ); + n = 6; + } + else if( p == &maNumHue || + p == &maNumSaturation || + p == &maNumLuminance ) + { + + ColorHSB aColorHSB( (UINT16) maNumHue.GetValue(), + (UINT16) maNumSaturation.GetValue(), + (UINT16) maNumLuminance.GetValue() ); + maCtlColor.SetColor( aColorHSB ); + maColor = maCtlColor.GetColor(); + n = 3; + } + else if( p == &maNumCyan || + p == &maNumMagenta || + p == &maNumYellow || + p == &maNumKey ) + { + long aCyan = (long) ( (double)maNumCyan.GetValue() * 255.0 / 100.0 + 0.5 ); + long aMagenta = (long) ( (double)maNumMagenta.GetValue() * 255.0 / 100.0 + 0.5 ); + long aYellow = (long) ( (double)maNumYellow.GetValue() * 255.0 / 100.0 + 0.5 ); + long aKey = (long) ( (double)maNumKey.GetValue() * 255.0 / 100.0 + 0.5 ); + + ColorCMYK aColorCMYK( (UINT16) aCyan, + (UINT16) aMagenta, + (UINT16) aYellow, + (UINT16) aKey ); + maColor = aColorCMYK.GetRGB(); + maCtlColor.SetColor( maColor ); + n = 5; + } + + if( n & 1 ) // RGB setzen + { + maNumRed.SetValue( maColor.GetRed() ); + maNumGreen.SetValue( maColor.GetGreen() ); + maNumBlue.SetValue( maColor.GetBlue() ); + } + if( n & 2 ) // CMYK setzen + { + ColorCMYK aColorCMYK( maColor ); + long aCyan = (long) ( (double)aColorCMYK.GetCyan() * 100.0 / 255.0 + 0.5 ); + long aMagenta = (long) ( (double)aColorCMYK.GetMagenta() * 100.0 / 255.0 + 0.5 ); + long aYellow = (long) ( (double)aColorCMYK.GetYellow() * 100.0 / 255.0 + 0.5 ); + long aKey = (long) ( (double)aColorCMYK.GetKey() * 100.0 / 255.0 + 0.5 ); + maNumCyan.SetValue( aCyan ); + maNumMagenta.SetValue( aMagenta ); + maNumYellow.SetValue( aYellow ); + maNumKey.SetValue( aKey ); + } + if( n & 4 ) // HSB setzen + { + ColorHSB aColorHSB( maColor ); + maNumHue.SetValue( aColorHSB.GetHue() ); + maNumSaturation.SetValue( aColorHSB.GetSat() ); + maNumLuminance.SetValue( aColorHSB.GetBri() ); + } + + maCtlPreview.SetColor( maColor ); + + return 0; +} + +// ----------------------------------------------------------------------- +IMPL_LINK( SvColorDialog, ClickBtnHdl, void *, p ) +{ + /* + Color aColor = maCtlColor.GetColor(); + if( p == &maBtn1 ) + maColMixCtrl.SetColor( CMC_TOPLEFT, aColor ); + if( p == &maBtn2 ) + maColMixCtrl.SetColor( CMC_TOPRIGHT, aColor ); + if( p == &maBtn3 ) + maColMixCtrl.SetColor( CMC_BOTTOMLEFT, aColor ); + if( p == &maBtn4 ) + maColMixCtrl.SetColor( CMC_BOTTOMRIGHT, aColor ); + */ + + if( p == &maBtn1 ) + { + CMCPosition ePos = maColMixCtrl.GetCMCPosition(); + if( ePos != CMC_OTHER ) + maColMixCtrl.SetColor( ePos, maColor ); + } + else if( p == &maBtn2 ) + { + USHORT nPos = maColMixCtrl.GetSelectItemId(); + maColor = maColMixCtrl.GetItemColor( nPos ); + maCtlColor.SetColor( maColor ); + ColorModifyHdl( &maCtlColor ); + } + + return 0; +} + +// ----------------------------------------------------------------------- +IMPL_LINK( SvColorDialog, ClickMixCtrlHdl, void *, EMPTYARG ) +{ + USHORT nPos = maColMixCtrl.GetSelectItemId(); + CMCPosition ePos = maColMixCtrl.GetCMCPosition(); + + if( ePos != CMC_OTHER ) + maColMixCtrl.SetColor( ePos, maColor ); + else + { + maColor = maColMixCtrl.GetItemColor( nPos ); + maCtlColor.SetColor( maColor ); + ColorModifyHdl( &maCtlColor ); + } + + return 0; +} + +// ----------------------------------------------------------------------- +IMPL_LINK( SvColorDialog, SelectMixCtrlHdl, void *, EMPTYARG ) +{ + //USHORT nPos = maColMixCtrl.GetSelectItemId(); + //maFtRGB.SetText( maColMixCtrl.GetItemText( nPos ) ); + + CMCPosition ePos = maColMixCtrl.GetCMCPosition(); + if( ePos == CMC_OTHER ) + maBtn1.Enable( FALSE ); + else + maBtn1.Enable(); + + return 0; +} + +// ----------------------------------------------------------------------- +short SvColorDialog::Execute() +{ + Initialize(); + + short nRet = ModalDialog::Execute(); + + return( nRet ); +} + |