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

Generated by: LCOV version 1.10