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

Generated by: LCOV version 1.11