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 <sfx2/app.hxx>
29 #include <sfx2/module.hxx>
30 #include <tools/shl.hxx>
31 #include <cuires.hrc>
32 #include <svx/svddef.hxx>
33 #include <svx/sdtditm.hxx>
34 #include <svx/sdtagitm.hxx>
35 #include <svx/sdtaitm.hxx>
36 #include <svx/sdtfsitm.hxx>
37 #include <svx/sdtcfitm.hxx>
38 #include <svx/svdobj.hxx>
39 #include <svx/svdmark.hxx>
40 #include <svx/svdview.hxx>
41 #include <svx/svdotext.hxx>
42 #include <svx/dialogs.hrc>
43
44 #ifndef _SVX_TEXTATTR_CXX
45 #define _SVX_TEXTATTR_CXX
46 #endif
47 #include "textattr.hxx"
48 #include "textattr.hrc"
49 #include <dialmgr.hxx>
50 #include "svx/dlgutil.hxx"
51 #include <sfx2/request.hxx> //add CHINA001
52 #include <svx/ofaitem.hxx> //add CHINA001
53 #include <editeng/writingmodeitem.hxx>
54
55 static sal_uInt16 pRanges[] =
56 {
57 SDRATTR_MISC_FIRST, SDRATTR_TEXT_HORZADJUST,
58 SDRATTR_TEXT_WORDWRAP, SDRATTR_TEXT_AUTOGROWSIZE,
59 0
60 };
61
62 /*************************************************************************
63 |*
64 |* Dialog zum Kopieren von Objekten
65 |*
66 \************************************************************************/
67
68 //CHINA001 SvxTextAttrDialog::SvxTextAttrDialog( Window* pParent, const SfxItemSet& rInAttrs,
69 //CHINA001 const SdrView* pSdrView ) :
70 //CHINA001 SfxSingleTabDialog( pParent, rInAttrs, RID_SVXPAGE_TEXTATTR )
71 //CHINA001 {
72 //CHINA001 SvxTextAttrPage* pPage = new SvxTextAttrPage( this, rInAttrs );
73 //CHINA001
74 //CHINA001 pPage->SetView( pSdrView );
75 //CHINA001 pPage->Construct();
76 //CHINA001
77 //CHINA001 SetTabPage( pPage );
78 //CHINA001 SetText( pPage->GetText() );
79 //CHINA001 }
80 //CHINA001
81 /*************************************************************************
82 |*
83 |* Dtor
84 |*
85 \************************************************************************/
86
87 //CHINA001 SvxTextAttrDialog::~SvxTextAttrDialog()
88 //CHINA001 {
89 //CHINA001 }
90
91 /*************************************************************************
92 |*
93 |* Dialog (Seite) zum Kopieren von Objekten
94 |*
95 \************************************************************************/
96
SvxTextAttrPage(Window * pWindow,const SfxItemSet & rInAttrs)97 SvxTextAttrPage::SvxTextAttrPage( Window* pWindow, const SfxItemSet& rInAttrs ) :
98 SvxTabPage ( pWindow, CUI_RES( RID_SVXPAGE_TEXTATTR ),
99 rInAttrs ),
100
101 aFlText ( this, CUI_RES( FL_TEXT ) ),
102 aTsbAutoGrowWidth ( this, CUI_RES( TSB_AUTOGROW_WIDTH ) ),
103 aTsbAutoGrowHeight ( this, CUI_RES( TSB_AUTOGROW_HEIGHT ) ),
104 aTsbFitToSize ( this, CUI_RES( TSB_FIT_TO_SIZE ) ),
105 aTsbContour ( this, CUI_RES( TSB_CONTOUR ) ),
106 aTsbWordWrapText( this, CUI_RES( TSB_WORDWRAP_TEXT ) ),
107 aTsbAutoGrowSize( this, CUI_RES( TSB_AUTOGROW_SIZE ) ),
108 aFlDistance ( this, CUI_RES( FL_DISTANCE ) ),
109 aFtLeft ( this, CUI_RES( FT_LEFT ) ),
110 aMtrFldLeft ( this, CUI_RES( MTR_FLD_LEFT ) ),
111 aFtRight ( this, CUI_RES( FT_RIGHT ) ),
112 aMtrFldRight ( this, CUI_RES( MTR_FLD_RIGHT ) ),
113 aFtTop ( this, CUI_RES( FT_TOP ) ),
114 aMtrFldTop ( this, CUI_RES( MTR_FLD_TOP ) ),
115 aFtBottom ( this, CUI_RES( FT_BOTTOM ) ),
116 aMtrFldBottom ( this, CUI_RES( MTR_FLD_BOTTOM ) ),
117
118 aFlSeparator ( this, CUI_RES( FL_SEPARATOR ) ),
119
120 aFlPosition ( this, CUI_RES( FL_POSITION ) ),
121 aCtlPosition ( this, CUI_RES( CTL_POSITION ),
122 RP_MM, 240, 100 ),
123 aTsbFullWidth ( this, CUI_RES( TSB_FULL_WIDTH ) ),
124
125 rOutAttrs ( rInAttrs )
126 {
127 FreeResource();
128
129 FieldUnit eFUnit = GetModuleFieldUnit( rInAttrs );
130 SetFieldUnit( aMtrFldLeft, eFUnit );
131 SetFieldUnit( aMtrFldRight, eFUnit );
132 SetFieldUnit( aMtrFldTop, eFUnit );
133 SetFieldUnit( aMtrFldBottom, eFUnit );
134
135 Link aLink( LINK( this, SvxTextAttrPage, ClickHdl_Impl ) );
136 aTsbAutoGrowWidth.SetClickHdl( aLink );
137 aTsbAutoGrowHeight.SetClickHdl( aLink );
138 aTsbFitToSize.SetClickHdl( aLink );
139 aTsbContour.SetClickHdl( aLink );
140
141 aTsbFullWidth.SetClickHdl(
142 LINK( this, SvxTextAttrPage, ClickFullWidthHdl_Impl ) );
143
144 aCtlPosition.SetAccessibleRelationMemberOf( &aFlPosition );
145 }
146
147 /*************************************************************************
148 |*
149 |* Dtor
150 |*
151 \************************************************************************/
152
~SvxTextAttrPage()153 SvxTextAttrPage::~SvxTextAttrPage()
154 {
155 }
156
157 /*************************************************************************
158 |*
159 |* Liest uebergebenen Item-Set
160 |*
161 \************************************************************************/
162
Reset(const SfxItemSet & rAttrs)163 void __EXPORT SvxTextAttrPage::Reset( const SfxItemSet& rAttrs )
164 {
165 SfxItemPool* pPool = rAttrs.GetPool();
166 DBG_ASSERT( pPool, "Wo ist der Pool" );
167 SfxMapUnit eUnit = pPool->GetMetric( SDRATTR_TEXT_LEFTDIST );
168
169 // Linker Abstand vom Rahmen
170 const SfxPoolItem* pItem = GetItem( rAttrs, SDRATTR_TEXT_LEFTDIST );
171
172 if( !pItem )
173 pItem = &pPool->GetDefaultItem( SDRATTR_TEXT_LEFTDIST );
174 if( pItem )
175 {
176 long nValue = ( ( const SdrTextLeftDistItem* )pItem )->GetValue();
177 SetMetricValue( aMtrFldLeft, nValue, eUnit );
178 }
179 else
180 aMtrFldLeft.SetText( String() );
181 aMtrFldLeft.SaveValue();
182
183 // Rechter Abstand vom Rahmen
184 pItem = GetItem( rAttrs, SDRATTR_TEXT_RIGHTDIST );
185 if( !pItem )
186 pItem = &pPool->GetDefaultItem( SDRATTR_TEXT_RIGHTDIST );
187 if( pItem )
188 {
189 long nValue = ( ( const SdrTextRightDistItem* )pItem )->GetValue();
190 SetMetricValue( aMtrFldRight, nValue, eUnit );
191 }
192 else
193 aMtrFldRight.SetText( String() );
194 aMtrFldRight.SaveValue();
195
196 // Oberer Abstand vom Rahmen
197 pItem = GetItem( rAttrs, SDRATTR_TEXT_UPPERDIST );
198 if( !pItem )
199 pItem = &pPool->GetDefaultItem( SDRATTR_TEXT_UPPERDIST );
200 if( pItem )
201 {
202 long nValue = ( ( const SdrTextUpperDistItem* )pItem )->GetValue();
203 SetMetricValue( aMtrFldTop, nValue, eUnit );
204 }
205 else
206 aMtrFldTop.SetText( String() );
207 aMtrFldTop.SaveValue();
208
209 // Unterer Abstand vom Rahmen
210 pItem = GetItem( rAttrs, SDRATTR_TEXT_LOWERDIST );
211 if( !pItem )
212 pItem = &pPool->GetDefaultItem( SDRATTR_TEXT_LOWERDIST );
213 if( pItem )
214 {
215 long nValue = ( ( const SdrTextLowerDistItem* )pItem )->GetValue();
216 SetMetricValue( aMtrFldBottom, nValue, eUnit );
217 }
218 else
219 aMtrFldBottom.SetText( String() );
220 aMtrFldBottom.SaveValue();
221
222 // An Hoehe anpassen
223 if ( rAttrs.GetItemState( SDRATTR_TEXT_AUTOGROWHEIGHT ) != SFX_ITEM_DONTCARE )
224 {
225 aTsbAutoGrowHeight.SetState( ( ( const SdrTextAutoGrowHeightItem& )rAttrs.Get( SDRATTR_TEXT_AUTOGROWHEIGHT ) ).
226 GetValue() ? STATE_CHECK : STATE_NOCHECK );
227 aTsbAutoGrowHeight.EnableTriState( sal_False );
228 }
229 else
230 aTsbAutoGrowHeight.SetState( STATE_DONTKNOW );
231 aTsbAutoGrowHeight.SaveValue();
232
233 // An Breite anpassen
234 if ( rAttrs.GetItemState( SDRATTR_TEXT_AUTOGROWWIDTH ) != SFX_ITEM_DONTCARE )
235 {
236 aTsbAutoGrowWidth.SetState( ( ( const SdrTextAutoGrowWidthItem& )rAttrs.Get( SDRATTR_TEXT_AUTOGROWWIDTH ) ).
237 GetValue() ? STATE_CHECK : STATE_NOCHECK );
238 aTsbAutoGrowWidth.EnableTriState( sal_False );
239 }
240 else
241 aTsbAutoGrowWidth.SetState( STATE_DONTKNOW );
242 aTsbAutoGrowWidth.SaveValue();
243
244 // autogrowsize
245 if ( rAttrs.GetItemState( SDRATTR_TEXT_AUTOGROWSIZE ) != SFX_ITEM_DONTCARE )
246 {
247 aTsbAutoGrowSize.SetState( ( ( const SdrTextAutoGrowHeightItem& )rAttrs.Get( SDRATTR_TEXT_AUTOGROWHEIGHT ) ).
248 GetValue() ? STATE_CHECK : STATE_NOCHECK );
249 aTsbAutoGrowSize.EnableTriState( sal_False );
250 }
251 else
252 aTsbAutoGrowSize.SetState( STATE_DONTKNOW );
253 aTsbAutoGrowSize.SaveValue();
254
255 // wordwrap text
256 if ( rAttrs.GetItemState( SDRATTR_TEXT_WORDWRAP ) != SFX_ITEM_DONTCARE )
257 {
258 aTsbWordWrapText.SetState( ( ( const SdrTextWordWrapItem& )rAttrs.Get( SDRATTR_TEXT_WORDWRAP ) ).
259 GetValue() ? STATE_CHECK : STATE_NOCHECK );
260 aTsbWordWrapText.EnableTriState( sal_False );
261 }
262 else
263 aTsbWordWrapText.SetState( STATE_DONTKNOW );
264 aTsbWordWrapText.SaveValue();
265
266
267 // #103516# Do the setup based on states of hor/ver adjust
268 // Setup center field and FullWidth
269 SfxItemState eVState = rAttrs.GetItemState( SDRATTR_TEXT_VERTADJUST );
270 SfxItemState eHState = rAttrs.GetItemState( SDRATTR_TEXT_HORZADJUST );
271
272 if(SFX_ITEM_DONTCARE != eVState && SFX_ITEM_DONTCARE != eHState)
273 {
274 // VertAdjust and HorAdjust are unequivocal, thus
275 SdrTextVertAdjust eTVA = (SdrTextVertAdjust)((const SdrTextVertAdjustItem&)rAttrs.Get(SDRATTR_TEXT_VERTADJUST)).GetValue();
276 SdrTextHorzAdjust eTHA = (SdrTextHorzAdjust)((const SdrTextHorzAdjustItem&)rAttrs.Get(SDRATTR_TEXT_HORZADJUST)).GetValue();
277 RECT_POINT eRP = RP_LB;
278
279 aTsbFullWidth.EnableTriState( sal_False );
280
281 // Translate item values into local anchor position.
282 switch (eTVA)
283 {
284 case SDRTEXTVERTADJUST_TOP:
285 {
286 switch (eTHA)
287 {
288 case SDRTEXTHORZADJUST_LEFT: eRP = RP_LT; break;
289 case SDRTEXTHORZADJUST_BLOCK:
290 case SDRTEXTHORZADJUST_CENTER: eRP = RP_MT; break;
291 case SDRTEXTHORZADJUST_RIGHT: eRP = RP_RT; break;
292 }
293 break;
294 }
295 case SDRTEXTVERTADJUST_BLOCK:
296 case SDRTEXTVERTADJUST_CENTER:
297 {
298 switch (eTHA)
299 {
300 case SDRTEXTHORZADJUST_LEFT: eRP = RP_LM; break;
301 case SDRTEXTHORZADJUST_BLOCK:
302 case SDRTEXTHORZADJUST_CENTER: eRP = RP_MM; break;
303 case SDRTEXTHORZADJUST_RIGHT: eRP = RP_RM; break;
304 }
305 break;
306 }
307 case SDRTEXTVERTADJUST_BOTTOM:
308 {
309 switch (eTHA)
310 {
311 case SDRTEXTHORZADJUST_LEFT: eRP = RP_LB; break;
312 case SDRTEXTHORZADJUST_BLOCK:
313 case SDRTEXTHORZADJUST_CENTER: eRP = RP_MB; break;
314 case SDRTEXTHORZADJUST_RIGHT: eRP = RP_RB; break;
315 }
316 break;
317 }
318 default:
319 break;
320 }
321
322 // See if we have to check the "full width" check button.
323 sal_Bool bLeftToRight(IsTextDirectionLeftToRight());
324
325 if((bLeftToRight && (SDRTEXTHORZADJUST_BLOCK == eTHA)) || (!bLeftToRight && (SDRTEXTVERTADJUST_BLOCK == eTVA)))
326 {
327 // Move anchor to valid position.
328 ClickFullWidthHdl_Impl(NULL);
329 aTsbFullWidth.SetState(STATE_CHECK);
330 }
331
332 aCtlPosition.SetActualRP( eRP );
333 }
334 else
335 {
336 // VertAdjust or HorAdjust is not unequivocal
337 aCtlPosition.Reset();
338
339 aCtlPosition.SetState(STATE_DONTKNOW);
340 aCtlPosition.DoCompletelyDisable(sal_True);
341
342 aTsbFullWidth.SetState(STATE_DONTKNOW);
343 aTsbFullWidth.Enable( sal_False );
344 aFlPosition.Enable( sal_False );
345 }
346
347 // Am Rahmen anpassen
348 if ( rAttrs.GetItemState( SDRATTR_TEXT_FITTOSIZE ) != SFX_ITEM_DONTCARE )
349 {
350 SdrFitToSizeType eFTS = (SdrFitToSizeType)
351 ( ( const SdrTextFitToSizeTypeItem& )rAttrs.Get( SDRATTR_TEXT_FITTOSIZE ) ).GetValue();
352 aTsbFitToSize.SetState( eFTS == SDRTEXTFIT_NONE ? STATE_NOCHECK : STATE_CHECK );
353 aTsbFitToSize.EnableTriState( sal_False );
354 }
355 else
356 aTsbFitToSize.SetState( STATE_DONTKNOW );
357 aTsbFitToSize.SaveValue();
358
359 // Konturfluss
360 if( rAttrs.GetItemState( SDRATTR_TEXT_CONTOURFRAME ) != SFX_ITEM_DONTCARE )
361 {
362 sal_Bool bContour = ( ( const SdrTextContourFrameItem& )rAttrs.Get( SDRATTR_TEXT_CONTOURFRAME ) ).GetValue();
363 aTsbContour.SetState( bContour ? STATE_CHECK : STATE_NOCHECK );
364 aTsbContour.EnableTriState( sal_False );
365 }
366 else
367 aTsbContour.SetState( STATE_DONTKNOW );
368 aTsbContour.SaveValue();
369
370 ClickHdl_Impl( NULL );
371 }
372
373 /*************************************************************************
374 |*
375 |* Fuellt uebergebenen Item-Set mit Dialogbox-Attributen
376 |*
377 \************************************************************************/
378
FillItemSet(SfxItemSet & rAttrs)379 sal_Bool SvxTextAttrPage::FillItemSet( SfxItemSet& rAttrs)
380 {
381 SfxItemPool* pPool = rAttrs.GetPool();
382 DBG_ASSERT( pPool, "Wo ist der Pool" );
383 SfxMapUnit eUnit = pPool->GetMetric( SDRATTR_TEXT_LEFTDIST );
384
385 sal_Int32 nValue;
386 TriState eState;
387
388 if( aMtrFldLeft.GetText() != aMtrFldLeft.GetSavedValue() )
389 {
390 nValue = GetCoreValue( aMtrFldLeft, eUnit );
391 rAttrs.Put( SdrTextLeftDistItem( nValue ) );
392 }
393
394 if( aMtrFldRight.GetText() != aMtrFldRight.GetSavedValue() )
395 {
396 nValue = GetCoreValue( aMtrFldRight, eUnit );
397 rAttrs.Put( SdrTextRightDistItem( nValue ) );
398 }
399
400 if( aMtrFldTop.GetText() != aMtrFldTop.GetSavedValue() )
401 {
402 nValue = GetCoreValue( aMtrFldTop, eUnit );
403 rAttrs.Put( SdrTextUpperDistItem( nValue ) );
404 }
405
406 if( aMtrFldBottom.GetText() != aMtrFldBottom.GetSavedValue() )
407 {
408 nValue = GetCoreValue( aMtrFldBottom, eUnit );
409 rAttrs.Put( SdrTextLowerDistItem( nValue ) );
410 }
411
412 eState = aTsbAutoGrowHeight.GetState();
413 if( eState != aTsbAutoGrowHeight.GetSavedValue() )
414 {
415 rAttrs.Put( SdrTextAutoGrowHeightItem( (sal_Bool) STATE_CHECK == eState ) );
416 }
417
418 eState = aTsbAutoGrowWidth.GetState();
419 if( eState != aTsbAutoGrowWidth.GetSavedValue() )
420 {
421 rAttrs.Put( SdrTextAutoGrowWidthItem( (sal_Bool) STATE_CHECK == eState ) );
422 }
423
424 eState = aTsbAutoGrowSize.GetState();
425 if( eState != aTsbAutoGrowSize.GetSavedValue() )
426 {
427 rAttrs.Put( SdrTextAutoGrowHeightItem( (sal_Bool) STATE_CHECK == eState ) );
428 }
429
430 eState = aTsbWordWrapText.GetState();
431 if( eState != aTsbWordWrapText.GetSavedValue() )
432 {
433 rAttrs.Put( SdrTextWordWrapItem( (sal_Bool) STATE_CHECK == eState ) );
434 }
435
436 // Konturfluss
437 eState = aTsbContour.GetState();
438 if( eState != aTsbContour.GetSavedValue() )
439 {
440 rAttrs.Put( SdrTextContourFrameItem( (sal_Bool) STATE_CHECK == eState ) );
441 }
442
443 eState = aTsbFitToSize.GetState();
444 if( eState != aTsbFitToSize.GetSavedValue() )
445 {
446 SdrFitToSizeType eFTS;
447 switch( eState )
448 {
449 default: ; //prevent warning
450 DBG_ERROR( "svx::SvxTextAttrPage::FillItemSet(), unhandled state!" );
451 case STATE_NOCHECK: eFTS = SDRTEXTFIT_NONE; break;
452 //case STATE_CHECK: eFTS = SDRTEXTFIT_RESIZEATTR; break;
453 case STATE_CHECK: eFTS = SDRTEXTFIT_PROPORTIONAL; break;
454 }
455 rAttrs.Put( SdrTextFitToSizeTypeItem( eFTS ) );
456 }
457
458 // zentriert
459 RECT_POINT eRP = aCtlPosition.GetActualRP();
460 SdrTextVertAdjust eTVA, eOldTVA;
461 SdrTextHorzAdjust eTHA, eOldTHA;
462
463 switch( eRP )
464 {
465 default:
466 case RP_LT: eTVA = SDRTEXTVERTADJUST_TOP;
467 eTHA = SDRTEXTHORZADJUST_LEFT; break;
468 case RP_LM: eTVA = SDRTEXTVERTADJUST_CENTER;
469 eTHA = SDRTEXTHORZADJUST_LEFT; break;
470 case RP_LB: eTVA = SDRTEXTVERTADJUST_BOTTOM;
471 eTHA = SDRTEXTHORZADJUST_LEFT; break;
472 case RP_MT: eTVA = SDRTEXTVERTADJUST_TOP;
473 eTHA = SDRTEXTHORZADJUST_CENTER; break;
474 case RP_MM: eTVA = SDRTEXTVERTADJUST_CENTER;
475 eTHA = SDRTEXTHORZADJUST_CENTER; break;
476 case RP_MB: eTVA = SDRTEXTVERTADJUST_BOTTOM;
477 eTHA = SDRTEXTHORZADJUST_CENTER; break;
478 case RP_RT: eTVA = SDRTEXTVERTADJUST_TOP;
479 eTHA = SDRTEXTHORZADJUST_RIGHT; break;
480 case RP_RM: eTVA = SDRTEXTVERTADJUST_CENTER;
481 eTHA = SDRTEXTHORZADJUST_RIGHT; break;
482 case RP_RB: eTVA = SDRTEXTVERTADJUST_BOTTOM;
483 eTHA = SDRTEXTHORZADJUST_RIGHT; break;
484 }
485
486 // #103516# Do not change values if adjust controls were disabled.
487 sal_Bool bIsDisabled(aCtlPosition.IsCompletelyDisabled());
488
489 if(!bIsDisabled)
490 {
491 if( aTsbFullWidth.GetState() == STATE_CHECK )
492 {
493 if (IsTextDirectionLeftToRight())
494 eTHA = SDRTEXTHORZADJUST_BLOCK;
495 else
496 eTVA = SDRTEXTVERTADJUST_BLOCK;
497 }
498
499 if ( rOutAttrs.GetItemState( SDRATTR_TEXT_VERTADJUST ) != SFX_ITEM_DONTCARE )
500 {
501 eOldTVA = (SdrTextVertAdjust)
502 ( ( const SdrTextVertAdjustItem& )rOutAttrs.Get( SDRATTR_TEXT_VERTADJUST ) ).GetValue();
503 if( eOldTVA != eTVA )
504 rAttrs.Put( SdrTextVertAdjustItem( eTVA ) );
505 }
506 else
507 rAttrs.Put( SdrTextVertAdjustItem( eTVA ) );
508
509 if ( rOutAttrs.GetItemState( SDRATTR_TEXT_HORZADJUST ) != SFX_ITEM_DONTCARE )
510 {
511 eOldTHA = (SdrTextHorzAdjust)
512 ( ( const SdrTextHorzAdjustItem& )rOutAttrs.Get( SDRATTR_TEXT_HORZADJUST ) ).GetValue();
513 if( eOldTHA != eTHA )
514 rAttrs.Put( SdrTextHorzAdjustItem( eTHA ) );
515 }
516 else
517 rAttrs.Put( SdrTextHorzAdjustItem( eTHA ) );
518 }
519
520 return( sal_True );
521 }
522
523 /*************************************************************************
524 |*
525 |*
526 |*
527 \************************************************************************/
528
Construct()529 void SvxTextAttrPage::Construct()
530 {
531 DBG_ASSERT( pView, "Keine gueltige View Uebergeben!" );
532
533 bFitToSizeEnabled = bContourEnabled = sal_True;
534 bWordWrapTextEnabled = bAutoGrowSizeEnabled = bAutoGrowWidthEnabled = bAutoGrowHeightEnabled = sal_False;
535
536 const SdrMarkList& rMarkList = pView->GetMarkedObjectList();
537 if( rMarkList.GetMarkCount() == 1 )
538 {
539 const SdrObject* pObj = rMarkList.GetMark( 0 )->GetMarkedSdrObj();
540 SdrObjKind eKind = (SdrObjKind) pObj->GetObjIdentifier();
541 if( pObj->GetObjInventor() == SdrInventor )
542 {
543 switch( eKind )
544 {
545 case OBJ_TEXT :
546 case OBJ_TITLETEXT :
547 case OBJ_OUTLINETEXT :
548 case OBJ_CAPTION :
549 {
550 if(pObj->HasText())
551 {
552 // Konturfluss ist NICHT bei reinen Textobjekten m�glich
553 bContourEnabled = sal_False;
554
555 // Breite und Hoehe anpassen ist NUR bei reinen Textobjekten m�glich
556 bAutoGrowWidthEnabled = bAutoGrowHeightEnabled = sal_True;
557 }
558 }
559 break;
560 case OBJ_CUSTOMSHAPE :
561 {
562 bFitToSizeEnabled = bContourEnabled = sal_False;
563 bAutoGrowSizeEnabled = sal_True;
564 bWordWrapTextEnabled = sal_True;
565 }
566 break;
567 default: ;//prevent warning
568 }
569 }
570 }
571 aTsbAutoGrowHeight.Enable( bAutoGrowHeightEnabled );
572 aTsbAutoGrowWidth.Enable( bAutoGrowWidthEnabled );
573 aTsbFitToSize.Enable( bFitToSizeEnabled );
574 aTsbContour.Enable( bContourEnabled );
575 aTsbAutoGrowSize.Enable( bAutoGrowSizeEnabled );
576 aTsbWordWrapText.Enable( bWordWrapTextEnabled );
577 }
578
579 /*************************************************************************
580 |*
581 |* Erzeugt die Seite
582 |*
583 \************************************************************************/
584
Create(Window * pWindow,const SfxItemSet & rAttrs)585 SfxTabPage* SvxTextAttrPage::Create( Window* pWindow,
586 const SfxItemSet& rAttrs )
587 {
588 return( new SvxTextAttrPage( pWindow, rAttrs ) );
589 }
590
591 /*************************************************************************
592 |*
593 |*
594 |*
595 \************************************************************************/
596
GetRanges()597 sal_uInt16* SvxTextAttrPage::GetRanges()
598 {
599 return( pRanges );
600 }
601
602 /*************************************************************************
603 |*
604 |*
605 |*
606 \************************************************************************/
607
608 /** Check whether we have to uncheck the "Full width" check box.
609 */
PointChanged(Window *,RECT_POINT eRP)610 void SvxTextAttrPage::PointChanged( Window*, RECT_POINT eRP )
611 {
612 if (aTsbFullWidth.GetState() == STATE_CHECK)
613 {
614 // Depending on write direction and currently checked anchor we have
615 // to uncheck the "full width" button.
616 if (IsTextDirectionLeftToRight())
617 switch( eRP )
618 {
619 case RP_LT:
620 case RP_LM:
621 case RP_LB:
622 case RP_RT:
623 case RP_RM:
624 case RP_RB:
625 aTsbFullWidth.SetState( STATE_NOCHECK );
626 break;
627 default: ;//prevent warning
628 }
629 else
630 switch (eRP)
631 {
632 case RP_LT:
633 case RP_MT:
634 case RP_RT:
635 case RP_LB:
636 case RP_MB:
637 case RP_RB:
638 aTsbFullWidth.SetState( STATE_NOCHECK );
639 break;
640 default: ;//prevent warning
641 }
642 }
643 }
644
645 /*************************************************************************
646 |*
647 |* Aendert evtl. die Position des Positions-Controls
648 |*
649 \************************************************************************/
650
651 /** When switching the "full width" check button on the text anchor may have
652 to be moved to a valid and adjacent position. This position depends on
653 the current anchor position and the text writing direction.
654 */
IMPL_LINK(SvxTextAttrPage,ClickFullWidthHdl_Impl,void *,EMPTYARG)655 IMPL_LINK( SvxTextAttrPage, ClickFullWidthHdl_Impl, void *, EMPTYARG )
656 {
657 if( aTsbFullWidth.GetState() == STATE_CHECK )
658 {
659 if (IsTextDirectionLeftToRight())
660 {
661 // Move text anchor to horizontal middle axis.
662 switch( aCtlPosition.GetActualRP() )
663 {
664 case RP_LT:
665 case RP_RT:
666 aCtlPosition.SetActualRP( RP_MT );
667 break;
668
669 case RP_LM:
670 case RP_RM:
671 aCtlPosition.SetActualRP( RP_MM );
672 break;
673
674 case RP_LB:
675 case RP_RB:
676 aCtlPosition.SetActualRP( RP_MB );
677 break;
678 default: ;//prevent warning
679 }
680 }
681 else
682 {
683 // Move text anchor to vertical middle axis.
684 switch( aCtlPosition.GetActualRP() )
685 {
686 case RP_LT:
687 case RP_LB:
688 aCtlPosition.SetActualRP( RP_LM );
689 break;
690
691 case RP_MT:
692 case RP_MB:
693 aCtlPosition.SetActualRP( RP_MM );
694 break;
695
696 case RP_RT:
697 case RP_RB:
698 aCtlPosition.SetActualRP( RP_RM );
699 break;
700 default: ;//prevent warning
701 }
702 }
703 }
704 return( 0L );
705 }
706
707 /*************************************************************************
708 |*
709 |* Enabled/Disabled "Groesse an Text" oder "Am Rahmen Anpassen"
710 |*
711 \************************************************************************/
712
IMPL_LINK(SvxTextAttrPage,ClickHdl_Impl,void *,EMPTYARG)713 IMPL_LINK( SvxTextAttrPage, ClickHdl_Impl, void *, EMPTYARG )
714 {
715 sal_Bool bAutoGrowWidth = aTsbAutoGrowWidth.GetState() == STATE_CHECK;
716 sal_Bool bAutoGrowHeight = aTsbAutoGrowHeight.GetState() == STATE_CHECK;
717 sal_Bool bFitToSize = aTsbFitToSize.GetState() == STATE_CHECK;
718 sal_Bool bContour = aTsbContour.GetState() == STATE_CHECK;
719
720 aTsbContour.Enable( !bFitToSize &&
721 !( ( bAutoGrowWidth && bAutoGrowWidthEnabled ) || ( bAutoGrowHeight && bAutoGrowHeightEnabled ) ) &&
722 bContourEnabled );
723
724 aTsbAutoGrowWidth.Enable( !bFitToSize &&
725 !( bContour && bContourEnabled ) &&
726 bAutoGrowWidthEnabled );
727
728 aTsbAutoGrowHeight.Enable( !bFitToSize &&
729 !( bContour && bContourEnabled ) &&
730 bAutoGrowHeightEnabled );
731
732 aTsbFitToSize.Enable( !( ( bAutoGrowWidth && bAutoGrowWidthEnabled ) || ( bAutoGrowHeight && bAutoGrowHeightEnabled ) ) &&
733 !( bContour && bContourEnabled ) &&
734 bFitToSizeEnabled );
735
736 // #101901# enable/disable metric fields and decorations dependent of contour
737 aMtrFldLeft.Enable(!bContour);
738 aMtrFldRight.Enable(!bContour);
739 aMtrFldTop.Enable(!bContour);
740 aMtrFldBottom.Enable(!bContour);
741 aFlDistance.Enable(!bContour);
742 aFtLeft.Enable(!bContour);
743 aFtRight.Enable(!bContour);
744 aFtTop.Enable(!bContour);
745 aFtBottom.Enable(!bContour);
746
747 if( bContour && bContourEnabled )
748 {
749 aMtrFldLeft.SetValue( 0 );
750 aMtrFldRight.SetValue( 0 );
751 aMtrFldTop.SetValue( 0 );
752 aMtrFldBottom.SetValue( 0 );
753 }
754
755 // #103516# Do the setup based on states of hor/ver adjust
756 SfxItemState eVState = rOutAttrs.GetItemState( SDRATTR_TEXT_VERTADJUST );
757 SfxItemState eHState = rOutAttrs.GetItemState( SDRATTR_TEXT_HORZADJUST );
758 sal_Bool bHorAndVer(SFX_ITEM_DONTCARE == eVState || SFX_ITEM_DONTCARE == eHState);
759
760 // #83698# enable/disable text anchoring dependent of contour
761 aCtlPosition.Enable(!bContour && !bHorAndVer);
762 aTsbFullWidth.Enable(!bContour && !bHorAndVer);
763 aFlPosition.Enable(!bContour && !bHorAndVer);
764
765 return( 0L );
766 }
767
768
IsTextDirectionLeftToRight(void) const769 bool SvxTextAttrPage::IsTextDirectionLeftToRight (void) const
770 {
771 // Determine the text writing direction with left to right as default.
772 bool bLeftToRightDirection = true;
773 SfxItemState eState = rOutAttrs.GetItemState(SDRATTR_TEXTDIRECTION);
774
775 if(SFX_ITEM_DONTCARE != eState)
776 {
777 const SvxWritingModeItem& rItem = static_cast<const SvxWritingModeItem&> (
778 rOutAttrs.Get (SDRATTR_TEXTDIRECTION));
779 if (rItem.GetValue() == com::sun::star::text::WritingMode_TB_RL)
780 bLeftToRightDirection = false;
781 }
782 return bLeftToRightDirection;
783 }
784
785 //add CHINA001 begin
PageCreated(SfxAllItemSet aSet)786 void SvxTextAttrPage::PageCreated(SfxAllItemSet aSet)
787 {
788 SFX_ITEMSET_ARG (&aSet,pViewItem,OfaPtrItem,SID_SVXTEXTATTRPAGE_VIEW,sal_False);
789
790 if (pViewItem)
791 SetView( static_cast<SdrView *>(pViewItem->GetValue()));
792
793 Construct();
794 }
795
796 //end of CHINA001
797