Files
libreoffice/svtools/source/dialogs/colrdlg.cxx

327 lines
11 KiB
C++
Raw Normal View History

2000-09-18 16:07:07 +00:00
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
2000-09-18 16:07:07 +00:00
*
* Copyright 2000, 2010 Oracle and/or its affiliates.
2000-09-18 16:07:07 +00:00
*
* OpenOffice.org - a multi-platform office productivity suite
2000-09-18 16:07:07 +00:00
*
* This file is part of OpenOffice.org.
2000-09-18 16:07:07 +00:00
*
* 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.
2000-09-18 16:07:07 +00:00
*
* 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).
2000-09-18 16:07:07 +00:00
*
* 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.
2000-09-18 16:07:07 +00:00
*
************************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_svtools.hxx"
2000-09-18 16:07:07 +00:00
#include <svtools/svtdata.hxx>
2000-09-18 16:07:07 +00:00
#include "colrdlg.hrc"
#include <svtools/colrdlg.hxx>
2000-09-18 16:07:07 +00:00
// ---------------
// - 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 ) ),
2000-09-18 16:07:07 +00:00
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 ) ),
2000-09-18 16:07:07 +00:00
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 )
2000-09-18 16:07:07 +00:00
{
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 )
2000-09-18 16:07:07 +00:00
{
//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 );
}