LCOV - code coverage report
Current view: top level - svx/source/sidebar/line - LinePropertyPanel.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 179 482 37.1 %
Date: 2015-06-13 12:38:46 Functions: 12 36 33.3 %
Legend: Lines: hit not hit

          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             : #include <sfx2/sidebar/ResourceDefinitions.hrc>
      20             : #include <sfx2/sidebar/Theme.hxx>
      21             : #include <sfx2/sidebar/ControlFactory.hxx>
      22             : #include <LinePropertyPanel.hxx>
      23             : #include <LinePropertyPanel.hrc>
      24             : #include <svx/dialogs.hrc>
      25             : #include <svx/dialmgr.hxx>
      26             : #include <sfx2/objsh.hxx>
      27             : #include <sfx2/bindings.hxx>
      28             : #include <sfx2/dispatch.hxx>
      29             : #include <svx/xtable.hxx>
      30             : #include <svx/xdash.hxx>
      31             : #include <svx/drawitem.hxx>
      32             : #include <svx/svxitems.hrc>
      33             : #include <svtools/valueset.hxx>
      34             : #include <unotools/pathoptions.hxx>
      35             : #include <unotools/viewoptions.hxx>
      36             : #include <comphelper/processfactory.hxx>
      37             : #include <i18nlangtag/mslangid.hxx>
      38             : #include <svx/xlineit0.hxx>
      39             : #include <svx/xlndsit.hxx>
      40             : #include <vcl/svapp.hxx>
      41             : #include <svx/xlnwtit.hxx>
      42             : #include <vcl/lstbox.hxx>
      43             : #include <vcl/toolbox.hxx>
      44             : #include <svx/xlntrit.hxx>
      45             : #include <svx/xlnstit.hxx>
      46             : #include <svx/xlnedit.hxx>
      47             : #include <svx/xlncapit.hxx>
      48             : #include <svx/xlinjoit.hxx>
      49             : #include "svx/sidebar/PopupContainer.hxx"
      50             : #include "svx/sidebar/PopupControl.hxx"
      51             : #include "LineWidthControl.hxx"
      52             : #include <boost/bind.hpp>
      53             : 
      54             : using namespace css;
      55             : using namespace css::uno;
      56             : using sfx2::sidebar::Theme;
      57             : 
      58             : const char UNO_SELECTWIDTH[] = ".uno:SelectWidth";
      59             : 
      60             : namespace
      61             : {
      62             : 
      63           1 : void FillLineEndListBox(ListBox& rListBoxStart, ListBox& rListBoxEnd, const XLineEndList& rList)
      64             : {
      65           1 :     const sal_uInt32 nCount(rList.Count());
      66           1 :     const OUString sNone(SVX_RESSTR(RID_SVXSTR_NONE));
      67             : 
      68           1 :     rListBoxStart.SetUpdateMode(false);
      69           1 :     rListBoxEnd.SetUpdateMode(false);
      70             : 
      71           1 :     rListBoxStart.Clear();
      72           1 :     rListBoxEnd.Clear();
      73             : 
      74             :     // add 'none' entries
      75           1 :     rListBoxStart.InsertEntry(sNone);
      76           1 :     rListBoxEnd.InsertEntry(sNone);
      77             : 
      78          21 :     for(sal_uInt32 i(0); i < nCount; i++)
      79             :     {
      80          20 :         XLineEndEntry* pEntry = rList.GetLineEnd(i);
      81          20 :         const Bitmap aBitmap = const_cast< XLineEndList& >(rList).GetUiBitmap(i);
      82             : 
      83          20 :         if(!aBitmap.IsEmpty())
      84             :         {
      85          20 :             Bitmap aCopyStart(aBitmap);
      86          40 :             Bitmap aCopyEnd(aBitmap);
      87             : 
      88          20 :             const Size aBmpSize(aCopyStart.GetSizePixel());
      89          20 :             const Rectangle aCropRectStart(Point(), Size(aBmpSize.Width() / 2, aBmpSize.Height()));
      90          20 :             const Rectangle aCropRectEnd(Point(aBmpSize.Width() / 2, 0), Size(aBmpSize.Width() / 2, aBmpSize.Height()));
      91             : 
      92          20 :             aCopyStart.Crop(aCropRectStart);
      93             :             rListBoxStart.InsertEntry(
      94          20 :                 pEntry->GetName(),
      95          40 :                 Image(aCopyStart));
      96             : 
      97          20 :             aCopyEnd.Crop(aCropRectEnd);
      98             :             rListBoxEnd.InsertEntry(
      99          20 :                 pEntry->GetName(),
     100          60 :                 Image(aCopyEnd));
     101             :         }
     102             :         else
     103             :         {
     104           0 :             rListBoxStart.InsertEntry(pEntry->GetName());
     105           0 :             rListBoxEnd.InsertEntry(pEntry->GetName());
     106             :         }
     107          20 :     }
     108             : 
     109           1 :     rListBoxStart.SetUpdateMode(true);
     110           1 :     rListBoxEnd.SetUpdateMode(true);
     111           1 : }
     112             : 
     113           1 : void FillLineStyleListBox(ListBox& rListBox, const XDashList& rList)
     114             : {
     115           1 :     const sal_uInt32 nCount(rList.Count());
     116           1 :     rListBox.SetUpdateMode(false);
     117             : 
     118           1 :     rListBox.Clear();
     119             : 
     120             :     // entry for 'none'
     121           1 :     rListBox.InsertEntry(rList.GetStringForUiNoLine());
     122             : 
     123             :     // entry for solid line
     124             :     rListBox.InsertEntry(rList.GetStringForUiSolidLine(),
     125           1 :             Image( rList.GetBitmapForUISolidLine()));
     126             : 
     127          11 :     for(sal_uInt32 i(0); i < nCount; i++)
     128             :     {
     129          10 :         XDashEntry* pEntry = rList.GetDash(i);
     130          10 :         const Bitmap aBitmap = const_cast< XDashList& >(rList).GetUiBitmap(i);
     131             : 
     132          10 :         if(!aBitmap.IsEmpty())
     133             :         {
     134          10 :             rListBox.InsertEntry(pEntry->GetName(), Image(aBitmap));
     135             :         }
     136             :         else
     137             :         {
     138           0 :             rListBox.InsertEntry(pEntry->GetName());
     139             :         }
     140          10 :     }
     141             : 
     142           1 :     rListBox.SetUpdateMode(true);
     143           1 : }
     144             : 
     145             : } // end of anonymous namespace
     146             : 
     147             : namespace svx { namespace sidebar {
     148             : 
     149           2 : LinePropertyPanel::LinePropertyPanel(
     150             :     vcl::Window* pParent,
     151             :     const uno::Reference<frame::XFrame>& rxFrame,
     152             :     SfxBindings* pBindings)
     153             : :   PanelLayout(pParent, "LinePropertyPanel", "svx/ui/sidebarline.ui", rxFrame),
     154             :     maStyleControl(SID_ATTR_LINE_STYLE, *pBindings, *this),
     155             :     maDashControl (SID_ATTR_LINE_DASH, *pBindings, *this),
     156             :     maWidthControl(SID_ATTR_LINE_WIDTH, *pBindings, *this),
     157             :     maStartControl(SID_ATTR_LINE_START, *pBindings, *this),
     158             :     maEndControl(SID_ATTR_LINE_END, *pBindings, *this),
     159             :     maLineEndListControl(SID_LINEEND_LIST, *pBindings, *this),
     160             :     maLineStyleListControl(SID_DASH_LIST, *pBindings, *this),
     161             :     maTransControl(SID_ATTR_LINE_TRANSPARENCE, *pBindings, *this),
     162             :     maEdgeStyle(SID_ATTR_LINE_JOINT, *pBindings, *this),
     163             :     maCapStyle(SID_ATTR_LINE_CAP, *pBindings, *this),
     164             :     mpStyleItem(),
     165             :     mpDashItem(),
     166             :     mnTrans(0),
     167             :     meMapUnit(SFX_MAPUNIT_MM),
     168             :     mnWidthCoreValue(0),
     169             :     mpStartItem(),
     170             :     mpEndItem(),
     171             :     maLineWidthPopup(this, ::boost::bind(&LinePropertyPanel::CreateLineWidthPopupControl, this, _1)),
     172           1 :     maIMGNone(SVX_RES(IMG_NONE_ICON)),
     173             :     mpIMGWidthIcon(),
     174             :     mxFrame(rxFrame),
     175             :     mpBindings(pBindings),
     176           4 :     mbWidthValuable(true)
     177             : {
     178           1 :     get(mpFTWidth, "widthlabel");
     179           1 :     get(mpTBWidth, "width");
     180           1 :     get(mpFTStyle, "stylelabel");
     181           1 :     get(mpLBStyle, "linestyle");
     182           1 :     get(mpFTTransparency, "translabel");
     183           1 :     get(mpMFTransparent, "linetransparency");
     184           1 :     get(mpFTArrow, "arrowlabel");
     185           1 :     get(mpLBStart, "beginarrowstyle");
     186           1 :     get(mpLBEnd, "endarrowstyle");
     187           1 :     get(mpFTEdgeStyle, "cornerlabel");
     188           1 :     get(mpLBEdgeStyle, "edgestyle");
     189           1 :     get(mpFTCapStyle, "caplabel");
     190           1 :     get(mpLBCapStyle, "linecapstyle");
     191             : 
     192           1 :     Initialize();
     193           1 : }
     194             : 
     195           0 : LinePropertyPanel::~LinePropertyPanel()
     196             : {
     197           0 :     disposeOnce();
     198           0 : }
     199             : 
     200           1 : void LinePropertyPanel::dispose()
     201             : {
     202           1 :     mpFTWidth.clear();
     203           1 :     mpTBWidth.clear();
     204           1 :     mpFTStyle.clear();
     205           1 :     mpLBStyle.clear();
     206           1 :     mpFTTransparency.clear();
     207           1 :     mpMFTransparent.clear();
     208           1 :     mpFTArrow.clear();
     209           1 :     mpLBStart.clear();
     210           1 :     mpLBEnd.clear();
     211           1 :     mpFTEdgeStyle.clear();
     212           1 :     mpLBEdgeStyle.clear();
     213           1 :     mpFTCapStyle.clear();
     214           1 :     mpLBCapStyle.clear();
     215             : 
     216           1 :     maLineWidthPopup.dispose();
     217           1 :     maStyleControl.dispose();
     218           1 :     maDashControl.dispose();
     219           1 :     maWidthControl.dispose();
     220           1 :     maStartControl.dispose();
     221           1 :     maEndControl.dispose();
     222           1 :     maLineEndListControl.dispose();
     223           1 :     maLineStyleListControl.dispose();
     224           1 :     maTransControl.dispose();
     225           1 :     maEdgeStyle.dispose();
     226           1 :     maCapStyle.dispose();
     227             : 
     228           1 :     PanelLayout::dispose();
     229           1 : }
     230             : 
     231           1 : void LinePropertyPanel::Initialize()
     232             : {
     233           1 :     mpIMGWidthIcon.reset(new Image[8]);
     234           1 :     mpIMGWidthIcon[0] = Image(SVX_RES(IMG_WIDTH1_ICON));
     235           1 :     mpIMGWidthIcon[1] = Image(SVX_RES(IMG_WIDTH2_ICON));
     236           1 :     mpIMGWidthIcon[2] = Image(SVX_RES(IMG_WIDTH3_ICON));
     237           1 :     mpIMGWidthIcon[3] = Image(SVX_RES(IMG_WIDTH4_ICON));
     238           1 :     mpIMGWidthIcon[4] = Image(SVX_RES(IMG_WIDTH5_ICON));
     239           1 :     mpIMGWidthIcon[5] = Image(SVX_RES(IMG_WIDTH6_ICON));
     240           1 :     mpIMGWidthIcon[6] = Image(SVX_RES(IMG_WIDTH7_ICON));
     241           1 :     mpIMGWidthIcon[7] = Image(SVX_RES(IMG_WIDTH8_ICON));
     242             : 
     243           1 :     meMapUnit = maWidthControl.GetCoreMetric();
     244             : 
     245           1 :     FillLineStyleList();
     246           1 :     SelectLineStyle();
     247           1 :     Link<> aLink = LINK( this, LinePropertyPanel, ChangeLineStyleHdl );
     248           1 :     mpLBStyle->SetSelectHdl( aLink );
     249           1 :     mpLBStyle->SetAccessibleName(OUString( "Style"));
     250           1 :     mpLBStyle->AdaptDropDownLineCountToMaximum();
     251             : 
     252           1 :     const sal_uInt16 nIdWidth = mpTBWidth->GetItemId(UNO_SELECTWIDTH);
     253           1 :     mpTBWidth->SetItemImage(nIdWidth, mpIMGWidthIcon[0]);
     254           1 :     mpTBWidth->SetItemBits( nIdWidth, mpTBWidth->GetItemBits( nIdWidth ) | ToolBoxItemBits::DROPDOWNONLY );
     255           1 :     Link<ToolBox *, void> aLink2 = LINK(this, LinePropertyPanel, ToolboxWidthSelectHdl);
     256           1 :     mpTBWidth->SetDropdownClickHdl ( aLink2 );
     257           1 :     mpTBWidth->SetSelectHdl ( aLink2 );
     258             : 
     259           1 :     FillLineEndList();
     260           1 :     SelectEndStyle(true);
     261           1 :     SelectEndStyle(false);
     262           1 :     aLink = LINK( this, LinePropertyPanel, ChangeStartHdl );
     263           1 :     mpLBStart->SetSelectHdl( aLink );
     264           1 :     mpLBStart->SetAccessibleName(OUString("Beginning Style")); //wj acc
     265           1 :     mpLBStart->AdaptDropDownLineCountToMaximum();
     266           1 :     aLink = LINK( this, LinePropertyPanel, ChangeEndHdl );
     267           1 :     mpLBEnd->SetSelectHdl( aLink );
     268           1 :     mpLBEnd->SetAccessibleName(OUString("Ending Style"));  //wj acc
     269           1 :     mpLBEnd->AdaptDropDownLineCountToMaximum();
     270             : 
     271           1 :     aLink = LINK(this, LinePropertyPanel, ChangeTransparentHdl);
     272           1 :     mpMFTransparent->SetModifyHdl(aLink);
     273           1 :     mpMFTransparent->SetAccessibleName(OUString("Transparency"));  //wj acc
     274             : 
     275           1 :     mpTBWidth->SetAccessibleRelationLabeledBy(mpFTWidth);
     276           1 :     mpLBStyle->SetAccessibleRelationLabeledBy(mpFTStyle);
     277           1 :     mpMFTransparent->SetAccessibleRelationLabeledBy(mpFTTransparency);
     278           1 :     mpLBStart->SetAccessibleRelationLabeledBy(mpFTArrow);
     279           1 :     mpLBEnd->SetAccessibleRelationLabeledBy(mpLBEnd);
     280             : 
     281           1 :     aLink = LINK( this, LinePropertyPanel, ChangeEdgeStyleHdl );
     282           1 :     mpLBEdgeStyle->SetSelectHdl( aLink );
     283           1 :     mpLBEdgeStyle->SetAccessibleName(OUString("Corner Style"));
     284             : 
     285           1 :     aLink = LINK( this, LinePropertyPanel, ChangeCapStyleHdl );
     286           1 :     mpLBCapStyle->SetSelectHdl( aLink );
     287           1 :     mpLBCapStyle->SetAccessibleName(OUString("Cap Style"));
     288           1 : }
     289             : 
     290           0 : void LinePropertyPanel::SetupIcons()
     291             : {
     292           0 :     if(Theme::GetBoolean(Theme::Bool_UseSymphonyIcons))
     293             :     {
     294             :         // todo
     295             :     }
     296             :     else
     297             :     {
     298             :         // todo
     299             :     }
     300           0 : }
     301             : 
     302           2 : VclPtr<vcl::Window> LinePropertyPanel::Create (
     303             :     vcl::Window* pParent,
     304             :     const uno::Reference<frame::XFrame>& rxFrame,
     305             :     SfxBindings* pBindings)
     306             : {
     307           2 :     if (pParent == NULL)
     308           0 :         throw lang::IllegalArgumentException("no parent Window given to LinePropertyPanel::Create", NULL, 0);
     309           2 :     if ( ! rxFrame.is())
     310           0 :         throw lang::IllegalArgumentException("no XFrame given to LinePropertyPanel::Create", NULL, 1);
     311           2 :     if (pBindings == NULL)
     312           0 :         throw lang::IllegalArgumentException("no SfxBindings given to LinePropertyPanel::Create", NULL, 2);
     313             : 
     314           2 :     return VclPtr<LinePropertyPanel>::Create(pParent, rxFrame, pBindings);
     315             : }
     316             : 
     317           0 : void LinePropertyPanel::DataChanged(const DataChangedEvent& /*rEvent*/)
     318             : {
     319           0 :     SetupIcons();
     320           0 : }
     321             : 
     322           0 : void LinePropertyPanel::NotifyItemUpdate(
     323             :     sal_uInt16 nSID,
     324             :     SfxItemState eState,
     325             :     const SfxPoolItem* pState,
     326             :     const bool /*bIsEnabled*/)
     327             : {
     328           0 :     const bool bDisabled(SfxItemState::DISABLED == eState);
     329             : 
     330           0 :     switch(nSID)
     331             :     {
     332             :         case SID_ATTR_LINE_DASH:
     333             :         case SID_ATTR_LINE_STYLE:
     334             :         {
     335           0 :             if(bDisabled)
     336             :             {
     337           0 :                 mpFTStyle->Disable();
     338           0 :                 mpLBStyle->Disable();
     339             :             }
     340             :             else
     341             :             {
     342           0 :                 mpFTStyle->Enable();
     343           0 :                 mpLBStyle->Enable();
     344             :             }
     345             : 
     346           0 :             if(eState  >= SfxItemState::DEFAULT)
     347             :             {
     348           0 :                 if(nSID == SID_ATTR_LINE_STYLE)
     349             :                 {
     350           0 :                     const XLineStyleItem* pItem = dynamic_cast< const XLineStyleItem* >(pState);
     351             : 
     352           0 :                     if(pItem)
     353             :                     {
     354           0 :                         mpStyleItem.reset(pState ? static_cast<XLineStyleItem*>(pItem->Clone()) : 0);
     355             :                     }
     356             :                 }
     357             :                 else // if(nSID == SID_ATTR_LINE_DASH)
     358             :                 {
     359           0 :                     const XLineDashItem* pItem = dynamic_cast< const XLineDashItem* >(pState);
     360             : 
     361           0 :                     if(pItem)
     362             :                     {
     363           0 :                         mpDashItem.reset(pState ? static_cast<XLineDashItem*>(pItem->Clone()) : 0);
     364             :                     }
     365             :                 }
     366             :             }
     367             :             else
     368             :             {
     369           0 :                 if(nSID == SID_ATTR_LINE_STYLE)
     370             :                 {
     371           0 :                     mpStyleItem.reset(0);
     372             :                 }
     373             :                 else
     374             :                 {
     375           0 :                     mpDashItem.reset(0);
     376             :                 }
     377             :             }
     378             : 
     379           0 :             SelectLineStyle();
     380           0 :             break;
     381             :         }
     382             :         case SID_ATTR_LINE_TRANSPARENCE:
     383             :         {
     384           0 :             if(bDisabled)
     385             :             {
     386           0 :                 mpFTTransparency->Disable();
     387           0 :                 mpMFTransparent->Disable();
     388             :             }
     389             :             else
     390             :             {
     391           0 :                 mpFTTransparency->Enable();
     392           0 :                 mpMFTransparent->Enable();
     393             :             }
     394             : 
     395           0 :             if(eState >= SfxItemState::DEFAULT)
     396             :             {
     397           0 :                 const XLineTransparenceItem* pItem = dynamic_cast< const XLineTransparenceItem* >(pState);
     398             : 
     399           0 :                 if(pItem)
     400             :                 {
     401           0 :                     mnTrans = pItem->GetValue();
     402           0 :                     mpMFTransparent->SetValue(mnTrans);
     403           0 :                     break;
     404             :                 }
     405             :             }
     406             : 
     407           0 :             mpMFTransparent->SetValue(0);//add
     408           0 :             mpMFTransparent->SetText(OUString());
     409           0 :             break;
     410             :         }
     411             :         case SID_ATTR_LINE_WIDTH:
     412             :         {
     413           0 :             if(bDisabled)
     414             :             {
     415           0 :                 mpTBWidth->Disable();
     416           0 :                 mpFTWidth->Disable();
     417             :             }
     418             :             else
     419             :             {
     420           0 :                 mpTBWidth->Enable();
     421           0 :                 mpFTWidth->Enable();
     422             :             }
     423             : 
     424           0 :             if(eState >= SfxItemState::DEFAULT)
     425             :             {
     426           0 :                 const XLineWidthItem* pItem = dynamic_cast< const XLineWidthItem* >(pState);
     427             : 
     428           0 :                 if(pItem)
     429             :                 {
     430           0 :                     mnWidthCoreValue = pItem->GetValue();
     431           0 :                     mbWidthValuable = true;
     432           0 :                     SetWidthIcon();
     433           0 :                     break;
     434             :                 }
     435             :             }
     436             : 
     437           0 :             mbWidthValuable = false;
     438           0 :             SetWidthIcon();
     439           0 :             break;
     440             :         }
     441             :         case SID_ATTR_LINE_START:
     442             :         {
     443           0 :             if(bDisabled)
     444             :             {
     445           0 :                 mpFTArrow->Disable();
     446           0 :                 mpLBStart->Disable();
     447             :             }
     448             :             else
     449             :             {
     450           0 :                 mpFTArrow->Enable();
     451           0 :                 mpLBStart->Enable();
     452             :             }
     453             : 
     454           0 :             if(eState >= SfxItemState::DEFAULT)
     455             :             {
     456           0 :                 const XLineStartItem* pItem = dynamic_cast< const XLineStartItem* >(pState);
     457             : 
     458           0 :                 if(pItem)
     459             :                 {
     460           0 :                     mpStartItem.reset(static_cast<XLineStartItem*>(pItem->Clone()));
     461           0 :                     SelectEndStyle(true);
     462           0 :                     break;
     463             :                 }
     464             :             }
     465             : 
     466           0 :             mpStartItem.reset(0);
     467           0 :             SelectEndStyle(true);
     468           0 :             break;
     469             :         }
     470             :         case SID_ATTR_LINE_END:
     471             :         {
     472           0 :             if(bDisabled)
     473             :             {
     474           0 :                 mpFTArrow->Disable();
     475           0 :                 mpLBEnd->Disable();
     476             :             }
     477             :             else
     478             :             {
     479           0 :                 mpFTArrow->Enable();
     480           0 :                 mpLBEnd->Enable();
     481             :             }
     482             : 
     483           0 :             if(eState >= SfxItemState::DEFAULT)
     484             :             {
     485           0 :                 const XLineEndItem* pItem = dynamic_cast< const XLineEndItem* >(pState);
     486             : 
     487           0 :                 if(pItem)
     488             :                 {
     489           0 :                     mpEndItem.reset(static_cast<XLineEndItem*>(pItem->Clone()));
     490           0 :                     SelectEndStyle(false);
     491           0 :                     break;
     492             :                 }
     493             :             }
     494             : 
     495           0 :             mpEndItem.reset(0);
     496           0 :             SelectEndStyle(false);
     497           0 :             break;
     498             :         }
     499             :         case SID_LINEEND_LIST:
     500             :         {
     501           0 :             FillLineEndList();
     502           0 :             SelectEndStyle(true);
     503           0 :             SelectEndStyle(false);
     504           0 :             break;
     505             :         }
     506             :         case SID_DASH_LIST:
     507             :         {
     508           0 :             FillLineStyleList();
     509           0 :             SelectLineStyle();
     510           0 :             break;
     511             :         }
     512             :         case SID_ATTR_LINE_JOINT:
     513             :         {
     514           0 :             if(bDisabled)
     515             :             {
     516           0 :                 mpLBEdgeStyle->Disable();
     517           0 :                 mpFTEdgeStyle->Disable();
     518             :             }
     519             :             else
     520             :             {
     521           0 :                 mpLBEdgeStyle->Enable();
     522           0 :                 mpFTEdgeStyle->Enable();
     523             :             }
     524             : 
     525           0 :             if(eState >= SfxItemState::DEFAULT)
     526             :             {
     527           0 :                 const XLineJointItem* pItem = dynamic_cast< const XLineJointItem* >(pState);
     528             : 
     529           0 :                 if(pItem)
     530             :                 {
     531           0 :                     sal_Int32 nEntryPos(0);
     532             : 
     533           0 :                     switch(pItem->GetValue())
     534             :                     {
     535             :                         case drawing::LineJoint_MIDDLE:
     536             :                         case drawing::LineJoint_ROUND:
     537             :                         {
     538           0 :                             nEntryPos = 1;
     539           0 :                             break;
     540             :                         }
     541             :                         case drawing::LineJoint_NONE:
     542             :                         {
     543           0 :                             nEntryPos = 2;
     544           0 :                             break;
     545             :                         }
     546             :                         case drawing::LineJoint_MITER:
     547             :                         {
     548           0 :                             nEntryPos = 3;
     549           0 :                             break;
     550             :                         }
     551             :                         case drawing::LineJoint_BEVEL:
     552             :                         {
     553           0 :                             nEntryPos = 4;
     554           0 :                             break;
     555             :                         }
     556             : 
     557             :                         default:
     558           0 :                             break;
     559             :                     }
     560             : 
     561           0 :                     if(nEntryPos)
     562             :                     {
     563           0 :                         mpLBEdgeStyle->SelectEntryPos(nEntryPos - 1);
     564           0 :                         break;
     565             :                     }
     566             :                 }
     567             :             }
     568             : 
     569           0 :             mpLBEdgeStyle->SetNoSelection();
     570           0 :             break;
     571             :         }
     572             :         case SID_ATTR_LINE_CAP:
     573             :         {
     574           0 :             if(bDisabled)
     575             :             {
     576           0 :                 mpLBCapStyle->Disable();
     577           0 :                 mpFTCapStyle->Disable();
     578             :             }
     579             :             else
     580             :             {
     581           0 :                 mpLBCapStyle->Enable();
     582           0 :                 mpLBCapStyle->Enable();
     583             :             }
     584             : 
     585           0 :             if(eState >= SfxItemState::DEFAULT)
     586             :             {
     587           0 :                 const XLineCapItem* pItem = dynamic_cast< const XLineCapItem* >(pState);
     588             : 
     589           0 :                 if(pItem)
     590             :                 {
     591           0 :                     sal_Int32 nEntryPos(0);
     592             : 
     593           0 :                     switch(pItem->GetValue())
     594             :                     {
     595             :                         case drawing::LineCap_BUTT:
     596             :                         {
     597           0 :                             nEntryPos = 1;
     598           0 :                             break;
     599             :                         }
     600             :                         case drawing::LineCap_ROUND:
     601             :                         {
     602           0 :                             nEntryPos = 2;
     603           0 :                             break;
     604             :                         }
     605             :                         case drawing::LineCap_SQUARE:
     606             :                         {
     607           0 :                             nEntryPos = 3;
     608           0 :                             break;
     609             :                         }
     610             : 
     611             :                         default:
     612           0 :                             break;
     613             :                     }
     614             : 
     615           0 :                     if(nEntryPos)
     616             :                     {
     617           0 :                         mpLBCapStyle->SelectEntryPos(nEntryPos - 1);
     618           0 :                         break;
     619             :                     }
     620             :                 }
     621             :             }
     622             : 
     623           0 :             mpLBCapStyle->SetNoSelection();
     624           0 :             break;
     625             :         }
     626             :     }
     627           0 : }
     628             : 
     629           0 : IMPL_LINK_NOARG(LinePropertyPanel, ChangeLineStyleHdl)
     630             : {
     631           0 :     const sal_Int32 nPos(mpLBStyle->GetSelectEntryPos());
     632             : 
     633           0 :     if(LISTBOX_ENTRY_NOTFOUND != nPos && mpLBStyle->IsValueChangedFromSaved())
     634             :     {
     635           0 :         if(0 == nPos)
     636             :         {
     637             :             // drawing::LineStyle_NONE
     638           0 :             const XLineStyleItem aItem(drawing::LineStyle_NONE);
     639             : 
     640           0 :             GetBindings()->GetDispatcher()->Execute(SID_ATTR_LINE_STYLE, SfxCallMode::RECORD, &aItem, 0L);
     641             :         }
     642           0 :         else if(1 == nPos)
     643             :         {
     644             :             // drawing::LineStyle_SOLID
     645           0 :             const XLineStyleItem aItem(drawing::LineStyle_SOLID);
     646             : 
     647           0 :             GetBindings()->GetDispatcher()->Execute(SID_ATTR_LINE_STYLE, SfxCallMode::RECORD, &aItem, 0L);
     648             :         }
     649           0 :         else if (mxLineStyleList.is() && mxLineStyleList->Count() > (long)(nPos - 2))
     650             :         {
     651             :             // drawing::LineStyle_DASH
     652           0 :             const XLineStyleItem aItemA(drawing::LineStyle_DASH);
     653           0 :             const XDashEntry* pDashEntry = mxLineStyleList->GetDash(nPos - 2);
     654             :             OSL_ENSURE(pDashEntry, "OOps, got empty XDash from XDashList (!)");
     655             :             const XLineDashItem aItemB(
     656           0 :                 pDashEntry ? pDashEntry->GetName() : OUString(),
     657           0 :                 pDashEntry ? pDashEntry->GetDash() : XDash());
     658             : 
     659           0 :             GetBindings()->GetDispatcher()->Execute(SID_ATTR_LINE_STYLE, SfxCallMode::RECORD, &aItemA, 0L);
     660           0 :             GetBindings()->GetDispatcher()->Execute(SID_ATTR_LINE_DASH, SfxCallMode::RECORD, &aItemB, 0L);
     661             :         }
     662             :     }
     663             : 
     664           0 :     return 0;
     665             : }
     666             : 
     667           0 : IMPL_LINK_NOARG(LinePropertyPanel, ChangeStartHdl)
     668             : {
     669           0 :     sal_Int32  nPos = mpLBStart->GetSelectEntryPos();
     670           0 :     if( nPos != LISTBOX_ENTRY_NOTFOUND && mpLBStart->IsValueChangedFromSaved() )
     671             :     {
     672           0 :         std::unique_ptr<XLineStartItem> pItem;
     673           0 :         if( nPos == 0 )
     674           0 :             pItem.reset(new XLineStartItem());
     675           0 :         else if( mxLineEndList.is() && mxLineEndList->Count() > (long) ( nPos - 1 ) )
     676           0 :             pItem.reset(new XLineStartItem( mpLBStart->GetSelectEntry(),mxLineEndList->GetLineEnd( nPos - 1 )->GetLineEnd() ));
     677           0 :         GetBindings()->GetDispatcher()->Execute(SID_ATTR_LINEEND_STYLE, SfxCallMode::RECORD, pItem.get(),  0L);
     678             :     }
     679           0 :     return 0;
     680             : }
     681             : 
     682           0 : IMPL_LINK_NOARG(LinePropertyPanel, ChangeEndHdl)
     683             : {
     684           0 :     sal_Int32  nPos = mpLBEnd->GetSelectEntryPos();
     685           0 :     if( nPos != LISTBOX_ENTRY_NOTFOUND && mpLBEnd->IsValueChangedFromSaved() )
     686             :     {
     687           0 :         std::unique_ptr<XLineEndItem> pItem;
     688           0 :         if( nPos == 0 )
     689           0 :             pItem.reset(new XLineEndItem());
     690           0 :         else if( mxLineEndList.is() && mxLineEndList->Count() > (long) ( nPos - 1 ) )
     691           0 :             pItem.reset(new XLineEndItem( mpLBEnd->GetSelectEntry(), mxLineEndList->GetLineEnd( nPos - 1 )->GetLineEnd() ));
     692           0 :         GetBindings()->GetDispatcher()->Execute(SID_ATTR_LINEEND_STYLE, SfxCallMode::RECORD, pItem.get(),  0L);
     693             :     }
     694           0 :     return 0;
     695             : }
     696             : 
     697           0 : IMPL_LINK_NOARG(LinePropertyPanel, ChangeEdgeStyleHdl)
     698             : {
     699           0 :     const sal_Int32 nPos(mpLBEdgeStyle->GetSelectEntryPos());
     700             : 
     701           0 :     if(LISTBOX_ENTRY_NOTFOUND != nPos && mpLBEdgeStyle->IsValueChangedFromSaved())
     702             :     {
     703           0 :         std::unique_ptr<XLineJointItem> pItem;
     704             : 
     705           0 :         switch(nPos)
     706             :         {
     707             :             case 0: // rounded
     708             :             {
     709           0 :                 pItem.reset(new XLineJointItem(drawing::LineJoint_ROUND));
     710           0 :                 break;
     711             :             }
     712             :             case 1: // none
     713             :             {
     714           0 :                 pItem.reset(new XLineJointItem(drawing::LineJoint_NONE));
     715           0 :                 break;
     716             :             }
     717             :             case 2: // mitered
     718             :             {
     719           0 :                 pItem.reset(new XLineJointItem(drawing::LineJoint_MITER));
     720           0 :                 break;
     721             :             }
     722             :             case 3: // beveled
     723             :             {
     724           0 :                 pItem.reset(new XLineJointItem(drawing::LineJoint_BEVEL));
     725           0 :                 break;
     726             :             }
     727             :         }
     728             : 
     729           0 :         GetBindings()->GetDispatcher()->Execute(SID_ATTR_LINE_JOINT, SfxCallMode::RECORD, pItem.get(),  0L);
     730             :     }
     731           0 :     return 0;
     732             : }
     733             : 
     734           0 : IMPL_LINK_NOARG(LinePropertyPanel, ChangeCapStyleHdl)
     735             : {
     736           0 :     const sal_Int32 nPos(mpLBCapStyle->GetSelectEntryPos());
     737             : 
     738           0 :     if(LISTBOX_ENTRY_NOTFOUND != nPos && mpLBCapStyle->IsValueChangedFromSaved())
     739             :     {
     740           0 :         std::unique_ptr<XLineCapItem> pItem;
     741             : 
     742           0 :         switch(nPos)
     743             :         {
     744             :             case 0: // flat
     745             :             {
     746           0 :                 pItem.reset(new XLineCapItem(drawing::LineCap_BUTT));
     747           0 :                 break;
     748             :             }
     749             :             case 1: // round
     750             :             {
     751           0 :                 pItem.reset(new XLineCapItem(drawing::LineCap_ROUND));
     752           0 :                 break;
     753             :             }
     754             :             case 2: // square
     755             :             {
     756           0 :                 pItem.reset(new XLineCapItem(drawing::LineCap_SQUARE));
     757           0 :                 break;
     758             :             }
     759             :         }
     760             : 
     761           0 :         GetBindings()->GetDispatcher()->Execute(SID_ATTR_LINE_CAP, SfxCallMode::RECORD, pItem.get(),  0L);
     762             :     }
     763           0 :     return 0;
     764             : }
     765             : 
     766           0 : IMPL_LINK_TYPED(LinePropertyPanel, ToolboxWidthSelectHdl,ToolBox*, pToolBox, void)
     767             : {
     768           0 :     if (pToolBox->GetItemCommand(pToolBox->GetCurItemId()) == UNO_SELECTWIDTH)
     769             :     {
     770           0 :         maLineWidthPopup.SetWidthSelect(mnWidthCoreValue, mbWidthValuable, meMapUnit);
     771           0 :         maLineWidthPopup.Show(*pToolBox);
     772             :     }
     773           0 : }
     774             : 
     775           0 : IMPL_LINK_NOARG( LinePropertyPanel, ChangeTransparentHdl )
     776             : {
     777           0 :     sal_uInt16 nVal = (sal_uInt16)mpMFTransparent->GetValue();
     778           0 :     XLineTransparenceItem aItem( nVal );
     779             : 
     780           0 :     GetBindings()->GetDispatcher()->Execute(SID_ATTR_LINE_STYLE, SfxCallMode::RECORD, &aItem, 0L);
     781           0 :     return 0L;
     782             : }
     783             : 
     784           0 : VclPtr<PopupControl> LinePropertyPanel::CreateLineWidthPopupControl (PopupContainer* pParent)
     785             : {
     786           0 :     return VclPtrInstance<LineWidthControl>(pParent, *this);
     787             : }
     788             : 
     789           0 : void LinePropertyPanel::EndLineWidthPopupMode()
     790             : {
     791           0 :     maLineWidthPopup.Hide();
     792           0 : }
     793             : 
     794           0 : void LinePropertyPanel::SetWidthIcon(int n)
     795             : {
     796           0 :     const sal_uInt16 nIdWidth = mpTBWidth->GetItemId(UNO_SELECTWIDTH);
     797           0 :     if (n == 0)
     798           0 :         mpTBWidth->SetItemImage( nIdWidth, maIMGNone);
     799             :     else
     800           0 :         mpTBWidth->SetItemImage( nIdWidth, mpIMGWidthIcon[n-1]);
     801           0 : }
     802             : 
     803           0 : void LinePropertyPanel::SetWidthIcon()
     804             : {
     805           0 :     if(!mbWidthValuable)
     806             :     {
     807           0 :         const sal_uInt16 nIdWidth = mpTBWidth->GetItemId(UNO_SELECTWIDTH);
     808           0 :         mpTBWidth->SetItemImage(nIdWidth, maIMGNone);
     809           0 :         return;
     810             :     }
     811             : 
     812           0 :     long nVal = LogicToLogic(mnWidthCoreValue * 10,(MapUnit)meMapUnit , MAP_POINT);
     813           0 :     const sal_uInt16 nIdWidth = mpTBWidth->GetItemId(UNO_SELECTWIDTH);
     814             : 
     815           0 :     if(nVal <= 6)
     816           0 :         mpTBWidth->SetItemImage( nIdWidth, mpIMGWidthIcon[0]);
     817           0 :     else if(nVal > 6 && nVal <= 9)
     818           0 :         mpTBWidth->SetItemImage( nIdWidth, mpIMGWidthIcon[1]);
     819           0 :     else if(nVal > 9 && nVal <= 12)
     820           0 :         mpTBWidth->SetItemImage( nIdWidth, mpIMGWidthIcon[2]);
     821           0 :     else if(nVal > 12 && nVal <= 19)
     822           0 :         mpTBWidth->SetItemImage( nIdWidth, mpIMGWidthIcon[3]);
     823           0 :     else if(nVal > 19 && nVal <= 26)
     824           0 :         mpTBWidth->SetItemImage( nIdWidth, mpIMGWidthIcon[4]);
     825           0 :     else if(nVal > 26 && nVal <= 37)
     826           0 :         mpTBWidth->SetItemImage( nIdWidth, mpIMGWidthIcon[5]);
     827           0 :     else if(nVal > 37 && nVal <=52)
     828           0 :         mpTBWidth->SetItemImage( nIdWidth, mpIMGWidthIcon[6]);
     829           0 :     else if(nVal > 52)
     830           0 :         mpTBWidth->SetItemImage( nIdWidth, mpIMGWidthIcon[7]);
     831             : 
     832             : }
     833             : 
     834           0 : void LinePropertyPanel::SetWidth(long nWidth)
     835             : {
     836           0 :     mnWidthCoreValue = nWidth;
     837           0 :     mbWidthValuable = true;
     838           0 : }
     839             : 
     840           1 : void  LinePropertyPanel::FillLineEndList()
     841             : {
     842           1 :     SfxObjectShell* pSh = SfxObjectShell::Current();
     843           1 :     if ( pSh && pSh->GetItem( SID_LINEEND_LIST ) )
     844             :     {
     845           1 :         mpLBStart->Enable();
     846           1 :         SvxLineEndListItem aItem( *static_cast<const SvxLineEndListItem*>(pSh->GetItem( SID_LINEEND_LIST ) ) );
     847           1 :         mxLineEndList = aItem.GetLineEndList();
     848             : 
     849           1 :         if (mxLineEndList.is())
     850             :         {
     851           1 :             FillLineEndListBox(*mpLBStart, *mpLBEnd, *mxLineEndList);
     852             :         }
     853             : 
     854           1 :         mpLBStart->SelectEntryPos(0);
     855           1 :         mpLBEnd->SelectEntryPos(0);
     856             :     }
     857             :     else
     858             :     {
     859           0 :         mpLBStart->Disable();
     860           0 :         mpLBEnd->Disable();
     861             :     }
     862           1 : }
     863             : 
     864           1 : void  LinePropertyPanel::FillLineStyleList()
     865             : {
     866           1 :     SfxObjectShell* pSh = SfxObjectShell::Current();
     867           1 :     if ( pSh && pSh->GetItem( SID_DASH_LIST ) )
     868             :     {
     869           1 :         mpLBStyle->Enable();
     870           1 :         SvxDashListItem aItem( *static_cast<const SvxDashListItem*>(pSh->GetItem( SID_DASH_LIST ) ) );
     871           1 :         mxLineStyleList = aItem.GetDashList();
     872             : 
     873           1 :         if (mxLineStyleList.is())
     874             :         {
     875           1 :             FillLineStyleListBox(*mpLBStyle, *mxLineStyleList);
     876             :         }
     877             : 
     878           1 :         mpLBStyle->SelectEntryPos(0);
     879             :     }
     880             :     else
     881             :     {
     882           0 :         mpLBStyle->Disable();
     883             :     }
     884           1 : }
     885             : 
     886           1 : void LinePropertyPanel::SelectLineStyle()
     887             : {
     888           1 :     if( !mpStyleItem.get() || !mpDashItem.get() )
     889             :     {
     890           1 :         mpLBStyle->SetNoSelection();
     891           1 :         mpLBStyle->Disable();
     892           2 :         return;
     893             :     }
     894             : 
     895           0 :     const drawing::LineStyle eXLS(mpStyleItem ? (drawing::LineStyle)mpStyleItem->GetValue() : drawing::LineStyle_NONE);
     896           0 :     bool bSelected(false);
     897             : 
     898           0 :     switch(eXLS)
     899             :     {
     900             :         case drawing::LineStyle_NONE:
     901           0 :             break;
     902             :         case drawing::LineStyle_SOLID:
     903           0 :             mpLBStyle->SelectEntryPos(1);
     904           0 :             bSelected = true;
     905           0 :             break;
     906             :         default:
     907           0 :             if(mpDashItem && mxLineStyleList.is())
     908             :             {
     909           0 :                 const XDash& rDash = mpDashItem->GetDashValue();
     910           0 :                 for(sal_Int32 a(0);!bSelected &&  a < mxLineStyleList->Count(); a++)
     911             :                 {
     912           0 :                     XDashEntry* pEntry = mxLineStyleList->GetDash(a);
     913           0 :                     const XDash& rEntry = pEntry->GetDash();
     914           0 :                     if(rDash == rEntry)
     915             :                     {
     916           0 :                         mpLBStyle->SelectEntryPos(a + 2);
     917           0 :                         bSelected = true;
     918             :                     }
     919             :                 }
     920             :             }
     921           0 :             break;
     922             :     }
     923             : 
     924           0 :     if(!bSelected)
     925           0 :         mpLBStyle->SelectEntryPos( 0 );
     926             : }
     927             : 
     928           2 : void LinePropertyPanel::SelectEndStyle(bool bStart)
     929             : {
     930           2 :     bool bSelected(false);
     931             : 
     932           2 :     if(bStart)
     933             :     {
     934           1 :         if( !mpStartItem.get() )
     935             :         {
     936           1 :             mpLBStart->SetNoSelection();
     937           1 :             mpLBStart->Disable();
     938           1 :             return;
     939             :         }
     940             : 
     941           0 :         if (mpStartItem && mxLineEndList.is())
     942             :         {
     943           0 :             const basegfx::B2DPolyPolygon& rItemPolygon = mpStartItem->GetLineStartValue();
     944           0 :             for(sal_Int32 a(0);!bSelected &&  a < mxLineEndList->Count(); a++)
     945             :             {
     946           0 :                 XLineEndEntry* pEntry = mxLineEndList->GetLineEnd(a);
     947           0 :                 const basegfx::B2DPolyPolygon& rEntryPolygon = pEntry->GetLineEnd();
     948           0 :                 if(rItemPolygon == rEntryPolygon)
     949             :                 {
     950           0 :                     mpLBStart->SelectEntryPos(a + 1);
     951           0 :                     bSelected = true;
     952             :                 }
     953           0 :             }
     954             :         }
     955             : 
     956           0 :         if(!bSelected)
     957             :         {
     958           0 :             mpLBStart->SelectEntryPos( 0 );
     959             :         }
     960             :     }
     961             :     else
     962             :     {
     963           1 :         if( !mpEndItem.get() )
     964             :         {
     965           1 :             mpLBEnd->SetNoSelection();
     966           1 :             mpLBEnd->Disable();
     967           1 :             return;
     968             :         }
     969             : 
     970           0 :         if (mpEndItem && mxLineEndList.is())
     971             :         {
     972           0 :             const basegfx::B2DPolyPolygon& rItemPolygon = mpEndItem->GetLineEndValue();
     973           0 :             for(sal_Int32 a(0);!bSelected &&  a < mxLineEndList->Count(); a++)
     974             :             {
     975           0 :                 XLineEndEntry* pEntry = mxLineEndList->GetLineEnd(a);
     976           0 :                 const basegfx::B2DPolyPolygon& rEntryPolygon = pEntry->GetLineEnd();
     977           0 :                 if(rItemPolygon == rEntryPolygon)
     978             :                 {
     979           0 :                     mpLBEnd->SelectEntryPos(a + 1);
     980           0 :                     bSelected = true;
     981             :                 }
     982           0 :             }
     983             :         }
     984             : 
     985           0 :         if(!bSelected)
     986             :         {
     987           0 :             mpLBEnd->SelectEntryPos( 0 );
     988             :         }
     989             :     }
     990             : }
     991             : 
     992         390 : }} // end of namespace svx::sidebar
     993             : 
     994             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11