xref: /AOO41X/main/sc/source/ui/sidebar/AlignmentPropertyPanel.cxx (revision d3e0dd8eb215533c15e891ee35bd141abe9397ee)
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 #include "precompiled_sc.hxx"
23 
24 #include <sfx2/sidebar/ResourceDefinitions.hrc>
25 #include <sfx2/sidebar/Theme.hxx>
26 #include <sfx2/sidebar/ControlFactory.hxx>
27 #include <sfx2/sidebar/Layouter.hxx>
28 #include <AlignmentPropertyPanel.hxx>
29 #include <AlignmentPropertyPanel.hrc>
30 #include <svx/dialmgr.hxx>
31 #include "sc.hrc"
32 #include "scresid.hxx"
33 #include <sfx2/bindings.hxx>
34 #include <sfx2/dispatch.hxx>
35 #include <svx/algitem.hxx>
36 #include <svx/dlgutil.hxx>
37 #include <vcl/toolbox.hxx>
38 #include <svx/sidebar/SidebarDialControl.hxx>
39 
40 using namespace css;
41 using namespace cssu;
42 using ::sfx2::sidebar::Layouter;
43 using ::sfx2::sidebar::ControlFactory;
44 
45 #define A2S(pString) (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(pString)))
46 
47 //////////////////////////////////////////////////////////////////////////////
48 // namespace open
49 
50 namespace sc { namespace sidebar {
51 
52 //////////////////////////////////////////////////////////////////////////////
53 
AlignmentPropertyPanel(Window * pParent,const cssu::Reference<css::frame::XFrame> & rxFrame,SfxBindings * pBindings)54 AlignmentPropertyPanel::AlignmentPropertyPanel(
55     Window* pParent,
56     const cssu::Reference<css::frame::XFrame>& rxFrame,
57     SfxBindings* pBindings)
58     : Control(
59         pParent,
60             ScResId(RID_PROPERTYPANEL_SC_ALIGNMENT)),
61       mpTBHorizontalBackground(ControlFactory::CreateToolBoxBackground(this)),
62       mpTBHorizontal(ControlFactory::CreateToolBox(
63               mpTBHorizontalBackground.get(),
64               ScResId(TBX_HORIZONTAL_ALIGNMENT))),
65       mpTBVerticalBackground(ControlFactory::CreateToolBoxBackground(this)),
66       mpTBVertical(ControlFactory::CreateToolBox(
67               mpTBVerticalBackground.get(),
68               ScResId(TBX_VERTICAL_ALIGN))),
69       mpFTLeftIndent(new FixedText(this, ScResId(FT_LEFT_INDENT))),
70       mpMFLeftIndent(new MetricField(this, ScResId(MF_LEFT_INDENT))),
71       mpCBXWrapText(new CheckBox(this, ScResId(CBX_WRAP))),
72       mpCBXMergeCell(new CheckBox(this, ScResId(CBX_MERGE))),
73       mpFtRotate(new FixedText(this, ScResId(FT_ORIENT))),
74       mpCtrlDial(new svx::sidebar::SidebarDialControl(this, ScResId(DIAL_CONTROL))), // , true)),
75       mpMtrAngle(new MetricBox(this, ScResId(CBOX_ANGLE))),
76       mpCbStacked(new CheckBox(this, ScResId(CBX_VERT))),
77       maAlignHorControl(SID_H_ALIGNCELL, *pBindings, *this),
78       maAlignVerControl(SID_V_ALIGNCELL, *pBindings, *this),
79       maLeftIndentControl(SID_ATTR_ALIGN_INDENT, *pBindings, *this),
80       maMergeCellControl(FID_MERGE_TOGGLE, *pBindings, *this),
81       maWrapTextControl(SID_ATTR_ALIGN_LINEBREAK, *pBindings, *this),
82       maAngleControl(SID_ATTR_ALIGN_DEGREES, *pBindings, *this),
83       maStackControl(SID_ATTR_ALIGN_STACKED, *pBindings, *this),
84       maIMGAlignLeft(ScResId(IMG_ALIGN_LEFT)),
85       maIMGAlignCenter(ScResId(IMG_ALIGN_CENTER)),
86       maIMGAlignRight(ScResId(IMG_ALIGN_RIGHT)),
87       maIMGAlignJust(ScResId(IMG_ALIGN_JUST)),
88       maIMGAlignTop(ScResId(IMG_ALIGN_TOP)),
89       maIMGAlignCenterV(ScResId(IMG_ALIGN_CENTER_V)),
90       maIMGAlignBottom(ScResId(IMG_ALIGN_BOTTOM)),
91       meHorAlignState(SVX_HOR_JUSTIFY_STANDARD),
92       meVerAlignState(SVX_VER_JUSTIFY_STANDARD),
93       mbMultiDisable(false),
94       mxFrame(rxFrame),
95       maContext(),
96       mpBindings(pBindings)
97 {
98     Initialize();
99     FreeResource();
100 
101     mpFTLeftIndent->SetBackground(Wallpaper());
102     mpFtRotate->SetBackground(Wallpaper());
103 
104     Layouter::PrepareForLayouting(*mpFTLeftIndent);
105     Layouter::PrepareForLayouting(*mpFtRotate);
106     Layouter::PrepareForLayouting(*mpCBXWrapText);
107     Layouter::PrepareForLayouting(*mpCBXMergeCell);
108     Layouter::PrepareForLayouting(*mpCbStacked);
109 
110 }
111 
112 //////////////////////////////////////////////////////////////////////////////
113 
~AlignmentPropertyPanel()114 AlignmentPropertyPanel::~AlignmentPropertyPanel()
115 {
116 }
117 
118 //////////////////////////////////////////////////////////////////////////////
119 
Initialize()120 void AlignmentPropertyPanel::Initialize()
121 {
122     mpTBHorizontal->SetItemImage(ID_SUBSTLEFT, maIMGAlignLeft);
123     mpTBHorizontal->SetItemImage(ID_SUBSTCENTER, maIMGAlignCenter);
124     mpTBHorizontal->SetItemImage(ID_SUBSTRIGHT, maIMGAlignRight);
125     mpTBHorizontal->SetItemImage(ID_SUBSTJUSTIFY, maIMGAlignJust);
126     Size aTbxSize( mpTBHorizontal->CalcWindowSizePixel() );
127     mpTBHorizontal->SetOutputSizePixel( aTbxSize );
128     mpTBHorizontal->SetBackground(Wallpaper());
129     mpTBHorizontal->SetPaintTransparent(true);
130     Link aLink = LINK(this, AlignmentPropertyPanel, TbxHorAlignSelectHdl);
131     mpTBHorizontal->SetSelectHdl ( aLink );
132 
133     mpTBVertical->SetItemImage(IID_VERT_TOP, maIMGAlignTop);
134     mpTBVertical->SetItemImage(IID_VERT_CENTER, maIMGAlignCenterV);
135     mpTBVertical->SetItemImage(IID_VERT_BOTTOM, maIMGAlignBottom);
136     Size aTbxSize2( mpTBVertical->CalcWindowSizePixel() );
137     mpTBVertical->SetOutputSizePixel( aTbxSize2 );
138     mpTBVertical->SetBackground(Wallpaper());
139     mpTBVertical->SetPaintTransparent(true);
140     aLink = LINK(this, AlignmentPropertyPanel, TbxVerAlignSelectHdl);
141     mpTBVertical->SetSelectHdl ( aLink );
142 
143     mpFTLeftIndent->Disable();
144     mpMFLeftIndent->Disable();
145     mpMFLeftIndent->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Left Indent")));    //wj acc
146     aLink = LINK(this, AlignmentPropertyPanel, MFLeftIndentMdyHdl);
147     mpMFLeftIndent->SetModifyHdl ( aLink );
148 
149     aLink = LINK(this, AlignmentPropertyPanel, CBOXMergnCellClkHdl);
150     mpCBXMergeCell->SetClickHdl ( aLink );
151 
152     aLink = LINK(this, AlignmentPropertyPanel, CBOXWrapTextClkHdl);
153     mpCBXWrapText->SetClickHdl ( aLink );
154 
155     //rotation control
156     mpCtrlDial->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Text Orientation")));   //wj acc
157     mpCtrlDial->SetModifyHdl(LINK( this, AlignmentPropertyPanel, RotationHdl));
158 
159     //rotation
160     mpMtrAngle->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Text Orientation")));   //wj acc
161     mpMtrAngle->SetModifyHdl(LINK( this, AlignmentPropertyPanel, AngleModifiedHdl));
162     mpMtrAngle->EnableAutocomplete( false );
163 
164     //Vertical stacked
165     mpCbStacked->SetClickHdl( LINK( this, AlignmentPropertyPanel, ClickStackHdl ) );
166 
167     mpMtrAngle->InsertValue(0, FUNIT_CUSTOM);
168     mpMtrAngle->InsertValue(45, FUNIT_CUSTOM);
169     mpMtrAngle->InsertValue(90, FUNIT_CUSTOM);
170     mpMtrAngle->InsertValue(135, FUNIT_CUSTOM);
171     mpMtrAngle->InsertValue(180, FUNIT_CUSTOM);
172     mpMtrAngle->InsertValue(225, FUNIT_CUSTOM);
173     mpMtrAngle->InsertValue(270, FUNIT_CUSTOM);
174     mpMtrAngle->InsertValue(315, FUNIT_CUSTOM);
175     mpMtrAngle->SetDropDownLineCount(mpMtrAngle->GetEntryCount());
176 
177     mpTBHorizontal->SetAccessibleRelationLabeledBy(mpTBHorizontal.get());
178     mpTBVertical->SetAccessibleRelationLabeledBy(mpTBVertical.get());
179     mpMFLeftIndent->SetAccessibleRelationLabeledBy(mpFTLeftIndent.get());
180     mpMtrAngle->SetAccessibleRelationLabeledBy(mpFtRotate.get());
181 #ifdef HAS_IA2
182     mpMtrAngle->SetMpSubEditAccLableBy(mpFtRotate.get());
183 #endif
184 }
185 
186 //////////////////////////////////////////////////////////////////////////////
187 
IMPL_LINK(AlignmentPropertyPanel,AngleModifiedHdl,void *,EMPTYARG)188 IMPL_LINK( AlignmentPropertyPanel, AngleModifiedHdl, void *, EMPTYARG )
189 {
190     String sTmp = mpMtrAngle->GetText();
191 
192     sal_Unicode nChar = sTmp.GetChar( 0 );
193     if((sTmp.Len()== 1 &&  nChar == '-') ||
194         (nChar != '-' && ((nChar < '0') || (nChar > '9') ) ))   ////modify
195         return 0;
196 
197     double dTmp = sTmp.ToDouble();
198     FormatDegrees(dTmp);
199 
200     sal_Int64 nTmp = (sal_Int64)dTmp*100;
201     SfxInt32Item aAngleItem( SID_ATTR_ALIGN_DEGREES,(sal_uInt32) nTmp);
202 
203     GetBindings()->GetDispatcher()->Execute(
204         SID_ATTR_ALIGN_DEGREES, SFX_CALLMODE_RECORD, &aAngleItem, 0L );
205     return 0;
206 }
207 
208 //////////////////////////////////////////////////////////////////////////////
209 
IMPL_LINK(AlignmentPropertyPanel,RotationHdl,void *,EMPTYARG)210 IMPL_LINK( AlignmentPropertyPanel, RotationHdl, void *, EMPTYARG )
211 {
212     sal_Int32 nTmp = mpCtrlDial->GetRotation();
213     SfxInt32Item aAngleItem( SID_ATTR_ALIGN_DEGREES,(sal_uInt32) nTmp);
214 
215     GetBindings()->GetDispatcher()->Execute(
216         SID_ATTR_ALIGN_DEGREES, SFX_CALLMODE_RECORD, &aAngleItem, 0L );
217 
218     return 0;
219 }
220 
221 //////////////////////////////////////////////////////////////////////////////
222 
IMPL_LINK(AlignmentPropertyPanel,ClickStackHdl,void *,EMPTYARG)223 IMPL_LINK( AlignmentPropertyPanel, ClickStackHdl, void *, EMPTYARG )
224 {
225     bool bVertical = mpCbStacked->IsChecked() ? true : false;
226     SfxBoolItem  aStackItem( SID_ATTR_ALIGN_STACKED, bVertical );
227     GetBindings()->GetDispatcher()->Execute(
228         SID_ATTR_ALIGN_STACKED, SFX_CALLMODE_RECORD, &aStackItem, 0L );
229     return 0;
230 }
231 
232 //////////////////////////////////////////////////////////////////////////////
233 
IMPL_LINK(AlignmentPropertyPanel,TbxHorAlignSelectHdl,ToolBox *,pToolBox)234 IMPL_LINK(AlignmentPropertyPanel, TbxHorAlignSelectHdl, ToolBox*, pToolBox)
235 {
236     sal_uInt16 nId = pToolBox->GetCurItemId();
237 
238     if(nId == ID_SUBSTLEFT)
239     {
240         if(meHorAlignState != SVX_HOR_JUSTIFY_LEFT)
241             meHorAlignState = SVX_HOR_JUSTIFY_LEFT;
242         else
243             meHorAlignState = SVX_HOR_JUSTIFY_STANDARD;
244     }
245     else if( nId == ID_SUBSTCENTER )
246     {
247         if(meHorAlignState != SVX_HOR_JUSTIFY_CENTER)
248             meHorAlignState = SVX_HOR_JUSTIFY_CENTER;
249         else
250             meHorAlignState = SVX_HOR_JUSTIFY_STANDARD;
251     }
252     else if( nId == ID_SUBSTRIGHT )
253     {
254         if(meHorAlignState != SVX_HOR_JUSTIFY_RIGHT)
255             meHorAlignState = SVX_HOR_JUSTIFY_RIGHT;
256         else
257             meHorAlignState = SVX_HOR_JUSTIFY_STANDARD;
258     }
259     else if( nId == ID_SUBSTJUSTIFY )
260     {
261         if(meHorAlignState != SVX_HOR_JUSTIFY_BLOCK)
262             meHorAlignState = SVX_HOR_JUSTIFY_BLOCK;
263         else
264             meHorAlignState = SVX_HOR_JUSTIFY_STANDARD;
265     }
266     SvxHorJustifyItem aHorItem(meHorAlignState, SID_H_ALIGNCELL);
267     GetBindings()->GetDispatcher()->Execute(SID_H_ALIGNCELL, SFX_CALLMODE_RECORD, &aHorItem, 0L);
268     UpdateHorAlign();
269     return 0;
270 }
271 
272 //////////////////////////////////////////////////////////////////////////////
273 
IMPL_LINK(AlignmentPropertyPanel,TbxVerAlignSelectHdl,ToolBox *,pToolBox)274 IMPL_LINK(AlignmentPropertyPanel, TbxVerAlignSelectHdl, ToolBox*, pToolBox)
275 {
276     sal_uInt16 nId = pToolBox->GetCurItemId();
277 
278     //Bold
279     if(nId == IID_VERT_TOP)
280     {
281         if(meVerAlignState != SVX_VER_JUSTIFY_TOP)
282             meVerAlignState = SVX_VER_JUSTIFY_TOP;
283         else
284             meVerAlignState = SVX_VER_JUSTIFY_STANDARD;
285     }
286     else if( nId == IID_VERT_CENTER )
287     {
288         if(meVerAlignState != SVX_VER_JUSTIFY_CENTER)
289             meVerAlignState = SVX_VER_JUSTIFY_CENTER;
290         else
291             meVerAlignState = SVX_VER_JUSTIFY_STANDARD;
292     }
293     else if( nId == IID_VERT_BOTTOM )
294     {
295         if(meVerAlignState != SVX_VER_JUSTIFY_BOTTOM)
296             meVerAlignState = SVX_VER_JUSTIFY_BOTTOM;
297         else
298             meVerAlignState = SVX_VER_JUSTIFY_STANDARD;
299     }
300     SvxVerJustifyItem aVerItem(meVerAlignState, SID_V_ALIGNCELL);
301     GetBindings()->GetDispatcher()->Execute(SID_V_ALIGNCELL, SFX_CALLMODE_RECORD, &aVerItem, 0L);
302     UpdateVerAlign();
303     return 0;
304 }
305 
306 //////////////////////////////////////////////////////////////////////////////
307 
IMPL_LINK(AlignmentPropertyPanel,MFLeftIndentMdyHdl,void *,EMPTYARG)308 IMPL_LINK(AlignmentPropertyPanel, MFLeftIndentMdyHdl, void*, EMPTYARG)
309 {
310     mpCBXWrapText->EnableTriState(false);
311     sal_uInt16 nVal = (sal_uInt16)mpMFLeftIndent->GetValue();
312     SfxUInt16Item aItem( SID_ATTR_ALIGN_INDENT,  (sal_uInt16)CalcToUnit( nVal,  SFX_MAPUNIT_TWIP ) );
313 
314     GetBindings()->GetDispatcher()->Execute(SID_ATTR_ALIGN_INDENT, SFX_CALLMODE_RECORD, &aItem, 0L);
315     return( 0L );
316 }
317 
318 //////////////////////////////////////////////////////////////////////////////
319 
IMPL_LINK(AlignmentPropertyPanel,CBOXMergnCellClkHdl,void *,EMPTYARG)320 IMPL_LINK(AlignmentPropertyPanel, CBOXMergnCellClkHdl, void*, EMPTYARG)
321 {
322     bool bState = mpCBXMergeCell->IsChecked();
323 
324     //Modified
325     //SfxBoolItem aItem( FID_MERGE_TOGGLE , bState);
326     //GetBindings()->GetDispatcher()->Execute(FID_MERGE_TOGGLE, SFX_CALLMODE_RECORD, &aItem, false, 0L);
327     if(bState)
328         GetBindings()->GetDispatcher()->Execute(FID_MERGE_ON, SFX_CALLMODE_RECORD);
329     else
330         GetBindings()->GetDispatcher()->Execute(FID_MERGE_OFF, SFX_CALLMODE_RECORD);
331     GetBindings()->Invalidate(FID_MERGE_TOGGLE,true,false);
332     //modified end
333 
334     return 0;
335 }
336 
337 //////////////////////////////////////////////////////////////////////////////
338 
IMPL_LINK(AlignmentPropertyPanel,CBOXWrapTextClkHdl,void *,EMPTYARG)339 IMPL_LINK(AlignmentPropertyPanel, CBOXWrapTextClkHdl, void*, EMPTYARG)
340 {
341     bool bState = mpCBXWrapText->IsChecked();
342     SfxBoolItem aItem( SID_ATTR_ALIGN_LINEBREAK , bState);
343     GetBindings()->GetDispatcher()->Execute(SID_ATTR_ALIGN_LINEBREAK, SFX_CALLMODE_RECORD, &aItem, 0L);
344     return 0;
345 }
346 
347 //////////////////////////////////////////////////////////////////////////////
348 
Create(Window * pParent,const cssu::Reference<css::frame::XFrame> & rxFrame,SfxBindings * pBindings)349 AlignmentPropertyPanel* AlignmentPropertyPanel::Create (
350     Window* pParent,
351     const cssu::Reference<css::frame::XFrame>& rxFrame,
352     SfxBindings* pBindings)
353 {
354     if (pParent == NULL)
355         throw lang::IllegalArgumentException(A2S("no parent Window given to AlignmentPropertyPanel::Create"), NULL, 0);
356     if ( ! rxFrame.is())
357         throw lang::IllegalArgumentException(A2S("no XFrame given to AlignmentPropertyPanel::Create"), NULL, 1);
358     if (pBindings == NULL)
359         throw lang::IllegalArgumentException(A2S("no SfxBindings given to AlignmentPropertyPanel::Create"), NULL, 2);
360 
361     return new AlignmentPropertyPanel(
362         pParent,
363         rxFrame,
364         pBindings);
365 }
366 
367 //////////////////////////////////////////////////////////////////////////////
368 
DataChanged(const DataChangedEvent & rEvent)369 void AlignmentPropertyPanel::DataChanged(
370     const DataChangedEvent& rEvent)
371 {
372     (void)rEvent;
373 }
374 
375 //////////////////////////////////////////////////////////////////////////////
376 
HandleContextChange(const::sfx2::sidebar::EnumContext aContext)377 void AlignmentPropertyPanel::HandleContextChange(
378     const ::sfx2::sidebar::EnumContext aContext)
379 {
380     if(maContext == aContext)
381     {
382         // Nothing to do.
383         return;
384     }
385 
386     maContext = aContext;
387 
388 
389 
390     // todo
391 }
392 
393 //////////////////////////////////////////////////////////////////////////////
394 
NotifyItemUpdate(sal_uInt16 nSID,SfxItemState eState,const SfxPoolItem * pState,const bool bIsEnabled)395 void AlignmentPropertyPanel::NotifyItemUpdate(
396     sal_uInt16 nSID,
397     SfxItemState eState,
398     const SfxPoolItem* pState,
399     const bool bIsEnabled)
400 {
401     (void)bIsEnabled;
402 
403     switch(nSID)
404     {
405     case SID_H_ALIGNCELL:
406         if(eState >= SFX_ITEM_DEFAULT && pState && pState->ISA(SvxHorJustifyItem) )
407         {
408                 const SvxHorJustifyItem* pItem = (const SvxHorJustifyItem*)pState;
409                 meHorAlignState = (SvxCellHorJustify)pItem->GetValue();
410         }
411         else
412         {
413             meHorAlignState = SVX_HOR_JUSTIFY_STANDARD;
414         }
415         UpdateHorAlign();
416         break;
417     case SID_V_ALIGNCELL:
418         if(eState >= SFX_ITEM_DEFAULT && pState && pState->ISA(SvxVerJustifyItem) )
419         {
420                 const SvxVerJustifyItem* pItem = (const SvxVerJustifyItem*)pState;
421                 meVerAlignState = (SvxCellVerJustify)pItem->GetValue();
422         }
423         else
424         {
425             meVerAlignState = SVX_VER_JUSTIFY_STANDARD;
426         }
427         UpdateVerAlign();
428         break;
429     case SID_ATTR_ALIGN_INDENT:
430         if(eState >= SFX_ITEM_DEFAULT && pState && pState->ISA(SfxUInt16Item) )
431         {
432                 const SfxUInt16Item* pItem = (const SfxUInt16Item*)pState;
433                 sal_uInt16 nVal = pItem->GetValue();
434                 mpMFLeftIndent->SetValue( CalcToPoint(nVal, SFX_MAPUNIT_TWIP, 1) );
435         }
436         else
437         {
438             mpMFLeftIndent->SetValue(0);
439             mpMFLeftIndent->SetText(String());
440         }
441         break;
442     case FID_MERGE_TOGGLE:
443         if(eState >= SFX_ITEM_DEFAULT && pState && pState->ISA(SfxBoolItem) )
444         {
445             mpCBXMergeCell->Enable();
446             const SfxBoolItem* pItem = (const SfxBoolItem*)pState;
447             bool bVal = pItem->GetValue();
448             if(bVal)
449                 mpCBXMergeCell->Check(true);
450             else
451                 mpCBXMergeCell->Check(false);
452         }
453         else
454         {
455             mpCBXMergeCell->Check(false);
456             mpCBXMergeCell->Disable();
457         }
458         break;
459 
460     case SID_ATTR_ALIGN_LINEBREAK:
461         if(eState == SFX_ITEM_DISABLED)
462         {
463             mpCBXWrapText->EnableTriState(false);
464             mpCBXWrapText->Check(false);
465             mpCBXWrapText->Disable();
466         }
467         else
468         {
469             mpCBXWrapText->Enable();
470             if(eState >= SFX_ITEM_DEFAULT && pState && pState->ISA(SfxBoolItem) )
471             {
472                 mpCBXWrapText->EnableTriState(false);
473                 const SfxBoolItem* pItem = (const SfxBoolItem*)pState;
474                 bool bVal = pItem->GetValue();
475                 if(bVal)
476                     mpCBXWrapText->Check(true);
477                 else
478                     mpCBXWrapText->Check(false);
479             }
480             else if(eState == SFX_ITEM_DONTCARE)
481             {
482                 mpCBXWrapText->EnableTriState(true);
483                 mpCBXWrapText->SetState(STATE_DONTKNOW);
484             }
485         }
486         break;
487     case SID_ATTR_ALIGN_DEGREES:
488         if (eState >= SFX_ITEM_AVAILABLE)
489         {
490             long nTmp = ((const SfxInt32Item*)pState)->GetValue();
491             mpMtrAngle->SetValue( nTmp / 100);  //wj
492             mpCtrlDial->SetRotation( nTmp );
493             switch(nTmp)
494             {
495                 case 0:
496                     mpMtrAngle->SelectEntryPos(0);
497                 break;
498                 case 4500:
499                     mpMtrAngle->SelectEntryPos(1);
500                 break;
501                 case 9000:
502                     mpMtrAngle->SelectEntryPos(2);
503                 break;
504                 case 13500:
505                     mpMtrAngle->SelectEntryPos(3);
506                 break;
507                 case 18000:
508                     mpMtrAngle->SelectEntryPos(4);
509                 break;
510                 case 22500:
511                     mpMtrAngle->SelectEntryPos(5);
512                 break;
513                 case 27000:
514                     mpMtrAngle->SelectEntryPos(6);
515                 break;
516                 case 31500:
517                     mpMtrAngle->SelectEntryPos(7);
518             }
519         }
520         else
521         {
522             mpMtrAngle->SetText( String() );
523             mpCtrlDial->SetRotation( 0 );
524         }
525         break;
526     case SID_ATTR_ALIGN_STACKED:
527         if (eState >= SFX_ITEM_AVAILABLE)
528         {
529             mpCbStacked->EnableTriState(false);
530             const SfxBoolItem* aStackItem = (const SfxBoolItem*)pState;
531             bool IsChecked = (bool)aStackItem->GetValue();
532             if(IsChecked)
533             {
534                 mpCbStacked->Check(IsChecked);
535                 mpFtRotate->Disable();
536                 mpMtrAngle->Disable();
537                 mpCtrlDial->Disable();
538                 mbMultiDisable = true;
539             }
540             else
541             {
542                 mpCbStacked->Check(IsChecked);
543                 mpFtRotate->Enable();
544                 mpMtrAngle->Enable();
545                 mpCtrlDial->Enable();
546                 mbMultiDisable = false;
547             }
548         }
549         else
550         {
551             mbMultiDisable = true;
552             mpFtRotate->Disable();
553             mpMtrAngle->Disable();
554             mpCtrlDial->Disable();
555             mpCbStacked->EnableTriState(true);
556             mpCbStacked->SetState(STATE_DONTKNOW);
557         }
558     }
559 }
560 
561 //////////////////////////////////////////////////////////////////////////////
562 
GetBindings()563 SfxBindings* AlignmentPropertyPanel::GetBindings()
564 {
565     return mpBindings;
566 }
567 
568 //////////////////////////////////////////////////////////////////////////////
569 
FormatDegrees(double & dTmp)570 void AlignmentPropertyPanel::FormatDegrees(double& dTmp)
571 {
572     while(dTmp<0)
573         dTmp += 360;
574     while (dTmp > 359)  //modify
575         dTmp = 359;
576 }
577 
578 //////////////////////////////////////////////////////////////////////////////
579 
UpdateHorAlign()580 void AlignmentPropertyPanel::UpdateHorAlign()
581 {
582     mpTBHorizontal->SetItemState(ID_SUBSTLEFT,  STATE_NOCHECK);
583     mpTBHorizontal->SetItemState(ID_SUBSTCENTER,    STATE_NOCHECK);
584     mpTBHorizontal->SetItemState(ID_SUBSTRIGHT, STATE_NOCHECK);
585     mpTBHorizontal->SetItemState(ID_SUBSTJUSTIFY,STATE_NOCHECK);
586     mpFTLeftIndent->Disable();
587     mpMFLeftIndent->Disable();
588     if(meHorAlignState==SVX_HOR_JUSTIFY_REPEAT)
589     {
590         mpFtRotate->Disable();
591         mpCtrlDial->Disable();
592         mpMtrAngle->Disable();
593         mpCbStacked->Disable();
594     }
595     else
596     {
597         if(!mbMultiDisable)
598         {
599             mpFtRotate->Enable();
600             mpCtrlDial->Enable();
601             mpMtrAngle->Enable();
602         }
603         else
604         {
605             mpFtRotate->Disable();
606             mpCtrlDial->Disable();
607             mpMtrAngle->Disable();
608         }
609         mpCbStacked->Enable();
610     }
611     switch(meHorAlignState)
612     {
613     case SVX_HOR_JUSTIFY_LEFT:
614         mpTBHorizontal->SetItemState(ID_SUBSTLEFT,  STATE_CHECK);
615         mpFTLeftIndent->Enable();
616         mpMFLeftIndent->Enable();
617         break;
618     case SVX_HOR_JUSTIFY_CENTER:mpTBHorizontal->SetItemState(ID_SUBSTCENTER,    STATE_CHECK);break;
619     case SVX_HOR_JUSTIFY_RIGHT: mpTBHorizontal->SetItemState(ID_SUBSTRIGHT, STATE_CHECK);break;
620     case SVX_HOR_JUSTIFY_BLOCK: mpTBHorizontal->SetItemState(ID_SUBSTJUSTIFY,STATE_CHECK);break;
621     default:;
622     }
623 }
624 
625 //////////////////////////////////////////////////////////////////////////////
626 
UpdateVerAlign()627 void AlignmentPropertyPanel::UpdateVerAlign()
628 {
629     mpTBVertical->SetItemState(IID_VERT_TOP,        STATE_NOCHECK);
630     mpTBVertical->SetItemState(IID_VERT_CENTER, STATE_NOCHECK);
631     mpTBVertical->SetItemState(IID_VERT_BOTTOM, STATE_NOCHECK);
632 
633     switch(meVerAlignState)
634     {
635     case SVX_VER_JUSTIFY_TOP:   mpTBVertical->SetItemState(IID_VERT_TOP,        STATE_CHECK);break;
636     case SVX_VER_JUSTIFY_CENTER:mpTBVertical->SetItemState(IID_VERT_CENTER, STATE_CHECK);break;
637     case SVX_VER_JUSTIFY_BOTTOM:    mpTBVertical->SetItemState(IID_VERT_BOTTOM, STATE_CHECK);break;
638     default:;
639     }
640 }
641 
642 
643 
644 
Resize(void)645 void AlignmentPropertyPanel::Resize (void)
646 {
647     const sal_Int32 nRight (GetSizePixel().Width() - Layouter::MapWidth(*this, TB_BORDER));
648     Layouter::SetRight(*mpFtRotate, nRight);
649     Layouter::SetRight(*mpCBXWrapText, nRight);
650     Layouter::SetRight(*mpCBXMergeCell, nRight);
651     Layouter::SetRight(*mpCbStacked, nRight);
652 }
653 
654 
655 }} // end of namespace ::sc::sidebar
656