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 <CellAppearancePropertyPanel.hxx>
29 #include <CellAppearancePropertyPanel.hrc>
30 #include "sc.hrc"
31 #include "scresid.hxx"
32 #include <sfx2/bindings.hxx>
33 #include <sfx2/dispatch.hxx>
34 #include <vcl/fixed.hxx>
35 #include <svx/tbxcolorupdate.hxx>
36 #include <svl/eitem.hxx>
37 #include <editeng/bolnitem.hxx>
38 #include <editeng/boxitem.hxx>
39 #include <editeng/colritem.hxx>
40 #include <vcl/svapp.hxx>
41 #include <svx/sidebar/ColorControl.hxx>
42 #include <boost/bind.hpp>
43 #include <svx/sidebar/PopupContainer.hxx>
44 #include <CellLineStyleControl.hxx>
45 #include <CellLineStylePopup.hxx>
46 #include <CellBorderUpdater.hxx>
47 #include <CellBorderStyleControl.hxx>
48 #include <CellBorderStylePopup.hxx>
49
50 using namespace css;
51 using namespace cssu;
52 using ::sfx2::sidebar::Layouter;
53
54
55 #define A2S(pString) (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(pString)))
56
57 //////////////////////////////////////////////////////////////////////////////
58 // helpers
59
60 namespace
61 {
GetTransparentColor(void)62 Color GetTransparentColor(void)
63 {
64 return COL_TRANSPARENT;
65 }
66 } // end of anonymous namespace
67
68 //////////////////////////////////////////////////////////////////////////////
69 // namespace open
70
71 namespace sc { namespace sidebar {
72
73 //////////////////////////////////////////////////////////////////////////////
74
CreateFillColorPopupControl(svx::sidebar::PopupContainer * pParent)75 svx::sidebar::PopupControl* CellAppearancePropertyPanel::CreateFillColorPopupControl(svx::sidebar::PopupContainer* pParent)
76 {
77 const ScResId aResId(VS_NOFILLCOLOR);
78
79 return new svx::sidebar::ColorControl(
80 pParent,
81 mpBindings,
82 ScResId(RID_POPUPPANEL_CELLAPPEARANCE_FILLCOLOR),
83 ScResId(VS_FILLCOLOR),
84 ::boost::bind(GetTransparentColor),
85 ::boost::bind(&CellAppearancePropertyPanel::SetFillColor, this, _1, _2),
86 pParent,
87 &aResId);
88 }
89
SetFillColor(const String &,const Color aColor)90 void CellAppearancePropertyPanel::SetFillColor(
91 const String& /*rsColorName*/,
92 const Color aColor)
93 {
94 const SvxColorItem aColorItem(aColor, SID_BACKGROUND_COLOR);
95 mpBindings->GetDispatcher()->Execute(SID_BACKGROUND_COLOR, SFX_CALLMODE_RECORD, &aColorItem, 0L);
96 maBackColor = aColor;
97 }
98
99 //////////////////////////////////////////////////////////////////////////////
100
CreateLineColorPopupControl(svx::sidebar::PopupContainer * pParent)101 svx::sidebar::PopupControl* CellAppearancePropertyPanel::CreateLineColorPopupControl(svx::sidebar::PopupContainer* pParent)
102 {
103 return new svx::sidebar::ColorControl(
104 pParent,
105 mpBindings,
106 ScResId(RID_POPUPPANEL_CELLAPPEARANCE_LINECOLOR),
107 ScResId(VS_LINECOLOR),
108 ::boost::bind(GetTransparentColor),
109 ::boost::bind(&CellAppearancePropertyPanel::SetLineColor, this, _1, _2),
110 pParent,
111 0);
112 }
113
SetLineColor(const String &,const Color aColor)114 void CellAppearancePropertyPanel::SetLineColor(
115 const String& /*rsColorName*/,
116 const Color aColor)
117 {
118 const SvxColorItem aColorItem(aColor, SID_FRAME_LINECOLOR);
119 mpBindings->GetDispatcher()->Execute(SID_FRAME_LINECOLOR, SFX_CALLMODE_RECORD, &aColorItem, 0L);
120 maLineColor = aColor;
121 }
122
123 //////////////////////////////////////////////////////////////////////////////
124
CreateCellLineStylePopupControl(svx::sidebar::PopupContainer * pParent)125 svx::sidebar::PopupControl* CellAppearancePropertyPanel::CreateCellLineStylePopupControl(svx::sidebar::PopupContainer* pParent)
126 {
127 return new CellLineStyleControl(pParent, *this);
128 }
129
EndCellLineStylePopupMode(void)130 void CellAppearancePropertyPanel::EndCellLineStylePopupMode(void)
131 {
132 if(mpCellLineStylePopup.get())
133 {
134 mpCellLineStylePopup->Hide();
135 }
136 }
137
138 //////////////////////////////////////////////////////////////////////////////
139
CreateCellBorderStylePopupControl(svx::sidebar::PopupContainer * pParent)140 svx::sidebar::PopupControl* CellAppearancePropertyPanel::CreateCellBorderStylePopupControl(svx::sidebar::PopupContainer* pParent)
141 {
142 return new CellBorderStyleControl(pParent, *this);
143 }
144
EndCellBorderStylePopupMode(void)145 void CellAppearancePropertyPanel::EndCellBorderStylePopupMode(void)
146 {
147 if(mpCellBorderStylePopup.get())
148 {
149 mpCellBorderStylePopup->Hide();
150 }
151 }
152
153 //////////////////////////////////////////////////////////////////////////////
154
CellAppearancePropertyPanel(Window * pParent,const cssu::Reference<css::frame::XFrame> & rxFrame,SfxBindings * pBindings)155 CellAppearancePropertyPanel::CellAppearancePropertyPanel(
156 Window* pParent,
157 const cssu::Reference<css::frame::XFrame>& rxFrame,
158 SfxBindings* pBindings)
159 : Control(
160 pParent,
161 ScResId(RID_PROPERTYPANEL_SC_APPEAR)),
162
163 mpFTFillColor(new FixedText(this, ScResId(FT_BK_COLOR))),
164 mpTBFillColorBackground(sfx2::sidebar::ControlFactory::CreateToolBoxBackground(this)),
165 mpTBFillColor(sfx2::sidebar::ControlFactory::CreateToolBox(mpTBFillColorBackground.get(), ScResId(TB_BK_COLOR))),
166 mpFillColorUpdater(new ::svx::ToolboxButtonColorUpdater(SID_ATTR_BRUSH, TBI_BK_COLOR, mpTBFillColor.get(), TBX_UPDATER_MODE_CHAR_COLOR_NEW)),
167
168 mpFTCellBorder(new FixedText(this, ScResId(FT_BORDER))),
169 mpTBCellBorderBackground(sfx2::sidebar::ControlFactory::CreateToolBoxBackground(this)),
170 mpTBCellBorder(sfx2::sidebar::ControlFactory::CreateToolBox(mpTBCellBorderBackground.get(), ScResId(TB_APP_BORDER))),
171 mpCellBorderUpdater(new CellBorderUpdater(TBI_BORDER, *mpTBCellBorder)),
172
173 mpTBLineStyleBackground(sfx2::sidebar::ControlFactory::CreateToolBoxBackground(this)),
174 mpTBLineStyle(sfx2::sidebar::ControlFactory::CreateToolBox(mpTBLineStyleBackground.get(), ScResId(TB_BORDER_LINE_STYLE))),
175
176 mpTBLineColorBackground(sfx2::sidebar::ControlFactory::CreateToolBoxBackground(this)),
177 mpTBLineColor(sfx2::sidebar::ControlFactory::CreateToolBox(mpTBLineColorBackground.get(), ScResId(TB_BORDER_LINE_COLOR))),
178 mpLineColorUpdater(new ::svx::ToolboxButtonColorUpdater(SID_FRAME_LINECOLOR, TBI_LINE_COLOR, mpTBLineColor.get(), TBX_UPDATER_MODE_CHAR_COLOR_NEW)),
179
180 mpCBXShowGrid(new CheckBox(this, ScResId(CBX_SHOW_GRID))),
181
182 maBackColorControl(SID_BACKGROUND_COLOR, *pBindings, *this),
183 maLineColorControl(SID_FRAME_LINECOLOR, *pBindings, *this),
184 maLineStyleControl(SID_FRAME_LINESTYLE, *pBindings, *this),
185 maBorderOuterControl(SID_ATTR_BORDER_OUTER, *pBindings, *this),
186 maBorderInnerControl(SID_ATTR_BORDER_INNER, *pBindings, *this),
187 maGridShowControl(SID_SCGRIDSHOW, *pBindings, *this),
188 maBorderTLBRControl(SID_ATTR_BORDER_DIAG_TLBR, *pBindings, *this),
189 maBorderBLTRControl(SID_ATTR_BORDER_DIAG_BLTR, *pBindings, *this),
190
191 maIMGBKColor(ScResId(IMG_BK_COLOR)),
192 maIMGCellBorder(ScResId(IMG_CELL_BORDER)),
193 maIMGLineColor(ScResId(IMG_LINE_COLOR)),
194 maIMGLineStyle1(ScResId(IMG_LINE_STYLE1)),
195 maIMGLineStyle2(ScResId(IMG_LINE_STYLE2)),
196 maIMGLineStyle3(ScResId(IMG_LINE_STYLE3)),
197 maIMGLineStyle4(ScResId(IMG_LINE_STYLE4)),
198 maIMGLineStyle5(ScResId(IMG_LINE_STYLE5)),
199 maIMGLineStyle6(ScResId(IMG_LINE_STYLE6)),
200 maIMGLineStyle7(ScResId(IMG_LINE_STYLE7)),
201 maIMGLineStyle8(ScResId(IMG_LINE_STYLE8)),
202 maIMGLineStyle9(ScResId(IMG_LINE_STYLE9)),
203
204 maIMGBKColorH(ScResId(IMG_BK_COLOR_H)),
205 maIMGLineStyle1H(ScResId(IMG_LINE_STYLE1_H)),
206 maIMGLineStyle2H(ScResId(IMG_LINE_STYLE2_H)),
207 maIMGLineStyle3H(ScResId(IMG_LINE_STYLE3_H)),
208 maIMGLineStyle4H(ScResId(IMG_LINE_STYLE4_H)),
209 maIMGLineStyle5H(ScResId(IMG_LINE_STYLE5_H)),
210 maIMGLineStyle6H(ScResId(IMG_LINE_STYLE6_H)),
211 maIMGLineStyle7H(ScResId(IMG_LINE_STYLE7_H)),
212 maIMGLineStyle8H(ScResId(IMG_LINE_STYLE8_H)),
213 maIMGLineStyle9H(ScResId(IMG_LINE_STYLE9_H)),
214
215 maBackColor(COL_TRANSPARENT),
216 maLineColor(COL_BLACK),
217 maTLBRColor(COL_BLACK),
218 maBLTRColor(COL_BLACK),
219 mnIn(0),
220 mnOut(0),
221 mnDis(0),
222 mnTLBRIn(0),
223 mnTLBROut(0),
224 mnTLBRDis(0),
225 mnBLTRIn(0),
226 mnBLTROut(0),
227 mnBLTRDis(0),
228 mbBackColorAvailable(true),
229 mbLineColorAvailable(true),
230 mbBorderStyleAvailable(true),
231 mbLeft(false),
232 mbRight(false),
233 mbTop(false),
234 mbBottom(false),
235 mbVer(false),
236 mbHor(false),
237 mbOuterBorder(false),
238 mbInnerBorder(false),
239 mbTLBR(false),
240 mbBLTR(false),
241
242 maFillColorPopup(this, ::boost::bind(&CellAppearancePropertyPanel::CreateFillColorPopupControl, this, _1)),
243 maLineColorPopup(this, ::boost::bind(&CellAppearancePropertyPanel::CreateLineColorPopupControl, this, _1)),
244 mpCellLineStylePopup(),
245 mpCellBorderStylePopup(),
246
247 mxFrame(rxFrame),
248 maContext(),
249 mpBindings(pBindings)
250 {
251 Initialize();
252 FreeResource();
253
254 Layouter::PrepareForLayouting(*mpFTFillColor);
255 Layouter::PrepareForLayouting(*mpFTCellBorder);
256 }
257
258 //////////////////////////////////////////////////////////////////////////////
259
~CellAppearancePropertyPanel()260 CellAppearancePropertyPanel::~CellAppearancePropertyPanel()
261 {
262 // Destroy the toolboxes, then their background windows.
263 mpTBFillColor.reset();
264 mpTBCellBorder.reset();
265 mpTBLineStyle.reset();
266 mpTBLineColor.reset();
267
268 mpTBFillColorBackground.reset();
269 mpTBCellBorderBackground.reset();
270 mpTBLineStyleBackground.reset();
271 mpTBLineColorBackground.reset();
272 }
273
274 //////////////////////////////////////////////////////////////////////////////
275
Initialize()276 void CellAppearancePropertyPanel::Initialize()
277 {
278 mpTBFillColor->SetItemImage(TBI_BK_COLOR, GetDisplayBackground().GetColor().IsDark() ? maIMGBKColorH : maIMGBKColor);
279 mpTBFillColor->SetItemBits( TBI_BK_COLOR, mpTBFillColor->GetItemBits( TBI_BK_COLOR ) | TIB_DROPDOWNONLY );
280 mpTBFillColor->SetQuickHelpText(TBI_BK_COLOR,String(ScResId(STR_QH_BK_COLOR))); //Add
281 Size aTbxSize1( mpTBFillColor->CalcWindowSizePixel() );
282 mpTBFillColor->SetOutputSizePixel( aTbxSize1 );
283 mpTBFillColor->SetBackground(Wallpaper());
284 mpTBFillColor->SetPaintTransparent(true);
285 Link aLink = LINK(this, CellAppearancePropertyPanel, TbxBKColorSelectHdl);
286 mpTBFillColor->SetDropdownClickHdl ( aLink );
287 mpTBFillColor->SetSelectHdl ( aLink );
288
289 mpTBCellBorder->SetItemImage(TBI_BORDER, maIMGCellBorder);
290 mpTBCellBorder->SetItemBits( TBI_BORDER, mpTBCellBorder->GetItemBits( TBI_BORDER ) | TIB_DROPDOWNONLY );
291 mpTBCellBorder->SetQuickHelpText(TBI_BORDER,String(ScResId(STR_QH_BORDER))); //Add
292 Size aTbxSize2( mpTBCellBorder->CalcWindowSizePixel() );
293 mpTBCellBorder->SetOutputSizePixel( aTbxSize2 );
294 mpTBCellBorder->SetBackground(Wallpaper());
295 mpTBCellBorder->SetPaintTransparent(true);
296 aLink = LINK(this, CellAppearancePropertyPanel, TbxCellBorderSelectHdl);
297 mpTBCellBorder->SetDropdownClickHdl ( aLink );
298 mpTBCellBorder->SetSelectHdl ( aLink );
299
300 mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, maIMGLineStyle1);
301 mpTBLineStyle->SetItemBits( TBI_LINE_STYLE, mpTBLineStyle->GetItemBits( TBI_LINE_STYLE ) | TIB_DROPDOWNONLY );
302 mpTBLineStyle->SetQuickHelpText(TBI_LINE_STYLE,String(ScResId(STR_QH_BORDER_LINE_STYLE))); //Add
303 Size aTbxSize3( mpTBLineStyle->CalcWindowSizePixel() );
304 mpTBLineStyle->SetOutputSizePixel( aTbxSize3 );
305 mpTBLineStyle->SetBackground(Wallpaper());
306 mpTBLineStyle->SetPaintTransparent(true);
307 aLink = LINK(this, CellAppearancePropertyPanel, TbxLineStyleSelectHdl);
308 mpTBLineStyle->SetDropdownClickHdl ( aLink );
309 mpTBLineStyle->SetSelectHdl ( aLink );
310 mpTBLineStyle->Disable();
311
312 mpTBLineColor->SetItemImage(TBI_LINE_COLOR, maIMGLineColor);
313 mpTBLineColor->SetItemBits( TBI_LINE_COLOR, mpTBLineColor->GetItemBits( TBI_LINE_COLOR ) | TIB_DROPDOWNONLY );
314 mpTBLineColor->SetQuickHelpText(TBI_LINE_COLOR,String(ScResId(STR_QH_BORDER_LINE_COLOR))); //Add
315 Size aTbxSize4( mpTBLineColor->CalcWindowSizePixel() );
316 mpTBLineColor->SetOutputSizePixel( aTbxSize4 );
317 mpTBLineColor->SetBackground(Wallpaper());
318 mpTBLineColor->SetPaintTransparent(true);
319 aLink = LINK(this, CellAppearancePropertyPanel, TbxLineColorSelectHdl);
320 mpTBLineColor->SetDropdownClickHdl ( aLink );
321 mpTBLineColor->SetSelectHdl ( aLink );
322 mpTBLineColor->Disable();
323
324 aLink = LINK(this, CellAppearancePropertyPanel, CBOXGridShowClkHdl);
325 mpCBXShowGrid->SetClickHdl ( aLink );
326
327 mpTBFillColor->SetAccessibleRelationLabeledBy(mpFTFillColor.get());
328 mpTBLineColor->SetAccessibleRelationLabeledBy(mpTBLineColor.get());
329 mpTBCellBorder->SetAccessibleRelationLabeledBy(mpFTCellBorder.get());
330 mpTBLineStyle->SetAccessibleRelationLabeledBy(mpTBLineStyle.get());
331 }
332
333 //////////////////////////////////////////////////////////////////////////////
334
IMPL_LINK(CellAppearancePropertyPanel,TbxBKColorSelectHdl,ToolBox *,pToolBox)335 IMPL_LINK(CellAppearancePropertyPanel, TbxBKColorSelectHdl, ToolBox*, pToolBox)
336 {
337 sal_uInt16 nId = pToolBox->GetCurItemId();
338 if(nId == TBI_BK_COLOR)
339 {
340 maFillColorPopup.Show(*pToolBox);
341 maFillColorPopup.SetCurrentColor(maBackColor, mbBackColorAvailable);
342 }
343 return 0;
344 }
345
346 //////////////////////////////////////////////////////////////////////////////
347
IMPL_LINK(CellAppearancePropertyPanel,TbxLineColorSelectHdl,ToolBox *,pToolBox)348 IMPL_LINK(CellAppearancePropertyPanel, TbxLineColorSelectHdl, ToolBox*, pToolBox)
349 {
350 sal_uInt16 nId = pToolBox->GetCurItemId();
351 if(nId == TBI_LINE_COLOR)
352 {
353 maLineColorPopup.Show(*pToolBox);
354 maLineColorPopup.SetCurrentColor(maLineColor, mbLineColorAvailable);
355 }
356 return 0;
357 }
358
359 //////////////////////////////////////////////////////////////////////////////
360
IMPL_LINK(CellAppearancePropertyPanel,TbxCellBorderSelectHdl,ToolBox *,pToolBox)361 IMPL_LINK(CellAppearancePropertyPanel, TbxCellBorderSelectHdl, ToolBox*, pToolBox)
362 {
363 sal_uInt16 nId = pToolBox->GetCurItemId();
364
365 if(nId == TBI_BORDER)
366 {
367 // create popup on demand
368 if(!mpCellBorderStylePopup.get())
369 {
370 mpCellBorderStylePopup.reset(
371 new CellBorderStylePopup(
372 this,
373 ::boost::bind(&CellAppearancePropertyPanel::CreateCellBorderStylePopupControl, this, _1)));
374 }
375
376 if(mpCellBorderStylePopup.get())
377 {
378 mpCellBorderStylePopup->Show(*pToolBox);
379 }
380 }
381 return 0;
382 }
383
384 //////////////////////////////////////////////////////////////////////////////
385
IMPL_LINK(CellAppearancePropertyPanel,TbxLineStyleSelectHdl,ToolBox *,pToolBox)386 IMPL_LINK(CellAppearancePropertyPanel, TbxLineStyleSelectHdl, ToolBox*, pToolBox)
387 {
388 sal_uInt16 nId = pToolBox->GetCurItemId();
389 if(nId == TBI_LINE_STYLE)
390 {
391 // create popup on demand
392 if(!mpCellLineStylePopup.get())
393 {
394 mpCellLineStylePopup.reset(
395 new CellLineStylePopup(
396 this,
397 ::boost::bind(&CellAppearancePropertyPanel::CreateCellLineStylePopupControl, this, _1)));
398 }
399
400 if(mpCellLineStylePopup.get())
401 {
402 mpCellLineStylePopup->SetLineStyleSelect(mnOut, mnIn, mnDis);
403 mpCellLineStylePopup->Show(*pToolBox);
404 }
405 }
406 return 0;
407 }
408
409 //////////////////////////////////////////////////////////////////////////////
410
IMPL_LINK(CellAppearancePropertyPanel,CBOXGridShowClkHdl,void *,EMPTYARG)411 IMPL_LINK(CellAppearancePropertyPanel, CBOXGridShowClkHdl, void*, EMPTYARG)
412 {
413 bool bState = mpCBXShowGrid->IsChecked();
414 SfxBoolItem aItem( SID_SCGRIDSHOW , bState);
415 GetBindings()->GetDispatcher()->Execute(SID_SCGRIDSHOW, SFX_CALLMODE_RECORD, &aItem, false, 0L);
416 return 0;
417 }
418
419 //////////////////////////////////////////////////////////////////////////////
420
Create(Window * pParent,const cssu::Reference<css::frame::XFrame> & rxFrame,SfxBindings * pBindings)421 CellAppearancePropertyPanel* CellAppearancePropertyPanel::Create (
422 Window* pParent,
423 const cssu::Reference<css::frame::XFrame>& rxFrame,
424 SfxBindings* pBindings)
425 {
426 if (pParent == NULL)
427 throw lang::IllegalArgumentException(A2S("no parent Window given to CellAppearancePropertyPanel::Create"), NULL, 0);
428 if ( ! rxFrame.is())
429 throw lang::IllegalArgumentException(A2S("no XFrame given to CellAppearancePropertyPanel::Create"), NULL, 1);
430 if (pBindings == NULL)
431 throw lang::IllegalArgumentException(A2S("no SfxBindings given to CellAppearancePropertyPanel::Create"), NULL, 2);
432
433 return new CellAppearancePropertyPanel(
434 pParent,
435 rxFrame,
436 pBindings);
437 }
438
439 //////////////////////////////////////////////////////////////////////////////
440
DataChanged(const DataChangedEvent & rEvent)441 void CellAppearancePropertyPanel::DataChanged(
442 const DataChangedEvent& rEvent)
443 {
444 (void)rEvent;
445 }
446
447 //////////////////////////////////////////////////////////////////////////////
448
HandleContextChange(const::sfx2::sidebar::EnumContext aContext)449 void CellAppearancePropertyPanel::HandleContextChange(
450 const ::sfx2::sidebar::EnumContext aContext)
451 {
452 if(maContext == aContext)
453 {
454 // Nothing to do.
455 return;
456 }
457
458 maContext = aContext;
459
460
461
462 // todo
463 }
464
465 //////////////////////////////////////////////////////////////////////////////
466
NotifyItemUpdate(sal_uInt16 nSID,SfxItemState eState,const SfxPoolItem * pState,const bool bIsEnabled)467 void CellAppearancePropertyPanel::NotifyItemUpdate(
468 sal_uInt16 nSID,
469 SfxItemState eState,
470 const SfxPoolItem* pState,
471 const bool bIsEnabled)
472 {
473 (void)bIsEnabled;
474
475 switch(nSID)
476 {
477 case SID_BACKGROUND_COLOR:
478 if(eState >= SFX_ITEM_DEFAULT)
479 {
480 const SvxColorItem* pSvxColorItem = dynamic_cast< const SvxColorItem* >(pState);
481
482 if(pSvxColorItem)
483 {
484 maBackColor = ((const SvxColorItem*)pState)->GetValue();
485 mbBackColorAvailable = true;
486 mpFillColorUpdater->Update(maBackColor);
487 break;
488 }
489 }
490
491 mbBackColorAvailable = false;
492 maBackColor.SetColor(COL_TRANSPARENT);
493 mpFillColorUpdater->Update(COL_TRANSPARENT);
494 break;
495 case SID_FRAME_LINECOLOR:
496 if( eState == SFX_ITEM_DONTCARE)
497 {
498 mbLineColorAvailable = true;
499 maLineColor.SetColor( COL_TRANSPARENT );
500 UpdateControlState();
501 break;
502 }
503
504 if(eState >= SFX_ITEM_DEFAULT && pState && pState->ISA(SvxColorItem) )
505 {
506 const SvxColorItem* pSvxColorItem = dynamic_cast< const SvxColorItem* >(pState);
507
508 if(pSvxColorItem)
509 {
510 maLineColor = ((const SvxColorItem*)pState)->GetValue();
511 if(maLineColor == COL_AUTO)
512 mbLineColorAvailable = false;
513 else
514 {
515 mbLineColorAvailable = true;
516 // mpLineColorUpdater->Update(maLineColor);
517 }
518
519 UpdateControlState();
520 break;
521 }
522 }
523
524 mbLineColorAvailable = false;
525 maLineColor.SetColor(COL_AUTO);
526 // mpLineColorUpdater->Update(maLineColor);
527 UpdateControlState();
528 break;
529 case SID_FRAME_LINESTYLE:
530 if( eState == SFX_ITEM_DONTCARE )
531 {
532 mbBorderStyleAvailable = true;
533 mnIn = 0;
534 mnOut = 0;
535 mnDis = 0;
536 SetStyleIcon();
537 break;
538 }
539
540 if(eState >= SFX_ITEM_DEFAULT)
541 {
542 const SvxLineItem* pSvxLineItem = dynamic_cast< const SvxLineItem* >(pState);
543
544 if(pSvxLineItem)
545 {
546 const SvxBorderLine* mbLineItem = pSvxLineItem->GetLine();
547 mnIn = mbLineItem->GetInWidth();
548 mnOut = mbLineItem->GetOutWidth();
549 mnDis = mbLineItem->GetDistance();
550
551 if(mnIn == 0 && mnOut == 0 && mnDis == 0)
552 mbBorderStyleAvailable = false;
553 else
554 mbBorderStyleAvailable = true;
555
556 SetStyleIcon();
557 break;
558 }
559 }
560
561 mbBorderStyleAvailable = false;
562 SetStyleIcon();
563 break;
564 case SID_ATTR_BORDER_OUTER:
565 if(eState >= SFX_ITEM_DEFAULT)
566 {
567 const SvxBoxItem* pBoxItem = dynamic_cast< const SvxBoxItem* >(pState);
568
569 if(pBoxItem)
570 {
571 mbLeft=false, mbRight=false, mbTop=false, mbBottom=false;
572
573 if(pBoxItem->GetLeft())
574 mbLeft = true;
575
576 if(pBoxItem->GetRight())
577 mbRight = true;
578
579 if(pBoxItem->GetTop())
580 mbTop = true;
581
582 if(pBoxItem->GetBottom())
583 mbBottom = true;
584
585 if(!Application::GetSettings().GetLayoutRTL())
586 mpCellBorderUpdater->UpdateCellBorder(mbTop, mbBottom, mbLeft, mbRight, maIMGCellBorder, mbVer, mbHor);
587 else
588 mpCellBorderUpdater->UpdateCellBorder(mbTop, mbBottom, mbRight, mbLeft, maIMGCellBorder, mbVer, mbHor);
589
590 if(mbLeft || mbRight || mbTop || mbBottom)
591 mbOuterBorder = true;
592 else
593 mbOuterBorder = false;
594
595 UpdateControlState();
596 }
597 }
598 break;
599 case SID_ATTR_BORDER_INNER:
600 if(eState >= SFX_ITEM_DEFAULT)
601 {
602 const SvxBoxInfoItem* pBoxInfoItem = dynamic_cast< const SvxBoxInfoItem* >(pState);
603
604 if(pBoxInfoItem)
605 {
606 bool bLeft(false), bRight(false), bTop(false), bBottom(false);
607
608 mbVer = false, mbHor = false;
609
610 if(!pBoxInfoItem->IsValid( VALID_VERT ) || pBoxInfoItem->GetVert())
611 mbVer = true;
612
613 if(!pBoxInfoItem->IsValid( VALID_HORI ) || pBoxInfoItem->GetHori())
614 mbHor = true;
615
616 if(!pBoxInfoItem->IsValid( VALID_LEFT ) || mbLeft)
617 bLeft = true;
618
619 if(!pBoxInfoItem->IsValid( VALID_RIGHT ) || mbRight)
620 bRight = true;
621
622 if(!pBoxInfoItem->IsValid( VALID_TOP ) || mbTop)
623 bTop = true;
624
625 if(!pBoxInfoItem->IsValid( VALID_BOTTOM ) || mbBottom)
626 bBottom = true;
627
628 if(!Application::GetSettings().GetLayoutRTL())
629 mpCellBorderUpdater->UpdateCellBorder(bTop, bBottom, bLeft, bRight, maIMGCellBorder, mbVer, mbHor);
630 else
631 mpCellBorderUpdater->UpdateCellBorder(bTop, bBottom, bRight, bLeft, maIMGCellBorder, mbVer, mbHor);
632
633 if(mbVer || mbHor || bLeft || bRight || bTop || bBottom)
634 mbInnerBorder = true;
635 else
636 mbInnerBorder = false;
637
638 UpdateControlState();
639 }
640 }
641 break;
642 case SID_ATTR_BORDER_DIAG_TLBR:
643 if( eState == SFX_ITEM_DONTCARE )
644 {
645 mbTLBR = true;
646 maTLBRColor.SetColor(COL_TRANSPARENT);
647 mnTLBRIn = mnTLBROut = mnTLBRDis = 0;
648 UpdateControlState();
649 break;
650 }
651
652 if(eState >= SFX_ITEM_DEFAULT)
653 {
654 const SvxLineItem* pItem = dynamic_cast< const SvxLineItem* >(pState);
655
656 if(pItem)
657 {
658 const SvxBorderLine* aLine = pItem->GetLine();
659
660 if(!aLine)
661 {
662 mbTLBR = false;
663 }
664 else
665 {
666 mbTLBR = true;
667 maTLBRColor = aLine->GetColor();
668 mnTLBRIn = aLine->GetInWidth();
669 mnTLBROut = aLine->GetOutWidth();
670 mnTLBRDis = aLine->GetDistance();
671
672 if(mnTLBRIn == 0 && mnTLBROut == 0 && mnTLBRDis == 0)
673 mbTLBR = false;
674 }
675
676 UpdateControlState();
677 break;
678 }
679 }
680
681 mbTLBR = false;
682 UpdateControlState();
683 break;
684 case SID_ATTR_BORDER_DIAG_BLTR:
685 if( eState == SFX_ITEM_DONTCARE )
686 {
687 mbBLTR = true;
688 maBLTRColor.SetColor( COL_TRANSPARENT );
689 mnBLTRIn = mnBLTROut = mnBLTRDis = 0;
690 UpdateControlState();
691 break;
692 }
693
694 if(eState >= SFX_ITEM_DEFAULT)
695 {
696 const SvxLineItem* pItem = dynamic_cast< const SvxLineItem* >(pState);
697
698 if(pItem)
699 {
700 const SvxBorderLine* aLine = pItem->GetLine();
701
702 if(!aLine)
703 {
704 mbBLTR = false;
705 }
706 else
707 {
708 mbBLTR = true;
709 maBLTRColor = aLine->GetColor();
710 mnBLTRIn = aLine->GetInWidth();
711 mnBLTROut = aLine->GetOutWidth();
712 mnBLTRDis = aLine->GetDistance();
713
714 if(mnBLTRIn == 0 && mnBLTROut == 0 && mnBLTRDis == 0)
715 mbBLTR = false;
716 }
717
718 UpdateControlState();
719 }
720 break;
721 }
722
723 mbBLTR = false;
724 UpdateControlState();
725 break;
726 case SID_SCGRIDSHOW:
727 if(eState >= SFX_ITEM_DEFAULT)
728 {
729 const SfxBoolItem* pItem = dynamic_cast< const SfxBoolItem* >(pState);
730
731 if(pItem)
732 {
733 const bool bVal = pItem->GetValue();
734
735 if(bVal)
736 mpCBXShowGrid->Check(true);
737 else
738 mpCBXShowGrid->Check(false);
739 }
740 }
741 break;
742 }
743 }
744
745 //////////////////////////////////////////////////////////////////////////////
746
GetBindings()747 SfxBindings* CellAppearancePropertyPanel::GetBindings()
748 {
749 return mpBindings;
750 }
751
752 //////////////////////////////////////////////////////////////////////////////
753
SetStyleIcon()754 void CellAppearancePropertyPanel::SetStyleIcon()
755 {
756 if(mnOut == DEF_LINE_WIDTH_0 && mnIn == 0 && mnDis == 0) //1
757 mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, GetDisplayBackground().GetColor().IsDark() ? maIMGLineStyle1H : maIMGLineStyle1);
758 else if(mnOut == DEF_LINE_WIDTH_2 && mnIn == 0 && mnDis == 0) //2
759 mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, GetDisplayBackground().GetColor().IsDark() ? maIMGLineStyle2H :maIMGLineStyle2);
760 else if(mnOut == DEF_LINE_WIDTH_3 && mnIn == 0 && mnDis == 0) //3
761 mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, GetDisplayBackground().GetColor().IsDark() ? maIMGLineStyle3H :maIMGLineStyle3);
762 else if(mnOut == DEF_LINE_WIDTH_4 && mnIn == 0 && mnDis == 0) //4
763 mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, GetDisplayBackground().GetColor().IsDark() ? maIMGLineStyle4H :maIMGLineStyle4);
764 else if(mnOut == DEF_DOUBLE_LINE0_OUT && mnIn == DEF_DOUBLE_LINE0_IN && mnDis == DEF_DOUBLE_LINE0_DIST) //5
765 mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, GetDisplayBackground().GetColor().IsDark() ? maIMGLineStyle5H :maIMGLineStyle5);
766 else if(mnOut == DEF_DOUBLE_LINE7_OUT && mnIn == DEF_DOUBLE_LINE7_IN && mnDis == DEF_DOUBLE_LINE7_DIST) //6
767 mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, GetDisplayBackground().GetColor().IsDark() ? maIMGLineStyle6H :maIMGLineStyle6);
768 else if(mnOut == DEF_DOUBLE_LINE4_OUT && mnIn == DEF_DOUBLE_LINE4_IN && mnDis == DEF_DOUBLE_LINE4_DIST) //7
769 mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, GetDisplayBackground().GetColor().IsDark() ? maIMGLineStyle7H :maIMGLineStyle7);
770 else if(mnOut == DEF_DOUBLE_LINE9_OUT && mnIn == DEF_DOUBLE_LINE9_IN && mnDis == DEF_DOUBLE_LINE9_DIST) //8
771 mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, GetDisplayBackground().GetColor().IsDark() ? maIMGLineStyle8H :maIMGLineStyle8);
772 else if(mnOut == DEF_DOUBLE_LINE2_OUT && mnIn == DEF_DOUBLE_LINE2_IN && mnDis == DEF_DOUBLE_LINE2_DIST) //9
773 mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, GetDisplayBackground().GetColor().IsDark() ? maIMGLineStyle9H :maIMGLineStyle9);
774 else
775 mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, GetDisplayBackground().GetColor().IsDark() ? maIMGLineStyle1H :maIMGLineStyle1);
776 }
777
778 //////////////////////////////////////////////////////////////////////////////
779
UpdateControlState()780 void CellAppearancePropertyPanel::UpdateControlState()
781 {
782 if(mbOuterBorder || mbInnerBorder || mbTLBR || mbBLTR)
783 {
784 mpTBLineColor->Enable();
785 mpTBLineStyle->Enable();
786
787 //set line color state
788 if( mbLineColorAvailable && !mbTLBR && !mbBLTR )
789 mpLineColorUpdater->Update(maLineColor);
790 else if( !mbLineColorAvailable && mbTLBR && !mbBLTR )
791 mpLineColorUpdater->Update(maTLBRColor);
792 else if ( !mbLineColorAvailable && !mbTLBR && mbBLTR )
793 mpLineColorUpdater->Update(maBLTRColor);
794 else if( !mbLineColorAvailable && mbTLBR && mbBLTR)
795 {
796 if( maTLBRColor == maBLTRColor)
797 mpLineColorUpdater->Update(maBLTRColor);
798 else
799 mpLineColorUpdater->Update(COL_TRANSPARENT);
800 }
801 else if( mbLineColorAvailable && mbTLBR && !mbBLTR )
802 {
803 if( maTLBRColor == maLineColor)
804 mpLineColorUpdater->Update(maLineColor);
805 else
806 mpLineColorUpdater->Update(COL_TRANSPARENT);
807 }
808 else if( mbLineColorAvailable && !mbTLBR && mbBLTR )
809 {
810 if( maBLTRColor == maLineColor)
811 mpLineColorUpdater->Update(maLineColor);
812 else
813 mpLineColorUpdater->Update(COL_TRANSPARENT);
814 }
815 else
816 mpLineColorUpdater->Update(COL_TRANSPARENT);
817
818 //set line style state
819 if( mbBorderStyleAvailable && !mbTLBR && !mbBLTR )
820 {
821 }
822 else if( !mbBorderStyleAvailable && mbTLBR && !mbBLTR )
823 {
824 mnIn = mnTLBRIn;
825 mnOut = mnTLBROut;
826 mnDis = mnTLBRDis;
827 }
828 else if ( !mbBorderStyleAvailable && !mbTLBR && mbBLTR )
829 {
830 mnIn = mnBLTRIn;
831 mnOut = mnBLTROut;
832 mnDis = mnBLTRDis;
833 }
834 else if( !mbBorderStyleAvailable && mbTLBR && mbBLTR)
835 {
836 if( mnTLBRIn == mnBLTRIn && mnTLBROut == mnBLTROut && mnTLBRDis == mnBLTRDis)
837 {
838 mnIn = mnTLBRIn;
839 mnOut = mnTLBROut;
840 mnDis = mnTLBRDis;
841 }
842 else
843 {
844 mnIn = 0;
845 mnOut = 0;
846 mnDis = 0;
847 }
848 }
849 else if( mbBorderStyleAvailable && mbTLBR && !mbBLTR )
850 {
851 if( mnTLBRIn != mnIn || mnTLBROut != mnOut || mnTLBRDis != mnDis)
852 {
853 mnIn = 0;
854 mnOut = 0;
855 mnDis = 0;
856 }
857 }
858 else if( mbBorderStyleAvailable && !mbTLBR && mbBLTR )
859 {
860 if( mnBLTRIn != mnIn || mnBLTROut != mnOut || mnBLTRDis != mnDis )
861 {
862 mnIn = 0;
863 mnOut = 0;
864 mnDis = 0;
865 }
866 }
867 else
868 {
869 mnIn = 0;
870 mnOut = 0;
871 mnDis = 0;
872 }
873 SetStyleIcon();
874 }
875 else
876 {
877 mpTBLineColor->Disable();
878 mpTBLineStyle->Disable();
879 }
880 }
881
882
883
884
Resize(void)885 void CellAppearancePropertyPanel::Resize (void)
886 {
887 const sal_Int32 nRight (GetSizePixel().Width() - Layouter::MapWidth(*this, TB_BORDER));
888 Layouter::SetRight(*mpFTFillColor, nRight);
889 Layouter::SetRight(*mpFTCellBorder, nRight);
890 Layouter::SetRight(*mpCBXShowGrid, nRight);
891 }
892
893
894
895 }} // end of namespace ::sc::sidebar
896
897 //////////////////////////////////////////////////////////////////////////////
898 // eof
899