Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #include <sfx2/sidebar/ResourceDefinitions.hrc>
21 : #include <sfx2/sidebar/Theme.hxx>
22 : #include <sfx2/sidebar/ControlFactory.hxx>
23 : #include "CellAppearancePropertyPanel.hxx"
24 : #include <CellAppearancePropertyPanel.hrc>
25 : #include "sc.hrc"
26 : #include "scresid.hxx"
27 : #include <sfx2/bindings.hxx>
28 : #include <sfx2/dispatch.hxx>
29 : #include <vcl/fixed.hxx>
30 : #include <svx/tbxcolorupdate.hxx>
31 : #include <svl/eitem.hxx>
32 : #include <editeng/borderline.hxx>
33 : #include <editeng/boxitem.hxx>
34 : #include <editeng/colritem.hxx>
35 : #include <editeng/lineitem.hxx>
36 : #include <vcl/svapp.hxx>
37 : #include <vcl/settings.hxx>
38 : #include <svx/sidebar/ColorControl.hxx>
39 : #include <boost/bind.hpp>
40 : #include <svx/sidebar/PopupContainer.hxx>
41 : #include "CellLineStyleControl.hxx"
42 : #include "CellLineStylePopup.hxx"
43 : #include "CellBorderUpdater.hxx"
44 : #include "CellBorderStyleControl.hxx"
45 : #include "CellBorderStylePopup.hxx"
46 :
47 : using namespace css;
48 : using namespace css::uno;
49 :
50 : const char UNO_SETBORDERSTYLE[] = ".uno:SetBorderStyle";
51 : const char UNO_LINESTYLE[] = ".uno:LineStyle";
52 : const char UNO_FRAMELINECOLOR[] = ".uno:FrameLineColor";
53 :
54 : // helpers
55 :
56 : namespace
57 : {
58 0 : Color GetTransparentColor(void)
59 : {
60 0 : return COL_TRANSPARENT;
61 : }
62 : } // end of anonymous namespace
63 :
64 : // namespace open
65 :
66 : namespace sc { namespace sidebar {
67 :
68 0 : svx::sidebar::PopupControl* CellAppearancePropertyPanel::CreateLineColorPopupControl(svx::sidebar::PopupContainer* pParent)
69 : {
70 : return new svx::sidebar::ColorControl(
71 : pParent,
72 : mpBindings,
73 : ScResId(RID_POPUPPANEL_CELLAPPEARANCE_LINECOLOR),
74 : ScResId(VS_LINECOLOR),
75 : ::boost::bind(GetTransparentColor),
76 : ::boost::bind(&CellAppearancePropertyPanel::SetLineColor, this, _1, _2),
77 : pParent,
78 0 : 0);
79 : }
80 :
81 0 : void CellAppearancePropertyPanel::SetLineColor(
82 : const OUString& /*rsColorName*/,
83 : const Color aColor)
84 : {
85 0 : const SvxColorItem aColorItem(aColor, SID_FRAME_LINECOLOR);
86 0 : mpBindings->GetDispatcher()->Execute(SID_FRAME_LINECOLOR, SfxCallMode::RECORD, &aColorItem, 0L);
87 0 : maLineColor = aColor;
88 0 : }
89 :
90 0 : svx::sidebar::PopupControl* CellAppearancePropertyPanel::CreateCellLineStylePopupControl(svx::sidebar::PopupContainer* pParent)
91 : {
92 0 : return new CellLineStyleControl(pParent, *this);
93 : }
94 :
95 0 : void CellAppearancePropertyPanel::EndCellLineStylePopupMode(void)
96 : {
97 0 : if(mpCellLineStylePopup.get())
98 : {
99 0 : mpCellLineStylePopup->Hide();
100 : }
101 0 : }
102 :
103 0 : svx::sidebar::PopupControl* CellAppearancePropertyPanel::CreateCellBorderStylePopupControl(svx::sidebar::PopupContainer* pParent)
104 : {
105 0 : return new CellBorderStyleControl(pParent, *this);
106 : }
107 :
108 0 : void CellAppearancePropertyPanel::EndCellBorderStylePopupMode(void)
109 : {
110 0 : if(mpCellBorderStylePopup.get())
111 : {
112 0 : mpCellBorderStylePopup->Hide();
113 : }
114 0 : }
115 :
116 0 : CellAppearancePropertyPanel::CellAppearancePropertyPanel(
117 : vcl::Window* pParent,
118 : const css::uno::Reference<css::frame::XFrame>& rxFrame,
119 : SfxBindings* pBindings)
120 : : PanelLayout(pParent, "CellAppearancePropertyPanel", "modules/scalc/ui/sidebarcellappearance.ui", rxFrame),
121 :
122 : maLineColorControl(SID_FRAME_LINECOLOR, *pBindings, *this),
123 : maLineStyleControl(SID_FRAME_LINESTYLE, *pBindings, *this),
124 : maBorderOuterControl(SID_ATTR_BORDER_OUTER, *pBindings, *this),
125 : maBorderInnerControl(SID_ATTR_BORDER_INNER, *pBindings, *this),
126 : maGridShowControl(FID_TAB_TOGGLE_GRID, *pBindings, *this),
127 : maBorderTLBRControl(SID_ATTR_BORDER_DIAG_TLBR, *pBindings, *this),
128 : maBorderBLTRControl(SID_ATTR_BORDER_DIAG_BLTR, *pBindings, *this),
129 :
130 : maIMGCellBorder(ScResId(IMG_CELL_BORDER)),
131 : maIMGLineStyle1(ScResId(IMG_LINE_STYLE1)),
132 : maIMGLineStyle2(ScResId(IMG_LINE_STYLE2)),
133 : maIMGLineStyle3(ScResId(IMG_LINE_STYLE3)),
134 : maIMGLineStyle4(ScResId(IMG_LINE_STYLE4)),
135 : maIMGLineStyle5(ScResId(IMG_LINE_STYLE5)),
136 : maIMGLineStyle6(ScResId(IMG_LINE_STYLE6)),
137 : maIMGLineStyle7(ScResId(IMG_LINE_STYLE7)),
138 : maIMGLineStyle8(ScResId(IMG_LINE_STYLE8)),
139 : maIMGLineStyle9(ScResId(IMG_LINE_STYLE9)),
140 :
141 : maLineColor(COL_BLACK),
142 : maTLBRColor(COL_BLACK),
143 : maBLTRColor(COL_BLACK),
144 : mnIn(0),
145 : mnOut(0),
146 : mnDis(0),
147 : mnTLBRIn(0),
148 : mnTLBROut(0),
149 : mnTLBRDis(0),
150 : mnBLTRIn(0),
151 : mnBLTROut(0),
152 : mnBLTRDis(0),
153 : mbLineColorAvailable(true),
154 : mbBorderStyleAvailable(true),
155 : mbLeft(false),
156 : mbRight(false),
157 : mbTop(false),
158 : mbBottom(false),
159 : mbVer(false),
160 : mbHor(false),
161 : mbOuterBorder(false),
162 : mbInnerBorder(false),
163 : mbTLBR(false),
164 : mbBLTR(false),
165 :
166 : maLineColorPopup(this, ::boost::bind(&CellAppearancePropertyPanel::CreateLineColorPopupControl, this, _1)),
167 : mpCellLineStylePopup(),
168 : mpCellBorderStylePopup(),
169 :
170 : mxFrame(rxFrame),
171 : maContext(),
172 0 : mpBindings(pBindings)
173 : {
174 0 : get(mpTBCellBorder, "cellbordertype");
175 0 : get(mpTBLineStyle, "borderlinestyle");
176 0 : get(mpTBLineColor, "borderlinecolor");
177 0 : get(mpCBXShowGrid, "cellgridlines");
178 :
179 : mpLineColorUpdater.reset( new ::svx::ToolboxButtonColorUpdater(SID_FRAME_LINECOLOR,
180 0 : mpTBLineColor->GetItemId( UNO_FRAMELINECOLOR ),
181 0 : mpTBLineColor) );
182 : mpCellBorderUpdater.reset( new CellBorderUpdater(
183 0 : mpTBCellBorder->GetItemId( UNO_SETBORDERSTYLE ), *mpTBCellBorder) );
184 :
185 0 : Initialize();
186 0 : }
187 :
188 0 : CellAppearancePropertyPanel::~CellAppearancePropertyPanel()
189 : {
190 0 : }
191 :
192 0 : void CellAppearancePropertyPanel::Initialize()
193 : {
194 0 : const sal_uInt16 nIdBorderType = mpTBCellBorder->GetItemId( UNO_SETBORDERSTYLE );
195 0 : mpTBCellBorder->SetItemImage( nIdBorderType, maIMGCellBorder );
196 0 : mpTBCellBorder->SetItemBits( nIdBorderType, mpTBCellBorder->GetItemBits( nIdBorderType ) | ToolBoxItemBits::DROPDOWNONLY );
197 0 : Link aLink = LINK(this, CellAppearancePropertyPanel, TbxCellBorderSelectHdl);
198 0 : mpTBCellBorder->SetDropdownClickHdl ( aLink );
199 0 : mpTBCellBorder->SetSelectHdl ( aLink );
200 :
201 0 : const sal_uInt16 nIdBorderLineStyle = mpTBLineStyle->GetItemId( UNO_LINESTYLE );
202 0 : mpTBLineStyle->SetItemImage( nIdBorderLineStyle, maIMGLineStyle1 );
203 0 : mpTBLineStyle->SetItemBits( nIdBorderLineStyle, mpTBLineStyle->GetItemBits( nIdBorderLineStyle ) | ToolBoxItemBits::DROPDOWNONLY );
204 0 : aLink = LINK(this, CellAppearancePropertyPanel, TbxLineStyleSelectHdl);
205 0 : mpTBLineStyle->SetDropdownClickHdl ( aLink );
206 0 : mpTBLineStyle->SetSelectHdl ( aLink );
207 0 : mpTBLineStyle->Disable();
208 :
209 0 : const sal_uInt16 nIdBorderLinecolor = mpTBLineColor->GetItemId( UNO_FRAMELINECOLOR );
210 0 : mpTBLineColor->SetItemBits( nIdBorderLinecolor, mpTBLineColor->GetItemBits( nIdBorderLinecolor ) | ToolBoxItemBits::DROPDOWNONLY );
211 0 : aLink = LINK(this, CellAppearancePropertyPanel, TbxLineColorSelectHdl);
212 0 : mpTBLineColor->SetDropdownClickHdl ( aLink );
213 0 : mpTBLineColor->SetSelectHdl ( aLink );
214 0 : mpTBLineColor->Disable();
215 :
216 0 : aLink = LINK(this, CellAppearancePropertyPanel, CBOXGridShowClkHdl);
217 0 : mpCBXShowGrid->SetClickHdl ( aLink );
218 :
219 0 : mpTBLineColor->SetAccessibleRelationLabeledBy(mpTBLineColor);
220 0 : mpTBLineStyle->SetAccessibleRelationLabeledBy(mpTBLineStyle);
221 0 : }
222 :
223 0 : IMPL_LINK(CellAppearancePropertyPanel, TbxLineColorSelectHdl, ToolBox*, pToolBox)
224 : {
225 0 : const OUString aCommand(pToolBox->GetItemCommand(pToolBox->GetCurItemId()));
226 :
227 0 : if(aCommand == UNO_FRAMELINECOLOR)
228 : {
229 0 : maLineColorPopup.Show(*pToolBox);
230 0 : maLineColorPopup.SetCurrentColor(maLineColor, mbLineColorAvailable);
231 : }
232 0 : return 0;
233 : }
234 :
235 0 : IMPL_LINK(CellAppearancePropertyPanel, TbxCellBorderSelectHdl, ToolBox*, pToolBox)
236 : {
237 0 : const OUString aCommand(pToolBox->GetItemCommand(pToolBox->GetCurItemId()));
238 :
239 0 : if(aCommand == UNO_SETBORDERSTYLE)
240 : {
241 : // create popup on demand
242 0 : if(!mpCellBorderStylePopup.get())
243 : {
244 : mpCellBorderStylePopup.reset(
245 : new CellBorderStylePopup(
246 : this,
247 0 : ::boost::bind(&CellAppearancePropertyPanel::CreateCellBorderStylePopupControl, this, _1)));
248 : }
249 :
250 0 : if(mpCellBorderStylePopup.get())
251 : {
252 0 : mpCellBorderStylePopup->Show(*pToolBox);
253 : }
254 : }
255 0 : return 0;
256 : }
257 :
258 0 : IMPL_LINK(CellAppearancePropertyPanel, TbxLineStyleSelectHdl, ToolBox*, pToolBox)
259 : {
260 0 : const OUString aCommand(pToolBox->GetItemCommand(pToolBox->GetCurItemId()));
261 :
262 0 : if(aCommand == UNO_LINESTYLE)
263 : {
264 : // create popup on demand
265 0 : if(!mpCellLineStylePopup.get())
266 : {
267 : mpCellLineStylePopup.reset(
268 : new CellLineStylePopup(
269 : this,
270 0 : ::boost::bind(&CellAppearancePropertyPanel::CreateCellLineStylePopupControl, this, _1)));
271 : }
272 :
273 0 : if(mpCellLineStylePopup.get())
274 : {
275 0 : mpCellLineStylePopup->SetLineStyleSelect(mnOut, mnIn, mnDis);
276 0 : mpCellLineStylePopup->Show(*pToolBox);
277 : }
278 : }
279 0 : return 0;
280 : }
281 :
282 0 : IMPL_LINK(CellAppearancePropertyPanel, CBOXGridShowClkHdl, void*, EMPTYARG)
283 : {
284 0 : bool bState = mpCBXShowGrid->IsChecked();
285 0 : SfxBoolItem aItem( FID_TAB_TOGGLE_GRID , bState);
286 0 : GetBindings()->GetDispatcher()->Execute(FID_TAB_TOGGLE_GRID, SfxCallMode::RECORD, &aItem, 0L);
287 0 : return 0;
288 : }
289 :
290 0 : CellAppearancePropertyPanel* CellAppearancePropertyPanel::Create (
291 : vcl::Window* pParent,
292 : const css::uno::Reference<css::frame::XFrame>& rxFrame,
293 : SfxBindings* pBindings)
294 : {
295 0 : if (pParent == NULL)
296 0 : throw lang::IllegalArgumentException("no parent Window given to CellAppearancePropertyPanel::Create", NULL, 0);
297 0 : if ( ! rxFrame.is())
298 0 : throw lang::IllegalArgumentException("no XFrame given to CellAppearancePropertyPanel::Create", NULL, 1);
299 0 : if (pBindings == NULL)
300 0 : throw lang::IllegalArgumentException("no SfxBindings given to CellAppearancePropertyPanel::Create", NULL, 2);
301 :
302 : return new CellAppearancePropertyPanel(
303 : pParent,
304 : rxFrame,
305 0 : pBindings);
306 : }
307 :
308 0 : void CellAppearancePropertyPanel::DataChanged(
309 : const DataChangedEvent& rEvent)
310 : {
311 : (void)rEvent;
312 0 : }
313 :
314 0 : void CellAppearancePropertyPanel::HandleContextChange(
315 : const ::sfx2::sidebar::EnumContext aContext)
316 : {
317 0 : if(maContext == aContext)
318 : {
319 : // Nothing to do.
320 0 : return;
321 : }
322 :
323 0 : maContext = aContext;
324 :
325 : // todo
326 : }
327 :
328 0 : void CellAppearancePropertyPanel::NotifyItemUpdate(
329 : sal_uInt16 nSID,
330 : SfxItemState eState,
331 : const SfxPoolItem* pState,
332 : const bool bIsEnabled)
333 : {
334 : (void)bIsEnabled;
335 :
336 0 : switch(nSID)
337 : {
338 : case SID_FRAME_LINECOLOR:
339 0 : if( eState == SfxItemState::DONTCARE)
340 : {
341 0 : mbLineColorAvailable = true;
342 0 : maLineColor.SetColor( COL_TRANSPARENT );
343 0 : UpdateControlState();
344 0 : break;
345 : }
346 :
347 0 : if(eState >= SfxItemState::DEFAULT && pState && pState->ISA(SvxColorItem) )
348 : {
349 0 : const SvxColorItem* pSvxColorItem = dynamic_cast< const SvxColorItem* >(pState);
350 :
351 0 : if(pSvxColorItem)
352 : {
353 0 : maLineColor = static_cast<const SvxColorItem*>(pState)->GetValue();
354 0 : if(maLineColor == COL_AUTO)
355 0 : mbLineColorAvailable = false;
356 : else
357 : {
358 0 : mbLineColorAvailable = true;
359 : // mpLineColorUpdater->Update(maLineColor);
360 : }
361 :
362 0 : UpdateControlState();
363 0 : break;
364 : }
365 : }
366 :
367 0 : mbLineColorAvailable = false;
368 0 : maLineColor.SetColor(COL_AUTO);
369 : // mpLineColorUpdater->Update(maLineColor);
370 0 : UpdateControlState();
371 0 : break;
372 : case SID_FRAME_LINESTYLE:
373 0 : if( eState == SfxItemState::DONTCARE )
374 : {
375 0 : mbBorderStyleAvailable = true;
376 0 : mnIn = 0;
377 0 : mnOut = 0;
378 0 : mnDis = 0;
379 0 : SetStyleIcon();
380 0 : break;
381 : }
382 :
383 0 : if(eState >= SfxItemState::DEFAULT)
384 : {
385 0 : const SvxLineItem* pSvxLineItem = dynamic_cast< const SvxLineItem* >(pState);
386 :
387 0 : if(pSvxLineItem)
388 : {
389 0 : const editeng::SvxBorderLine* mbLineItem = pSvxLineItem->GetLine();
390 0 : mnIn = mbLineItem->GetInWidth();
391 0 : mnOut = mbLineItem->GetOutWidth();
392 0 : mnDis = mbLineItem->GetDistance();
393 :
394 0 : if(mnIn == 0 && mnOut == 0 && mnDis == 0)
395 0 : mbBorderStyleAvailable = false;
396 : else
397 0 : mbBorderStyleAvailable = true;
398 :
399 0 : SetStyleIcon();
400 0 : break;
401 : }
402 : }
403 :
404 0 : mbBorderStyleAvailable = false;
405 0 : SetStyleIcon();
406 0 : break;
407 : case SID_ATTR_BORDER_OUTER:
408 0 : if(eState >= SfxItemState::DEFAULT)
409 : {
410 0 : const SvxBoxItem* pBoxItem = dynamic_cast< const SvxBoxItem* >(pState);
411 :
412 0 : if(pBoxItem)
413 : {
414 0 : mbLeft=false, mbRight=false, mbTop=false, mbBottom=false;
415 :
416 0 : if(pBoxItem->GetLeft())
417 0 : mbLeft = true;
418 :
419 0 : if(pBoxItem->GetRight())
420 0 : mbRight = true;
421 :
422 0 : if(pBoxItem->GetTop())
423 0 : mbTop = true;
424 :
425 0 : if(pBoxItem->GetBottom())
426 0 : mbBottom = true;
427 :
428 0 : if(!Application::GetSettings().GetLayoutRTL())
429 0 : mpCellBorderUpdater->UpdateCellBorder(mbTop, mbBottom, mbLeft, mbRight, maIMGCellBorder, mbVer, mbHor);
430 : else
431 0 : mpCellBorderUpdater->UpdateCellBorder(mbTop, mbBottom, mbRight, mbLeft, maIMGCellBorder, mbVer, mbHor);
432 :
433 0 : if(mbLeft || mbRight || mbTop || mbBottom)
434 0 : mbOuterBorder = true;
435 : else
436 0 : mbOuterBorder = false;
437 :
438 0 : UpdateControlState();
439 : }
440 : }
441 0 : break;
442 : case SID_ATTR_BORDER_INNER:
443 0 : if(eState >= SfxItemState::DEFAULT)
444 : {
445 0 : const SvxBoxInfoItem* pBoxInfoItem = dynamic_cast< const SvxBoxInfoItem* >(pState);
446 :
447 0 : if(pBoxInfoItem)
448 : {
449 0 : bool bLeft(false), bRight(false), bTop(false), bBottom(false);
450 :
451 0 : mbVer = false, mbHor = false;
452 :
453 0 : if(!pBoxInfoItem->IsValid( VALID_VERT ) || pBoxInfoItem->GetVert())
454 0 : mbVer = true;
455 :
456 0 : if(!pBoxInfoItem->IsValid( VALID_HORI ) || pBoxInfoItem->GetHori())
457 0 : mbHor = true;
458 :
459 0 : if(!pBoxInfoItem->IsValid( VALID_LEFT ) || mbLeft)
460 0 : bLeft = true;
461 :
462 0 : if(!pBoxInfoItem->IsValid( VALID_RIGHT ) || mbRight)
463 0 : bRight = true;
464 :
465 0 : if(!pBoxInfoItem->IsValid( VALID_TOP ) || mbTop)
466 0 : bTop = true;
467 :
468 0 : if(!pBoxInfoItem->IsValid( VALID_BOTTOM ) || mbBottom)
469 0 : bBottom = true;
470 :
471 0 : if(!Application::GetSettings().GetLayoutRTL())
472 0 : mpCellBorderUpdater->UpdateCellBorder(bTop, bBottom, bLeft, bRight, maIMGCellBorder, mbVer, mbHor);
473 : else
474 0 : mpCellBorderUpdater->UpdateCellBorder(bTop, bBottom, bRight, bLeft, maIMGCellBorder, mbVer, mbHor);
475 :
476 0 : if(mbVer || mbHor || bLeft || bRight || bTop || bBottom)
477 0 : mbInnerBorder = true;
478 : else
479 0 : mbInnerBorder = false;
480 :
481 0 : UpdateControlState();
482 : }
483 : }
484 0 : break;
485 : case SID_ATTR_BORDER_DIAG_TLBR:
486 0 : if( eState == SfxItemState::DONTCARE )
487 : {
488 0 : mbTLBR = true;
489 0 : maTLBRColor.SetColor(COL_TRANSPARENT);
490 0 : mnTLBRIn = mnTLBROut = mnTLBRDis = 0;
491 0 : UpdateControlState();
492 0 : break;
493 : }
494 :
495 0 : if(eState >= SfxItemState::DEFAULT)
496 : {
497 0 : const SvxLineItem* pItem = dynamic_cast< const SvxLineItem* >(pState);
498 :
499 0 : if(pItem)
500 : {
501 0 : const editeng::SvxBorderLine* aLine = pItem->GetLine();
502 :
503 0 : if(!aLine)
504 : {
505 0 : mbTLBR = false;
506 : }
507 : else
508 : {
509 0 : mbTLBR = true;
510 0 : maTLBRColor = aLine->GetColor();
511 0 : mnTLBRIn = aLine->GetInWidth();
512 0 : mnTLBROut = aLine->GetOutWidth();
513 0 : mnTLBRDis = aLine->GetDistance();
514 :
515 0 : if(mnTLBRIn == 0 && mnTLBROut == 0 && mnTLBRDis == 0)
516 0 : mbTLBR = false;
517 : }
518 :
519 0 : UpdateControlState();
520 0 : break;
521 : }
522 : }
523 :
524 0 : mbTLBR = false;
525 0 : UpdateControlState();
526 0 : break;
527 : case SID_ATTR_BORDER_DIAG_BLTR:
528 0 : if( eState == SfxItemState::DONTCARE )
529 : {
530 0 : mbBLTR = true;
531 0 : maBLTRColor.SetColor( COL_TRANSPARENT );
532 0 : mnBLTRIn = mnBLTROut = mnBLTRDis = 0;
533 0 : UpdateControlState();
534 0 : break;
535 : }
536 :
537 0 : if(eState >= SfxItemState::DEFAULT)
538 : {
539 0 : const SvxLineItem* pItem = dynamic_cast< const SvxLineItem* >(pState);
540 :
541 0 : if(pItem)
542 : {
543 0 : const editeng::SvxBorderLine* aLine = pItem->GetLine();
544 :
545 0 : if(!aLine)
546 : {
547 0 : mbBLTR = false;
548 : }
549 : else
550 : {
551 0 : mbBLTR = true;
552 0 : maBLTRColor = aLine->GetColor();
553 0 : mnBLTRIn = aLine->GetInWidth();
554 0 : mnBLTROut = aLine->GetOutWidth();
555 0 : mnBLTRDis = aLine->GetDistance();
556 :
557 0 : if(mnBLTRIn == 0 && mnBLTROut == 0 && mnBLTRDis == 0)
558 0 : mbBLTR = false;
559 : }
560 :
561 0 : UpdateControlState();
562 : }
563 0 : break;
564 : }
565 :
566 0 : mbBLTR = false;
567 0 : UpdateControlState();
568 0 : break;
569 : case FID_TAB_TOGGLE_GRID:
570 0 : if(eState >= SfxItemState::DEFAULT)
571 : {
572 0 : const SfxBoolItem* pItem = dynamic_cast< const SfxBoolItem* >(pState);
573 :
574 0 : if(pItem)
575 : {
576 0 : const bool bVal = pItem->GetValue();
577 :
578 0 : if(bVal)
579 0 : mpCBXShowGrid->Check(true);
580 : else
581 0 : mpCBXShowGrid->Check(false);
582 : }
583 : }
584 0 : break;
585 : }
586 0 : }
587 :
588 0 : void CellAppearancePropertyPanel::SetStyleIcon()
589 : {
590 0 : const sal_uInt16 nIdBorderLineStyle = mpTBLineStyle->GetItemId( UNO_LINESTYLE );
591 :
592 : //FIXME: update for new line border possibilities
593 0 : if(mnOut == DEF_LINE_WIDTH_0 && mnIn == 0 && mnDis == 0) //1
594 0 : mpTBLineStyle->SetItemImage(nIdBorderLineStyle, maIMGLineStyle1);
595 0 : else if(mnOut == DEF_LINE_WIDTH_2 && mnIn == 0 && mnDis == 0) //2
596 0 : mpTBLineStyle->SetItemImage(nIdBorderLineStyle, maIMGLineStyle2);
597 0 : else if(mnOut == DEF_LINE_WIDTH_3 && mnIn == 0 && mnDis == 0) //3
598 0 : mpTBLineStyle->SetItemImage(nIdBorderLineStyle, maIMGLineStyle3);
599 0 : else if(mnOut == DEF_LINE_WIDTH_4 && mnIn == 0 && mnDis == 0) //4
600 0 : mpTBLineStyle->SetItemImage(nIdBorderLineStyle, maIMGLineStyle4);
601 0 : else if(mnOut == DEF_LINE_WIDTH_0 && mnIn == DEF_LINE_WIDTH_0 && mnDis == DEF_LINE_WIDTH_1) //5
602 0 : mpTBLineStyle->SetItemImage(nIdBorderLineStyle, maIMGLineStyle5);
603 0 : else if(mnOut == DEF_LINE_WIDTH_0 && mnIn == DEF_LINE_WIDTH_0 && mnDis == DEF_LINE_WIDTH_2) //6
604 0 : mpTBLineStyle->SetItemImage(nIdBorderLineStyle, maIMGLineStyle6);
605 0 : else if(mnOut == DEF_LINE_WIDTH_1 && mnIn == DEF_LINE_WIDTH_2 && mnDis == DEF_LINE_WIDTH_1) //7
606 0 : mpTBLineStyle->SetItemImage(nIdBorderLineStyle, maIMGLineStyle7);
607 0 : else if(mnOut == DEF_LINE_WIDTH_2 && mnIn == DEF_LINE_WIDTH_0 && mnDis == DEF_LINE_WIDTH_2) //8
608 0 : mpTBLineStyle->SetItemImage(nIdBorderLineStyle, maIMGLineStyle8);
609 0 : else if(mnOut == DEF_LINE_WIDTH_2 && mnIn == DEF_LINE_WIDTH_2 && mnDis == DEF_LINE_WIDTH_2) //9
610 0 : mpTBLineStyle->SetItemImage(nIdBorderLineStyle, maIMGLineStyle9);
611 : else
612 0 : mpTBLineStyle->SetItemImage(nIdBorderLineStyle, maIMGLineStyle1);
613 0 : }
614 :
615 0 : void CellAppearancePropertyPanel::UpdateControlState()
616 : {
617 0 : if(mbOuterBorder || mbInnerBorder || mbTLBR || mbBLTR)
618 : {
619 0 : mpTBLineColor->Enable();
620 0 : mpTBLineStyle->Enable();
621 :
622 : //set line color state
623 0 : if( mbLineColorAvailable && !mbTLBR && !mbBLTR )
624 0 : mpLineColorUpdater->Update(maLineColor);
625 0 : else if( !mbLineColorAvailable && mbTLBR && !mbBLTR )
626 0 : mpLineColorUpdater->Update(maTLBRColor);
627 0 : else if ( !mbLineColorAvailable && !mbTLBR && mbBLTR )
628 0 : mpLineColorUpdater->Update(maBLTRColor);
629 0 : else if( !mbLineColorAvailable && mbTLBR && mbBLTR)
630 : {
631 0 : if( maTLBRColor == maBLTRColor)
632 0 : mpLineColorUpdater->Update(maBLTRColor);
633 : else
634 0 : mpLineColorUpdater->Update(COL_TRANSPARENT);
635 : }
636 0 : else if( mbLineColorAvailable && mbTLBR && !mbBLTR )
637 : {
638 0 : if( maTLBRColor == maLineColor)
639 0 : mpLineColorUpdater->Update(maLineColor);
640 : else
641 0 : mpLineColorUpdater->Update(COL_TRANSPARENT);
642 : }
643 0 : else if( mbLineColorAvailable && !mbTLBR && mbBLTR )
644 : {
645 0 : if( maBLTRColor == maLineColor)
646 0 : mpLineColorUpdater->Update(maLineColor);
647 : else
648 0 : mpLineColorUpdater->Update(COL_TRANSPARENT);
649 : }
650 : else
651 0 : mpLineColorUpdater->Update(COL_TRANSPARENT);
652 :
653 : //set line style state
654 0 : if( mbBorderStyleAvailable && !mbTLBR && !mbBLTR )
655 : {
656 : }
657 0 : else if( !mbBorderStyleAvailable && mbTLBR && !mbBLTR )
658 : {
659 0 : mnIn = mnTLBRIn;
660 0 : mnOut = mnTLBROut;
661 0 : mnDis = mnTLBRDis;
662 : }
663 0 : else if ( !mbBorderStyleAvailable && !mbTLBR && mbBLTR )
664 : {
665 0 : mnIn = mnBLTRIn;
666 0 : mnOut = mnBLTROut;
667 0 : mnDis = mnBLTRDis;
668 : }
669 0 : else if( !mbBorderStyleAvailable && mbTLBR && mbBLTR)
670 : {
671 0 : if( mnTLBRIn == mnBLTRIn && mnTLBROut == mnBLTROut && mnTLBRDis == mnBLTRDis)
672 : {
673 0 : mnIn = mnTLBRIn;
674 0 : mnOut = mnTLBROut;
675 0 : mnDis = mnTLBRDis;
676 : }
677 : else
678 : {
679 0 : mnIn = 0;
680 0 : mnOut = 0;
681 0 : mnDis = 0;
682 : }
683 : }
684 0 : else if( mbBorderStyleAvailable && mbTLBR && !mbBLTR )
685 : {
686 0 : if( mnTLBRIn != mnIn || mnTLBROut != mnOut || mnTLBRDis != mnDis)
687 : {
688 0 : mnIn = 0;
689 0 : mnOut = 0;
690 0 : mnDis = 0;
691 : }
692 : }
693 0 : else if( mbBorderStyleAvailable && !mbTLBR && mbBLTR )
694 : {
695 0 : if( mnBLTRIn != mnIn || mnBLTROut != mnOut || mnBLTRDis != mnDis )
696 : {
697 0 : mnIn = 0;
698 0 : mnOut = 0;
699 0 : mnDis = 0;
700 : }
701 : }
702 : else
703 : {
704 0 : mnIn = 0;
705 0 : mnOut = 0;
706 0 : mnDis = 0;
707 : }
708 0 : SetStyleIcon();
709 : }
710 : else
711 : {
712 0 : mpTBLineColor->Disable();
713 0 : mpTBLineStyle->Disable();
714 : }
715 0 : }
716 :
717 : // namespace close
718 :
719 228 : }} // end of namespace ::sc::sidebar
720 :
721 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|