xref: /aoo4110/main/svx/source/dialog/_bmpmask.cxx (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_svx.hxx"
26*b1cdbd2cSJim Jagielski #include <vcl/wrkwin.hxx>
27*b1cdbd2cSJim Jagielski #include <tools/shl.hxx>
28*b1cdbd2cSJim Jagielski #include <vcl/metaact.hxx>
29*b1cdbd2cSJim Jagielski #include <svtools/valueset.hxx>
30*b1cdbd2cSJim Jagielski #include <svl/eitem.hxx>
31*b1cdbd2cSJim Jagielski #include <sfx2/dispatch.hxx>
32*b1cdbd2cSJim Jagielski #include <svtools/colrdlg.hxx>
33*b1cdbd2cSJim Jagielski 
34*b1cdbd2cSJim Jagielski #define BMPMASK_PRIVATE
35*b1cdbd2cSJim Jagielski 
36*b1cdbd2cSJim Jagielski #include <svx/dialmgr.hxx>
37*b1cdbd2cSJim Jagielski #include <svx/bmpmask.hxx>
38*b1cdbd2cSJim Jagielski #include <svx/dialogs.hrc>
39*b1cdbd2cSJim Jagielski #include <bmpmask.hrc>
40*b1cdbd2cSJim Jagielski #include <svx/svxids.hrc>
41*b1cdbd2cSJim Jagielski 
42*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------
43*b1cdbd2cSJim Jagielski 
44*b1cdbd2cSJim Jagielski #define BMP_RESID(nId)  ResId(nId, DIALOG_MGR())
45*b1cdbd2cSJim Jagielski #define TRANSP_STRING	"Transparent"
46*b1cdbd2cSJim Jagielski #define TRANSP_COL		(Color( 252, 252, 252 ))
47*b1cdbd2cSJim Jagielski #define OWN_CALLMODE	SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD
48*b1cdbd2cSJim Jagielski 
49*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------
50*b1cdbd2cSJim Jagielski 
51*b1cdbd2cSJim Jagielski #define TEST_COLS()													\
52*b1cdbd2cSJim Jagielski {																	\
53*b1cdbd2cSJim Jagielski 	nR = aCol.GetRed(); nG = aCol.GetGreen(); nB = aCol.GetBlue();	\
54*b1cdbd2cSJim Jagielski 	for( i = 0; i < nCount; i++ )									\
55*b1cdbd2cSJim Jagielski 	{																\
56*b1cdbd2cSJim Jagielski 		if ( ( pMinR[i] <= nR ) && ( pMaxR[i] >= nR ) &&			\
57*b1cdbd2cSJim Jagielski 			 ( pMinG[i] <= nG ) && ( pMaxG[i] >= nG ) &&			\
58*b1cdbd2cSJim Jagielski 			 ( pMinB[i] <= nB ) && ( pMaxB[i] >= nB ) )				\
59*b1cdbd2cSJim Jagielski 		{															\
60*b1cdbd2cSJim Jagielski 			aCol = pDstCols[i];	bReplace = sal_True; break;				\
61*b1cdbd2cSJim Jagielski 		}															\
62*b1cdbd2cSJim Jagielski 	}																\
63*b1cdbd2cSJim Jagielski }
64*b1cdbd2cSJim Jagielski 
65*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
66*b1cdbd2cSJim Jagielski 
67*b1cdbd2cSJim Jagielski SFX_IMPL_DOCKINGWINDOW( SvxBmpMaskChildWindow, SID_BMPMASK )
68*b1cdbd2cSJim Jagielski 
69*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
70*b1cdbd2cSJim Jagielski 
71*b1cdbd2cSJim Jagielski class ColorWindow : public Control
72*b1cdbd2cSJim Jagielski {
73*b1cdbd2cSJim Jagielski 	Color       aColor;
74*b1cdbd2cSJim Jagielski 
75*b1cdbd2cSJim Jagielski 
76*b1cdbd2cSJim Jagielski public:
77*b1cdbd2cSJim Jagielski 
ColorWindow(Window * pParent,WinBits nWinStyle)78*b1cdbd2cSJim Jagielski 				ColorWindow( Window* pParent, WinBits nWinStyle ) :
79*b1cdbd2cSJim Jagielski 					Control( pParent, nWinStyle ),
80*b1cdbd2cSJim Jagielski 					aColor( COL_WHITE ) {};
81*b1cdbd2cSJim Jagielski 
ColorWindow(Window * pParent,const ResId & rId)82*b1cdbd2cSJim Jagielski 				ColorWindow( Window* pParent, const ResId& rId ) :
83*b1cdbd2cSJim Jagielski 					Control( pParent, rId ),
84*b1cdbd2cSJim Jagielski 					aColor( COL_WHITE ) {};
85*b1cdbd2cSJim Jagielski 
SetColor(const Color & rColor)86*b1cdbd2cSJim Jagielski 	void        SetColor( const Color& rColor )
87*b1cdbd2cSJim Jagielski 				{
88*b1cdbd2cSJim Jagielski 					aColor = rColor;
89*b1cdbd2cSJim Jagielski 					Invalidate();
90*b1cdbd2cSJim Jagielski 				}
91*b1cdbd2cSJim Jagielski 
92*b1cdbd2cSJim Jagielski 	virtual void Paint( const Rectangle& rRect );
93*b1cdbd2cSJim Jagielski };
94*b1cdbd2cSJim Jagielski 
95*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------
96*b1cdbd2cSJim Jagielski 
97*b1cdbd2cSJim Jagielski class MaskSet : public ValueSet
98*b1cdbd2cSJim Jagielski {
99*b1cdbd2cSJim Jagielski 	SvxBmpMask*     pSvxBmpMask;
100*b1cdbd2cSJim Jagielski 
101*b1cdbd2cSJim Jagielski 
102*b1cdbd2cSJim Jagielski public:
103*b1cdbd2cSJim Jagielski 					MaskSet( SvxBmpMask* pParent, WinBits nWinStyle );
104*b1cdbd2cSJim Jagielski 					MaskSet( SvxBmpMask* pParent, const ResId& rId );
105*b1cdbd2cSJim Jagielski 
106*b1cdbd2cSJim Jagielski 	virtual void    Select();
107*b1cdbd2cSJim Jagielski 	virtual void KeyInput( const KeyEvent& rKEvt );
108*b1cdbd2cSJim Jagielski 	virtual void GetFocus();
109*b1cdbd2cSJim Jagielski 
110*b1cdbd2cSJim Jagielski 	void onEditColor();
111*b1cdbd2cSJim Jagielski };
112*b1cdbd2cSJim Jagielski 
113*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------
114*b1cdbd2cSJim Jagielski 
MaskSet(SvxBmpMask * pParent,WinBits nWinStyle)115*b1cdbd2cSJim Jagielski MaskSet::MaskSet( SvxBmpMask* pParent, WinBits nWinStyle ) :
116*b1cdbd2cSJim Jagielski 			ValueSet        ( pParent, nWinStyle ),
117*b1cdbd2cSJim Jagielski 			pSvxBmpMask     ( pParent )
118*b1cdbd2cSJim Jagielski {
119*b1cdbd2cSJim Jagielski }
120*b1cdbd2cSJim Jagielski 
121*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------
122*b1cdbd2cSJim Jagielski 
MaskSet(SvxBmpMask * pParent,const ResId & rId)123*b1cdbd2cSJim Jagielski MaskSet::MaskSet( SvxBmpMask* pParent, const ResId& rId ) :
124*b1cdbd2cSJim Jagielski 			ValueSet        ( pParent, rId ),
125*b1cdbd2cSJim Jagielski 			pSvxBmpMask     ( pParent )
126*b1cdbd2cSJim Jagielski {
127*b1cdbd2cSJim Jagielski }
128*b1cdbd2cSJim Jagielski 
129*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------
130*b1cdbd2cSJim Jagielski 
Select()131*b1cdbd2cSJim Jagielski void MaskSet::Select()
132*b1cdbd2cSJim Jagielski {
133*b1cdbd2cSJim Jagielski 	ValueSet::Select();
134*b1cdbd2cSJim Jagielski 
135*b1cdbd2cSJim Jagielski 	pSvxBmpMask->onSelect( this );
136*b1cdbd2cSJim Jagielski }
137*b1cdbd2cSJim Jagielski 
GetFocus()138*b1cdbd2cSJim Jagielski void MaskSet::GetFocus()
139*b1cdbd2cSJim Jagielski {
140*b1cdbd2cSJim Jagielski 	ValueSet::GetFocus();
141*b1cdbd2cSJim Jagielski 	SelectItem( 1 );
142*b1cdbd2cSJim Jagielski 	pSvxBmpMask->onSelect( this );
143*b1cdbd2cSJim Jagielski }
144*b1cdbd2cSJim Jagielski 
KeyInput(const KeyEvent & rKEvt)145*b1cdbd2cSJim Jagielski void MaskSet::KeyInput( const KeyEvent& rKEvt )
146*b1cdbd2cSJim Jagielski {
147*b1cdbd2cSJim Jagielski     KeyCode aCode = rKEvt.GetKeyCode();
148*b1cdbd2cSJim Jagielski 
149*b1cdbd2cSJim Jagielski 	// if the key has a modifier we don't care
150*b1cdbd2cSJim Jagielski     if( aCode.GetModifier() )
151*b1cdbd2cSJim Jagielski     {
152*b1cdbd2cSJim Jagielski         ValueSet::KeyInput( rKEvt );
153*b1cdbd2cSJim Jagielski     }
154*b1cdbd2cSJim Jagielski 	else
155*b1cdbd2cSJim Jagielski 	{
156*b1cdbd2cSJim Jagielski 		// check for keys that interests us
157*b1cdbd2cSJim Jagielski 		switch ( aCode.GetCode() )
158*b1cdbd2cSJim Jagielski 		{
159*b1cdbd2cSJim Jagielski 			case KEY_SPACE:
160*b1cdbd2cSJim Jagielski 				onEditColor();
161*b1cdbd2cSJim Jagielski 				break;
162*b1cdbd2cSJim Jagielski 			default:
163*b1cdbd2cSJim Jagielski 		        ValueSet::KeyInput( rKEvt );
164*b1cdbd2cSJim Jagielski 		}
165*b1cdbd2cSJim Jagielski 
166*b1cdbd2cSJim Jagielski 	}
167*b1cdbd2cSJim Jagielski }
168*b1cdbd2cSJim Jagielski 
onEditColor()169*b1cdbd2cSJim Jagielski void MaskSet::onEditColor()
170*b1cdbd2cSJim Jagielski {
171*b1cdbd2cSJim Jagielski 	SvColorDialog* pColorDlg = new SvColorDialog( GetParent() );
172*b1cdbd2cSJim Jagielski 
173*b1cdbd2cSJim Jagielski 	pColorDlg->SetColor(GetItemColor(1));
174*b1cdbd2cSJim Jagielski 
175*b1cdbd2cSJim Jagielski 	if( pColorDlg->Execute() )
176*b1cdbd2cSJim Jagielski 		SetItemColor( 1, pColorDlg->GetColor() );
177*b1cdbd2cSJim Jagielski 
178*b1cdbd2cSJim Jagielski 	delete pColorDlg;
179*b1cdbd2cSJim Jagielski }
180*b1cdbd2cSJim Jagielski 
181*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------
182*b1cdbd2cSJim Jagielski 
183*b1cdbd2cSJim Jagielski class MaskData
184*b1cdbd2cSJim Jagielski {
185*b1cdbd2cSJim Jagielski 	SvxBmpMask*		pMask;
186*b1cdbd2cSJim Jagielski 	sal_Bool			bIsReady;
187*b1cdbd2cSJim Jagielski 	sal_Bool			bExecState;
188*b1cdbd2cSJim Jagielski 	SfxBindings&	rBindings;
189*b1cdbd2cSJim Jagielski 
190*b1cdbd2cSJim Jagielski public:
191*b1cdbd2cSJim Jagielski 				MaskData( SvxBmpMask* pBmpMask, SfxBindings& rBind );
192*b1cdbd2cSJim Jagielski 
IsCbxReady() const193*b1cdbd2cSJim Jagielski 	sal_Bool		IsCbxReady() const { return bIsReady; }
SetExecState(sal_Bool bState)194*b1cdbd2cSJim Jagielski 	void		SetExecState( sal_Bool bState ) { bExecState = bState; }
IsExecReady() const195*b1cdbd2cSJim Jagielski 	sal_Bool		IsExecReady() const { return bExecState; }
196*b1cdbd2cSJim Jagielski 
197*b1cdbd2cSJim Jagielski 				DECL_LINK( PipetteHdl, ToolBox* pTbx );
198*b1cdbd2cSJim Jagielski 				DECL_LINK( CbxHdl, CheckBox* pCbx );
199*b1cdbd2cSJim Jagielski 				DECL_LINK( CbxTransHdl, CheckBox* pCbx );
200*b1cdbd2cSJim Jagielski 				DECL_LINK( FocusLbHdl, ColorLB* pLb );
201*b1cdbd2cSJim Jagielski 				DECL_LINK( ExecHdl, PushButton* pBtn );
202*b1cdbd2cSJim Jagielski };
203*b1cdbd2cSJim Jagielski 
204*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------
205*b1cdbd2cSJim Jagielski 
MaskData(SvxBmpMask * pBmpMask,SfxBindings & rBind)206*b1cdbd2cSJim Jagielski MaskData::MaskData( SvxBmpMask* pBmpMask, SfxBindings& rBind ) :
207*b1cdbd2cSJim Jagielski 
208*b1cdbd2cSJim Jagielski 	pMask       ( pBmpMask ),
209*b1cdbd2cSJim Jagielski 	bIsReady    ( sal_False ),
210*b1cdbd2cSJim Jagielski 	bExecState  ( sal_False ),
211*b1cdbd2cSJim Jagielski 	rBindings	( rBind )
212*b1cdbd2cSJim Jagielski 
213*b1cdbd2cSJim Jagielski {
214*b1cdbd2cSJim Jagielski }
215*b1cdbd2cSJim Jagielski 
216*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------
217*b1cdbd2cSJim Jagielski 
IMPL_LINK(MaskData,PipetteHdl,ToolBox *,pTbx)218*b1cdbd2cSJim Jagielski IMPL_LINK( MaskData, PipetteHdl, ToolBox*, pTbx )
219*b1cdbd2cSJim Jagielski {
220*b1cdbd2cSJim Jagielski 	SfxBoolItem aBItem( SID_BMPMASK_PIPETTE,
221*b1cdbd2cSJim Jagielski 						pTbx->IsItemChecked( TBI_PIPETTE ) );
222*b1cdbd2cSJim Jagielski 
223*b1cdbd2cSJim Jagielski 	rBindings.GetDispatcher()->Execute( SID_BMPMASK_PIPETTE, OWN_CALLMODE, &aBItem, 0L );
224*b1cdbd2cSJim Jagielski 
225*b1cdbd2cSJim Jagielski 	return 0;
226*b1cdbd2cSJim Jagielski }
227*b1cdbd2cSJim Jagielski 
228*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------
229*b1cdbd2cSJim Jagielski 
IMPL_LINK(MaskData,CbxHdl,CheckBox *,pCbx)230*b1cdbd2cSJim Jagielski IMPL_LINK( MaskData, CbxHdl, CheckBox*, pCbx )
231*b1cdbd2cSJim Jagielski {
232*b1cdbd2cSJim Jagielski 	bIsReady =  pMask->aCbx1.IsChecked() || pMask->aCbx2.IsChecked() ||
233*b1cdbd2cSJim Jagielski 				pMask->aCbx3.IsChecked() || pMask->aCbx4.IsChecked();
234*b1cdbd2cSJim Jagielski 
235*b1cdbd2cSJim Jagielski 	if ( bIsReady && IsExecReady() )
236*b1cdbd2cSJim Jagielski 		pMask->aBtnExec.Enable();
237*b1cdbd2cSJim Jagielski 	else
238*b1cdbd2cSJim Jagielski 		pMask->aBtnExec.Disable();
239*b1cdbd2cSJim Jagielski 
240*b1cdbd2cSJim Jagielski 	// Wenn eine Checkbox gecheckt wurde, wird die Pipette enabled
241*b1cdbd2cSJim Jagielski 	if ( pCbx->IsChecked() )
242*b1cdbd2cSJim Jagielski 	{
243*b1cdbd2cSJim Jagielski 		MaskSet* pSet = NULL;
244*b1cdbd2cSJim Jagielski 
245*b1cdbd2cSJim Jagielski 		if ( pCbx == &( pMask->aCbx1 ) )
246*b1cdbd2cSJim Jagielski 			pSet = pMask->pQSet1;
247*b1cdbd2cSJim Jagielski 		else if ( pCbx == &( pMask->aCbx2 ) )
248*b1cdbd2cSJim Jagielski 			pSet = pMask->pQSet2;
249*b1cdbd2cSJim Jagielski 		else if ( pCbx == &( pMask->aCbx3 ) )
250*b1cdbd2cSJim Jagielski 			pSet = pMask->pQSet3;
251*b1cdbd2cSJim Jagielski 		else // if ( pCbx == &( pMask->aCbx4 ) )
252*b1cdbd2cSJim Jagielski 			pSet = pMask->pQSet4;
253*b1cdbd2cSJim Jagielski 
254*b1cdbd2cSJim Jagielski 		pSet->SelectItem( 1 );
255*b1cdbd2cSJim Jagielski 		pSet->Select();
256*b1cdbd2cSJim Jagielski 
257*b1cdbd2cSJim Jagielski 		pMask->aTbxPipette.CheckItem( TBI_PIPETTE, sal_True );
258*b1cdbd2cSJim Jagielski 		PipetteHdl( &( pMask->aTbxPipette ) );
259*b1cdbd2cSJim Jagielski 	}
260*b1cdbd2cSJim Jagielski 
261*b1cdbd2cSJim Jagielski 	return 0;
262*b1cdbd2cSJim Jagielski }
263*b1cdbd2cSJim Jagielski 
264*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------
265*b1cdbd2cSJim Jagielski 
IMPL_LINK(MaskData,CbxTransHdl,CheckBox *,pCbx)266*b1cdbd2cSJim Jagielski IMPL_LINK( MaskData, CbxTransHdl, CheckBox*, pCbx )
267*b1cdbd2cSJim Jagielski {
268*b1cdbd2cSJim Jagielski     bIsReady = pCbx->IsChecked();
269*b1cdbd2cSJim Jagielski 	if ( bIsReady )
270*b1cdbd2cSJim Jagielski 	{
271*b1cdbd2cSJim Jagielski 		pMask->pQSet1->Disable();
272*b1cdbd2cSJim Jagielski 		pMask->pQSet2->Disable();
273*b1cdbd2cSJim Jagielski 		pMask->pQSet3->Disable();
274*b1cdbd2cSJim Jagielski 		pMask->pQSet4->Disable();
275*b1cdbd2cSJim Jagielski 		pMask->pCtlPipette->Disable();
276*b1cdbd2cSJim Jagielski 		pMask->aCbx1.Disable();
277*b1cdbd2cSJim Jagielski 		pMask->aSp1.Disable();
278*b1cdbd2cSJim Jagielski 		pMask->aCbx2.Disable();
279*b1cdbd2cSJim Jagielski 		pMask->aSp2.Disable();
280*b1cdbd2cSJim Jagielski 		pMask->aCbx3.Disable();
281*b1cdbd2cSJim Jagielski 		pMask->aSp3.Disable();
282*b1cdbd2cSJim Jagielski 		pMask->aCbx4.Disable();
283*b1cdbd2cSJim Jagielski 		pMask->aSp4.Disable();
284*b1cdbd2cSJim Jagielski 		pMask->aTbxPipette.Disable();
285*b1cdbd2cSJim Jagielski 
286*b1cdbd2cSJim Jagielski 		pMask->aLbColor1.Disable();
287*b1cdbd2cSJim Jagielski 		pMask->aLbColor2.Disable();
288*b1cdbd2cSJim Jagielski 		pMask->aLbColor3.Disable();
289*b1cdbd2cSJim Jagielski 		pMask->aLbColor4.Disable();
290*b1cdbd2cSJim Jagielski 		pMask->aLbColorTrans.Enable();
291*b1cdbd2cSJim Jagielski 	}
292*b1cdbd2cSJim Jagielski 	else
293*b1cdbd2cSJim Jagielski 	{
294*b1cdbd2cSJim Jagielski 		pMask->pQSet1->Enable();
295*b1cdbd2cSJim Jagielski 		pMask->pQSet2->Enable();
296*b1cdbd2cSJim Jagielski 		pMask->pQSet3->Enable();
297*b1cdbd2cSJim Jagielski 		pMask->pQSet4->Enable();
298*b1cdbd2cSJim Jagielski 		pMask->pCtlPipette->Enable();
299*b1cdbd2cSJim Jagielski 		pMask->aCbx1.Enable();
300*b1cdbd2cSJim Jagielski 		pMask->aSp1.Enable();
301*b1cdbd2cSJim Jagielski 		pMask->aCbx2.Enable();
302*b1cdbd2cSJim Jagielski 		pMask->aSp2.Enable();
303*b1cdbd2cSJim Jagielski 		pMask->aCbx3.Enable();
304*b1cdbd2cSJim Jagielski 		pMask->aSp3.Enable();
305*b1cdbd2cSJim Jagielski 		pMask->aCbx4.Enable();
306*b1cdbd2cSJim Jagielski 		pMask->aSp4.Enable();
307*b1cdbd2cSJim Jagielski 		pMask->aTbxPipette.Enable();
308*b1cdbd2cSJim Jagielski 
309*b1cdbd2cSJim Jagielski 		pMask->aLbColor1.Enable();
310*b1cdbd2cSJim Jagielski 		pMask->aLbColor2.Enable();
311*b1cdbd2cSJim Jagielski 		pMask->aLbColor3.Enable();
312*b1cdbd2cSJim Jagielski 		pMask->aLbColor4.Enable();
313*b1cdbd2cSJim Jagielski 		pMask->aLbColorTrans.Disable();
314*b1cdbd2cSJim Jagielski 
315*b1cdbd2cSJim Jagielski 		bIsReady = pMask->aCbx1.IsChecked() || pMask->aCbx2.IsChecked() ||
316*b1cdbd2cSJim Jagielski 				   pMask->aCbx3.IsChecked() || pMask->aCbx4.IsChecked();
317*b1cdbd2cSJim Jagielski 	}
318*b1cdbd2cSJim Jagielski 
319*b1cdbd2cSJim Jagielski 	if ( bIsReady && IsExecReady() )
320*b1cdbd2cSJim Jagielski 		pMask->aBtnExec.Enable();
321*b1cdbd2cSJim Jagielski 	else
322*b1cdbd2cSJim Jagielski 		pMask->aBtnExec.Disable();
323*b1cdbd2cSJim Jagielski 
324*b1cdbd2cSJim Jagielski 	return 0L;
325*b1cdbd2cSJim Jagielski }
326*b1cdbd2cSJim Jagielski 
327*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------
328*b1cdbd2cSJim Jagielski 
IMPL_LINK(MaskData,FocusLbHdl,ColorLB *,pLb)329*b1cdbd2cSJim Jagielski IMPL_LINK( MaskData, FocusLbHdl, ColorLB*, pLb )
330*b1cdbd2cSJim Jagielski {
331*b1cdbd2cSJim Jagielski 	// MT: bFireFox as API parameter is ugly, find better solution????
332*b1cdbd2cSJim Jagielski 	pMask->pQSet1->SelectItem( pLb == &( pMask->aLbColor1 ) ? 1 : 0 /* , false */ );
333*b1cdbd2cSJim Jagielski 	pMask->pQSet2->SelectItem( pLb == &( pMask->aLbColor2 ) ? 1 : 0 /* , false */ );
334*b1cdbd2cSJim Jagielski 	pMask->pQSet3->SelectItem( pLb == &( pMask->aLbColor3 ) ? 1 : 0 /* , false */ );
335*b1cdbd2cSJim Jagielski 	pMask->pQSet4->SelectItem( pLb == &( pMask->aLbColor4 ) ? 1 : 0 /* , false */ );
336*b1cdbd2cSJim Jagielski 
337*b1cdbd2cSJim Jagielski 	return 0;
338*b1cdbd2cSJim Jagielski }
339*b1cdbd2cSJim Jagielski 
340*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------
341*b1cdbd2cSJim Jagielski 
IMPL_LINK(MaskData,ExecHdl,PushButton *,EMPTYARG)342*b1cdbd2cSJim Jagielski IMPL_LINK( MaskData, ExecHdl, PushButton*, EMPTYARG )
343*b1cdbd2cSJim Jagielski {
344*b1cdbd2cSJim Jagielski 	SfxBoolItem aBItem( SID_BMPMASK_EXEC, sal_True );
345*b1cdbd2cSJim Jagielski 	rBindings.GetDispatcher()->Execute( SID_BMPMASK_EXEC, OWN_CALLMODE, &aBItem, 0L );
346*b1cdbd2cSJim Jagielski 
347*b1cdbd2cSJim Jagielski 	return 0L;
348*b1cdbd2cSJim Jagielski }
349*b1cdbd2cSJim Jagielski 
350*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------
351*b1cdbd2cSJim Jagielski 
Paint(const Rectangle &)352*b1cdbd2cSJim Jagielski void ColorWindow::Paint( const Rectangle &/*Rect*/ )
353*b1cdbd2cSJim Jagielski {
354*b1cdbd2cSJim Jagielski 	const Color& rOldLineColor = GetLineColor();
355*b1cdbd2cSJim Jagielski 	const Color& rOldFillColor = GetFillColor();
356*b1cdbd2cSJim Jagielski 
357*b1cdbd2cSJim Jagielski 	SetLineColor( aColor );
358*b1cdbd2cSJim Jagielski 	SetFillColor( aColor );
359*b1cdbd2cSJim Jagielski 
360*b1cdbd2cSJim Jagielski 	DrawRect( Rectangle( Point(), GetSizePixel() ) );
361*b1cdbd2cSJim Jagielski 
362*b1cdbd2cSJim Jagielski 	SetLineColor( rOldLineColor );
363*b1cdbd2cSJim Jagielski 	SetFillColor( rOldFillColor );
364*b1cdbd2cSJim Jagielski }
365*b1cdbd2cSJim Jagielski 
366*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------
367*b1cdbd2cSJim Jagielski 
SvxBmpMaskSelectItem(sal_uInt16 nId_,SvxBmpMask & rMask,SfxBindings & rBindings)368*b1cdbd2cSJim Jagielski SvxBmpMaskSelectItem::SvxBmpMaskSelectItem( sal_uInt16 nId_, SvxBmpMask& rMask,
369*b1cdbd2cSJim Jagielski 											SfxBindings& rBindings ) :
370*b1cdbd2cSJim Jagielski 			SfxControllerItem   ( nId_, rBindings ),
371*b1cdbd2cSJim Jagielski 			rBmpMask            ( rMask)
372*b1cdbd2cSJim Jagielski {
373*b1cdbd2cSJim Jagielski }
374*b1cdbd2cSJim Jagielski 
375*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------
376*b1cdbd2cSJim Jagielski 
StateChanged(sal_uInt16 nSID,SfxItemState,const SfxPoolItem * pItem)377*b1cdbd2cSJim Jagielski void SvxBmpMaskSelectItem::StateChanged( sal_uInt16 nSID, SfxItemState /*eState*/,
378*b1cdbd2cSJim Jagielski 										 const SfxPoolItem* pItem )
379*b1cdbd2cSJim Jagielski {
380*b1cdbd2cSJim Jagielski 	if ( ( nSID == SID_BMPMASK_EXEC ) && pItem )
381*b1cdbd2cSJim Jagielski 	{
382*b1cdbd2cSJim Jagielski 		const SfxBoolItem* pStateItem = PTR_CAST( SfxBoolItem, pItem );
383*b1cdbd2cSJim Jagielski 
384*b1cdbd2cSJim Jagielski 		DBG_ASSERT( pStateItem || pItem == 0, "SfxBoolItem erwartet");
385*b1cdbd2cSJim Jagielski 
386*b1cdbd2cSJim Jagielski 		rBmpMask.SetExecState( pStateItem->GetValue() );
387*b1cdbd2cSJim Jagielski 	}
388*b1cdbd2cSJim Jagielski }
389*b1cdbd2cSJim Jagielski 
390*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------
391*b1cdbd2cSJim Jagielski 
SvxBmpMaskChildWindow(Window * pParent_,sal_uInt16 nId,SfxBindings * pBindings,SfxChildWinInfo * pInfo)392*b1cdbd2cSJim Jagielski SvxBmpMaskChildWindow::SvxBmpMaskChildWindow( Window* pParent_, sal_uInt16 nId,
393*b1cdbd2cSJim Jagielski 											  SfxBindings* pBindings,
394*b1cdbd2cSJim Jagielski 											  SfxChildWinInfo* pInfo ) :
395*b1cdbd2cSJim Jagielski 		SfxChildWindow( pParent_, nId )
396*b1cdbd2cSJim Jagielski {
397*b1cdbd2cSJim Jagielski 	pWindow = new SvxBmpMask( pBindings, this, pParent_,
398*b1cdbd2cSJim Jagielski 							  BMP_RESID( RID_SVXDLG_BMPMASK ) );
399*b1cdbd2cSJim Jagielski 	SvxBmpMask* pDlg = (SvxBmpMask*) pWindow;
400*b1cdbd2cSJim Jagielski 
401*b1cdbd2cSJim Jagielski 	eChildAlignment = SFX_ALIGN_NOALIGNMENT;
402*b1cdbd2cSJim Jagielski 
403*b1cdbd2cSJim Jagielski 	pDlg->Initialize( pInfo );
404*b1cdbd2cSJim Jagielski }
405*b1cdbd2cSJim Jagielski 
406*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------
407*b1cdbd2cSJim Jagielski 
SvxBmpMask(SfxBindings * pBindinx,SfxChildWindow * pCW,Window * pParent,const ResId & rResId)408*b1cdbd2cSJim Jagielski SvxBmpMask::SvxBmpMask( SfxBindings *pBindinx,
409*b1cdbd2cSJim Jagielski 						SfxChildWindow *pCW,
410*b1cdbd2cSJim Jagielski 						Window* pParent,
411*b1cdbd2cSJim Jagielski 						const ResId& rResId ) :
412*b1cdbd2cSJim Jagielski 		SfxDockingWindow	( pBindinx, pCW, pParent, rResId ),
413*b1cdbd2cSJim Jagielski 		aTbxPipette			( this, BMP_RESID( TBX_PIPETTE ) ),
414*b1cdbd2cSJim Jagielski 		pCtlPipette			( new ColorWindow( this, BMP_RESID( WND_PIPETTE ) ) ),
415*b1cdbd2cSJim Jagielski 		aBtnExec			( this, BMP_RESID( BTN_EXEC ) ),
416*b1cdbd2cSJim Jagielski 		aGrpQ				( this, BMP_RESID( GRP_Q ) ),
417*b1cdbd2cSJim Jagielski 
418*b1cdbd2cSJim Jagielski 		aFt1				( this, BMP_RESID ( FT_1 ) ),
419*b1cdbd2cSJim Jagielski 		aFt2				( this, BMP_RESID ( FT_2 ) ),
420*b1cdbd2cSJim Jagielski 		aFt3				( this, BMP_RESID ( FT_3 ) ),
421*b1cdbd2cSJim Jagielski 
422*b1cdbd2cSJim Jagielski         aCbx1				( this, BMP_RESID( CBX_1 ) ),
423*b1cdbd2cSJim Jagielski 		pQSet1				( new MaskSet( this, BMP_RESID( QCOL_1 ) ) ),
424*b1cdbd2cSJim Jagielski 		aSp1				( this, BMP_RESID( SP_1 ) ),
425*b1cdbd2cSJim Jagielski 		aLbColor1			( this, BMP_RESID ( LB_1 ) ),
426*b1cdbd2cSJim Jagielski 
427*b1cdbd2cSJim Jagielski 		aCbx2				( this, BMP_RESID( CBX_2 ) ),
428*b1cdbd2cSJim Jagielski 		pQSet2				( new MaskSet( this, BMP_RESID( QCOL_2 ) ) ),
429*b1cdbd2cSJim Jagielski 		aSp2				( this, BMP_RESID( SP_2 ) ),
430*b1cdbd2cSJim Jagielski 		aLbColor2			( this, BMP_RESID ( LB_2 ) ),
431*b1cdbd2cSJim Jagielski 
432*b1cdbd2cSJim Jagielski 		aCbx3				( this, BMP_RESID( CBX_3 ) ),
433*b1cdbd2cSJim Jagielski 		pQSet3				( new MaskSet( this, BMP_RESID( QCOL_3 ) ) ),
434*b1cdbd2cSJim Jagielski 		aSp3				( this, BMP_RESID( SP_3 ) ),
435*b1cdbd2cSJim Jagielski 		aLbColor3			( this, BMP_RESID ( LB_3 ) ),
436*b1cdbd2cSJim Jagielski 
437*b1cdbd2cSJim Jagielski 		aCbx4				( this, BMP_RESID( CBX_4 ) ),
438*b1cdbd2cSJim Jagielski 		pQSet4				( new MaskSet( this, BMP_RESID( QCOL_4 ) ) ),
439*b1cdbd2cSJim Jagielski 		aSp4				( this, BMP_RESID( SP_4 ) ),
440*b1cdbd2cSJim Jagielski 		aLbColor4			( this, BMP_RESID ( LB_4 ) ),
441*b1cdbd2cSJim Jagielski 
442*b1cdbd2cSJim Jagielski 		pData				( new MaskData( this, *pBindinx ) ),
443*b1cdbd2cSJim Jagielski 		aCbxTrans			( this, BMP_RESID( CBX_TRANS ) ),
444*b1cdbd2cSJim Jagielski 		aLbColorTrans		( this, BMP_RESID ( LB_TRANS ) ),
445*b1cdbd2cSJim Jagielski 		maColTab(),
446*b1cdbd2cSJim Jagielski 		aPipetteColor		( COL_WHITE ),
447*b1cdbd2cSJim Jagielski 		aSelItem			( SID_BMPMASK_EXEC, *this, *pBindinx ),
448*b1cdbd2cSJim Jagielski 		maImgPipette		( BMP_RESID ( IMG_PIPETTE ) ),
449*b1cdbd2cSJim Jagielski 		maImgPipetteH		( BMP_RESID ( IMG_PIPETTE_H ) )
450*b1cdbd2cSJim Jagielski {
451*b1cdbd2cSJim Jagielski 	FreeResource();
452*b1cdbd2cSJim Jagielski 
453*b1cdbd2cSJim Jagielski 	ApplyStyle();
454*b1cdbd2cSJim Jagielski 
455*b1cdbd2cSJim Jagielski 	aTbxPipette.SetSizePixel( aTbxPipette.CalcWindowSizePixel() );
456*b1cdbd2cSJim Jagielski 	aTbxPipette.SetSelectHdl( LINK( pData, MaskData, PipetteHdl ) );
457*b1cdbd2cSJim Jagielski 	aBtnExec.SetClickHdl( LINK( pData, MaskData, ExecHdl ) );
458*b1cdbd2cSJim Jagielski 
459*b1cdbd2cSJim Jagielski 	aCbx1.SetClickHdl( LINK( pData, MaskData, CbxHdl ) );
460*b1cdbd2cSJim Jagielski 	aCbx2.SetClickHdl( LINK( pData, MaskData, CbxHdl ) );
461*b1cdbd2cSJim Jagielski 	aCbx3.SetClickHdl( LINK( pData, MaskData, CbxHdl ) );
462*b1cdbd2cSJim Jagielski 	aCbx4.SetClickHdl( LINK( pData, MaskData, CbxHdl ) );
463*b1cdbd2cSJim Jagielski 	aCbxTrans.SetClickHdl( LINK( pData, MaskData, CbxTransHdl ) );
464*b1cdbd2cSJim Jagielski 
465*b1cdbd2cSJim Jagielski     SetAccessibleNames ();
466*b1cdbd2cSJim Jagielski 
467*b1cdbd2cSJim Jagielski 	aLbColor1.SetGetFocusHdl( LINK( pData, MaskData, FocusLbHdl ) );
468*b1cdbd2cSJim Jagielski 	aLbColor2.SetGetFocusHdl( LINK( pData, MaskData, FocusLbHdl ) );
469*b1cdbd2cSJim Jagielski 	aLbColor3.SetGetFocusHdl( LINK( pData, MaskData, FocusLbHdl ) );
470*b1cdbd2cSJim Jagielski 	aLbColor4.SetGetFocusHdl( LINK( pData, MaskData, FocusLbHdl ) );
471*b1cdbd2cSJim Jagielski     aLbColorTrans.Disable();
472*b1cdbd2cSJim Jagielski 
473*b1cdbd2cSJim Jagielski 	aSp1.SetValue( 10 );
474*b1cdbd2cSJim Jagielski 	aSp2.SetValue( 10 );
475*b1cdbd2cSJim Jagielski 	aSp3.SetValue( 10 );
476*b1cdbd2cSJim Jagielski 	aSp4.SetValue( 10 );
477*b1cdbd2cSJim Jagielski 
478*b1cdbd2cSJim Jagielski 	pQSet1->SetStyle( pQSet1->GetStyle() | WB_DOUBLEBORDER | WB_ITEMBORDER );
479*b1cdbd2cSJim Jagielski 	pQSet1->SetColCount( 1 );
480*b1cdbd2cSJim Jagielski 	pQSet1->SetLineCount( 1 );
481*b1cdbd2cSJim Jagielski //	pQSet1->SetExtraSpacing( 1 );
482*b1cdbd2cSJim Jagielski 	String sColorPalette (BMP_RESID( RID_SVXDLG_BMPMASK_STR_PALETTE));
483*b1cdbd2cSJim Jagielski     String sColorPaletteN;
484*b1cdbd2cSJim Jagielski     sColorPaletteN = sColorPalette;
485*b1cdbd2cSJim Jagielski     sColorPaletteN.AppendAscii (RTL_CONSTASCII_STRINGPARAM (" 1"));
486*b1cdbd2cSJim Jagielski 	//pQSet1->InsertItem( 1, aPipetteColor );
487*b1cdbd2cSJim Jagielski 	pQSet1->InsertItem( 1, aPipetteColor, sColorPaletteN);
488*b1cdbd2cSJim Jagielski 	pQSet1->SelectItem( 1 );
489*b1cdbd2cSJim Jagielski 
490*b1cdbd2cSJim Jagielski 	pQSet2->SetStyle( pQSet2->GetStyle() | WB_DOUBLEBORDER | WB_ITEMBORDER );
491*b1cdbd2cSJim Jagielski 	pQSet2->SetColCount( 1 );
492*b1cdbd2cSJim Jagielski 	pQSet2->SetLineCount( 1 );
493*b1cdbd2cSJim Jagielski //	pQSet2->SetExtraSpacing( 1 );
494*b1cdbd2cSJim Jagielski 	sColorPaletteN = sColorPalette;
495*b1cdbd2cSJim Jagielski     sColorPaletteN.AppendAscii (RTL_CONSTASCII_STRINGPARAM (" 2"));
496*b1cdbd2cSJim Jagielski 	//pQSet2->InsertItem( 1, aPipetteColor );
497*b1cdbd2cSJim Jagielski 	pQSet2->InsertItem( 1, aPipetteColor, sColorPaletteN);
498*b1cdbd2cSJim Jagielski 	pQSet2->SelectItem( 0 );
499*b1cdbd2cSJim Jagielski 
500*b1cdbd2cSJim Jagielski 	pQSet3->SetStyle( pQSet3->GetStyle() | WB_DOUBLEBORDER | WB_ITEMBORDER );
501*b1cdbd2cSJim Jagielski 	pQSet3->SetColCount( 1 );
502*b1cdbd2cSJim Jagielski 	pQSet3->SetLineCount( 1 );
503*b1cdbd2cSJim Jagielski //	pQSet3->SetExtraSpacing( 1 );
504*b1cdbd2cSJim Jagielski 	sColorPaletteN = sColorPalette;
505*b1cdbd2cSJim Jagielski  	sColorPaletteN.AppendAscii (RTL_CONSTASCII_STRINGPARAM (" 3"));
506*b1cdbd2cSJim Jagielski 	pQSet3->InsertItem( 1, aPipetteColor, sColorPaletteN);
507*b1cdbd2cSJim Jagielski 	//pQSet3->InsertItem( 1, aPipetteColor );
508*b1cdbd2cSJim Jagielski 	pQSet3->SelectItem( 0 );
509*b1cdbd2cSJim Jagielski 
510*b1cdbd2cSJim Jagielski 	pQSet4->SetStyle( pQSet4->GetStyle() | WB_DOUBLEBORDER | WB_ITEMBORDER );
511*b1cdbd2cSJim Jagielski 	pQSet4->SetColCount( 1 );
512*b1cdbd2cSJim Jagielski 	pQSet4->SetLineCount( 1 );
513*b1cdbd2cSJim Jagielski //	pQSet4->SetExtraSpacing( 1 );
514*b1cdbd2cSJim Jagielski 	sColorPaletteN = sColorPalette;
515*b1cdbd2cSJim Jagielski     sColorPaletteN.AppendAscii (RTL_CONSTASCII_STRINGPARAM (" 4"));
516*b1cdbd2cSJim Jagielski 	pQSet4->InsertItem( 1, aPipetteColor, sColorPaletteN);
517*b1cdbd2cSJim Jagielski 	//pQSet4->InsertItem( 1, aPipetteColor );
518*b1cdbd2cSJim Jagielski 	pQSet4->SelectItem( 0 );
519*b1cdbd2cSJim Jagielski 
520*b1cdbd2cSJim Jagielski 	pQSet1->Show();
521*b1cdbd2cSJim Jagielski 	pQSet2->Show();
522*b1cdbd2cSJim Jagielski 	pQSet3->Show();
523*b1cdbd2cSJim Jagielski 	pQSet4->Show();
524*b1cdbd2cSJim Jagielski 	aCbx1.SetAccessibleRelationMemberOf( &aGrpQ );
525*b1cdbd2cSJim Jagielski 	pQSet1->SetAccessibleRelationMemberOf( &aGrpQ );
526*b1cdbd2cSJim Jagielski 	aSp1.SetAccessibleRelationMemberOf( &aGrpQ );
527*b1cdbd2cSJim Jagielski 	aLbColor1.SetAccessibleRelationMemberOf( &aGrpQ );
528*b1cdbd2cSJim Jagielski 	aCbx1.SetAccessibleRelationLabeledBy( &aFt1 );
529*b1cdbd2cSJim Jagielski 	pQSet1->SetAccessibleRelationLabeledBy( &aFt1 );
530*b1cdbd2cSJim Jagielski 	aSp1.SetAccessibleRelationLabeledBy( &aFt2 );
531*b1cdbd2cSJim Jagielski 	aLbColor1.SetAccessibleRelationLabeledBy( &aFt3 );
532*b1cdbd2cSJim Jagielski 	aCbx2.SetAccessibleRelationMemberOf( &aGrpQ );
533*b1cdbd2cSJim Jagielski 	pQSet2->SetAccessibleRelationMemberOf( &aGrpQ );
534*b1cdbd2cSJim Jagielski 	aSp2.SetAccessibleRelationMemberOf( &aGrpQ );
535*b1cdbd2cSJim Jagielski 	aLbColor2.SetAccessibleRelationMemberOf( &aGrpQ );
536*b1cdbd2cSJim Jagielski 	aCbx2.SetAccessibleRelationLabeledBy( &aFt1 );
537*b1cdbd2cSJim Jagielski 	pQSet2->SetAccessibleRelationLabeledBy( &aFt1 );
538*b1cdbd2cSJim Jagielski 	aSp2.SetAccessibleRelationLabeledBy( &aFt2 );
539*b1cdbd2cSJim Jagielski 	aLbColor2.SetAccessibleRelationLabeledBy( &aFt3 );
540*b1cdbd2cSJim Jagielski 	aCbx3.SetAccessibleRelationMemberOf( &aGrpQ );
541*b1cdbd2cSJim Jagielski 	pQSet3->SetAccessibleRelationMemberOf( &aGrpQ );
542*b1cdbd2cSJim Jagielski 	aSp3.SetAccessibleRelationMemberOf( &aGrpQ );
543*b1cdbd2cSJim Jagielski 	aLbColor3.SetAccessibleRelationMemberOf( &aGrpQ );
544*b1cdbd2cSJim Jagielski 	aCbx3.SetAccessibleRelationLabeledBy( &aFt1 );
545*b1cdbd2cSJim Jagielski 	pQSet3->SetAccessibleRelationLabeledBy( &aFt1 );
546*b1cdbd2cSJim Jagielski 	aSp3.SetAccessibleRelationLabeledBy( &aFt2 );
547*b1cdbd2cSJim Jagielski 	aLbColor3.SetAccessibleRelationLabeledBy( &aFt3 );
548*b1cdbd2cSJim Jagielski 	aCbx4.SetAccessibleRelationMemberOf( &aGrpQ );
549*b1cdbd2cSJim Jagielski 	pQSet4->SetAccessibleRelationMemberOf( &aGrpQ );
550*b1cdbd2cSJim Jagielski 	aSp4.SetAccessibleRelationMemberOf( &aGrpQ );
551*b1cdbd2cSJim Jagielski 	aLbColor4.SetAccessibleRelationMemberOf( &aGrpQ );
552*b1cdbd2cSJim Jagielski 	aCbx4.SetAccessibleRelationLabeledBy( &aFt1 );
553*b1cdbd2cSJim Jagielski 	pQSet4->SetAccessibleRelationLabeledBy( &aFt1 );
554*b1cdbd2cSJim Jagielski 	aSp4.SetAccessibleRelationLabeledBy( &aFt2 );
555*b1cdbd2cSJim Jagielski 	aLbColor4.SetAccessibleRelationLabeledBy( &aFt3 );
556*b1cdbd2cSJim Jagielski 	aLbColorTrans.SetAccessibleRelationLabeledBy( &aCbxTrans );
557*b1cdbd2cSJim Jagielski 	aLbColorTrans.SetAccessibleRelationMemberOf( &aGrpQ );
558*b1cdbd2cSJim Jagielski 	aCbxTrans.SetAccessibleRelationMemberOf( &aGrpQ );
559*b1cdbd2cSJim Jagielski }
560*b1cdbd2cSJim Jagielski 
561*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------
562*b1cdbd2cSJim Jagielski 
~SvxBmpMask()563*b1cdbd2cSJim Jagielski SvxBmpMask::~SvxBmpMask()
564*b1cdbd2cSJim Jagielski {
565*b1cdbd2cSJim Jagielski 	delete pQSet1;
566*b1cdbd2cSJim Jagielski 	delete pQSet2;
567*b1cdbd2cSJim Jagielski 	delete pQSet3;
568*b1cdbd2cSJim Jagielski 	delete pQSet4;
569*b1cdbd2cSJim Jagielski 	delete pCtlPipette;
570*b1cdbd2cSJim Jagielski 	delete pData;
571*b1cdbd2cSJim Jagielski }
572*b1cdbd2cSJim Jagielski 
573*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------
574*b1cdbd2cSJim Jagielski 
575*b1cdbd2cSJim Jagielski /** is called by a MaskSet when it is selected */
onSelect(MaskSet * pSet)576*b1cdbd2cSJim Jagielski void SvxBmpMask::onSelect( MaskSet* pSet )
577*b1cdbd2cSJim Jagielski {
578*b1cdbd2cSJim Jagielski 	// automaticaly set focus to the corresponding listbox
579*b1cdbd2cSJim Jagielski /*
580*b1cdbd2cSJim Jagielski 	if( pSet == pQSet1 )
581*b1cdbd2cSJim Jagielski 		aLbColor1.GrabFocus();
582*b1cdbd2cSJim Jagielski 	else if( pSet == pQSet2 )
583*b1cdbd2cSJim Jagielski 		aLbColor2.GrabFocus();
584*b1cdbd2cSJim Jagielski 	else if( pSet == pQSet2 )
585*b1cdbd2cSJim Jagielski 		aLbColor3.GrabFocus();
586*b1cdbd2cSJim Jagielski 	else if( pSet == pQSet2 )
587*b1cdbd2cSJim Jagielski 		aLbColor4.GrabFocus();
588*b1cdbd2cSJim Jagielski */
589*b1cdbd2cSJim Jagielski 
590*b1cdbd2cSJim Jagielski 	// now deselect all other value sets
591*b1cdbd2cSJim Jagielski 	if( pSet != pQSet1 )
592*b1cdbd2cSJim Jagielski 		pQSet1->SelectItem( 0 );
593*b1cdbd2cSJim Jagielski 
594*b1cdbd2cSJim Jagielski 	if( pSet != pQSet2 )
595*b1cdbd2cSJim Jagielski 		pQSet2->SelectItem( 0 );
596*b1cdbd2cSJim Jagielski 
597*b1cdbd2cSJim Jagielski 	if( pSet != pQSet3 )
598*b1cdbd2cSJim Jagielski 		pQSet3->SelectItem( 0 );
599*b1cdbd2cSJim Jagielski 
600*b1cdbd2cSJim Jagielski 	if( pSet != pQSet4 )
601*b1cdbd2cSJim Jagielski 		pQSet4->SelectItem( 0 );
602*b1cdbd2cSJim Jagielski }
603*b1cdbd2cSJim Jagielski 
604*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------
605*b1cdbd2cSJim Jagielski 
Close()606*b1cdbd2cSJim Jagielski sal_Bool SvxBmpMask::Close()
607*b1cdbd2cSJim Jagielski {
608*b1cdbd2cSJim Jagielski 	SfxBoolItem aItem2( SID_BMPMASK_PIPETTE, sal_False );
609*b1cdbd2cSJim Jagielski 	GetBindings().GetDispatcher()->Execute( SID_BMPMASK_PIPETTE, OWN_CALLMODE, &aItem2, 0L );
610*b1cdbd2cSJim Jagielski 
611*b1cdbd2cSJim Jagielski 	return SfxDockingWindow::Close();
612*b1cdbd2cSJim Jagielski }
613*b1cdbd2cSJim Jagielski 
614*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------
615*b1cdbd2cSJim Jagielski 
NeedsColorTable() const616*b1cdbd2cSJim Jagielski sal_Bool SvxBmpMask::NeedsColorTable() const
617*b1cdbd2cSJim Jagielski {
618*b1cdbd2cSJim Jagielski 	return ( aLbColor1.GetEntryCount() == 0 );
619*b1cdbd2cSJim Jagielski }
620*b1cdbd2cSJim Jagielski 
621*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------
622*b1cdbd2cSJim Jagielski 
SetColorTable(XColorListSharedPtr aTable)623*b1cdbd2cSJim Jagielski void SvxBmpMask::SetColorTable( XColorListSharedPtr aTable )
624*b1cdbd2cSJim Jagielski {
625*b1cdbd2cSJim Jagielski 	if ( aTable != maColTab )
626*b1cdbd2cSJim Jagielski 	{
627*b1cdbd2cSJim Jagielski 		const String aTransp( BMP_RESID( RID_SVXDLG_BMPMASK_STR_TRANSP ) );
628*b1cdbd2cSJim Jagielski 
629*b1cdbd2cSJim Jagielski 		maColTab = aTable;
630*b1cdbd2cSJim Jagielski 
631*b1cdbd2cSJim Jagielski 		aLbColorTrans.Fill( maColTab );
632*b1cdbd2cSJim Jagielski 		aLbColorTrans.SelectEntryPos( 0 );
633*b1cdbd2cSJim Jagielski 
634*b1cdbd2cSJim Jagielski 		aLbColor1.Fill( maColTab );
635*b1cdbd2cSJim Jagielski 		aLbColor1.InsertEntry( TRANSP_COL, aTransp, 0 );
636*b1cdbd2cSJim Jagielski 		aLbColor1.SelectEntryPos( 0 );
637*b1cdbd2cSJim Jagielski 
638*b1cdbd2cSJim Jagielski 		aLbColor2.Fill( maColTab );
639*b1cdbd2cSJim Jagielski 		aLbColor2.InsertEntry( TRANSP_COL, aTransp, 0 );
640*b1cdbd2cSJim Jagielski 		aLbColor2.SelectEntryPos( 0 );
641*b1cdbd2cSJim Jagielski 
642*b1cdbd2cSJim Jagielski 		aLbColor3.Fill( maColTab );
643*b1cdbd2cSJim Jagielski 		aLbColor3.InsertEntry( TRANSP_COL, aTransp, 0 );
644*b1cdbd2cSJim Jagielski 		aLbColor3.SelectEntryPos( 0 );
645*b1cdbd2cSJim Jagielski 
646*b1cdbd2cSJim Jagielski 		aLbColor4.Fill( maColTab );
647*b1cdbd2cSJim Jagielski 		aLbColor4.InsertEntry( TRANSP_COL, aTransp, 0 );
648*b1cdbd2cSJim Jagielski 		aLbColor4.SelectEntryPos( 0 );
649*b1cdbd2cSJim Jagielski 	}
650*b1cdbd2cSJim Jagielski }
651*b1cdbd2cSJim Jagielski 
652*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------
653*b1cdbd2cSJim Jagielski 
SetColor(const Color & rColor)654*b1cdbd2cSJim Jagielski void SvxBmpMask::SetColor( const Color& rColor )
655*b1cdbd2cSJim Jagielski {
656*b1cdbd2cSJim Jagielski 	aPipetteColor = rColor;
657*b1cdbd2cSJim Jagielski 	pCtlPipette->SetColor( aPipetteColor );
658*b1cdbd2cSJim Jagielski }
659*b1cdbd2cSJim Jagielski 
660*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------
661*b1cdbd2cSJim Jagielski 
PipetteClicked()662*b1cdbd2cSJim Jagielski void SvxBmpMask::PipetteClicked()
663*b1cdbd2cSJim Jagielski {
664*b1cdbd2cSJim Jagielski 	if( pQSet1->GetSelectItemId() == 1 )
665*b1cdbd2cSJim Jagielski 	{
666*b1cdbd2cSJim Jagielski 		aCbx1.Check( sal_True );
667*b1cdbd2cSJim Jagielski 		pData->CbxHdl( &aCbx1 );
668*b1cdbd2cSJim Jagielski 		pQSet1->SetItemColor( 1, aPipetteColor );
669*b1cdbd2cSJim Jagielski 	}
670*b1cdbd2cSJim Jagielski 	else if( pQSet2->GetSelectItemId() == 1 )
671*b1cdbd2cSJim Jagielski 	{
672*b1cdbd2cSJim Jagielski 		aCbx2.Check( sal_True );
673*b1cdbd2cSJim Jagielski 		pData->CbxHdl( &aCbx2 );
674*b1cdbd2cSJim Jagielski 		pQSet2->SetItemColor( 1, aPipetteColor );
675*b1cdbd2cSJim Jagielski 	}
676*b1cdbd2cSJim Jagielski 	else if( pQSet3->GetSelectItemId() == 1 )
677*b1cdbd2cSJim Jagielski 	{
678*b1cdbd2cSJim Jagielski 		aCbx3.Check( sal_True );
679*b1cdbd2cSJim Jagielski 		pData->CbxHdl( &aCbx3 );
680*b1cdbd2cSJim Jagielski 		pQSet3->SetItemColor( 1, aPipetteColor );
681*b1cdbd2cSJim Jagielski 	}
682*b1cdbd2cSJim Jagielski 	else if( pQSet4->GetSelectItemId() == 1 )
683*b1cdbd2cSJim Jagielski 	{
684*b1cdbd2cSJim Jagielski 		aCbx4.Check( sal_True );
685*b1cdbd2cSJim Jagielski 		pData->CbxHdl( &aCbx4 );
686*b1cdbd2cSJim Jagielski 		pQSet4->SetItemColor( 1, aPipetteColor );
687*b1cdbd2cSJim Jagielski 	}
688*b1cdbd2cSJim Jagielski 
689*b1cdbd2cSJim Jagielski 	aTbxPipette.CheckItem( TBI_PIPETTE, sal_False );
690*b1cdbd2cSJim Jagielski 	pData->PipetteHdl( &aTbxPipette );
691*b1cdbd2cSJim Jagielski }
692*b1cdbd2cSJim Jagielski 
693*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------
694*b1cdbd2cSJim Jagielski 
SetExecState(sal_Bool bEnable)695*b1cdbd2cSJim Jagielski void SvxBmpMask::SetExecState( sal_Bool bEnable )
696*b1cdbd2cSJim Jagielski {
697*b1cdbd2cSJim Jagielski 	pData->SetExecState( bEnable );
698*b1cdbd2cSJim Jagielski 
699*b1cdbd2cSJim Jagielski 	if ( pData->IsExecReady() && pData->IsCbxReady() )
700*b1cdbd2cSJim Jagielski 		aBtnExec.Enable();
701*b1cdbd2cSJim Jagielski 	else
702*b1cdbd2cSJim Jagielski 		aBtnExec.Disable();
703*b1cdbd2cSJim Jagielski }
704*b1cdbd2cSJim Jagielski 
705*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------
706*b1cdbd2cSJim Jagielski 
InitColorArrays(Color * pSrcCols,Color * pDstCols,sal_uIntPtr * pTols)707*b1cdbd2cSJim Jagielski sal_uInt16 SvxBmpMask::InitColorArrays( Color* pSrcCols, Color* pDstCols, sal_uIntPtr* pTols )
708*b1cdbd2cSJim Jagielski {
709*b1cdbd2cSJim Jagielski 	sal_uInt16  nCount = 0;
710*b1cdbd2cSJim Jagielski 
711*b1cdbd2cSJim Jagielski 	if ( aCbx1.IsChecked() )
712*b1cdbd2cSJim Jagielski 	{
713*b1cdbd2cSJim Jagielski 		pSrcCols[nCount] = pQSet1->GetItemColor( 1 );
714*b1cdbd2cSJim Jagielski 		pDstCols[nCount] = aLbColor1.GetSelectEntryColor();
715*b1cdbd2cSJim Jagielski 		pTols[nCount++] = static_cast<sal_uIntPtr>(aSp1.GetValue());
716*b1cdbd2cSJim Jagielski 	}
717*b1cdbd2cSJim Jagielski 
718*b1cdbd2cSJim Jagielski 	if ( aCbx2.IsChecked() )
719*b1cdbd2cSJim Jagielski 	{
720*b1cdbd2cSJim Jagielski 		pSrcCols[nCount] = pQSet2->GetItemColor( 1 );
721*b1cdbd2cSJim Jagielski 		pDstCols[nCount] = aLbColor2.GetSelectEntryColor();
722*b1cdbd2cSJim Jagielski 		pTols[nCount++] = static_cast<sal_uIntPtr>(aSp2.GetValue());
723*b1cdbd2cSJim Jagielski 	}
724*b1cdbd2cSJim Jagielski 
725*b1cdbd2cSJim Jagielski 	if ( aCbx3.IsChecked() )
726*b1cdbd2cSJim Jagielski 	{
727*b1cdbd2cSJim Jagielski 		pSrcCols[nCount] = pQSet3->GetItemColor( 1 );
728*b1cdbd2cSJim Jagielski 		pDstCols[nCount] = aLbColor3.GetSelectEntryColor();
729*b1cdbd2cSJim Jagielski 		pTols[nCount++] = static_cast<sal_uIntPtr>(aSp3.GetValue());
730*b1cdbd2cSJim Jagielski 	}
731*b1cdbd2cSJim Jagielski 
732*b1cdbd2cSJim Jagielski 	if ( aCbx4.IsChecked() )
733*b1cdbd2cSJim Jagielski 	{
734*b1cdbd2cSJim Jagielski 		pSrcCols[nCount] = pQSet4->GetItemColor( 1 );
735*b1cdbd2cSJim Jagielski 		pDstCols[nCount] = aLbColor4.GetSelectEntryColor();
736*b1cdbd2cSJim Jagielski 		pTols[nCount++] = static_cast<sal_uIntPtr>(aSp4.GetValue());
737*b1cdbd2cSJim Jagielski 	}
738*b1cdbd2cSJim Jagielski 
739*b1cdbd2cSJim Jagielski 	return nCount;
740*b1cdbd2cSJim Jagielski }
741*b1cdbd2cSJim Jagielski 
742*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------
743*b1cdbd2cSJim Jagielski 
ImpMask(const Bitmap & rBitmap)744*b1cdbd2cSJim Jagielski Bitmap SvxBmpMask::ImpMask( const Bitmap& rBitmap )
745*b1cdbd2cSJim Jagielski {
746*b1cdbd2cSJim Jagielski 	Bitmap			aBitmap( rBitmap );
747*b1cdbd2cSJim Jagielski 	Color			pSrcCols[4];
748*b1cdbd2cSJim Jagielski 	Color			pDstCols[4];
749*b1cdbd2cSJim Jagielski 	sal_uIntPtr			pTols[4];
750*b1cdbd2cSJim Jagielski 	const sal_uInt16	nCount = InitColorArrays( pSrcCols, pDstCols, pTols );
751*b1cdbd2cSJim Jagielski 
752*b1cdbd2cSJim Jagielski 	EnterWait();
753*b1cdbd2cSJim Jagielski 	aBitmap.Replace( pSrcCols, pDstCols, nCount, pTols );
754*b1cdbd2cSJim Jagielski 	LeaveWait();
755*b1cdbd2cSJim Jagielski 
756*b1cdbd2cSJim Jagielski 	return aBitmap;
757*b1cdbd2cSJim Jagielski }
758*b1cdbd2cSJim Jagielski 
759*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------
760*b1cdbd2cSJim Jagielski 
ImpMask(const BitmapEx & rBitmapEx)761*b1cdbd2cSJim Jagielski BitmapEx SvxBmpMask::ImpMask( const BitmapEx& rBitmapEx )
762*b1cdbd2cSJim Jagielski {
763*b1cdbd2cSJim Jagielski 	return BitmapEx( ImpMask( rBitmapEx.GetBitmap() ), rBitmapEx.GetMask() );
764*b1cdbd2cSJim Jagielski }
765*b1cdbd2cSJim Jagielski 
766*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------
767*b1cdbd2cSJim Jagielski 
ImpMaskTransparent(const BitmapEx & rBitmapEx,const Color & rColor,const long nTol)768*b1cdbd2cSJim Jagielski BitmapEx SvxBmpMask::ImpMaskTransparent( const BitmapEx& rBitmapEx, const Color& rColor, const long nTol )
769*b1cdbd2cSJim Jagielski {
770*b1cdbd2cSJim Jagielski 	EnterWait();
771*b1cdbd2cSJim Jagielski 
772*b1cdbd2cSJim Jagielski 	BitmapEx	aBmpEx;
773*b1cdbd2cSJim Jagielski 	Bitmap		aMask( rBitmapEx.GetBitmap().CreateMask( rColor, nTol ) );
774*b1cdbd2cSJim Jagielski 
775*b1cdbd2cSJim Jagielski 	if( rBitmapEx.IsTransparent() )
776*b1cdbd2cSJim Jagielski 		aMask.CombineSimple( rBitmapEx.GetMask(), BMP_COMBINE_OR );
777*b1cdbd2cSJim Jagielski 
778*b1cdbd2cSJim Jagielski 	aBmpEx = BitmapEx( rBitmapEx.GetBitmap(), aMask );
779*b1cdbd2cSJim Jagielski 	LeaveWait();
780*b1cdbd2cSJim Jagielski 
781*b1cdbd2cSJim Jagielski 	return aBmpEx;
782*b1cdbd2cSJim Jagielski }
783*b1cdbd2cSJim Jagielski 
784*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------
785*b1cdbd2cSJim Jagielski 
ImpMask(const Animation & rAnimation)786*b1cdbd2cSJim Jagielski Animation SvxBmpMask::ImpMask( const Animation& rAnimation )
787*b1cdbd2cSJim Jagielski {
788*b1cdbd2cSJim Jagielski 	Animation	aAnimation( rAnimation );
789*b1cdbd2cSJim Jagielski 	Color		pSrcCols[4];
790*b1cdbd2cSJim Jagielski 	Color		pDstCols[4];
791*b1cdbd2cSJim Jagielski 	sal_uIntPtr		pTols[4];
792*b1cdbd2cSJim Jagielski 	InitColorArrays( pSrcCols, pDstCols, pTols );
793*b1cdbd2cSJim Jagielski 	sal_uInt16		nAnimationCount = aAnimation.Count();
794*b1cdbd2cSJim Jagielski 
795*b1cdbd2cSJim Jagielski 	for( sal_uInt16 i = 0; i < nAnimationCount; i++ )
796*b1cdbd2cSJim Jagielski 	{
797*b1cdbd2cSJim Jagielski 		AnimationBitmap aAnimBmp( aAnimation.Get( i ) );
798*b1cdbd2cSJim Jagielski 		aAnimBmp.aBmpEx = Mask( aAnimBmp.aBmpEx ).GetBitmapEx();
799*b1cdbd2cSJim Jagielski 		aAnimation.Replace( aAnimBmp, i );
800*b1cdbd2cSJim Jagielski 	}
801*b1cdbd2cSJim Jagielski 
802*b1cdbd2cSJim Jagielski 	return aAnimation;
803*b1cdbd2cSJim Jagielski }
804*b1cdbd2cSJim Jagielski 
805*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------
806*b1cdbd2cSJim Jagielski 
ImpMask(const GDIMetaFile & rMtf)807*b1cdbd2cSJim Jagielski GDIMetaFile SvxBmpMask::ImpMask( const GDIMetaFile& rMtf )
808*b1cdbd2cSJim Jagielski {
809*b1cdbd2cSJim Jagielski 	GDIMetaFile aMtf;
810*b1cdbd2cSJim Jagielski 	Color		pSrcCols[4];
811*b1cdbd2cSJim Jagielski 	Color		pDstCols[4];
812*b1cdbd2cSJim Jagielski 	sal_uIntPtr		pTols[4];
813*b1cdbd2cSJim Jagielski 	sal_uInt16      nCount = InitColorArrays( pSrcCols, pDstCols, pTols );
814*b1cdbd2cSJim Jagielski 	sal_Bool		pTrans[4];
815*b1cdbd2cSJim Jagielski 
816*b1cdbd2cSJim Jagielski 	// Falls keine Farben ausgewaehlt, kopieren wir nur das Mtf
817*b1cdbd2cSJim Jagielski 	if( !nCount )
818*b1cdbd2cSJim Jagielski 		aMtf = rMtf;
819*b1cdbd2cSJim Jagielski 	else
820*b1cdbd2cSJim Jagielski 	{
821*b1cdbd2cSJim Jagielski 		Color       aCol;
822*b1cdbd2cSJim Jagielski 		long        nVal;
823*b1cdbd2cSJim Jagielski 		long        nTol;
824*b1cdbd2cSJim Jagielski 		long        nR;
825*b1cdbd2cSJim Jagielski 		long        nG;
826*b1cdbd2cSJim Jagielski 		long        nB;
827*b1cdbd2cSJim Jagielski 		long*       pMinR = new long[nCount];
828*b1cdbd2cSJim Jagielski 		long*       pMaxR = new long[nCount];
829*b1cdbd2cSJim Jagielski 		long*       pMinG = new long[nCount];
830*b1cdbd2cSJim Jagielski 		long*       pMaxG = new long[nCount];
831*b1cdbd2cSJim Jagielski 		long*       pMinB = new long[nCount];
832*b1cdbd2cSJim Jagielski 		long*       pMaxB = new long[nCount];
833*b1cdbd2cSJim Jagielski 		sal_uInt16      i;
834*b1cdbd2cSJim Jagielski 		sal_Bool        bReplace;
835*b1cdbd2cSJim Jagielski 
836*b1cdbd2cSJim Jagielski 		aMtf.SetPrefSize( rMtf.GetPrefSize() );
837*b1cdbd2cSJim Jagielski 		aMtf.SetPrefMapMode( rMtf.GetPrefMapMode() );
838*b1cdbd2cSJim Jagielski 
839*b1cdbd2cSJim Jagielski 		// Farbvergleichsarrays vorbereiten
840*b1cdbd2cSJim Jagielski 		for( i = 0; i < nCount; i++ )
841*b1cdbd2cSJim Jagielski 		{
842*b1cdbd2cSJim Jagielski 			nTol = ( pTols[i] * 255L ) / 100L;
843*b1cdbd2cSJim Jagielski 
844*b1cdbd2cSJim Jagielski 			nVal = ( (long) pSrcCols[i].GetRed() );
845*b1cdbd2cSJim Jagielski 			pMinR[i] = Max( nVal - nTol, 0L );
846*b1cdbd2cSJim Jagielski 			pMaxR[i] = Min( nVal + nTol, 255L );
847*b1cdbd2cSJim Jagielski 
848*b1cdbd2cSJim Jagielski 			nVal = ( (long) pSrcCols[i].GetGreen() );
849*b1cdbd2cSJim Jagielski 			pMinG[i] = Max( nVal - nTol, 0L );
850*b1cdbd2cSJim Jagielski 			pMaxG[i] = Min( nVal + nTol, 255L );
851*b1cdbd2cSJim Jagielski 
852*b1cdbd2cSJim Jagielski 			nVal = ( (long) pSrcCols[i].GetBlue() );
853*b1cdbd2cSJim Jagielski 			pMinB[i] = Max( nVal - nTol, 0L );
854*b1cdbd2cSJim Jagielski 			pMaxB[i] = Min( nVal + nTol, 255L );
855*b1cdbd2cSJim Jagielski 
856*b1cdbd2cSJim Jagielski 			pTrans[ i ] = ( pDstCols[ i ] == TRANSP_COL );
857*b1cdbd2cSJim Jagielski 		}
858*b1cdbd2cSJim Jagielski 
859*b1cdbd2cSJim Jagielski 		// Actions untersuchen und Farben ggf. ersetzen
860*b1cdbd2cSJim Jagielski 		for( sal_uIntPtr nAct = 0UL, nActCount = rMtf.GetActionCount(); nAct < nActCount; nAct++ )
861*b1cdbd2cSJim Jagielski 		{
862*b1cdbd2cSJim Jagielski 			MetaAction* pAction = rMtf.GetAction( nAct );
863*b1cdbd2cSJim Jagielski 
864*b1cdbd2cSJim Jagielski 			bReplace = sal_False;
865*b1cdbd2cSJim Jagielski 
866*b1cdbd2cSJim Jagielski 			switch( pAction->GetType() )
867*b1cdbd2cSJim Jagielski 			{
868*b1cdbd2cSJim Jagielski 				case( META_PIXEL_ACTION ):
869*b1cdbd2cSJim Jagielski 				{
870*b1cdbd2cSJim Jagielski 					MetaPixelAction* pAct = (MetaPixelAction*) pAction;
871*b1cdbd2cSJim Jagielski 
872*b1cdbd2cSJim Jagielski 					aCol = pAct->GetColor();
873*b1cdbd2cSJim Jagielski 					TEST_COLS();
874*b1cdbd2cSJim Jagielski 
875*b1cdbd2cSJim Jagielski 					if( bReplace )
876*b1cdbd2cSJim Jagielski 						pAct = new MetaPixelAction( pAct->GetPoint(), aCol );
877*b1cdbd2cSJim Jagielski 					else
878*b1cdbd2cSJim Jagielski 						pAct->Duplicate();
879*b1cdbd2cSJim Jagielski 
880*b1cdbd2cSJim Jagielski 					aMtf.AddAction( pAct );
881*b1cdbd2cSJim Jagielski 				}
882*b1cdbd2cSJim Jagielski 				break;
883*b1cdbd2cSJim Jagielski 
884*b1cdbd2cSJim Jagielski 				case( META_LINECOLOR_ACTION ):
885*b1cdbd2cSJim Jagielski 				{
886*b1cdbd2cSJim Jagielski 					MetaLineColorAction* pAct = (MetaLineColorAction*) pAction;
887*b1cdbd2cSJim Jagielski 
888*b1cdbd2cSJim Jagielski 					aCol = pAct->GetColor();
889*b1cdbd2cSJim Jagielski 					TEST_COLS();
890*b1cdbd2cSJim Jagielski 
891*b1cdbd2cSJim Jagielski 					if( bReplace )
892*b1cdbd2cSJim Jagielski 						pAct = new MetaLineColorAction( aCol, !pTrans[ i ] );
893*b1cdbd2cSJim Jagielski 					else
894*b1cdbd2cSJim Jagielski 						pAct->Duplicate();
895*b1cdbd2cSJim Jagielski 
896*b1cdbd2cSJim Jagielski 					aMtf.AddAction( pAct );
897*b1cdbd2cSJim Jagielski 				}
898*b1cdbd2cSJim Jagielski 				break;
899*b1cdbd2cSJim Jagielski 
900*b1cdbd2cSJim Jagielski 				case( META_FILLCOLOR_ACTION ):
901*b1cdbd2cSJim Jagielski 				{
902*b1cdbd2cSJim Jagielski 					MetaFillColorAction* pAct = (MetaFillColorAction*) pAction;
903*b1cdbd2cSJim Jagielski 
904*b1cdbd2cSJim Jagielski 					aCol = pAct->GetColor();
905*b1cdbd2cSJim Jagielski 					TEST_COLS();
906*b1cdbd2cSJim Jagielski 
907*b1cdbd2cSJim Jagielski 					if( bReplace )
908*b1cdbd2cSJim Jagielski 						pAct = new MetaFillColorAction( aCol, !pTrans[ i ] );
909*b1cdbd2cSJim Jagielski 					else
910*b1cdbd2cSJim Jagielski 						pAct->Duplicate();
911*b1cdbd2cSJim Jagielski 
912*b1cdbd2cSJim Jagielski 					aMtf.AddAction( pAct );
913*b1cdbd2cSJim Jagielski 				}
914*b1cdbd2cSJim Jagielski 				break;
915*b1cdbd2cSJim Jagielski 
916*b1cdbd2cSJim Jagielski 				case( META_TEXTCOLOR_ACTION ):
917*b1cdbd2cSJim Jagielski 				{
918*b1cdbd2cSJim Jagielski 					MetaTextColorAction* pAct = (MetaTextColorAction*) pAction;
919*b1cdbd2cSJim Jagielski 
920*b1cdbd2cSJim Jagielski 					aCol = pAct->GetColor();
921*b1cdbd2cSJim Jagielski 					TEST_COLS();
922*b1cdbd2cSJim Jagielski 
923*b1cdbd2cSJim Jagielski 					if( bReplace )
924*b1cdbd2cSJim Jagielski 						pAct = new MetaTextColorAction( aCol );
925*b1cdbd2cSJim Jagielski 					else
926*b1cdbd2cSJim Jagielski 						pAct->Duplicate();
927*b1cdbd2cSJim Jagielski 
928*b1cdbd2cSJim Jagielski 					aMtf.AddAction( pAct );
929*b1cdbd2cSJim Jagielski 				}
930*b1cdbd2cSJim Jagielski 				break;
931*b1cdbd2cSJim Jagielski 
932*b1cdbd2cSJim Jagielski 				case( META_TEXTFILLCOLOR_ACTION ):
933*b1cdbd2cSJim Jagielski 				{
934*b1cdbd2cSJim Jagielski 					MetaTextFillColorAction* pAct = (MetaTextFillColorAction*) pAction;
935*b1cdbd2cSJim Jagielski 
936*b1cdbd2cSJim Jagielski 					aCol = pAct->GetColor();
937*b1cdbd2cSJim Jagielski 					TEST_COLS();
938*b1cdbd2cSJim Jagielski 
939*b1cdbd2cSJim Jagielski 					if( bReplace )
940*b1cdbd2cSJim Jagielski 						pAct = new MetaTextFillColorAction( aCol, !pTrans[ i ] );
941*b1cdbd2cSJim Jagielski 					else
942*b1cdbd2cSJim Jagielski 						pAct->Duplicate();
943*b1cdbd2cSJim Jagielski 
944*b1cdbd2cSJim Jagielski 					aMtf.AddAction( pAct );
945*b1cdbd2cSJim Jagielski 				}
946*b1cdbd2cSJim Jagielski 				break;
947*b1cdbd2cSJim Jagielski 
948*b1cdbd2cSJim Jagielski 				case( META_FONT_ACTION ):
949*b1cdbd2cSJim Jagielski 				{
950*b1cdbd2cSJim Jagielski 					MetaFontAction* pAct = (MetaFontAction*) pAction;
951*b1cdbd2cSJim Jagielski 					Font			aFont( pAct->GetFont() );
952*b1cdbd2cSJim Jagielski 
953*b1cdbd2cSJim Jagielski 					aCol = aFont.GetColor();
954*b1cdbd2cSJim Jagielski 					TEST_COLS();
955*b1cdbd2cSJim Jagielski 
956*b1cdbd2cSJim Jagielski 					if( bReplace )
957*b1cdbd2cSJim Jagielski 					{
958*b1cdbd2cSJim Jagielski 						aFont.SetColor( aCol );
959*b1cdbd2cSJim Jagielski 						pAct = new MetaFontAction( aFont );
960*b1cdbd2cSJim Jagielski 					}
961*b1cdbd2cSJim Jagielski 					else
962*b1cdbd2cSJim Jagielski 						pAct->Duplicate();
963*b1cdbd2cSJim Jagielski 
964*b1cdbd2cSJim Jagielski 					aMtf.AddAction( pAct );
965*b1cdbd2cSJim Jagielski 				}
966*b1cdbd2cSJim Jagielski 				break;
967*b1cdbd2cSJim Jagielski 
968*b1cdbd2cSJim Jagielski 				case( META_WALLPAPER_ACTION ):
969*b1cdbd2cSJim Jagielski 				{
970*b1cdbd2cSJim Jagielski 					MetaWallpaperAction*	pAct = (MetaWallpaperAction*) pAction;
971*b1cdbd2cSJim Jagielski 					Wallpaper				aWall( pAct->GetWallpaper() );
972*b1cdbd2cSJim Jagielski 
973*b1cdbd2cSJim Jagielski 					aCol = aWall.GetColor();
974*b1cdbd2cSJim Jagielski 					TEST_COLS();
975*b1cdbd2cSJim Jagielski 
976*b1cdbd2cSJim Jagielski 					if( bReplace )
977*b1cdbd2cSJim Jagielski 					{
978*b1cdbd2cSJim Jagielski 						aWall.SetColor( aCol );
979*b1cdbd2cSJim Jagielski 						pAct = new MetaWallpaperAction( pAct->GetRect(), aWall );
980*b1cdbd2cSJim Jagielski 					}
981*b1cdbd2cSJim Jagielski 					else
982*b1cdbd2cSJim Jagielski 						pAct->Duplicate();
983*b1cdbd2cSJim Jagielski 
984*b1cdbd2cSJim Jagielski 					aMtf.AddAction( pAct );
985*b1cdbd2cSJim Jagielski 				}
986*b1cdbd2cSJim Jagielski 				break;
987*b1cdbd2cSJim Jagielski 
988*b1cdbd2cSJim Jagielski 				case( META_BMP_ACTION ):
989*b1cdbd2cSJim Jagielski 				{
990*b1cdbd2cSJim Jagielski 					MetaBmpAction*	pAct = (MetaBmpAction*) pAction;
991*b1cdbd2cSJim Jagielski 					const Bitmap	aBmp( Mask( pAct->GetBitmap() ).GetBitmap() );
992*b1cdbd2cSJim Jagielski 
993*b1cdbd2cSJim Jagielski 					pAct = new MetaBmpAction( pAct->GetPoint(), aBmp );
994*b1cdbd2cSJim Jagielski 					aMtf.AddAction( pAct );
995*b1cdbd2cSJim Jagielski 				}
996*b1cdbd2cSJim Jagielski 				break;
997*b1cdbd2cSJim Jagielski 
998*b1cdbd2cSJim Jagielski 				case( META_BMPSCALE_ACTION ):
999*b1cdbd2cSJim Jagielski 				{
1000*b1cdbd2cSJim Jagielski 					MetaBmpScaleAction* pAct = (MetaBmpScaleAction*) pAction;
1001*b1cdbd2cSJim Jagielski 					const Bitmap		aBmp( Mask( pAct->GetBitmap() ).GetBitmap() );
1002*b1cdbd2cSJim Jagielski 
1003*b1cdbd2cSJim Jagielski 					pAct = new MetaBmpScaleAction( pAct->GetPoint(), pAct->GetSize(), aBmp );
1004*b1cdbd2cSJim Jagielski 					aMtf.AddAction( pAct );
1005*b1cdbd2cSJim Jagielski 				}
1006*b1cdbd2cSJim Jagielski 				break;
1007*b1cdbd2cSJim Jagielski 
1008*b1cdbd2cSJim Jagielski 				case( META_BMPSCALEPART_ACTION ):
1009*b1cdbd2cSJim Jagielski 				{
1010*b1cdbd2cSJim Jagielski 					MetaBmpScalePartAction* pAct = (MetaBmpScalePartAction*) pAction;
1011*b1cdbd2cSJim Jagielski 					const Bitmap			aBmp( Mask( pAct->GetBitmap() ).GetBitmap() );
1012*b1cdbd2cSJim Jagielski 
1013*b1cdbd2cSJim Jagielski 					pAct = new MetaBmpScalePartAction( pAct->GetDestPoint(), pAct->GetDestSize(),
1014*b1cdbd2cSJim Jagielski 													   pAct->GetSrcPoint(), pAct->GetSrcSize(), aBmp );
1015*b1cdbd2cSJim Jagielski 					aMtf.AddAction( pAct );
1016*b1cdbd2cSJim Jagielski 				}
1017*b1cdbd2cSJim Jagielski 				break;
1018*b1cdbd2cSJim Jagielski 
1019*b1cdbd2cSJim Jagielski 				case( META_BMPEX_ACTION ):
1020*b1cdbd2cSJim Jagielski 				{
1021*b1cdbd2cSJim Jagielski 					MetaBmpExAction*	pAct = (MetaBmpExAction*) pAction;
1022*b1cdbd2cSJim Jagielski 					const BitmapEx		aBmpEx( Mask( pAct->GetBitmapEx() ).GetBitmapEx() );
1023*b1cdbd2cSJim Jagielski 
1024*b1cdbd2cSJim Jagielski 					pAct = new MetaBmpExAction( pAct->GetPoint(), aBmpEx );
1025*b1cdbd2cSJim Jagielski 					aMtf.AddAction( pAct );
1026*b1cdbd2cSJim Jagielski 				}
1027*b1cdbd2cSJim Jagielski 				break;
1028*b1cdbd2cSJim Jagielski 
1029*b1cdbd2cSJim Jagielski 				case( META_BMPEXSCALE_ACTION ):
1030*b1cdbd2cSJim Jagielski 				{
1031*b1cdbd2cSJim Jagielski 					MetaBmpExScaleAction*	pAct = (MetaBmpExScaleAction*) pAction;
1032*b1cdbd2cSJim Jagielski 					const BitmapEx			aBmpEx( Mask( pAct->GetBitmapEx() ).GetBitmapEx() );
1033*b1cdbd2cSJim Jagielski 
1034*b1cdbd2cSJim Jagielski 					pAct = new MetaBmpExScaleAction( pAct->GetPoint(), pAct->GetSize(), aBmpEx );
1035*b1cdbd2cSJim Jagielski 					aMtf.AddAction( pAct );
1036*b1cdbd2cSJim Jagielski 				}
1037*b1cdbd2cSJim Jagielski 				break;
1038*b1cdbd2cSJim Jagielski 
1039*b1cdbd2cSJim Jagielski 				case( META_BMPEXSCALEPART_ACTION ):
1040*b1cdbd2cSJim Jagielski 				{
1041*b1cdbd2cSJim Jagielski 					MetaBmpExScalePartAction*	pAct = (MetaBmpExScalePartAction*) pAction;
1042*b1cdbd2cSJim Jagielski 					const BitmapEx				aBmpEx( Mask( pAct->GetBitmapEx() ).GetBitmapEx() );
1043*b1cdbd2cSJim Jagielski 
1044*b1cdbd2cSJim Jagielski 					pAct = new MetaBmpExScalePartAction( pAct->GetDestPoint(), pAct->GetDestSize(),
1045*b1cdbd2cSJim Jagielski 														 pAct->GetSrcPoint(), pAct->GetSrcSize(), aBmpEx );
1046*b1cdbd2cSJim Jagielski 					aMtf.AddAction( pAct );
1047*b1cdbd2cSJim Jagielski 				}
1048*b1cdbd2cSJim Jagielski 				break;
1049*b1cdbd2cSJim Jagielski 
1050*b1cdbd2cSJim Jagielski 				default:
1051*b1cdbd2cSJim Jagielski 				{
1052*b1cdbd2cSJim Jagielski 					pAction->Duplicate();
1053*b1cdbd2cSJim Jagielski 					aMtf.AddAction( pAction );
1054*b1cdbd2cSJim Jagielski 				}
1055*b1cdbd2cSJim Jagielski 				break;
1056*b1cdbd2cSJim Jagielski 			}
1057*b1cdbd2cSJim Jagielski 		}
1058*b1cdbd2cSJim Jagielski 
1059*b1cdbd2cSJim Jagielski 		delete[] pMinR;
1060*b1cdbd2cSJim Jagielski 		delete[] pMaxR;
1061*b1cdbd2cSJim Jagielski 		delete[] pMinG;
1062*b1cdbd2cSJim Jagielski 		delete[] pMaxG;
1063*b1cdbd2cSJim Jagielski 		delete[] pMinB;
1064*b1cdbd2cSJim Jagielski 		delete[] pMaxB;
1065*b1cdbd2cSJim Jagielski 	}
1066*b1cdbd2cSJim Jagielski 
1067*b1cdbd2cSJim Jagielski 	LeaveWait();
1068*b1cdbd2cSJim Jagielski 
1069*b1cdbd2cSJim Jagielski 	return aMtf;
1070*b1cdbd2cSJim Jagielski }
1071*b1cdbd2cSJim Jagielski 
1072*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------
1073*b1cdbd2cSJim Jagielski 
ImpReplaceTransparency(const BitmapEx & rBmpEx,const Color & rColor)1074*b1cdbd2cSJim Jagielski BitmapEx SvxBmpMask::ImpReplaceTransparency( const BitmapEx& rBmpEx, const Color& rColor )
1075*b1cdbd2cSJim Jagielski {
1076*b1cdbd2cSJim Jagielski 	if( rBmpEx.IsTransparent() )
1077*b1cdbd2cSJim Jagielski 	{
1078*b1cdbd2cSJim Jagielski 		Bitmap aBmp( rBmpEx.GetBitmap() );
1079*b1cdbd2cSJim Jagielski 		aBmp.Replace( rBmpEx.GetMask(), rColor );
1080*b1cdbd2cSJim Jagielski 		return aBmp;
1081*b1cdbd2cSJim Jagielski 	}
1082*b1cdbd2cSJim Jagielski 	else
1083*b1cdbd2cSJim Jagielski 		return rBmpEx;
1084*b1cdbd2cSJim Jagielski }
1085*b1cdbd2cSJim Jagielski 
1086*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------
1087*b1cdbd2cSJim Jagielski 
ImpReplaceTransparency(const Animation & rAnim,const Color & rColor)1088*b1cdbd2cSJim Jagielski Animation SvxBmpMask::ImpReplaceTransparency( const Animation& rAnim, const Color& rColor )
1089*b1cdbd2cSJim Jagielski {
1090*b1cdbd2cSJim Jagielski 	Animation	aAnimation( rAnim );
1091*b1cdbd2cSJim Jagielski 	sal_uInt16		nAnimationCount = aAnimation.Count();
1092*b1cdbd2cSJim Jagielski 
1093*b1cdbd2cSJim Jagielski 	for( sal_uInt16 i = 0; i < nAnimationCount; i++ )
1094*b1cdbd2cSJim Jagielski 	{
1095*b1cdbd2cSJim Jagielski 		AnimationBitmap aAnimBmp( aAnimation.Get( i ) );
1096*b1cdbd2cSJim Jagielski 		aAnimBmp.aBmpEx = ImpReplaceTransparency( aAnimBmp.aBmpEx, rColor );
1097*b1cdbd2cSJim Jagielski 		aAnimation.Replace( aAnimBmp, i );
1098*b1cdbd2cSJim Jagielski 	}
1099*b1cdbd2cSJim Jagielski 
1100*b1cdbd2cSJim Jagielski 	return aAnimation;
1101*b1cdbd2cSJim Jagielski }
1102*b1cdbd2cSJim Jagielski 
1103*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------
1104*b1cdbd2cSJim Jagielski 
ImpReplaceTransparency(const GDIMetaFile & rMtf,const Color & rColor)1105*b1cdbd2cSJim Jagielski GDIMetaFile SvxBmpMask::ImpReplaceTransparency( const GDIMetaFile& rMtf, const Color& rColor )
1106*b1cdbd2cSJim Jagielski {
1107*b1cdbd2cSJim Jagielski 	VirtualDevice	aVDev;
1108*b1cdbd2cSJim Jagielski 	GDIMetaFile		aMtf;
1109*b1cdbd2cSJim Jagielski 	const MapMode&	rPrefMap = rMtf.GetPrefMapMode();
1110*b1cdbd2cSJim Jagielski 	const Size&		rPrefSize = rMtf.GetPrefSize();
1111*b1cdbd2cSJim Jagielski 	const sal_uIntPtr		nActionCount = rMtf.GetActionCount();
1112*b1cdbd2cSJim Jagielski 
1113*b1cdbd2cSJim Jagielski 	aVDev.EnableOutput( sal_False );
1114*b1cdbd2cSJim Jagielski 	aMtf.Record( &aVDev );
1115*b1cdbd2cSJim Jagielski 	aMtf.SetPrefSize( rPrefSize );
1116*b1cdbd2cSJim Jagielski 	aMtf.SetPrefMapMode( rPrefMap );
1117*b1cdbd2cSJim Jagielski 	aVDev.SetLineColor( rColor );
1118*b1cdbd2cSJim Jagielski 	aVDev.SetFillColor( rColor );
1119*b1cdbd2cSJim Jagielski 
1120*b1cdbd2cSJim Jagielski 	// Actions nacheinander abspielen; zuerst
1121*b1cdbd2cSJim Jagielski 	// den gesamten Bereich auf die Ersatzfarbe setzen
1122*b1cdbd2cSJim Jagielski 	aVDev.DrawRect( Rectangle( rPrefMap.GetOrigin(), rPrefSize ) );
1123*b1cdbd2cSJim Jagielski 	for ( sal_uIntPtr i = 0; i < nActionCount; i++ )
1124*b1cdbd2cSJim Jagielski 	{
1125*b1cdbd2cSJim Jagielski 		MetaAction* pAct = rMtf.GetAction( i );
1126*b1cdbd2cSJim Jagielski 
1127*b1cdbd2cSJim Jagielski 		pAct->Duplicate();
1128*b1cdbd2cSJim Jagielski 		aMtf.AddAction( pAct );
1129*b1cdbd2cSJim Jagielski 	}
1130*b1cdbd2cSJim Jagielski 
1131*b1cdbd2cSJim Jagielski 	aMtf.Stop();
1132*b1cdbd2cSJim Jagielski 	aMtf.WindStart();
1133*b1cdbd2cSJim Jagielski 
1134*b1cdbd2cSJim Jagielski 	return aMtf;
1135*b1cdbd2cSJim Jagielski }
1136*b1cdbd2cSJim Jagielski 
1137*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------
1138*b1cdbd2cSJim Jagielski 
Mask(const Graphic & rGraphic)1139*b1cdbd2cSJim Jagielski Graphic SvxBmpMask::Mask( const Graphic& rGraphic )
1140*b1cdbd2cSJim Jagielski {
1141*b1cdbd2cSJim Jagielski 	Graphic		aGraphic( rGraphic );
1142*b1cdbd2cSJim Jagielski 	const Color	aReplColor( aLbColorTrans.GetSelectEntryColor() );
1143*b1cdbd2cSJim Jagielski 
1144*b1cdbd2cSJim Jagielski 	switch( rGraphic.GetType() )
1145*b1cdbd2cSJim Jagielski 	{
1146*b1cdbd2cSJim Jagielski 		case( GRAPHIC_BITMAP ):
1147*b1cdbd2cSJim Jagielski 		{
1148*b1cdbd2cSJim Jagielski 			if( rGraphic.IsAnimated() )
1149*b1cdbd2cSJim Jagielski 			{
1150*b1cdbd2cSJim Jagielski 				// Transparenz ersetzen?
1151*b1cdbd2cSJim Jagielski 				if ( aCbxTrans.IsChecked() )
1152*b1cdbd2cSJim Jagielski 					aGraphic = ImpReplaceTransparency( rGraphic.GetAnimation(), aReplColor );
1153*b1cdbd2cSJim Jagielski 				else
1154*b1cdbd2cSJim Jagielski 					aGraphic = ImpMask( rGraphic.GetAnimation() );
1155*b1cdbd2cSJim Jagielski 			}
1156*b1cdbd2cSJim Jagielski 			else
1157*b1cdbd2cSJim Jagielski 			{
1158*b1cdbd2cSJim Jagielski 				// Transparenz ersetzen?
1159*b1cdbd2cSJim Jagielski 				if( aCbxTrans.IsChecked() )
1160*b1cdbd2cSJim Jagielski 				{
1161*b1cdbd2cSJim Jagielski 					if( aGraphic.IsTransparent() )
1162*b1cdbd2cSJim Jagielski 					{
1163*b1cdbd2cSJim Jagielski 						BitmapEx	aBmpEx( ImpReplaceTransparency( aGraphic.GetBitmapEx(), aReplColor ) );
1164*b1cdbd2cSJim Jagielski 						const Size	aSize( aBmpEx.GetSizePixel() );
1165*b1cdbd2cSJim Jagielski 
1166*b1cdbd2cSJim Jagielski 						if( aSize.Width() && aSize.Height() )
1167*b1cdbd2cSJim Jagielski 							aGraphic = aBmpEx;
1168*b1cdbd2cSJim Jagielski 					}
1169*b1cdbd2cSJim Jagielski 				}
1170*b1cdbd2cSJim Jagielski 				else
1171*b1cdbd2cSJim Jagielski 				{
1172*b1cdbd2cSJim Jagielski 					Color	pSrcCols[4];
1173*b1cdbd2cSJim Jagielski 					Color	pDstCols[4];
1174*b1cdbd2cSJim Jagielski 					sal_uIntPtr	pTols[4];
1175*b1cdbd2cSJim Jagielski 					sal_uInt16	nCount = InitColorArrays( pSrcCols, pDstCols, pTols );
1176*b1cdbd2cSJim Jagielski 
1177*b1cdbd2cSJim Jagielski 					if( nCount )
1178*b1cdbd2cSJim Jagielski 					{
1179*b1cdbd2cSJim Jagielski 						// erstmal alle Transparent-Farben setzen
1180*b1cdbd2cSJim Jagielski 						for( sal_uInt16 i = 0; i < nCount; i++ )
1181*b1cdbd2cSJim Jagielski 						{
1182*b1cdbd2cSJim Jagielski 							// Haben wir eine Transparenzfarbe?
1183*b1cdbd2cSJim Jagielski 							if( pDstCols[i] == TRANSP_COL )
1184*b1cdbd2cSJim Jagielski 							{
1185*b1cdbd2cSJim Jagielski 								BitmapEx	aBmpEx( ImpMaskTransparent( aGraphic.GetBitmapEx(),
1186*b1cdbd2cSJim Jagielski 																		pSrcCols[ i ], pTols[ i ] ) );
1187*b1cdbd2cSJim Jagielski 								const Size	aSize( aBmpEx.GetSizePixel() );
1188*b1cdbd2cSJim Jagielski 
1189*b1cdbd2cSJim Jagielski 								if( aSize.Width() && aSize.Height() )
1190*b1cdbd2cSJim Jagielski 									aGraphic = aBmpEx;
1191*b1cdbd2cSJim Jagielski 							}
1192*b1cdbd2cSJim Jagielski 						}
1193*b1cdbd2cSJim Jagielski 
1194*b1cdbd2cSJim Jagielski 						// jetzt noch einmal mit den normalen Farben ersetzen
1195*b1cdbd2cSJim Jagielski 						Bitmap	aBitmap( ImpMask( aGraphic.GetBitmap() ) );
1196*b1cdbd2cSJim Jagielski 						Size	aSize( aBitmap.GetSizePixel() );
1197*b1cdbd2cSJim Jagielski 
1198*b1cdbd2cSJim Jagielski 						if ( aSize.Width() && aSize.Height() )
1199*b1cdbd2cSJim Jagielski 						{
1200*b1cdbd2cSJim Jagielski 							if ( aGraphic.IsTransparent() )
1201*b1cdbd2cSJim Jagielski 								aGraphic = Graphic( BitmapEx( aBitmap, aGraphic.GetBitmapEx().GetMask() ) );
1202*b1cdbd2cSJim Jagielski 							else
1203*b1cdbd2cSJim Jagielski 								aGraphic = aBitmap;
1204*b1cdbd2cSJim Jagielski 						}
1205*b1cdbd2cSJim Jagielski 					}
1206*b1cdbd2cSJim Jagielski 				}
1207*b1cdbd2cSJim Jagielski 			}
1208*b1cdbd2cSJim Jagielski 		}
1209*b1cdbd2cSJim Jagielski 		break;
1210*b1cdbd2cSJim Jagielski 
1211*b1cdbd2cSJim Jagielski 		case( GRAPHIC_GDIMETAFILE ):
1212*b1cdbd2cSJim Jagielski 		{
1213*b1cdbd2cSJim Jagielski 			GDIMetaFile	aMtf( aGraphic.GetGDIMetaFile() );
1214*b1cdbd2cSJim Jagielski 
1215*b1cdbd2cSJim Jagielski 			// Transparenz ersetzen?
1216*b1cdbd2cSJim Jagielski 			if( aCbxTrans.IsChecked() )
1217*b1cdbd2cSJim Jagielski 				aMtf = ImpReplaceTransparency( aMtf, aReplColor );
1218*b1cdbd2cSJim Jagielski 			else
1219*b1cdbd2cSJim Jagielski 				aMtf = ImpMask( aMtf );
1220*b1cdbd2cSJim Jagielski 
1221*b1cdbd2cSJim Jagielski 			Size aSize( aMtf.GetPrefSize() );
1222*b1cdbd2cSJim Jagielski 			if ( aSize.Width() && aSize.Height() )
1223*b1cdbd2cSJim Jagielski 				aGraphic = Graphic( aMtf );
1224*b1cdbd2cSJim Jagielski 			else
1225*b1cdbd2cSJim Jagielski 				aGraphic = rGraphic;
1226*b1cdbd2cSJim Jagielski 		}
1227*b1cdbd2cSJim Jagielski 		break;
1228*b1cdbd2cSJim Jagielski 
1229*b1cdbd2cSJim Jagielski 		default:
1230*b1cdbd2cSJim Jagielski 			aGraphic = rGraphic;
1231*b1cdbd2cSJim Jagielski 		break;
1232*b1cdbd2cSJim Jagielski 	}
1233*b1cdbd2cSJim Jagielski 
1234*b1cdbd2cSJim Jagielski 	if( aGraphic != rGraphic )
1235*b1cdbd2cSJim Jagielski 	{
1236*b1cdbd2cSJim Jagielski 		aGraphic.SetPrefSize( rGraphic.GetPrefSize() );
1237*b1cdbd2cSJim Jagielski 		aGraphic.SetPrefMapMode( rGraphic.GetPrefMapMode() );
1238*b1cdbd2cSJim Jagielski 	}
1239*b1cdbd2cSJim Jagielski 
1240*b1cdbd2cSJim Jagielski 	return aGraphic;
1241*b1cdbd2cSJim Jagielski }
1242*b1cdbd2cSJim Jagielski 
1243*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------
1244*b1cdbd2cSJim Jagielski 
IsEyedropping() const1245*b1cdbd2cSJim Jagielski sal_Bool SvxBmpMask::IsEyedropping() const
1246*b1cdbd2cSJim Jagielski {
1247*b1cdbd2cSJim Jagielski 	return aTbxPipette.IsItemChecked( TBI_PIPETTE );
1248*b1cdbd2cSJim Jagielski }
1249*b1cdbd2cSJim Jagielski 
DataChanged(const DataChangedEvent & rDCEvt)1250*b1cdbd2cSJim Jagielski void SvxBmpMask::DataChanged( const DataChangedEvent& rDCEvt )
1251*b1cdbd2cSJim Jagielski {
1252*b1cdbd2cSJim Jagielski     SfxDockingWindow::DataChanged( rDCEvt );
1253*b1cdbd2cSJim Jagielski 
1254*b1cdbd2cSJim Jagielski 	if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) && (rDCEvt.GetFlags() & SETTINGS_STYLE) )
1255*b1cdbd2cSJim Jagielski             ApplyStyle();
1256*b1cdbd2cSJim Jagielski }
1257*b1cdbd2cSJim Jagielski 
ApplyStyle()1258*b1cdbd2cSJim Jagielski void SvxBmpMask::ApplyStyle()
1259*b1cdbd2cSJim Jagielski {
1260*b1cdbd2cSJim Jagielski 	bool bHighContrast = GetSettings().GetStyleSettings().GetHighContrastMode();
1261*b1cdbd2cSJim Jagielski 
1262*b1cdbd2cSJim Jagielski 	aTbxPipette.SetItemImage( TBI_PIPETTE, bHighContrast ? maImgPipetteH : maImgPipette );
1263*b1cdbd2cSJim Jagielski }
1264*b1cdbd2cSJim Jagielski 
1265*b1cdbd2cSJim Jagielski 
1266*b1cdbd2cSJim Jagielski /** Set an accessible name for the source color check boxes.  Without this
1267*b1cdbd2cSJim Jagielski     the lengthy description is read.
1268*b1cdbd2cSJim Jagielski */
SetAccessibleNames(void)1269*b1cdbd2cSJim Jagielski void SvxBmpMask::SetAccessibleNames (void)
1270*b1cdbd2cSJim Jagielski {
1271*b1cdbd2cSJim Jagielski     String sSourceColor (BMP_RESID( RID_SVXDLG_BMPMASK_STR_SOURCECOLOR));
1272*b1cdbd2cSJim Jagielski     String sSourceColorN;
1273*b1cdbd2cSJim Jagielski 
1274*b1cdbd2cSJim Jagielski     sSourceColorN = sSourceColor;
1275*b1cdbd2cSJim Jagielski     sSourceColorN.AppendAscii (RTL_CONSTASCII_STRINGPARAM (" 1"));
1276*b1cdbd2cSJim Jagielski     aCbx1.SetAccessibleName (sSourceColorN);
1277*b1cdbd2cSJim Jagielski 
1278*b1cdbd2cSJim Jagielski     sSourceColorN = sSourceColor;
1279*b1cdbd2cSJim Jagielski     sSourceColorN.AppendAscii (RTL_CONSTASCII_STRINGPARAM (" 2"));
1280*b1cdbd2cSJim Jagielski     aCbx2.SetAccessibleName (sSourceColorN);
1281*b1cdbd2cSJim Jagielski 
1282*b1cdbd2cSJim Jagielski     sSourceColorN = sSourceColor;
1283*b1cdbd2cSJim Jagielski     sSourceColorN.AppendAscii (RTL_CONSTASCII_STRINGPARAM (" 3"));
1284*b1cdbd2cSJim Jagielski     aCbx3.SetAccessibleName (sSourceColorN);
1285*b1cdbd2cSJim Jagielski 
1286*b1cdbd2cSJim Jagielski     sSourceColorN = sSourceColor;
1287*b1cdbd2cSJim Jagielski     sSourceColorN.AppendAscii (RTL_CONSTASCII_STRINGPARAM (" 4"));
1288*b1cdbd2cSJim Jagielski     aCbx4.SetAccessibleName (sSourceColorN);
1289*b1cdbd2cSJim Jagielski 	// set the accessible name for valueset
1290*b1cdbd2cSJim Jagielski 	String sColorPalette (BMP_RESID( RID_SVXDLG_BMPMASK_STR_PALETTE));
1291*b1cdbd2cSJim Jagielski     String sColorPaletteN;
1292*b1cdbd2cSJim Jagielski     sColorPaletteN = sColorPalette;
1293*b1cdbd2cSJim Jagielski     sColorPaletteN.AppendAscii (RTL_CONSTASCII_STRINGPARAM (" 1"));
1294*b1cdbd2cSJim Jagielski     pQSet1->SetText (sColorPaletteN);
1295*b1cdbd2cSJim Jagielski     sColorPaletteN = sColorPalette;
1296*b1cdbd2cSJim Jagielski     sColorPaletteN.AppendAscii (RTL_CONSTASCII_STRINGPARAM (" 2"));
1297*b1cdbd2cSJim Jagielski     pQSet2->SetText (sColorPaletteN);
1298*b1cdbd2cSJim Jagielski     sColorPaletteN = sColorPalette;
1299*b1cdbd2cSJim Jagielski     sColorPaletteN.AppendAscii (RTL_CONSTASCII_STRINGPARAM (" 3"));
1300*b1cdbd2cSJim Jagielski     pQSet3->SetText (sColorPaletteN);
1301*b1cdbd2cSJim Jagielski     sColorPaletteN = sColorPalette;
1302*b1cdbd2cSJim Jagielski     sColorPaletteN.AppendAscii (RTL_CONSTASCII_STRINGPARAM (" 4"));
1303*b1cdbd2cSJim Jagielski     pQSet4->SetText (sColorPaletteN);
1304*b1cdbd2cSJim Jagielski     // set the accessible for replace with spin boxes.
1305*b1cdbd2cSJim Jagielski 	String sTolerance(BMP_RESID( RID_SVXDLG_BMPMASK_STR_TOLERANCE));
1306*b1cdbd2cSJim Jagielski     String sToleranceN;
1307*b1cdbd2cSJim Jagielski     sToleranceN = sTolerance;
1308*b1cdbd2cSJim Jagielski     sToleranceN.AppendAscii (RTL_CONSTASCII_STRINGPARAM (" 1"));
1309*b1cdbd2cSJim Jagielski     aSp1.SetAccessibleName (sToleranceN);
1310*b1cdbd2cSJim Jagielski     sToleranceN = sTolerance;
1311*b1cdbd2cSJim Jagielski     sToleranceN.AppendAscii (RTL_CONSTASCII_STRINGPARAM (" 2"));
1312*b1cdbd2cSJim Jagielski     aSp2.SetAccessibleName (sToleranceN);
1313*b1cdbd2cSJim Jagielski     sToleranceN = sTolerance;
1314*b1cdbd2cSJim Jagielski     sToleranceN.AppendAscii (RTL_CONSTASCII_STRINGPARAM (" 3"));
1315*b1cdbd2cSJim Jagielski     aSp3.SetAccessibleName (sToleranceN);
1316*b1cdbd2cSJim Jagielski     sToleranceN = sTolerance;
1317*b1cdbd2cSJim Jagielski     sToleranceN.AppendAscii (RTL_CONSTASCII_STRINGPARAM (" 4"));
1318*b1cdbd2cSJim Jagielski     aSp4.SetAccessibleName (sToleranceN);
1319*b1cdbd2cSJim Jagielski     // set the accessible for replace with combo boxes.
1320*b1cdbd2cSJim Jagielski    	String sReplaceWith(BMP_RESID( RID_SVXDLG_BMPMASK_STR_REPLACEWITH));
1321*b1cdbd2cSJim Jagielski     String sReplaceWithN;
1322*b1cdbd2cSJim Jagielski     sReplaceWithN = sReplaceWith;
1323*b1cdbd2cSJim Jagielski     sReplaceWithN.AppendAscii (RTL_CONSTASCII_STRINGPARAM (" 1"));
1324*b1cdbd2cSJim Jagielski     aLbColor1.SetAccessibleName (sReplaceWithN);
1325*b1cdbd2cSJim Jagielski     sReplaceWithN = sReplaceWith;
1326*b1cdbd2cSJim Jagielski     sReplaceWithN.AppendAscii (RTL_CONSTASCII_STRINGPARAM (" 2"));
1327*b1cdbd2cSJim Jagielski     aLbColor2.SetAccessibleName (sReplaceWithN);
1328*b1cdbd2cSJim Jagielski     sReplaceWithN = sReplaceWith;
1329*b1cdbd2cSJim Jagielski     sReplaceWithN.AppendAscii (RTL_CONSTASCII_STRINGPARAM (" 3"));
1330*b1cdbd2cSJim Jagielski     aLbColor3.SetAccessibleName (sReplaceWithN);
1331*b1cdbd2cSJim Jagielski     sReplaceWithN = sReplaceWith;
1332*b1cdbd2cSJim Jagielski     sReplaceWithN.AppendAscii (RTL_CONSTASCII_STRINGPARAM (" 4"));
1333*b1cdbd2cSJim Jagielski     aLbColor4.SetAccessibleName (sReplaceWithN);
1334*b1cdbd2cSJim Jagielski }
1335