LCOV - code coverage report
Current view: top level - svx/source/dialog - _contdlg.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 2 395 0.5 %
Date: 2014-11-03 Functions: 4 49 8.2 %
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             : 
      20             : #include <vcl/wrkwin.hxx>
      21             : #include <sot/factory.hxx>
      22             : #include <tools/helpers.hxx>
      23             : #include <vcl/msgbox.hxx>
      24             : #include <svl/eitem.hxx>
      25             : #include <sfx2/dispatch.hxx>
      26             : #include <sfx2/viewfrm.hxx>
      27             : #include <svtools/miscopt.hxx>
      28             : #include <unotools/localedatawrapper.hxx>
      29             : #include <comphelper/processfactory.hxx>
      30             : 
      31             : #include <svx/dialmgr.hxx>
      32             : #include "svx/xoutbmp.hxx"
      33             : #include <svx/dialogs.hrc>
      34             : #include <svx/svxids.hrc>
      35             : #include <svx/contdlg.hxx>
      36             : #include "contimp.hxx"
      37             : #include "contwnd.hxx"
      38             : #include <svx/svdtrans.hxx>
      39             : #include <svx/svdopath.hxx>
      40             : #include "svx/dlgutil.hxx"
      41             : #include <vcl/svapp.hxx>
      42             : #include <vcl/settings.hxx>
      43             : #include <vcl/virdev.hxx>
      44             : #include "dlgunit.hxx"
      45             : #include <vcl/layout.hxx>
      46             : 
      47         176 : SFX_IMPL_FLOATINGWINDOW_WITHID( SvxContourDlgChildWindow, SID_CONTOUR_DLG );
      48             : 
      49           0 : SvxContourDlgItem::SvxContourDlgItem( sal_uInt16 _nId, SvxSuperContourDlg& rContourDlg, SfxBindings& rBindings ) :
      50             :             SfxControllerItem   ( _nId, rBindings ),
      51           0 :             rDlg                ( rContourDlg )
      52             : {
      53           0 : }
      54             : 
      55           0 : void SvxContourDlgItem::StateChanged( sal_uInt16 nSID, SfxItemState /*eState*/, const SfxPoolItem* pItem )
      56             : {
      57           0 :     if ( pItem && ( SID_CONTOUR_EXEC == nSID ) )
      58             :     {
      59           0 :         const SfxBoolItem* pStateItem = PTR_CAST( SfxBoolItem, pItem );
      60             :         assert(pStateItem); //SfxBoolItem expected
      61           0 :         if (pStateItem)
      62           0 :             rDlg.SetExecState(!pStateItem->GetValue());
      63             :     }
      64           0 : }
      65             : 
      66           0 : SvxContourDlgChildWindow::SvxContourDlgChildWindow( vcl::Window* _pParent, sal_uInt16 nId,
      67             :                                                     SfxBindings* pBindings, SfxChildWinInfo* pInfo ) :
      68           0 :             SfxChildWindow( _pParent, nId )
      69             : {
      70           0 :     SvxSuperContourDlg* pDlg = new SvxSuperContourDlg(pBindings, this, _pParent);
      71           0 :     pWindow = pDlg;
      72             : 
      73           0 :     if ( pInfo->nFlags & SFX_CHILDWIN_ZOOMIN )
      74           0 :         pDlg->RollUp();
      75             : 
      76           0 :     eChildAlignment = SFX_ALIGN_NOALIGNMENT;
      77             : 
      78           0 :     pDlg->Initialize( pInfo );
      79           0 : }
      80             : 
      81           0 : SvxContourDlg::SvxContourDlg(SfxBindings* _pBindings, SfxChildWindow* pCW,
      82             :                              vcl::Window* _pParent)
      83             :     : SfxFloatingWindow(_pBindings, pCW, _pParent , "FloatingContour",
      84             :         "svx/ui/floatingcontour.ui")
      85           0 :     , pSuperClass(NULL)
      86             : {
      87           0 : }
      88             : 
      89           0 : SvxContourDlg::~SvxContourDlg()
      90             : {
      91           0 : }
      92             : 
      93           0 : tools::PolyPolygon SvxContourDlg::CreateAutoContour( const Graphic& rGraphic,
      94             :                                               const Rectangle* pRect,
      95             :                                               const sal_uIntPtr nFlags )
      96             : {
      97           0 :     Bitmap  aBmp;
      98           0 :     sal_uIntPtr nContourFlags = XOUTBMP_CONTOUR_HORZ;
      99             : 
     100           0 :     if ( rGraphic.GetType() == GRAPHIC_BITMAP )
     101             :     {
     102           0 :         if( rGraphic.IsAnimated() )
     103             :         {
     104           0 :             VirtualDevice       aVDev;
     105           0 :             MapMode             aTransMap;
     106           0 :             const Animation     aAnim( rGraphic.GetAnimation() );
     107           0 :             const Size&         rSizePix = aAnim.GetDisplaySizePixel();
     108           0 :             const sal_uInt16        nCount = aAnim.Count();
     109             : 
     110           0 :             if ( aVDev.SetOutputSizePixel( rSizePix ) )
     111             :             {
     112           0 :                 aVDev.SetLineColor( Color( COL_BLACK ) );
     113           0 :                 aVDev.SetFillColor( Color( COL_BLACK ) );
     114             : 
     115           0 :                 for( sal_uInt16 i = 0; i < nCount; i++ )
     116             :                 {
     117           0 :                     const AnimationBitmap& rStepBmp = aAnim.Get( i );
     118             : 
     119             :                     // Push Polygon output to the right place; this is the
     120             :                     // offset of the sub-image within the total animation
     121           0 :                     aTransMap.SetOrigin( Point( rStepBmp.aPosPix.X(), rStepBmp.aPosPix.Y() ) );
     122           0 :                     aVDev.SetMapMode( aTransMap );
     123           0 :                     aVDev.DrawPolyPolygon( CreateAutoContour( rStepBmp.aBmpEx, pRect, nFlags ) );
     124             :                 }
     125             : 
     126           0 :                 aTransMap.SetOrigin( Point() );
     127           0 :                 aVDev.SetMapMode( aTransMap );
     128           0 :                 aBmp = aVDev.GetBitmap( Point(), rSizePix );
     129           0 :                 aBmp.Convert( BMP_CONVERSION_1BIT_THRESHOLD );
     130           0 :             }
     131             :         }
     132           0 :         else if( rGraphic.IsTransparent() )
     133           0 :             aBmp = rGraphic.GetBitmapEx().GetMask();
     134             :         else
     135             :         {
     136           0 :             aBmp = rGraphic.GetBitmap();
     137           0 :             nContourFlags |= XOUTBMP_CONTOUR_EDGEDETECT;
     138             :         }
     139             :     }
     140           0 :     else if( rGraphic.GetType() != GRAPHIC_NONE )
     141             :     {
     142           0 :         const Graphic   aTmpGrf( rGraphic.GetGDIMetaFile().GetMonochromeMtf( Color( COL_BLACK ) ) );
     143           0 :         VirtualDevice   aVDev;
     144           0 :         Size            aSizePix( aVDev.LogicToPixel( aTmpGrf.GetPrefSize(), aTmpGrf.GetPrefMapMode() ) );
     145             : 
     146           0 :         if( aSizePix.Width() && aSizePix.Height() && ( aSizePix.Width() > 512 || aSizePix.Height() > 512 ) )
     147             :         {
     148           0 :             double fWH = (double) aSizePix.Width() / aSizePix.Height();
     149             : 
     150           0 :             if( fWH <= 1.0 )
     151           0 :                 aSizePix.Width() = FRound( ( aSizePix.Height() = 512 ) * fWH );
     152             :             else
     153           0 :                 aSizePix.Height() = FRound( ( aSizePix.Width() = 512 ) / fWH );
     154             :         }
     155             : 
     156           0 :         if( aVDev.SetOutputSizePixel( aSizePix ) )
     157             :         {
     158           0 :             const Point aPt;
     159           0 :             aTmpGrf.Draw( &aVDev, aPt, aSizePix );
     160           0 :             aBmp = aVDev.GetBitmap( aPt, aSizePix );
     161             :         }
     162             : 
     163           0 :         nContourFlags |= XOUTBMP_CONTOUR_EDGEDETECT;
     164             :     }
     165             : 
     166           0 :     aBmp.SetPrefSize( rGraphic.GetPrefSize() );
     167           0 :     aBmp.SetPrefMapMode( rGraphic.GetPrefMapMode() );
     168             : 
     169           0 :     return tools::PolyPolygon( XOutBitmap::GetCountour( aBmp, nContourFlags, 128, pRect ) );
     170             : }
     171             : 
     172             : // Loop through to super class, no virtual Methods to not become incompatible
     173             : // due to IF changes
     174             : 
     175           0 : const Graphic& SvxContourDlg::GetGraphic() const
     176             : {
     177           0 :     return pSuperClass->GetGraphic();
     178             : }
     179             : 
     180           0 : bool SvxContourDlg::IsGraphicChanged() const
     181             : {
     182           0 :     return pSuperClass->IsGraphicChanged();
     183             : }
     184             : 
     185           0 : tools::PolyPolygon SvxContourDlg::GetPolyPolygon()
     186             : {
     187           0 :     return pSuperClass->GetPolyPolygon( true );
     188             : }
     189             : 
     190           0 : const void* SvxContourDlg::GetEditingObject() const
     191             : {
     192           0 :     return pSuperClass->GetEditingObject();
     193             : }
     194             : 
     195           0 : void SvxContourDlg::Update( const Graphic& rGraphic, bool bGraphicLinked,
     196             :                             const tools::PolyPolygon* pPolyPoly, void* pEditingObj )
     197             : {
     198           0 :     pSuperClass->UpdateGraphic( rGraphic, bGraphicLinked, pPolyPoly, pEditingObj );
     199           0 : }
     200             : 
     201           0 : SvxSuperContourDlg::SvxSuperContourDlg(SfxBindings *_pBindings, SfxChildWindow *pCW,
     202             :                                        vcl::Window* _pParent) :
     203             :         SvxContourDlg       ( _pBindings, pCW, _pParent ),
     204             :         pUpdateEditingObject( NULL ),
     205             :         pCheckObj           ( NULL ),
     206             :         aContourItem        ( SID_CONTOUR_EXEC, *this, *_pBindings ),
     207             :         nGrfChanged         ( 0UL ),
     208             :         bExecState          ( false ),
     209             :         bUpdateGraphicLinked( false ),
     210           0 :         bGraphicLinked      ( false )
     211             : {
     212           0 :     get(m_pTbx1, "toolbar");
     213           0 :     get(m_pMtfTolerance, "spinbutton");
     214           0 :     m_pContourWnd = new ContourWindow(get<vcl::Window>("container"), WB_BORDER);
     215           0 :     m_pContourWnd->set_hexpand(true);
     216           0 :     m_pContourWnd->set_vexpand(true);
     217           0 :     m_pContourWnd->Show();
     218           0 :     get(m_pStbStatus, "statusbar");
     219             : 
     220           0 :     mnApplyId = m_pTbx1->GetItemId("TBI_APPLY");
     221           0 :     mnWorkSpaceId = m_pTbx1->GetItemId("TBI_WORKPLACE");
     222           0 :     mnSelectId = m_pTbx1->GetItemId("TBI_SELECT");
     223           0 :     mnRectId = m_pTbx1->GetItemId("TBI_RECT");
     224           0 :     mnCircleId = m_pTbx1->GetItemId("TBI_CIRCLE");
     225           0 :     mnPolyId = m_pTbx1->GetItemId("TBI_POLY");
     226           0 :     mnPolyEditId = m_pTbx1->GetItemId("TBI_POLYEDIT");
     227           0 :     mnPolyMoveId = m_pTbx1->GetItemId("TBI_POLYMOVE");
     228           0 :     mnPolyInsertId = m_pTbx1->GetItemId("TBI_POLYINSERT");
     229           0 :     mnPolyDeleteId = m_pTbx1->GetItemId("TBI_POLYDELETE");
     230           0 :     mnAutoContourId = m_pTbx1->GetItemId("TBI_AUTOCONTOUR");
     231           0 :     mnUndoId = m_pTbx1->GetItemId("TBI_UNDO");
     232           0 :     mnRedoId = m_pTbx1->GetItemId("TBI_REDO");
     233           0 :     mnPipetteId = m_pTbx1->GetItemId("TBI_PIPETTE");
     234             : 
     235           0 :     SvxContourDlg::SetSuperClass( *this );
     236             : 
     237           0 :     m_pContourWnd->SetMousePosLink( LINK( this, SvxSuperContourDlg, MousePosHdl ) );
     238           0 :     m_pContourWnd->SetGraphSizeLink( LINK( this, SvxSuperContourDlg, GraphSizeHdl ) );
     239           0 :     m_pContourWnd->SetUpdateLink( LINK( this, SvxSuperContourDlg, StateHdl ) );
     240           0 :     m_pContourWnd->SetPipetteHdl( LINK( this, SvxSuperContourDlg, PipetteHdl ) );
     241           0 :     m_pContourWnd->SetPipetteClickHdl( LINK( this, SvxSuperContourDlg, PipetteClickHdl ) );
     242           0 :     m_pContourWnd->SetWorkplaceClickHdl( LINK( this, SvxSuperContourDlg, WorkplaceClickHdl ) );
     243             : 
     244           0 :     const Size      aTbxSize( m_pTbx1->CalcWindowSizePixel() );
     245           0 :     Point           aPos( m_pTbx1->GetPosPixel() );
     246           0 :       SvtMiscOptions  aMiscOptions;
     247             : 
     248           0 :     aMiscOptions.AddListenerLink( LINK( this, SvxSuperContourDlg, MiscHdl ) );
     249             : 
     250           0 :     m_pTbx1->SetOutStyle( aMiscOptions.GetToolboxStyle() );
     251           0 :     m_pTbx1->SetSizePixel( aTbxSize );
     252           0 :     m_pTbx1->SetSelectHdl( LINK( this, SvxSuperContourDlg, Tbx1ClickHdl ) );
     253             : 
     254           0 :     aPos.X() += aTbxSize.Width() + LogicToPixel( Size( 3, 0 ), MapMode( MAP_APPFONT ) ).Width();
     255           0 :     m_pMtfTolerance->SetPosPixel( aPos );
     256           0 :     m_pMtfTolerance->SetValue( 10L );
     257             : 
     258           0 :     SetMinOutputSizePixel( aLastSize = GetOutputSizePixel() );
     259             : 
     260           0 :     m_pStbStatus->InsertItem( 1, 130, SIB_LEFT | SIB_IN | SIB_AUTOSIZE );
     261           0 :     m_pStbStatus->InsertItem( 2, 10 + GetTextWidth( OUString(" 9999,99 cm / 9999,99 cm ") ), SIB_CENTER | SIB_IN );
     262           0 :     m_pStbStatus->InsertItem( 3, 10 + GetTextWidth( OUString(" 9999,99 cm x 9999,99 cm ") ), SIB_CENTER | SIB_IN );
     263           0 :     m_pStbStatus->InsertItem( 4, 20, SIB_CENTER | SIB_IN );
     264             : 
     265           0 :     Resize();
     266             : 
     267           0 :     aUpdateTimer.SetTimeout( 100 );
     268           0 :     aUpdateTimer.SetTimeoutHdl( LINK( this, SvxSuperContourDlg, UpdateHdl ) );
     269             : 
     270           0 :     aCreateTimer.SetTimeout( 50 );
     271           0 :     aCreateTimer.SetTimeoutHdl( LINK( this, SvxSuperContourDlg, CreateHdl ) );
     272           0 : }
     273             : 
     274           0 : SvxSuperContourDlg::~SvxSuperContourDlg()
     275             : {
     276           0 :     SvtMiscOptions aMiscOptions;
     277           0 :     aMiscOptions.RemoveListenerLink( LINK(this, SvxSuperContourDlg, MiscHdl) );
     278           0 :     delete m_pContourWnd;
     279           0 : }
     280             : 
     281           0 : bool SvxSuperContourDlg::Close()
     282             : {
     283           0 :     bool bRet = true;
     284             : 
     285           0 :     if (m_pTbx1->IsItemEnabled(mnApplyId))
     286             :     {
     287           0 :         MessageDialog aQBox( this,"QuerySaveContourChangesDialog","svx/ui/querysavecontchangesdialog.ui");
     288           0 :         const long  nRet = aQBox.Execute();
     289             : 
     290           0 :         if ( nRet == RET_YES )
     291             :         {
     292           0 :             SfxBoolItem aBoolItem( SID_CONTOUR_EXEC, true );
     293           0 :             GetBindings().GetDispatcher()->Execute(
     294           0 :                 SID_CONTOUR_EXEC, SfxCallMode::SYNCHRON | SfxCallMode::RECORD, &aBoolItem, 0L );
     295             :         }
     296           0 :         else if ( nRet == RET_CANCEL )
     297           0 :             bRet = false;
     298             :     }
     299             : 
     300           0 :     return( bRet ? SfxFloatingWindow::Close() : sal_False );
     301             : }
     302             : 
     303             : // Enabled or disabled all Controls
     304             : 
     305           0 : void SvxSuperContourDlg::SetExecState( bool bEnable )
     306             : {
     307           0 :     bExecState = bEnable;
     308           0 : }
     309             : 
     310           0 : void SvxSuperContourDlg::SetGraphic( const Graphic& rGraphic )
     311             : {
     312           0 :     aUndoGraphic = aRedoGraphic = Graphic();
     313           0 :     aGraphic = rGraphic;
     314           0 :     nGrfChanged = 0UL;
     315           0 :     m_pContourWnd->SetGraphic( aGraphic );
     316           0 : }
     317             : 
     318           0 : void SvxSuperContourDlg::SetPolyPolygon( const tools::PolyPolygon& rPolyPoly )
     319             : {
     320             :     DBG_ASSERT(  m_pContourWnd->GetGraphic().GetType() != GRAPHIC_NONE, "Graphic must've been set first!" );
     321             : 
     322           0 :     tools::PolyPolygon     aPolyPoly( rPolyPoly );
     323           0 :     const MapMode   aMap100( MAP_100TH_MM );
     324           0 :     const MapMode   aGrfMap( aGraphic.GetPrefMapMode() );
     325           0 :     OutputDevice*   pOutDev = Application::GetDefaultDevice();
     326           0 :     bool            bPixelMap = aGrfMap.GetMapUnit() == MAP_PIXEL;
     327             : 
     328           0 :     for ( sal_uInt16 j = 0, nPolyCount = aPolyPoly.Count(); j < nPolyCount; j++ )
     329             :     {
     330           0 :         Polygon& rPoly = aPolyPoly[ j ];
     331             : 
     332           0 :         for ( sal_uInt16 i = 0, nCount = rPoly.GetSize(); i < nCount; i++ )
     333             :         {
     334           0 :             Point& rPt = rPoly[ i ];
     335             : 
     336           0 :             if ( !bPixelMap )
     337           0 :                 rPt = pOutDev->LogicToPixel( rPt, aGrfMap );
     338             : 
     339           0 :             rPt = pOutDev->PixelToLogic( rPt, aMap100 );
     340             :         }
     341             :     }
     342             : 
     343           0 :     m_pContourWnd->SetPolyPolygon( aPolyPoly );
     344           0 :     m_pContourWnd->GetSdrModel()->SetChanged( true );
     345           0 : }
     346             : 
     347           0 : tools::PolyPolygon SvxSuperContourDlg::GetPolyPolygon( bool bRescaleToGraphic )
     348             : {
     349           0 :     tools::PolyPolygon aRetPolyPoly( m_pContourWnd->GetPolyPolygon() );
     350             : 
     351           0 :     if ( bRescaleToGraphic )
     352             :     {
     353           0 :         const MapMode   aMap100( MAP_100TH_MM );
     354           0 :         const MapMode   aGrfMap( aGraphic.GetPrefMapMode() );
     355           0 :         OutputDevice*   pOutDev = Application::GetDefaultDevice();
     356           0 :         bool            bPixelMap = aGrfMap.GetMapUnit() == MAP_PIXEL;
     357             : 
     358           0 :         for ( sal_uInt16 j = 0, nPolyCount = aRetPolyPoly.Count(); j < nPolyCount; j++ )
     359             :         {
     360           0 :             Polygon& rPoly = aRetPolyPoly[ j ];
     361             : 
     362           0 :             for ( sal_uInt16 i = 0, nCount = rPoly.GetSize(); i < nCount; i++ )
     363             :             {
     364           0 :                 Point& rPt = rPoly[ i ];
     365             : 
     366           0 :                 rPt = pOutDev->LogicToPixel( rPt, aMap100  );
     367             : 
     368           0 :                 if ( !bPixelMap )
     369           0 :                     rPt = pOutDev->PixelToLogic( rPt, aGrfMap  );
     370             :             }
     371           0 :         }
     372             :     }
     373             : 
     374           0 :     return aRetPolyPoly;
     375             : }
     376             : 
     377           0 : void SvxSuperContourDlg::UpdateGraphic( const Graphic& rGraphic, bool _bGraphicLinked,
     378             :                                  const tools::PolyPolygon* pPolyPoly, void* pEditingObj )
     379             : {
     380           0 :     aUpdateGraphic = rGraphic;
     381           0 :     bUpdateGraphicLinked = _bGraphicLinked;
     382           0 :     pUpdateEditingObject = pEditingObj;
     383             : 
     384           0 :     if ( pPolyPoly )
     385           0 :         aUpdatePolyPoly = *pPolyPoly;
     386             :     else
     387           0 :         aUpdatePolyPoly = tools::PolyPolygon();
     388             : 
     389           0 :     aUpdateTimer.Start();
     390           0 : }
     391             : 
     392           0 : bool SvxSuperContourDlg::IsUndoPossible() const
     393             : {
     394           0 :     return aUndoGraphic.GetType() != GRAPHIC_NONE;
     395             : }
     396             : 
     397           0 : bool SvxSuperContourDlg::IsRedoPossible() const
     398             : {
     399           0 :     return aRedoGraphic.GetType() != GRAPHIC_NONE;
     400             : }
     401             : 
     402             : // Click handler for ToolBox
     403             : 
     404           0 : IMPL_LINK( SvxSuperContourDlg, Tbx1ClickHdl, ToolBox*, pTbx )
     405             : {
     406           0 :     sal_uInt16 nNewItemId = pTbx->GetCurItemId();
     407             : 
     408           0 :     sal_uInt16 nId = pTbx->GetCurItemId();
     409           0 :     if (nId == mnApplyId)
     410             :     {
     411           0 :         SfxBoolItem aBoolItem( SID_CONTOUR_EXEC, true );
     412           0 :         GetBindings().GetDispatcher()->Execute(
     413           0 :             SID_CONTOUR_EXEC, SfxCallMode::ASYNCHRON | SfxCallMode::RECORD, &aBoolItem, 0L );
     414             :     }
     415           0 :     else if (nId == mnWorkSpaceId)
     416             :     {
     417           0 :         if (m_pTbx1->IsItemChecked(mnWorkSpaceId))
     418             :         {
     419           0 :             MessageDialog aQBox( this,"QueryDeleteContourDialog","svx/ui/querydeletecontourdialog.ui");
     420             : 
     421           0 :             if ( !m_pContourWnd->IsContourChanged() || ( aQBox.Execute() == RET_YES ) )
     422           0 :                 m_pContourWnd->SetWorkplaceMode( true );
     423             :             else
     424           0 :                 m_pTbx1->CheckItem(mnWorkSpaceId, false);
     425             :         }
     426             :         else
     427           0 :             m_pContourWnd->SetWorkplaceMode( false );
     428             :     }
     429           0 :     else if (nId == mnSelectId)
     430             :     {
     431           0 :         pTbx->CheckItem( nNewItemId, true );
     432           0 :         m_pContourWnd->SetEditMode( true );
     433             :     }
     434           0 :     else if (nId == mnRectId)
     435             :     {
     436           0 :         pTbx->CheckItem( nNewItemId, true );
     437           0 :         m_pContourWnd->SetObjKind( OBJ_RECT );
     438             :     }
     439           0 :     else if (nId == mnCircleId)
     440             :     {
     441           0 :         pTbx->CheckItem( nNewItemId, true );
     442           0 :         m_pContourWnd->SetObjKind( OBJ_CIRC );
     443             :     }
     444           0 :     else if (nId == mnPolyId)
     445             :     {
     446           0 :         pTbx->CheckItem( nNewItemId, true );
     447           0 :         m_pContourWnd->SetObjKind( OBJ_POLY );
     448             :     }
     449           0 :     else if (nId == mnPolyEditId)
     450             :     {
     451           0 :         m_pContourWnd->SetPolyEditMode(pTbx->IsItemChecked(mnPolyEditId) ? SID_BEZIER_MOVE : 0);
     452             :     }
     453           0 :     else if (nId == mnPolyMoveId)
     454             :     {
     455           0 :         m_pContourWnd->SetPolyEditMode( SID_BEZIER_MOVE );
     456             :     }
     457           0 :     else if (nId == mnPolyInsertId)
     458             :     {
     459           0 :         m_pContourWnd->SetPolyEditMode( SID_BEZIER_INSERT );
     460             :     }
     461           0 :     else if (nId == mnPolyDeleteId)
     462             :     {
     463           0 :         m_pContourWnd->GetSdrView()->DeleteMarkedPoints();
     464             :     }
     465           0 :     else if (nId == mnUndoId)
     466             :     {
     467           0 :         nGrfChanged = nGrfChanged ? nGrfChanged - 1 : 0UL;
     468           0 :         aRedoGraphic = aGraphic;
     469           0 :         aGraphic = aUndoGraphic;
     470           0 :         aUndoGraphic = Graphic();
     471           0 :         m_pContourWnd->SetGraphic( aGraphic, false );
     472             :     }
     473           0 :     else if (nId == mnRedoId)
     474             :     {
     475           0 :         nGrfChanged++;
     476           0 :         aUndoGraphic = aGraphic;
     477           0 :         aGraphic = aRedoGraphic;
     478           0 :         aRedoGraphic = Graphic();
     479           0 :         m_pContourWnd->SetGraphic( aGraphic, false );
     480             :     }
     481           0 :     else if (nId == mnAutoContourId)
     482             :     {
     483           0 :         aCreateTimer.Start();
     484             :     }
     485           0 :     else if (nId == mnPipetteId)
     486             :     {
     487           0 :         bool bPipette = m_pTbx1->IsItemChecked(mnPipetteId);
     488             : 
     489           0 :         if ( !bPipette )
     490           0 :             m_pStbStatus->Invalidate();
     491           0 :         else if ( bGraphicLinked )
     492             :         {
     493             :             MessageDialog aQBox(this, "QueryUnlinkGraphicsDialog",
     494           0 :                 "svx/ui/queryunlinkgraphicsdialog.ui");
     495             : 
     496           0 :             if (aQBox.Execute() != RET_YES)
     497             :             {
     498           0 :                 bPipette = false;
     499           0 :                 m_pTbx1->CheckItem(mnPipetteId, bPipette);
     500           0 :                 m_pStbStatus->Invalidate();
     501           0 :             }
     502             :         }
     503             : 
     504           0 :         m_pContourWnd->SetPipetteMode( bPipette );
     505             :     }
     506             : 
     507           0 :     return 0L;
     508             : }
     509             : 
     510           0 : IMPL_LINK( SvxSuperContourDlg, MousePosHdl, ContourWindow*, pWnd )
     511             : {
     512           0 :     OUString aStr;
     513           0 :     const FieldUnit eFieldUnit = GetBindings().GetDispatcher()->GetModule()->GetFieldUnit();
     514           0 :     const Point& rMousePos = pWnd->GetMousePos();
     515           0 :     const LocaleDataWrapper& rLocaleWrapper( Application::GetSettings().GetLocaleDataWrapper() );
     516           0 :     const sal_Unicode cSep = rLocaleWrapper.getNumDecimalSep()[0];
     517             : 
     518           0 :     aStr = GetUnitString( rMousePos.X(), eFieldUnit, cSep );
     519           0 :     aStr += " / ";
     520           0 :     aStr += GetUnitString( rMousePos.Y(), eFieldUnit, cSep );
     521             : 
     522           0 :     m_pStbStatus->SetItemText( 2, aStr );
     523             : 
     524           0 :     return 0L;
     525             : }
     526             : 
     527           0 : IMPL_LINK( SvxSuperContourDlg, GraphSizeHdl, ContourWindow*, pWnd )
     528             : {
     529           0 :     OUString aStr;
     530           0 :     const FieldUnit eFieldUnit = GetBindings().GetDispatcher()->GetModule()->GetFieldUnit();
     531           0 :     const Size& rSize = pWnd->GetGraphicSize();
     532           0 :     const LocaleDataWrapper& rLocaleWrapper( Application::GetSettings().GetLocaleDataWrapper() );
     533           0 :     const sal_Unicode cSep = rLocaleWrapper.getNumDecimalSep()[0];
     534             : 
     535           0 :     aStr = GetUnitString( rSize.Width(), eFieldUnit, cSep );
     536           0 :     aStr += " x ";
     537           0 :     aStr += GetUnitString( rSize.Height(), eFieldUnit, cSep );
     538             : 
     539           0 :     m_pStbStatus->SetItemText( 3, aStr );
     540             : 
     541           0 :     return 0L;
     542             : }
     543             : 
     544           0 : IMPL_LINK_NOARG(SvxSuperContourDlg, UpdateHdl)
     545             : {
     546           0 :     aUpdateTimer.Stop();
     547             : 
     548           0 :     if ( pUpdateEditingObject != pCheckObj )
     549             :     {
     550           0 :         if( !GetEditingObject() )
     551           0 :             m_pContourWnd->GrabFocus();
     552             : 
     553           0 :         SetGraphic( aUpdateGraphic );
     554           0 :         SetPolyPolygon( aUpdatePolyPoly );
     555           0 :         SetEditingObject( pUpdateEditingObject );
     556           0 :         bGraphicLinked = bUpdateGraphicLinked;
     557             : 
     558           0 :         aUpdateGraphic = Graphic();
     559           0 :         aUpdatePolyPoly = tools::PolyPolygon();
     560           0 :         bUpdateGraphicLinked = false;
     561             : 
     562           0 :         m_pContourWnd->GetSdrModel()->SetChanged( false );
     563             :     }
     564             : 
     565           0 :     GetBindings().Invalidate( SID_CONTOUR_EXEC );
     566             : 
     567           0 :     return 0L;
     568             : }
     569             : 
     570           0 : IMPL_LINK_NOARG(SvxSuperContourDlg, CreateHdl)
     571             : {
     572           0 :     aCreateTimer.Stop();
     573             : 
     574           0 :     const Rectangle aWorkRect = m_pContourWnd->LogicToPixel( m_pContourWnd->GetWorkRect(), MapMode( MAP_100TH_MM ) );
     575           0 :     const Graphic&  rGraphic = m_pContourWnd->GetGraphic();
     576           0 :     const bool      bValid = aWorkRect.Left() != aWorkRect.Right() && aWorkRect.Top() != aWorkRect.Bottom();
     577             : 
     578           0 :     EnterWait();
     579           0 :     SetPolyPolygon( CreateAutoContour( rGraphic, bValid ? &aWorkRect : NULL ) );
     580           0 :     LeaveWait();
     581             : 
     582           0 :     return 0L;
     583             : }
     584             : 
     585           0 : IMPL_LINK( SvxSuperContourDlg, StateHdl, ContourWindow*, pWnd )
     586             : {
     587           0 :     const SdrObject*    pObj = pWnd->GetSelectedSdrObject();
     588           0 :     const SdrView*      pView = pWnd->GetSdrView();
     589           0 :     const bool          bPolyEdit = ( pObj != NULL ) && pObj->ISA( SdrPathObj );
     590           0 :     const bool          bDrawEnabled = !(bPolyEdit && m_pTbx1->IsItemChecked(mnPolyEditId));
     591           0 :     const bool          bPipette = m_pTbx1->IsItemChecked(mnPipetteId);
     592           0 :     const bool          bWorkplace = m_pTbx1->IsItemChecked(mnWorkSpaceId);
     593           0 :     const bool          bDontHide = !( bPipette || bWorkplace );
     594           0 :     const bool          bBitmap = pWnd->GetGraphic().GetType() == GRAPHIC_BITMAP;
     595             : 
     596           0 :     m_pTbx1->EnableItem(mnApplyId, bDontHide && bExecState && pWnd->IsChanged());
     597             : 
     598           0 :     m_pTbx1->EnableItem(mnWorkSpaceId, !bPipette && bDrawEnabled);
     599             : 
     600           0 :     m_pTbx1->EnableItem(mnSelectId, bDontHide && bDrawEnabled);
     601           0 :     m_pTbx1->EnableItem(mnRectId, bDontHide && bDrawEnabled);
     602           0 :     m_pTbx1->EnableItem(mnCircleId, bDontHide && bDrawEnabled);
     603           0 :     m_pTbx1->EnableItem(mnPolyId, bDontHide && bDrawEnabled);
     604             : 
     605           0 :     m_pTbx1->EnableItem(mnPolyEditId, bDontHide && bPolyEdit);
     606           0 :     m_pTbx1->EnableItem(mnPolyMoveId, bDontHide && !bDrawEnabled);
     607           0 :     m_pTbx1->EnableItem(mnPolyInsertId, bDontHide && !bDrawEnabled);
     608           0 :     m_pTbx1->EnableItem(mnPolyDeleteId, bDontHide && !bDrawEnabled && pView->IsDeleteMarkedPointsPossible());
     609             : 
     610           0 :     m_pTbx1->EnableItem(mnAutoContourId, bDontHide && bDrawEnabled);
     611           0 :     m_pTbx1->EnableItem(mnPipetteId, !bWorkplace && bDrawEnabled && bBitmap);
     612             : 
     613           0 :     m_pTbx1->EnableItem(mnUndoId, bDontHide && IsUndoPossible());
     614           0 :     m_pTbx1->EnableItem(mnRedoId, bDontHide && IsRedoPossible());
     615             : 
     616           0 :     if ( bPolyEdit )
     617             :     {
     618           0 :         sal_uInt16 nId = 0;
     619             : 
     620           0 :         switch( pWnd->GetPolyEditMode() )
     621             :         {
     622           0 :             case( SID_BEZIER_MOVE ): nId = mnPolyMoveId; break;
     623           0 :             case( SID_BEZIER_INSERT ): nId = mnPolyInsertId; break;
     624             : 
     625             :             default:
     626           0 :             break;
     627             :         }
     628             : 
     629           0 :         m_pTbx1->CheckItem( nId, true );
     630             :     }
     631             :     else
     632             :     {
     633           0 :         m_pTbx1->CheckItem(mnPolyEditId, false);
     634           0 :         m_pTbx1->CheckItem(mnPolyMoveId, true);
     635           0 :         m_pTbx1->CheckItem(mnPolyInsertId, false);
     636           0 :         pWnd->SetPolyEditMode( 0 );
     637             :     }
     638             : 
     639           0 :     return 0L;
     640             : }
     641             : 
     642           0 : IMPL_LINK( SvxSuperContourDlg, PipetteHdl, ContourWindow*, pWnd )
     643             : {
     644           0 :     const Color& rOldLineColor = m_pStbStatus->GetLineColor();
     645           0 :     const Color& rOldFillColor = m_pStbStatus->GetFillColor();
     646             : 
     647           0 :     Rectangle       aRect( m_pStbStatus->GetItemRect( 4 ) );
     648           0 :     const Color&    rColor = pWnd->GetPipetteColor();
     649             : 
     650           0 :     m_pStbStatus->SetLineColor( rColor );
     651           0 :     m_pStbStatus->SetFillColor( rColor );
     652             : 
     653           0 :     aRect.Left() += 4;
     654           0 :     aRect.Top() += 4;
     655           0 :     aRect.Right() -= 4;
     656           0 :     aRect.Bottom() -= 4;
     657             : 
     658           0 :     m_pStbStatus->DrawRect( aRect );
     659             : 
     660           0 :     m_pStbStatus->SetLineColor( rOldLineColor );
     661           0 :     m_pStbStatus->SetFillColor( rOldFillColor );
     662             : 
     663           0 :     return 0L;
     664             : }
     665             : 
     666           0 : IMPL_LINK( SvxSuperContourDlg, PipetteClickHdl, ContourWindow*, pWnd )
     667             : {
     668           0 :     if ( pWnd->IsClickValid() )
     669             :     {
     670           0 :         Bitmap          aMask;
     671           0 :         const Color&    rColor = pWnd->GetPipetteColor();
     672             : 
     673           0 :         EnterWait();
     674             : 
     675           0 :         if( aGraphic.GetType() == GRAPHIC_BITMAP )
     676             :         {
     677           0 :             Bitmap      aBmp( aGraphic.GetBitmap() );
     678           0 :             const long  nTol = static_cast<long>(m_pMtfTolerance->GetValue() * 255L / 100L);
     679             : 
     680           0 :             aMask = aBmp.CreateMask( rColor, nTol );
     681             : 
     682           0 :             if( aGraphic.IsTransparent() )
     683           0 :                 aMask.CombineSimple( aGraphic.GetBitmapEx().GetMask(), BMP_COMBINE_OR );
     684             : 
     685           0 :             if( !!aMask )
     686             :             {
     687           0 :                 MessageDialog aQBox( this,"QueryNewContourDialog","svx/ui/querynewcontourdialog.ui");
     688             :                 bool        bNewContour;
     689             : 
     690           0 :                 aRedoGraphic = Graphic();
     691           0 :                 aUndoGraphic = aGraphic;
     692           0 :                 aGraphic = Graphic( BitmapEx( aBmp, aMask ) );
     693           0 :                 nGrfChanged++;
     694             : 
     695           0 :                 bNewContour = ( aQBox.Execute() == RET_YES );
     696           0 :                 pWnd->SetGraphic( aGraphic, bNewContour );
     697             : 
     698           0 :                 if( bNewContour )
     699           0 :                     aCreateTimer.Start();
     700           0 :             }
     701             :         }
     702             : 
     703           0 :         LeaveWait();
     704             :     }
     705             : 
     706           0 :     m_pTbx1->CheckItem(mnPipetteId, false);
     707           0 :     pWnd->SetPipetteMode( false );
     708           0 :     m_pStbStatus->Invalidate();
     709             : 
     710           0 :     return 0L;
     711             : }
     712             : 
     713           0 : IMPL_LINK( SvxSuperContourDlg, WorkplaceClickHdl, ContourWindow*, pWnd )
     714             : {
     715           0 :     m_pTbx1->CheckItem(mnWorkSpaceId, false);
     716           0 :     m_pTbx1->CheckItem(mnSelectId, true);
     717           0 :     pWnd->SetWorkplaceMode( false );
     718             : 
     719           0 :     return 0L;
     720             : }
     721             : 
     722           0 : IMPL_LINK_NOARG(SvxSuperContourDlg, MiscHdl)
     723             : {
     724           0 :        SvtMiscOptions aMiscOptions;
     725           0 :     m_pTbx1->SetOutStyle( aMiscOptions.GetToolboxStyle() );
     726             : 
     727           0 :     return 0L;
     728         594 : }
     729             : 
     730             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10