LCOV - code coverage report
Current view: top level - svx/source/sidebar/line - LineWidthControl.cxx (source / functions) Hit Total Coverage
Test: commit e02a6cb2c3e2b23b203b422e4e0680877f232636 Lines: 0 186 0.0 %
Date: 2014-04-14 Functions: 0 13 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :  * This file is part of the LibreOffice project.
       3             :  *
       4             :  * This Source Code Form is subject to the terms of the Mozilla Public
       5             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       6             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       7             :  *
       8             :  * This file incorporates work covered by the following license notice:
       9             :  *
      10             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      11             :  *   contributor license agreements. See the NOTICE file distributed
      12             :  *   with this work for additional information regarding copyright
      13             :  *   ownership. The ASF licenses this file to you under the Apache
      14             :  *   License, Version 2.0 (the "License"); you may not use this file
      15             :  *   except in compliance with the License. You may obtain a copy of
      16             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      17             :  */
      18             : #include "LineWidthControl.hxx"
      19             : #include "LinePropertyPanel.hrc"
      20             : #include "LinePropertyPanel.hxx"
      21             : 
      22             : #include <svx/dialogs.hrc>
      23             : #include <svx/dialmgr.hxx>
      24             : #include <sfx2/sidebar/ResourceDefinitions.hrc>
      25             : #include <comphelper/processfactory.hxx>
      26             : #include <vcl/svapp.hxx>
      27             : #include <vcl/settings.hxx>
      28             : #include <unotools/viewoptions.hxx>
      29             : #include <svx/xlnwtit.hxx>
      30             : #include <sfx2/bindings.hxx>
      31             : #include <sfx2/dispatch.hxx>
      32             : #include "svx/sidebar/PopupContainer.hxx"
      33             : 
      34             : 
      35             : namespace svx { namespace sidebar {
      36             : 
      37           0 : LineWidthControl::LineWidthControl (
      38             :     Window* pParent,
      39             :     LinePropertyPanel& rPanel)
      40           0 :     : svx::sidebar::PopupControl(pParent,SVX_RES(RID_POPUPPANEL_LINEPAGE_WIDTH)),
      41             :       mrLinePropertyPanel(rPanel),
      42             :       mpBindings(NULL),
      43           0 :       maVSWidth( this, SVX_RES(VS_WIDTH)),
      44           0 :       maFTCus( this, SVX_RES(FT_CUSTOME)),
      45           0 :       maFTWidth( this, SVX_RES(FT_LINE_WIDTH)),
      46           0 :       maMFWidth( this, SVX_RES(MF_WIDTH)),
      47             :       meMapUnit(SFX_MAPUNIT_TWIP),
      48             :       rStr(NULL),
      49           0 :       mstrPT(SVX_RESSTR(STR_PT)),
      50             :       mnCustomWidth(0),
      51             :       mbCustom(false),
      52             :       mbColseByEdit(false),
      53             :       mnTmpCusomWidth(0),
      54             :       mbVSFocus(true),
      55           0 :       maIMGCus(SVX_RES(IMG_WIDTH_CUSTOM)),
      56           0 :       maIMGCusGray(SVX_RES(IMG_WIDTH_CUSTOM_GRAY))
      57             : {
      58           0 :     Initialize();
      59           0 :     FreeResource();
      60           0 :     mpBindings = mrLinePropertyPanel.GetBindings();
      61           0 : }
      62             : 
      63             : 
      64             : 
      65             : 
      66           0 : LineWidthControl::~LineWidthControl (void)
      67             : {
      68           0 :     delete[] rStr;
      69           0 : }
      70             : 
      71             : 
      72             : 
      73             : 
      74           0 : void LineWidthControl::Paint(const Rectangle& rect)
      75             : {
      76           0 :     svx::sidebar::PopupControl::Paint(rect);
      77             : 
      78           0 :     Color aOldLineColor = GetLineColor();
      79           0 :     Color aOldFillColor = GetFillColor();
      80             : 
      81           0 :     Point aPos( LogicToPixel( Point( CUSTOM_X, CUSTOM_Y), MAP_APPFONT ));
      82           0 :     Size aSize( LogicToPixel( Size(  CUSTOM_W, CUSTOM_H ), MAP_APPFONT ));
      83           0 :     Rectangle aRect( aPos, aSize );
      84           0 :     aRect.Left() -= 1;
      85           0 :     aRect.Top() -= 1;
      86           0 :     aRect.Right() += 1;
      87           0 :     aRect.Bottom() += 1;
      88             : 
      89           0 :     Color aLineColor(189,201,219);
      90           0 :     if(!GetSettings().GetStyleSettings().GetHighContrastMode())
      91           0 :         SetLineColor(aLineColor);
      92             :     else
      93           0 :         SetLineColor(GetSettings().GetStyleSettings().GetShadowColor());
      94           0 :     SetFillColor(COL_TRANSPARENT);
      95           0 :     DrawRect(aRect);
      96             : 
      97           0 :     SetLineColor(aOldLineColor);
      98           0 :     SetFillColor(aOldFillColor);
      99           0 : }
     100             : 
     101             : 
     102             : 
     103             : 
     104           0 : void LineWidthControl::Initialize()
     105             : {
     106           0 :     maVSWidth.SetStyle( maVSWidth.GetStyle()| WB_3DLOOK |  WB_NO_DIRECTSELECT  );// WB_NAMEFIELD | WB_ITEMBORDER |WB_DOUBLEBORDER | WB_NONEFIELD |
     107             :     //for high contrast wj
     108           0 :     if(GetSettings().GetStyleSettings().GetHighContrastMode())
     109             :     {
     110           0 :         maVSWidth.SetColor(GetSettings().GetStyleSettings().GetMenuColor());
     111             :     //  maBorder.SetBackground(GetSettings().GetStyleSettings().GetMenuColor());
     112           0 :         maFTWidth.SetBackground(GetSettings().GetStyleSettings().GetMenuColor());
     113             :     }
     114             :     else
     115             :     {
     116           0 :         maVSWidth.SetColor(COL_WHITE);
     117             :     //  maBorder.SetBackground(Wallpaper(COL_WHITE));
     118           0 :         maFTWidth.SetBackground(Wallpaper(COL_WHITE));
     119             :     }
     120             : 
     121           0 :     sal_Int64 nFirst= maMFWidth.Denormalize( maMFWidth.GetFirst( FUNIT_TWIP ) );
     122           0 :     sal_Int64 nLast = maMFWidth.Denormalize( maMFWidth.GetLast( FUNIT_TWIP ) );
     123           0 :     sal_Int64 nMin = maMFWidth.Denormalize( maMFWidth.GetMin( FUNIT_TWIP ) );
     124           0 :     sal_Int64 nMax = maMFWidth.Denormalize( maMFWidth.GetMax( FUNIT_TWIP ) );
     125           0 :     maMFWidth.SetSpinSize( 10 );
     126           0 :     maMFWidth.SetUnit( FUNIT_POINT );
     127           0 :     if( maMFWidth.GetDecimalDigits() > 1 )
     128           0 :          maMFWidth.SetDecimalDigits( 1 );
     129           0 :     maMFWidth.SetFirst( maMFWidth.Normalize( nFirst ), FUNIT_TWIP );
     130           0 :     maMFWidth.SetLast( maMFWidth.Normalize( nLast ), FUNIT_TWIP );
     131           0 :     maMFWidth.SetMin( maMFWidth.Normalize( nMin ), FUNIT_TWIP );
     132           0 :     maMFWidth.SetMax( maMFWidth.Normalize( nMax ), FUNIT_TWIP );
     133             : 
     134           0 :     rStr = new OUString[9];
     135             :     //modify,
     136           0 :     rStr[0] = "0.5";
     137           0 :     rStr[1] = "0.8";
     138           0 :     rStr[2] = "1.0";
     139           0 :     rStr[3] = "1.5";
     140           0 :     rStr[4] = "2.3";
     141           0 :     rStr[5] = "3.0";
     142           0 :     rStr[6] = "4.5";
     143           0 :     rStr[7] = "6.0";
     144           0 :     rStr[8] = SVX_RESSTR(STR_WIDTH_LAST_CUSTOM);
     145             : 
     146           0 :     const LocaleDataWrapper& rLocaleWrapper( Application::GetSettings().GetLocaleDataWrapper() );
     147           0 :     const sal_Unicode cSep = rLocaleWrapper.getNumDecimalSep()[0];
     148             : 
     149           0 :     for(int i = 0; i <= 7 ; i++)
     150             :     {
     151           0 :         rStr[i] = rStr[i].replace('.', cSep);//Modify
     152           0 :         rStr[i] += mstrPT;
     153             :     }
     154             :     //end
     155             : 
     156           0 :     for(sal_uInt16 i = 1 ; i <= 9 ; i++)
     157             :     {
     158           0 :         maVSWidth.InsertItem(i);
     159           0 :         maVSWidth.SetItemText(i, rStr[i-1]);
     160             :     }
     161           0 :     maVSWidth.SetUnit(rStr);
     162           0 :     maVSWidth.SetItemData(1,(void*)5);
     163           0 :     maVSWidth.SetItemData(2,(void*)8);
     164           0 :     maVSWidth.SetItemData(3,(void*)10);
     165           0 :     maVSWidth.SetItemData(4,(void*)15);
     166           0 :     maVSWidth.SetItemData(5,(void*)23);
     167           0 :     maVSWidth.SetItemData(6,(void*)30);
     168           0 :     maVSWidth.SetItemData(7,(void*)45);
     169           0 :     maVSWidth.SetItemData(8,(void*)60);
     170           0 :     maVSWidth.SetImage(maIMGCusGray);
     171             : 
     172           0 :     maVSWidth.SetSelItem(0);
     173           0 :     Link aLink =  LINK( this, LineWidthControl, VSSelectHdl ) ;
     174           0 :     maVSWidth.SetSelectHdl(aLink);
     175           0 :     aLink = LINK(this, LineWidthControl, MFModifyHdl);
     176           0 :     maMFWidth.SetModifyHdl(aLink);
     177             : 
     178           0 :     maVSWidth.StartSelection();
     179           0 :     maVSWidth.Show();
     180           0 : }
     181             : 
     182             : 
     183             : 
     184             : 
     185           0 : void LineWidthControl::GetFocus()
     186             : {
     187           0 :     if(!mbVSFocus)
     188           0 :         maMFWidth.GrabFocus();
     189             :     else
     190           0 :         maVSWidth.GrabFocus();
     191           0 : }
     192             : 
     193             : 
     194             : 
     195             : 
     196           0 : void LineWidthControl::SetWidthSelect( long lValue, bool bValuable, SfxMapUnit eMapUnit)
     197             : {
     198           0 :     mbVSFocus = true;
     199           0 :     maVSWidth.SetSelItem(0);
     200           0 :     mbColseByEdit = false;
     201           0 :     meMapUnit = eMapUnit;
     202           0 :     SvtViewOptions aWinOpt( E_WINDOW, SIDEBAR_LINE_WIDTH_GLOBAL_VALUE );
     203           0 :     if ( aWinOpt.Exists() )
     204             :     {
     205           0 :         ::com::sun::star::uno::Sequence < ::com::sun::star::beans::NamedValue > aSeq = aWinOpt.GetUserData();
     206           0 :         ::rtl::OUString aTmp;
     207           0 :         if ( aSeq.getLength())
     208           0 :             aSeq[0].Value >>= aTmp;
     209             : 
     210           0 :         OUString aWinData( aTmp );
     211           0 :         mnCustomWidth = aWinData.toInt32();
     212           0 :         mbCustom = true;
     213           0 :         maVSWidth.SetImage(maIMGCus);
     214           0 :         maVSWidth.SetCusEnable(true);
     215             : 
     216           0 :         OUString aStrTip( OUString::number( (double)mnCustomWidth / 10));
     217           0 :         aStrTip += mstrPT;
     218           0 :         maVSWidth.SetItemText(9, aStrTip);
     219             :     }
     220             :     else
     221             :     {
     222           0 :         mbCustom = false;
     223           0 :         maVSWidth.SetImage(maIMGCusGray);
     224           0 :         maVSWidth.SetCusEnable(false);
     225             :         //modify
     226             :         //String aStrTip(String(SVX_RES(STR_WIDTH_LAST_CUSTOM)));
     227             :         //maVSWidth.SetItemText(9, aStrTip);
     228           0 :         maVSWidth.SetItemText(9, rStr[8]);
     229             :     }
     230             : 
     231           0 :     if(bValuable)
     232             :     {
     233           0 :         sal_Int64 nVal = OutputDevice::LogicToLogic( lValue, (MapUnit)eMapUnit, MAP_100TH_MM );
     234           0 :         nVal = maMFWidth.Normalize( nVal );
     235           0 :         maMFWidth.SetValue( nVal, FUNIT_100TH_MM );
     236             :     }
     237             :     else
     238             :     {
     239           0 :         maMFWidth.SetText( "" );
     240             :     }
     241             : 
     242           0 :     MapUnit eOrgUnit = (MapUnit)eMapUnit;
     243           0 :     MapUnit ePntUnit( MAP_TWIP );
     244           0 :     lValue = LogicToLogic( lValue , eOrgUnit, ePntUnit );
     245             : 
     246           0 :     OUString strCurrValue = maMFWidth.GetText();
     247           0 :     sal_uInt16 i = 0;
     248           0 :     for(; i < 8; i++)
     249           0 :         if(strCurrValue == rStr[i])
     250             :         {
     251           0 :             maVSWidth.SetSelItem(i+1);
     252           0 :             break;
     253             :         }
     254           0 :     if (i>=8)
     255             :     {
     256           0 :         mbVSFocus = false;
     257           0 :         maVSWidth.SetSelItem(0);
     258             :     }
     259           0 :     maVSWidth.Format();
     260           0 :     maVSWidth.StartSelection();
     261           0 : }
     262             : 
     263             : 
     264             : 
     265             : 
     266           0 : IMPL_LINK(LineWidthControl, VSSelectHdl, void *, pControl)
     267             : {
     268           0 :     if(pControl == &maVSWidth)
     269             :     {
     270           0 :         sal_uInt16 iPos = maVSWidth.GetSelectItemId();
     271           0 :         if(iPos >= 1 && iPos <= 8)
     272             :         {
     273           0 :             sal_IntPtr nVal = LogicToLogic((sal_IntPtr)maVSWidth.GetItemData( iPos ) , MAP_POINT, (MapUnit)meMapUnit);
     274           0 :             nVal = maMFWidth.Denormalize(nVal);
     275           0 :             XLineWidthItem aWidthItem( nVal );
     276           0 :             mpBindings->GetDispatcher()->Execute(SID_ATTR_LINE_WIDTH, SFX_CALLMODE_RECORD, &aWidthItem, 0L);
     277           0 :             mrLinePropertyPanel.SetWidthIcon(iPos);
     278           0 :             mrLinePropertyPanel.SetWidth(nVal);
     279           0 :             mbColseByEdit = false;
     280           0 :             mnTmpCusomWidth = 0;
     281             :         }
     282           0 :         else if(iPos == 9)
     283             :         {//last custom
     284             :             //modified
     285           0 :             if(mbCustom)
     286             :             {
     287           0 :                 long nVal = LogicToLogic(mnCustomWidth , MAP_POINT, (MapUnit)meMapUnit);
     288           0 :                 nVal = maMFWidth.Denormalize(nVal);
     289           0 :                 XLineWidthItem aWidthItem( nVal );
     290           0 :                 mpBindings->GetDispatcher()->Execute(SID_ATTR_LINE_WIDTH, SFX_CALLMODE_RECORD, &aWidthItem, 0L);
     291           0 :                 mrLinePropertyPanel.SetWidth(nVal);
     292           0 :                 mbColseByEdit = false;
     293           0 :                 mnTmpCusomWidth = 0;
     294             :             }
     295             :             else
     296             :             {
     297           0 :                 maVSWidth.SetNoSelection();     //add , set no selection and keep the last select item
     298           0 :                 maVSWidth.Format();
     299           0 :                 Invalidate();
     300           0 :                 maVSWidth.StartSelection();
     301             :             }
     302             :             //modify end
     303             :         }
     304           0 :         if((iPos >= 1 && iPos <= 8) || (iPos == 9 && mbCustom)) //add
     305           0 :             mrLinePropertyPanel.EndLineWidthPopupMode();
     306             :     }
     307           0 :     return( 0L );
     308             : }
     309             : 
     310             : 
     311             : 
     312             : 
     313           0 : IMPL_LINK(LineWidthControl, MFModifyHdl, void *, pControl)
     314             : {
     315           0 :     if(pControl == &maMFWidth)
     316             :     {
     317           0 :         if(maVSWidth.GetSelItem())
     318             :         {
     319           0 :             maVSWidth.SetSelItem(0);
     320           0 :             maVSWidth.Format();
     321           0 :             Invalidate();
     322           0 :             maVSWidth.StartSelection();
     323             :         }
     324           0 :         long nTmp = static_cast<long>(maMFWidth.GetValue());
     325           0 :         long nVal = LogicToLogic( nTmp, MAP_POINT, (MapUnit)meMapUnit );
     326           0 :         sal_Int32 nNewWidth = (short)maMFWidth.Denormalize( nVal );
     327           0 :         XLineWidthItem aWidthItem(nNewWidth);
     328           0 :         mpBindings->GetDispatcher()->Execute(SID_ATTR_LINE_WIDTH, SFX_CALLMODE_RECORD, &aWidthItem, 0L);
     329             : 
     330           0 :         mbColseByEdit = true;
     331           0 :         mnTmpCusomWidth = nTmp;
     332             :         /*for(sal_uInt16 i = 0; i < 8; i++)
     333             :         {
     334             :             if(nTmp == (sal_Int32)maVSWidth.GetItemData(i))
     335             :             {
     336             :                 mbColseByEdit = false;
     337             :                 break;
     338             :             }
     339             :         }*/
     340             : 
     341             :     }
     342           0 :     return( 0L );
     343             : }
     344             : 
     345             : 
     346             : 
     347             : 
     348           0 : bool LineWidthControl::IsCloseByEdit()
     349             : {
     350           0 :     return mbColseByEdit;
     351             : }
     352             : 
     353             : 
     354             : 
     355             : 
     356           0 : long LineWidthControl::GetTmpCustomWidth()
     357             : {
     358           0 :     return mnTmpCusomWidth;
     359             : }
     360             : 
     361             : 
     362             : 
     363             : } } // end of namespace svx::sidebar
     364             : 
     365             : // eof

Generated by: LCOV version 1.10