xref: /trunk/main/cui/source/tabpages/labdlg.cxx (revision 2ee96f1c)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_cui.hxx"
26 
27 // include ---------------------------------------------------------------
28 #include <tools/shl.hxx>
29 #include <sfx2/app.hxx>
30 #include <sfx2/module.hxx>
31 #include <swpossizetabpage.hxx>
32 #include <svx/dialogs.hrc>
33 #define _SVX_LABDLG_CXX
34 
35 #include <svx/svdattrx.hxx>
36 #include <cuires.hrc>
37 #include <dialmgr.hxx>
38 #include "svx/dlgutil.hxx"
39 #include "transfrm.hxx"
40 
41 #include "labdlg.hrc"
42 #include "labdlg.hxx"
43 
44 // define ----------------------------------------------------------------
45 
46 #define AZ_OPTIMAL		0
47 #define AZ_VON_OBEN		1
48 #define AZ_VON_LINKS	2
49 #define AZ_HORIZONTAL	3
50 #define AZ_VERTIKAL		4
51 
52 #define AT_OBEN			0
53 #define AT_MITTE		1
54 #define AT_UNTEN		2
55 
56 #define WK_OPTIMAL		0
57 #define WK_30			1
58 #define WK_45			2
59 #define WK_60			3
60 #define WK_90			4
61 
62 // static ----------------------------------------------------------------
63 
64 static sal_uInt16 pCaptionRanges[] =
65 {
66 	SDRATTR_CAPTIONTYPE,
67 	SDRATTR_CAPTIONFIXEDANGLE,
68 	SDRATTR_CAPTIONANGLE,
69 	SDRATTR_CAPTIONGAP,
70 	SDRATTR_CAPTIONESCDIR,
71 	SDRATTR_CAPTIONESCISREL,
72 	SDRATTR_CAPTIONESCREL,
73 	SDRATTR_CAPTIONESCABS,
74 	SDRATTR_CAPTIONLINELEN,
75 	SDRATTR_CAPTIONFITLINELEN,
76 	0
77 };
78 
79 // -----------------------------------------------------------------------
80 
SvxCaptionTabPage(Window * pParent,const SfxItemSet & rInAttrs)81 SvxCaptionTabPage::SvxCaptionTabPage(Window* pParent, const SfxItemSet& rInAttrs)
82  :	SfxTabPage( pParent, CUI_RES( RID_SVXPAGE_CAPTION ), rInAttrs ),
83 
84 	aCT_CAPTTYPE(		this, CUI_RES( CT_CAPTTYPE ) ),
85 	aFT_ABSTAND(		this, CUI_RES( FT_ABSTAND ) ),
86 	aMF_ABSTAND(		this, CUI_RES( MF_ABSTAND ) ),
87 	aFT_WINKEL(			this, CUI_RES( FT_WINKEL ) ),
88 	aLB_WINKEL(			this, CUI_RES( LB_WINKEL ) ),
89 	aFT_ANSATZ(			this, CUI_RES( FT_ANSATZ ) ),
90 	aLB_ANSATZ(			this, CUI_RES( LB_ANSATZ ) ),
91 	aFT_UM(				this, CUI_RES( FT_UM ) ),
92 	aMF_ANSATZ(			this, CUI_RES( MF_ANSATZ ) ),
93 	aFT_ANSATZ_REL(		this, CUI_RES( FT_ANSATZ_REL ) ),
94 	aLB_ANSATZ_REL(		this, CUI_RES( LB_ANSATZ_REL ) ),
95 	aFT_LAENGE(			this, CUI_RES( FT_LAENGE ) ),
96 	aMF_LAENGE(			this, CUI_RES( MF_LAENGE ) ),
97 	aCB_LAENGE(			this, CUI_RES( CB_LAENGE ) ),
98 
99 	aStrHorzList( CUI_RES(STR_HORZ_LIST) ),
100 	aStrVertList( CUI_RES(STR_VERT_LIST) ),
101 
102 	rOutAttrs		( rInAttrs )
103 {
104 	//------------NYI-------------------------------------------
105 	aFT_WINKEL.Hide();
106 	aLB_WINKEL.Hide();
107 
108 	//------------Positionen korrigieren-------------------------
109 	aFT_ANSATZ_REL.SetPosPixel( aFT_UM.GetPosPixel() );
110 	aLB_ANSATZ_REL.SetPosPixel(
111 		Point(
112 			aFT_ANSATZ_REL.GetPosPixel().X()+aFT_ANSATZ_REL.GetSizePixel().Width()+6,
113 			aLB_ANSATZ.GetPosPixel().Y() )
114 		);
115 
116 	aMF_ANSATZ.SetPosPixel(
117 		Point(
118 			aFT_UM.GetPosPixel().X()+aFT_UM.GetSizePixel().Width()+6,
119 			aLB_ANSATZ.GetPosPixel().Y() )
120 		);
121 
122 	sal_uInt16 nBitmap;
123 	for( nBitmap = 0; nBitmap < CAPTYPE_BITMAPS_COUNT; nBitmap++ )
124 	{
125 		mpBmpCapTypes[nBitmap]  = new Image(Bitmap(CUI_RES(BMP_CAPTTYPE_1   + nBitmap)), COL_LIGHTMAGENTA );
126 		mpBmpCapTypesH[nBitmap] = new Image(Bitmap(CUI_RES(BMP_CAPTTYPE_1_H + nBitmap)), COL_LIGHTMAGENTA );
127 	}
128 
129 	//------------ValueSet installieren--------------------------
130 	aCT_CAPTTYPE.SetStyle( aCT_CAPTTYPE.GetStyle() | WB_ITEMBORDER | WB_DOUBLEBORDER | WB_NAMEFIELD );
131 	aCT_CAPTTYPE.SetColCount(5);//XXX
132 	aCT_CAPTTYPE.SetLineCount(1);
133 	aCT_CAPTTYPE.SetSelectHdl(LINK( this, SvxCaptionTabPage, SelectCaptTypeHdl_Impl));
134 
135 	Image aImage;
136 	aCT_CAPTTYPE.InsertItem(BMP_CAPTTYPE_1, aImage,	String(CUI_RES(STR_CAPTTYPE_1)));
137 	aCT_CAPTTYPE.InsertItem(BMP_CAPTTYPE_2,	aImage,	String(CUI_RES(STR_CAPTTYPE_2)));
138 	aCT_CAPTTYPE.InsertItem(BMP_CAPTTYPE_3,	aImage,	String(CUI_RES(STR_CAPTTYPE_3)));
139 
140 	FillValueSet();
141 
142 	aLB_ANSATZ.SetSelectHdl(LINK(this,SvxCaptionTabPage,AnsatzSelectHdl_Impl));
143 	aLB_ANSATZ_REL.SetSelectHdl(LINK(this,SvxCaptionTabPage,AnsatzRelSelectHdl_Impl));
144 	aCB_LAENGE.SetClickHdl(LINK(this,SvxCaptionTabPage,LineOptHdl_Impl));
145 
146 	FreeResource();
147 }
148 
149 // -----------------------------------------------------------------------
150 
~SvxCaptionTabPage()151 SvxCaptionTabPage::~SvxCaptionTabPage()
152 {
153 	sal_uInt16 nBitmap;
154 	for( nBitmap = 0; nBitmap < CAPTYPE_BITMAPS_COUNT; nBitmap++ )
155 	{
156 		delete mpBmpCapTypes[nBitmap];
157 		delete mpBmpCapTypesH[nBitmap];
158 	}
159 }
160 
161 // -----------------------------------------------------------------------
162 
Construct()163 void SvxCaptionTabPage::Construct()
164 {
165 	// Setzen des Rechtecks und der Workingarea
166 	DBG_ASSERT( pView, "Keine gueltige View Uebergeben!" );
167 }
168 
169 // -----------------------------------------------------------------------
170 
FillItemSet(SfxItemSet & _rOutAttrs)171 sal_Bool SvxCaptionTabPage::FillItemSet( SfxItemSet&  _rOutAttrs)
172 {
173     SfxItemPool*    pPool = _rOutAttrs.GetPool();
174 	DBG_ASSERT( pPool, "Wo ist der Pool" );
175 
176 	SfxMapUnit		eUnit;
177 
178 	nCaptionType = aCT_CAPTTYPE.GetSelectItemId()-1;
179 
180     _rOutAttrs.Put( SdrCaptionTypeItem( (SdrCaptionType) nCaptionType ) );
181 
182 	if( aMF_ABSTAND.IsValueModified() )
183 	{
184 		eUnit = pPool->GetMetric( GetWhich( SDRATTR_CAPTIONGAP ) );
185         _rOutAttrs.Put( SdrCaptionGapItem( GetCoreValue(aMF_ABSTAND, eUnit ) ) );
186 	}
187 
188 	// Sonderbehandlung!!! XXX
189 	if( nCaptionType==SDRCAPT_TYPE1 )
190 	{
191 		switch( nEscDir )
192 		{
193 			case SDRCAPT_ESCHORIZONTAL:		nEscDir=SDRCAPT_ESCVERTICAL;break;
194 			case SDRCAPT_ESCVERTICAL:		nEscDir=SDRCAPT_ESCHORIZONTAL;break;
195 		}
196 	}
197 
198     _rOutAttrs.Put( SdrCaptionEscDirItem( (SdrCaptionEscDir)nEscDir ) );
199 
200 	bEscRel = aLB_ANSATZ_REL.IsVisible();
201     _rOutAttrs.Put( SdrCaptionEscIsRelItem( bEscRel ) );
202 
203 	if( bEscRel )
204 	{
205 		long	nVal = 0;
206 
207 		switch( aLB_ANSATZ_REL.GetSelectEntryPos() )
208 		{
209 			case AT_OBEN:	nVal=0;break;
210 			case AT_MITTE:	nVal=5000;break;
211 			case AT_UNTEN:	nVal=10000;break;
212 		}
213         _rOutAttrs.Put( SdrCaptionEscRelItem( nVal ) );
214 	}
215 	else
216 	{
217 		if( aMF_ANSATZ.IsValueModified() )
218 		{
219 			eUnit = pPool->GetMetric( GetWhich( SDRATTR_CAPTIONESCABS ) );
220             _rOutAttrs.Put( SdrCaptionEscAbsItem( GetCoreValue(aMF_ANSATZ, eUnit ) ) );
221 		}
222 	}
223 
224 	bFitLineLen = aCB_LAENGE.IsChecked();
225     _rOutAttrs.Put( SdrCaptionFitLineLenItem( bFitLineLen ) );
226 
227 	if( ! bFitLineLen )
228 	{
229 		if( aMF_LAENGE.IsValueModified() )
230 		{
231 			eUnit = pPool->GetMetric( GetWhich( SDRATTR_CAPTIONLINELEN ) );
232             _rOutAttrs.Put( SdrCaptionLineLenItem( GetCoreValue(aMF_LAENGE, eUnit ) ) );
233 		}
234 	}
235 
236 //NYI-------------die Winkel muessen noch hier rein!!! XXX----------------------
237 
238 	return( sal_True );
239 }
240 
241 // -----------------------------------------------------------------------
242 
Reset(const SfxItemSet &)243 void SvxCaptionTabPage::Reset( const SfxItemSet&  )
244 {
245 
246 	//------------Metrik einstellen-----------------------------
247 
248 	FieldUnit eFUnit = GetModuleFieldUnit( rOutAttrs );
249 
250 	switch ( eFUnit )
251 	{
252 		case FUNIT_CM:
253 		case FUNIT_M:
254 		case FUNIT_KM:
255 			eFUnit = FUNIT_MM;
256 			break;
257         default: ;//prevent warning
258 	}
259 	SetFieldUnit( aMF_ABSTAND, eFUnit );
260 	SetFieldUnit( aMF_ANSATZ, eFUnit );
261 	SetFieldUnit( aMF_LAENGE, eFUnit );
262 
263 	SfxItemPool* 	pPool = rOutAttrs.GetPool();
264 	DBG_ASSERT( pPool, "Wo ist der Pool" );
265 
266 	sal_uInt16			nWhich;
267 	SfxMapUnit		eUnit;
268 
269 	//------- Winkel ----------
270 	nWhich = GetWhich( SDRATTR_CAPTIONANGLE );
271 	nFixedAngle = ( ( const SdrCaptionAngleItem& ) rOutAttrs.Get( nWhich ) ).GetValue();
272 
273 	//------- absolute Ansatzentfernung ----------
274 	nWhich = GetWhich( SDRATTR_CAPTIONESCABS );
275 	eUnit = pPool->GetMetric( nWhich );
276 	nEscAbs = ( ( const SdrCaptionEscAbsItem& ) rOutAttrs.Get( nWhich ) ).GetValue();
277 	SetMetricValue( aMF_ANSATZ, nEscAbs, eUnit );
278 	nEscAbs = static_cast<long>(aMF_ANSATZ.GetValue());
279 
280 	//------- relative Ansatzentfernung ----------
281 	nWhich = GetWhich( SDRATTR_CAPTIONESCREL );
282 	nEscRel = (long)( ( const SdrCaptionEscRelItem& ) rOutAttrs.Get( nWhich ) ).GetValue();
283 
284 	//------- Linienlaenge ----------
285 	nWhich = GetWhich( SDRATTR_CAPTIONLINELEN );
286 	eUnit = pPool->GetMetric( nWhich );
287 	nLineLen = ( ( const SdrCaptionLineLenItem& ) rOutAttrs.Get( nWhich ) ).GetValue();
288 	SetMetricValue( aMF_LAENGE, nLineLen, eUnit );
289 	nLineLen = static_cast<long>(aMF_LAENGE.GetValue());
290 
291 	//------- Abstand zur Box ----------
292 	nWhich = GetWhich( SDRATTR_CAPTIONGAP );
293 	eUnit = pPool->GetMetric( nWhich );
294 	nGap = ( ( const SdrCaptionGapItem& ) rOutAttrs.Get( nWhich ) ).GetValue();
295 	SetMetricValue( aMF_ABSTAND, nGap, eUnit );
296 	nGap = static_cast<long>(aMF_ABSTAND.GetValue());
297 
298 	nCaptionType = (short)( ( const SdrCaptionTypeItem& ) rOutAttrs.Get( GetWhich( SDRATTR_CAPTIONTYPE ) ) ).GetValue();
299 	bFixedAngle = ( ( const SfxBoolItem& ) rOutAttrs.Get( GetWhich( SDRATTR_CAPTIONFIXEDANGLE ) ) ).GetValue();
300 	bFitLineLen = ( ( const SfxBoolItem& ) rOutAttrs.Get( GetWhich( SDRATTR_CAPTIONFITLINELEN ) ) ).GetValue();
301 	nEscDir = (short)( ( const SdrCaptionEscDirItem& ) rOutAttrs.Get( GetWhich( SDRATTR_CAPTIONESCDIR ) ) ).GetValue();
302 	bEscRel = ( ( const SfxBoolItem& ) rOutAttrs.Get( GetWhich( SDRATTR_CAPTIONESCISREL ) ) ).GetValue();
303 
304 	// Sonderbehandlung!!! XXX
305 	if( nCaptionType==SDRCAPT_TYPE1 )
306 	{
307 		switch( nEscDir )
308 		{
309 			case SDRCAPT_ESCHORIZONTAL:		nEscDir=SDRCAPT_ESCVERTICAL;break;
310 			case SDRCAPT_ESCVERTICAL:		nEscDir=SDRCAPT_ESCHORIZONTAL;break;
311 		}
312 	}
313 
314 	nAnsatzRelPos=AT_MITTE;
315 	nAnsatzTypePos=AZ_OPTIMAL;
316 	nWinkelTypePos=WK_OPTIMAL;
317 
318 	aMF_ABSTAND.SetValue( nGap );
319 
320 	if( nEscDir == SDRCAPT_ESCHORIZONTAL )
321 	{
322 		if( bEscRel )
323 		{
324 			if( nEscRel < 3333 )
325 				nAnsatzRelPos = AT_OBEN;
326 			if( nEscRel > 6666 )
327 				nAnsatzRelPos = AT_UNTEN;
328 			nAnsatzTypePos = AZ_HORIZONTAL;
329 		}
330 		else
331 		{
332 			nAnsatzTypePos = AZ_VON_OBEN;
333 			aMF_ANSATZ.SetValue( nEscAbs );
334 		}
335 	}
336 	else if( nEscDir == SDRCAPT_ESCVERTICAL )
337 	{
338 		if( bEscRel )
339 		{
340 			if( nEscRel < 3333 )
341 				nAnsatzRelPos = AT_OBEN;
342 			if( nEscRel > 6666 )
343 				nAnsatzRelPos = AT_UNTEN;
344 			nAnsatzTypePos = AZ_VERTIKAL;
345 		}
346 		else
347 		{
348 			nAnsatzTypePos = AZ_VON_LINKS;
349 			aMF_ANSATZ.SetValue( nEscAbs );
350 		}
351 	}
352 	else if( nEscDir == SDRCAPT_ESCBESTFIT )
353 	{
354 		nAnsatzTypePos = AZ_OPTIMAL;
355 	}
356 
357 	if( bFixedAngle )
358 	{
359 		if( nFixedAngle <= 3000 )
360 			nWinkelTypePos=WK_30;
361 		else if( nFixedAngle <= 4500 )
362 			nWinkelTypePos=WK_45;
363 		else if( nFixedAngle <= 6000 )
364 			nWinkelTypePos=WK_60;
365 		else
366 			nWinkelTypePos=WK_90;
367 	}
368 
369 	aCB_LAENGE.Check( bFitLineLen );
370 	aMF_LAENGE.SetValue( nLineLen );
371 
372 	aLB_ANSATZ.SelectEntryPos( nAnsatzTypePos );
373 	aLB_WINKEL.SelectEntryPos( nWinkelTypePos );
374 
375 	SetupAnsatz_Impl( nAnsatzTypePos );
376 	aCT_CAPTTYPE.SelectItem( nCaptionType+1 );// Enum beginnt bei 0!
377 	SetupType_Impl( nCaptionType+1 );
378 }
379 
380 // -----------------------------------------------------------------------
381 
Create(Window * pWindow,const SfxItemSet & rOutAttrs)382 SfxTabPage* SvxCaptionTabPage::Create( Window* pWindow,
383 				const SfxItemSet& rOutAttrs )
384 {
385 	return( new SvxCaptionTabPage( pWindow, rOutAttrs ) );
386 }
387 
388 //------------------------------------------------------------------------
389 
GetRanges()390 sal_uInt16*	SvxCaptionTabPage::GetRanges()
391 {
392 	return( pCaptionRanges );
393 }
394 
395 //------------------------------------------------------------------------
396 
SetupAnsatz_Impl(sal_uInt16 nType)397 void SvxCaptionTabPage::SetupAnsatz_Impl( sal_uInt16 nType )
398 {
399 	xub_StrLen	nCnt=0, nIdx=0;
400 
401 	switch( nType )
402 	{
403 		case AZ_OPTIMAL:
404 //		aMF_ANSATZ.Hide(); //XXX auch bei OPTIMAL werden Abswerte genommen
405 //		aFT_UM.Hide();
406 		aMF_ANSATZ.Show();
407 		aFT_UM.Show();
408 		aFT_ANSATZ_REL.Hide();
409 		aLB_ANSATZ_REL.Hide();
410 		nEscDir = SDRCAPT_ESCBESTFIT;
411 		break;
412 
413 		case AZ_VON_OBEN:
414 		aMF_ANSATZ.Show();
415 		aFT_UM.Show();
416 		aFT_ANSATZ_REL.Hide();
417 		aLB_ANSATZ_REL.Hide();
418 		nEscDir = SDRCAPT_ESCHORIZONTAL;
419 		break;
420 
421 		case AZ_VON_LINKS:
422 		aMF_ANSATZ.Show();
423 		aFT_UM.Show();
424 		aFT_ANSATZ_REL.Hide();
425 		aLB_ANSATZ_REL.Hide();
426 		nEscDir = SDRCAPT_ESCVERTICAL;
427 		break;
428 
429 		case AZ_HORIZONTAL:
430 		aLB_ANSATZ_REL.Clear();
431 		nCnt = aStrHorzList.GetTokenCount();
432 		for( nIdx=0 ; nIdx<nCnt ; nIdx++ )
433 			aLB_ANSATZ_REL.InsertEntry( aStrHorzList.GetToken(nIdx) );
434 		aLB_ANSATZ_REL.SelectEntryPos( nAnsatzRelPos );
435 
436 		aMF_ANSATZ.Hide();
437 		aFT_UM.Hide();
438 		aFT_ANSATZ_REL.Show();
439 		aLB_ANSATZ_REL.Show();
440 		nEscDir = SDRCAPT_ESCHORIZONTAL;
441 		break;
442 
443 		case AZ_VERTIKAL:
444 		aLB_ANSATZ_REL.Clear();
445 		nCnt = aStrVertList.GetTokenCount();
446 		for( nIdx=0 ; nIdx<nCnt ; nIdx++ )
447 			aLB_ANSATZ_REL.InsertEntry( aStrVertList.GetToken(nIdx) );
448 		aLB_ANSATZ_REL.SelectEntryPos( nAnsatzRelPos );
449 
450 		aMF_ANSATZ.Hide();
451 		aFT_UM.Hide();
452 		aFT_ANSATZ_REL.Show();
453 		aLB_ANSATZ_REL.Show();
454 		nEscDir = SDRCAPT_ESCVERTICAL;
455 		break;
456 	}
457 }
458 
459 //------------------------------------------------------------------------
460 
IMPL_LINK_INLINE_START(SvxCaptionTabPage,AnsatzSelectHdl_Impl,ListBox *,pListBox)461 IMPL_LINK_INLINE_START( SvxCaptionTabPage, AnsatzSelectHdl_Impl, ListBox *, pListBox )
462 {
463 	if( pListBox == &aLB_ANSATZ )
464 	{
465 		SetupAnsatz_Impl( aLB_ANSATZ.GetSelectEntryPos() );
466 	}
467 	return 0;
468 }
IMPL_LINK_INLINE_END(SvxCaptionTabPage,AnsatzSelectHdl_Impl,ListBox *,pListBox)469 IMPL_LINK_INLINE_END( SvxCaptionTabPage, AnsatzSelectHdl_Impl, ListBox *, pListBox )
470 
471 //------------------------------------------------------------------------
472 
473 IMPL_LINK_INLINE_START( SvxCaptionTabPage, AnsatzRelSelectHdl_Impl, ListBox *, pListBox )
474 {
475 	if( pListBox == &aLB_ANSATZ_REL )
476 	{
477 		nAnsatzRelPos = aLB_ANSATZ_REL.GetSelectEntryPos();
478 	}
479 	return 0;
480 }
IMPL_LINK_INLINE_END(SvxCaptionTabPage,AnsatzRelSelectHdl_Impl,ListBox *,pListBox)481 IMPL_LINK_INLINE_END( SvxCaptionTabPage, AnsatzRelSelectHdl_Impl, ListBox *, pListBox )
482 
483 //------------------------------------------------------------------------
484 
485 IMPL_LINK( SvxCaptionTabPage, LineOptHdl_Impl, Button *, pButton )
486 {
487 	if( pButton == &aCB_LAENGE )
488 	{
489 		if( aCB_LAENGE.IsChecked() || ! aCB_LAENGE.IsEnabled() )
490 		{
491             aFT_LAENGE.Disable();
492 			aMF_LAENGE.Disable();
493 		}
494 		else
495 		{
496             aFT_LAENGE.Enable();
497 			aMF_LAENGE.Enable();
498 		}
499 	}
500 	return 0;
501 }
502 
503 //------------------------------------------------------------------------
504 
IMPL_LINK_INLINE_START(SvxCaptionTabPage,SelectCaptTypeHdl_Impl,void *,EMPTYARG)505 IMPL_LINK_INLINE_START( SvxCaptionTabPage, SelectCaptTypeHdl_Impl, void *, EMPTYARG )
506 {
507 	SetupType_Impl( aCT_CAPTTYPE.GetSelectItemId() );
508 	return 0;
509 }
IMPL_LINK_INLINE_END(SvxCaptionTabPage,SelectCaptTypeHdl_Impl,void *,EMPTYARG)510 IMPL_LINK_INLINE_END( SvxCaptionTabPage, SelectCaptTypeHdl_Impl, void *, EMPTYARG )
511 
512 //------------------------------------------------------------------------
513 
514 void SvxCaptionTabPage::SetupType_Impl( sal_uInt16 nType )
515 {
516 	switch( nType-1 )
517 	{
518 		case SDRCAPT_TYPE1:
519         aFT_WINKEL.Disable();
520 		aLB_WINKEL.Disable();
521         aFT_LAENGE.Disable();
522 		aCB_LAENGE.Disable();
523 		LineOptHdl_Impl( &aCB_LAENGE );
524 		break;
525 
526 		case SDRCAPT_TYPE2:
527         aFT_WINKEL.Enable();
528 		aLB_WINKEL.Enable();
529         aFT_LAENGE.Disable();
530 		aCB_LAENGE.Disable();
531 		LineOptHdl_Impl( &aCB_LAENGE );
532 		break;
533 
534 		case SDRCAPT_TYPE3:
535         aFT_WINKEL.Enable();
536 		aLB_WINKEL.Enable();
537         aFT_LAENGE.Enable();
538 		aCB_LAENGE.Enable();
539 		LineOptHdl_Impl( &aCB_LAENGE );
540 		break;
541 
542 		case SDRCAPT_TYPE4:
543         aFT_WINKEL.Enable();
544 		aLB_WINKEL.Enable();
545         aFT_LAENGE.Enable();
546 		aCB_LAENGE.Enable();
547 		LineOptHdl_Impl( &aCB_LAENGE );
548 		break;
549 	}
550 }
551 
552 // -----------------------------------------------------------------------
553 
DataChanged(const DataChangedEvent & rDCEvt)554 void SvxCaptionTabPage::DataChanged( const DataChangedEvent& rDCEvt )
555 {
556     SfxTabPage::DataChanged( rDCEvt );
557 
558 	if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) && (rDCEvt.GetFlags() & SETTINGS_STYLE) )
559             FillValueSet();
560 }
561 
562 // -----------------------------------------------------------------------
563 
FillValueSet()564 void SvxCaptionTabPage::FillValueSet()
565 {
566 	bool bHighContrast = GetSettings().GetStyleSettings().GetHighContrastMode();
567 
568 	Image** ppBitmaps = bHighContrast ? mpBmpCapTypesH : mpBmpCapTypes;
569 	aCT_CAPTTYPE.SetItemImage(BMP_CAPTTYPE_1, *(ppBitmaps[0]) );
570 	aCT_CAPTTYPE.SetItemImage(BMP_CAPTTYPE_2, *(ppBitmaps[1]) );
571 	aCT_CAPTTYPE.SetItemImage(BMP_CAPTTYPE_3, *(ppBitmaps[2]) );
572 }
573 
574 //========================================================================
575 
576 
SvxCaptionTabDialog(Window * pParent,const SdrView * pSdrView,sal_uInt16 nAnchorTypes)577 SvxCaptionTabDialog::SvxCaptionTabDialog(Window* pParent, const SdrView* pSdrView, sal_uInt16 nAnchorTypes)
578  :	SfxTabDialog( pParent, CUI_RES( RID_SVXDLG_CAPTION ) ),
579     pView       ( pSdrView ),
580     nAnchorCtrls(nAnchorTypes)
581 {
582 	FreeResource();
583 
584 	DBG_ASSERT( pView, "Keine gueltige View Uebergeben!" );
585 
586     //different positioning page in Writer
587     if(nAnchorCtrls & 0x00ff )
588     {
589         AddTabPage( RID_SVXPAGE_SWPOSSIZE, SvxSwPosSizeTabPage::Create,
590                                 SvxSwPosSizeTabPage::GetRanges );
591         RemoveTabPage( RID_SVXPAGE_POSITION_SIZE);
592     }
593     else
594     {
595         AddTabPage( RID_SVXPAGE_POSITION_SIZE, SvxPositionSizeTabPage::Create,
596                                 SvxPositionSizeTabPage::GetRanges );
597         RemoveTabPage( RID_SVXPAGE_SWPOSSIZE );
598     }
599     AddTabPage( RID_SVXPAGE_CAPTION, SvxCaptionTabPage::Create,
600 							SvxCaptionTabPage::GetRanges );
601 }
602 
603 // -----------------------------------------------------------------------
604 
~SvxCaptionTabDialog()605 SvxCaptionTabDialog::~SvxCaptionTabDialog()
606 {
607 }
608 
609 // -----------------------------------------------------------------------
610 
PageCreated(sal_uInt16 nId,SfxTabPage & rPage)611 void SvxCaptionTabDialog::PageCreated( sal_uInt16 nId, SfxTabPage &rPage )
612 {
613 	switch( nId )
614 	{
615 		case RID_SVXPAGE_POSITION_SIZE:
616 			( (SvxPositionSizeTabPage&) rPage ).SetView( pView );
617 			( (SvxPositionSizeTabPage&) rPage ).Construct();
618 			if( nAnchorCtrls & SVX_OBJ_NORESIZE )
619 				( (SvxPositionSizeTabPage&) rPage ).DisableResize();
620 
621 			if( nAnchorCtrls & SVX_OBJ_NOPROTECT )
622 				( (SvxPositionSizeTabPage&) rPage ).DisableProtect();
623 		break;
624         case RID_SVXPAGE_SWPOSSIZE :
625         {
626             SvxSwPosSizeTabPage& rSwPage = static_cast<SvxSwPosSizeTabPage&>(rPage);
627             rSwPage.EnableAnchorTypes(nAnchorCtrls);
628             rSwPage.SetValidateFramePosLink( aValidateLink );
629         }
630         break;
631 
632 		case RID_SVXPAGE_CAPTION:
633 			( (SvxCaptionTabPage&) rPage ).SetView( pView );
634 			( (SvxCaptionTabPage&) rPage ).Construct();
635 		break;
636 	}
637 }
638 /*-- 05.03.2004 13:54:26---------------------------------------------------
639 
640   -----------------------------------------------------------------------*/
SetValidateFramePosLink(const Link & rLink)641 void SvxCaptionTabDialog::SetValidateFramePosLink( const Link& rLink )
642 {
643     aValidateLink = rLink;
644 }
645 
646 
647