LCOV - code coverage report
Current view: top level - svx/source/dialog - imapdlg.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 2 423 0.5 %
Date: 2014-11-03 Functions: 4 42 9.5 %
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 <stdlib.h>
      21             : #include <tools/errinf.hxx>
      22             : #include <tools/urlobj.hxx>
      23             : #include <unotools/ucbstreamhelper.hxx>
      24             : #include <vcl/msgbox.hxx>
      25             : #include <vcl/group.hxx>
      26             : #include <vcl/lstbox.hxx>
      27             : #include <svl/eitem.hxx>
      28             : #include <unotools/pathoptions.hxx>
      29             : #include <sfx2/dispatch.hxx>
      30             : #include <sfx2/module.hxx>
      31             : #include <sfx2/filedlghelper.hxx>
      32             : #include "com/sun/star/ui/dialogs/TemplateDescription.hpp"
      33             : #include <svl/urihelper.hxx>
      34             : #include <svtools/miscopt.hxx>
      35             : #include <svtools/ehdl.hxx>
      36             : #include <svtools/sfxecode.hxx>
      37             : #include <sfx2/viewfrm.hxx>
      38             : #include <sfx2/objsh.hxx>
      39             : #include <sfx2/docfile.hxx>
      40             : #include <unotools/localedatawrapper.hxx>
      41             : #include <comphelper/processfactory.hxx>
      42             : #include <vcl/layout.hxx>
      43             : #include <svx/imapdlg.hxx>
      44             : #include <svx/dialmgr.hxx>
      45             : #include <svx/dialogs.hrc>
      46             : #include <svx/svxids.hrc>
      47             : #include "imapdlg.hrc"
      48             : #include "imapwnd.hxx"
      49             : #include "imapimp.hxx"
      50             : #include "svx/dlgutil.hxx"
      51             : #include <svx/svdtrans.hxx>
      52             : #include <svx/svdopath.hxx>
      53             : #include <vcl/svapp.hxx>
      54             : #include <vcl/settings.hxx>
      55             : #include "dlgunit.hxx"
      56             : #include <boost/scoped_ptr.hpp>
      57             : 
      58             : #define SELF_TARGET         "_self"
      59             : #define IMAP_ALL_FILTER     OUString("<Alle>")
      60             : #define IMAP_CERN_FILTER    OUString("MAP - CERN")
      61             : #define IMAP_NCSA_FILTER    OUString("MAP - NCSA")
      62             : #define IMAP_BINARY_FILTER  OUString("SIP - StarView ImageMap")
      63             : #define IMAP_ALL_TYPE       OUString("*.*")
      64             : #define IMAP_BINARY_TYPE    OUString("*.sip")
      65             : #define IMAP_CERN_TYPE      OUString("*.map")
      66             : #define IMAP_NCSA_TYPE      OUString("*.map")
      67             : #define IMAP_BINARY_EXT     OUString("sip")
      68             : #define IMAP_CERN_EXT       OUString("map")
      69             : #define IMAP_NCSA_EXT       OUString("map")
      70             : 
      71         522 : SFX_IMPL_MODELESSDIALOG_WITHID( SvxIMapDlgChildWindow, SID_IMAP );
      72             : 
      73             : // ControllerItem
      74             : 
      75           0 : SvxIMapDlgItem::SvxIMapDlgItem( sal_uInt16 _nId, SvxIMapDlg& rIMapDlg, SfxBindings& rBindings ) :
      76             :             SfxControllerItem   ( _nId, rBindings ),
      77           0 :             rIMap               ( rIMapDlg )
      78             : {
      79           0 : }
      80             : 
      81           0 : void SvxIMapDlgItem::StateChanged( sal_uInt16 nSID, SfxItemState /*eState*/,
      82             :                                    const SfxPoolItem* pItem )
      83             : {
      84           0 :     if ( ( nSID == SID_IMAP_EXEC ) && pItem )
      85             :     {
      86           0 :         const SfxBoolItem* pStateItem = PTR_CAST( SfxBoolItem, pItem );
      87             :         assert(pStateItem); //SfxBoolItem expected
      88           0 :         if (pStateItem)
      89             :         {
      90             :             // Disable Float if possible
      91           0 :             rIMap.SetExecState( !pStateItem->GetValue() );
      92             :         }
      93             :     }
      94           0 : }
      95             : 
      96           0 : SvxIMapDlgChildWindow::SvxIMapDlgChildWindow( vcl::Window* _pParent, sal_uInt16 nId,
      97             :                                               SfxBindings* pBindings,
      98             :                                               SfxChildWinInfo* pInfo ) :
      99           0 :             SfxChildWindow( _pParent, nId )
     100             : {
     101           0 :     pWindow = new SvxIMapDlg( pBindings, this, _pParent );
     102           0 :     SvxIMapDlg* pDlg = static_cast<SvxIMapDlg*>(pWindow);
     103             : 
     104           0 :     if ( pInfo->nFlags & SFX_CHILDWIN_ZOOMIN )
     105           0 :         pDlg->RollUp();
     106             : 
     107           0 :     eChildAlignment = SFX_ALIGN_NOALIGNMENT;
     108             : 
     109           0 :     pDlg->Initialize( pInfo );
     110           0 : }
     111             : 
     112           0 : void SvxIMapDlgChildWindow::UpdateIMapDlg( const Graphic& rGraphic, const ImageMap* pImageMap,
     113             :                                            const TargetList* pTargetList, void* pEditingObj )
     114             : {
     115           0 :     if ( SfxViewFrame::Current() &&
     116           0 :          SfxViewFrame::Current()->HasChildWindow( SvxIMapDlgChildWindow::GetChildWindowId() ) )
     117           0 :         SVXIMAPDLG()->UpdateLink( rGraphic, pImageMap, pTargetList, pEditingObj );
     118           0 : }
     119             : 
     120           0 : extern "C" SAL_DLLPUBLIC_EXPORT vcl::Window* SAL_CALL makeStatusBar(vcl::Window *pParent, VclBuilder::stringmap &)
     121             : {
     122           0 :     return new StatusBar(pParent);
     123             : }
     124             : 
     125           0 : SvxIMapDlg::SvxIMapDlg(SfxBindings *_pBindings, SfxChildWindow *pCW, vcl::Window* _pParent)
     126             :     : SfxModelessDialog(_pBindings, pCW, _pParent, "ImapDialog", "svx/ui/imapdialog.ui")
     127             :     , pCheckObj(NULL)
     128           0 :     , aIMapItem(SID_IMAP_EXEC, *this, *_pBindings)
     129             : {
     130           0 :     get(m_pTbxIMapDlg1, "toolbar");
     131           0 :     m_pTbxIMapDlg1->InsertSeparator(3, 5);
     132           0 :     m_pTbxIMapDlg1->InsertSeparator(9, 5);
     133           0 :     m_pTbxIMapDlg1->InsertSeparator(14, 5);
     134           0 :     m_pTbxIMapDlg1->InsertSeparator(17, 5);
     135             : 
     136           0 :     mnApplyId = m_pTbxIMapDlg1->GetItemId("TBI_APPLY");
     137           0 :     mnOpenId = m_pTbxIMapDlg1->GetItemId("TBI_OPEN");
     138           0 :     mnSaveAsId = m_pTbxIMapDlg1->GetItemId("TBI_SAVEAS");
     139           0 :     mnSelectId = m_pTbxIMapDlg1->GetItemId("TBI_SELECT");
     140           0 :     mnRectId = m_pTbxIMapDlg1->GetItemId("TBI_RECT");
     141           0 :     mnCircleId = m_pTbxIMapDlg1->GetItemId("TBI_CIRCLE");
     142           0 :     mnPolyId = m_pTbxIMapDlg1->GetItemId("TBI_POLY");
     143           0 :     mnFreePolyId = m_pTbxIMapDlg1->GetItemId("TBI_FREEPOLY");
     144           0 :     mnPolyEditId = m_pTbxIMapDlg1->GetItemId("TBI_POLYEDIT");
     145           0 :     mnPolyMoveId = m_pTbxIMapDlg1->GetItemId("TBI_POLYMOVE");
     146           0 :     mnPolyInsertId = m_pTbxIMapDlg1->GetItemId("TBI_POLYINSERT");
     147           0 :     mnPolyDeleteId = m_pTbxIMapDlg1->GetItemId("TBI_POLYDELETE");
     148           0 :     mnUndoId = m_pTbxIMapDlg1->GetItemId("TBI_UNDO");
     149           0 :     mnRedoId = m_pTbxIMapDlg1->GetItemId("TBI_REDO");
     150           0 :     mnActiveId = m_pTbxIMapDlg1->GetItemId("TBI_ACTIVE");
     151           0 :     mnMacroId = m_pTbxIMapDlg1->GetItemId("TBI_MACRO");
     152           0 :     mnPropertyId = m_pTbxIMapDlg1->GetItemId("TBI_PROPERTY");
     153             : 
     154           0 :     get(m_pFtURL, "urlft");
     155           0 :     get(m_pURLBox, "url");
     156           0 :     get(m_pFtText, "textft");
     157           0 :     get(m_pEdtText, "text");
     158           0 :     get(m_pFtTarget, "targetft");
     159           0 :     get(m_pCbbTarget, "target");
     160             : 
     161             :     //lock this down so it doesn't jump around in size
     162             :     //as entries are added later on
     163           0 :     TargetList aTmpList;
     164           0 :     SfxFrame::GetDefaultTargetList(aTmpList);
     165           0 :     for (size_t i = 0, n = aTmpList.size(); i < n; ++i)
     166           0 :         m_pCbbTarget->InsertEntry(aTmpList[i]);
     167           0 :     Size aPrefSize(m_pCbbTarget->get_preferred_size());
     168           0 :     m_pCbbTarget->set_width_request(aPrefSize.Width());
     169           0 :     m_pCbbTarget->Clear();
     170             : 
     171           0 :     get(m_pStbStatus, "statusbar");
     172             : 
     173           0 :     VclVBox* _pContainer = get<VclVBox>("container");
     174           0 :     pIMapWnd = new IMapWindow( _pContainer, WB_BORDER, _pBindings->GetActiveFrame() );
     175           0 :     pIMapWnd->set_hexpand(true);
     176           0 :     pIMapWnd->set_vexpand(true);
     177           0 :     pIMapWnd->Show();
     178             : 
     179           0 :     pOwnData = new IMapOwnData;
     180             : 
     181           0 :     pIMapWnd->SetInfoLink( LINK( this, SvxIMapDlg, InfoHdl ) );
     182           0 :     pIMapWnd->SetMousePosLink( LINK( this, SvxIMapDlg, MousePosHdl ) );
     183           0 :     pIMapWnd->SetGraphSizeLink( LINK( this, SvxIMapDlg, GraphSizeHdl ) );
     184           0 :     pIMapWnd->SetUpdateLink( LINK( this, SvxIMapDlg, StateHdl ) );
     185             : 
     186           0 :     m_pURLBox->SetModifyHdl( LINK( this, SvxIMapDlg, URLModifyHdl ) );
     187           0 :     m_pURLBox->SetSelectHdl( LINK( this, SvxIMapDlg, URLModifyHdl ) );
     188           0 :     m_pURLBox->SetLoseFocusHdl( LINK( this, SvxIMapDlg, URLLoseFocusHdl ) );
     189           0 :     m_pEdtText->SetModifyHdl( LINK( this, SvxIMapDlg, URLModifyHdl ) );
     190           0 :     m_pCbbTarget->SetLoseFocusHdl( LINK( this, SvxIMapDlg, URLLoseFocusHdl ) );
     191             : 
     192           0 :        SvtMiscOptions aMiscOptions;
     193           0 :     aMiscOptions.AddListenerLink( LINK( this, SvxIMapDlg, MiscHdl ) );
     194             : 
     195           0 :     m_pTbxIMapDlg1->SetSelectHdl( LINK( this, SvxIMapDlg, TbxClickHdl ) );
     196           0 :     m_pTbxIMapDlg1->CheckItem( mnSelectId, true );
     197           0 :     TbxClickHdl( m_pTbxIMapDlg1 );
     198             : 
     199           0 :     SetMinOutputSizePixel( aLastSize = GetOutputSizePixel() );
     200             : 
     201           0 :     m_pStbStatus->InsertItem( 1, 130, SIB_LEFT | SIB_IN | SIB_AUTOSIZE );
     202           0 :     m_pStbStatus->InsertItem( 2, 10 + GetTextWidth( OUString(" 9999,99 cm / 9999,99 cm ") ), SIB_CENTER | SIB_IN );
     203           0 :     m_pStbStatus->InsertItem( 3, 10 + GetTextWidth( OUString(" 9999,99 cm x 9999,99 cm ") ), SIB_CENTER | SIB_IN );
     204             : 
     205           0 :     m_pFtURL->Disable();
     206           0 :     m_pURLBox->Disable();
     207           0 :     m_pFtText->Disable();
     208           0 :     m_pEdtText->Disable();
     209           0 :     m_pFtTarget->Disable();
     210           0 :     m_pCbbTarget->Disable();
     211           0 :     pOwnData->bExecState = false;
     212             : 
     213           0 :     pOwnData->aTimer.SetTimeout( 100 );
     214           0 :     pOwnData->aTimer.SetTimeoutHdl( LINK( this, SvxIMapDlg, UpdateHdl ) );
     215             : 
     216           0 :     m_pTbxIMapDlg1->EnableItem( mnActiveId, false );
     217           0 :     m_pTbxIMapDlg1->EnableItem( mnMacroId, false );
     218           0 :     m_pTbxIMapDlg1->EnableItem( mnPropertyId, false );
     219           0 : }
     220             : 
     221           0 : SvxIMapDlg::~SvxIMapDlg()
     222             : {
     223             :     // Delete URL-List
     224           0 :     delete pIMapWnd;
     225           0 :     delete pOwnData;
     226           0 : }
     227             : 
     228           0 : bool SvxIMapDlg::Close()
     229             : {
     230           0 :     bool bRet = true;
     231             : 
     232           0 :     if ( m_pTbxIMapDlg1->IsItemEnabled( mnApplyId ) )
     233             :     {
     234           0 :         MessageDialog aQBox( this,"QueryModifyImageMapChangesDialog","svx/ui/querymodifyimagemapchangesdialog.ui");
     235           0 :         const long  nRet = aQBox.Execute();
     236             : 
     237           0 :         if( nRet == RET_YES )
     238             :         {
     239           0 :             SfxBoolItem aBoolItem( SID_IMAP_EXEC, true );
     240           0 :             GetBindings().GetDispatcher()->Execute(
     241           0 :                 SID_IMAP_EXEC, SfxCallMode::SYNCHRON | SfxCallMode::RECORD, &aBoolItem, 0L );
     242             :         }
     243           0 :         else if( nRet == RET_CANCEL )
     244           0 :             bRet = false;
     245             :     }
     246           0 :     else if( pIMapWnd->IsChanged() )
     247             :     {
     248           0 :         MessageDialog aQBox( this,"QuerySaveImageMapChangesDialog","svx/ui/querysaveimagemapchangesdialog.ui");
     249           0 :         const long  nRet = aQBox.Execute();
     250             : 
     251           0 :         if( nRet == RET_YES )
     252           0 :             bRet = DoSave();
     253           0 :         else if( nRet == RET_CANCEL )
     254           0 :             bRet = false;
     255             :     }
     256             : 
     257           0 :     return( bRet ? SfxModelessDialog::Close() : sal_False );
     258             : }
     259             : 
     260             : // Enabled or disable all Controls
     261             : 
     262           0 : void SvxIMapDlg::SetExecState( bool bEnable )
     263             : {
     264           0 :     pOwnData->bExecState = bEnable;
     265           0 : }
     266             : 
     267           0 : void SvxIMapDlg::SetGraphic( const Graphic& rGraphic )
     268             : {
     269           0 :     pIMapWnd->SetGraphic( rGraphic );
     270           0 : }
     271             : 
     272           0 : void SvxIMapDlg::SetImageMap( const ImageMap& rImageMap )
     273             : {
     274           0 :     pIMapWnd->SetImageMap( rImageMap );
     275           0 : }
     276             : 
     277           0 : const ImageMap& SvxIMapDlg::GetImageMap() const
     278             : {
     279           0 :     return pIMapWnd->GetImageMap();
     280             : }
     281             : 
     282           0 : void SvxIMapDlg::SetTargetList( const TargetList& rTargetList )
     283             : {
     284           0 :     TargetList aNewList( rTargetList );
     285             : 
     286           0 :     pIMapWnd->SetTargetList( aNewList );
     287             : 
     288           0 :     m_pCbbTarget->Clear();
     289             : 
     290           0 :     for ( size_t i = 0, n = aNewList.size(); i < n; ++i )
     291           0 :         m_pCbbTarget->InsertEntry( aNewList[ i ] );
     292           0 : }
     293             : 
     294           0 : void SvxIMapDlg::UpdateLink( const Graphic& rGraphic, const ImageMap* pImageMap,
     295             :                          const TargetList* pTargetList, void* pEditingObj )
     296             : {
     297           0 :     pOwnData->aUpdateGraphic = rGraphic;
     298             : 
     299           0 :     if ( pImageMap )
     300           0 :         pOwnData->aUpdateImageMap = *pImageMap;
     301             :     else
     302           0 :         pOwnData->aUpdateImageMap.ClearImageMap();
     303             : 
     304           0 :     pOwnData->pUpdateEditingObject = pEditingObj;
     305             : 
     306             :     // Delete UpdateTargetList, because this method can still be called several
     307             :     // times before the update timer is turned on
     308           0 :     pOwnData->aUpdateTargetList.clear();
     309             : 
     310             :     // TargetList must be copied, since it is owned by the caller and can be
     311             :     // deleted immediately after this call the copied list will be deleted
     312             :     // again in the handler
     313           0 :     if( pTargetList )
     314             :     {
     315           0 :         TargetList aTargetList( *pTargetList );
     316             : 
     317           0 :         for ( size_t i = 0, n = aTargetList.size(); i < n; ++i )
     318           0 :             pOwnData->aUpdateTargetList.push_back( aTargetList[ i ] );
     319             :     }
     320             : 
     321           0 :     pOwnData->aTimer.Start();
     322           0 : }
     323             : 
     324             : 
     325           0 : void SvxIMapDlg::KeyInput( const KeyEvent& rKEvt )
     326             : {
     327           0 :         SfxModelessDialog::KeyInput( rKEvt );
     328           0 : }
     329             : 
     330             : // Click-handler for ToolBox
     331             : 
     332           0 : IMPL_LINK( SvxIMapDlg, TbxClickHdl, ToolBox*, pTbx )
     333             : {
     334           0 :     sal_uInt16 nNewItemId = pTbx->GetCurItemId();
     335             : 
     336           0 :     if(nNewItemId == mnApplyId)
     337             :     {
     338           0 :         URLLoseFocusHdl( NULL );
     339           0 :         SfxBoolItem aBoolItem( SID_IMAP_EXEC, true );
     340           0 :         GetBindings().GetDispatcher()->Execute(
     341           0 :             SID_IMAP_EXEC, SfxCallMode::ASYNCHRON | SfxCallMode::RECORD, &aBoolItem, 0L );
     342             :     }
     343           0 :     else if(nNewItemId == mnOpenId)
     344           0 :         DoOpen();
     345           0 :     else if(nNewItemId == mnSaveAsId)
     346           0 :             DoSave();
     347           0 :     else if(nNewItemId == mnSelectId)
     348             :     {
     349           0 :         pTbx->CheckItem( nNewItemId, true );
     350           0 :         pIMapWnd->SetEditMode( true );
     351           0 :         if( pTbx->IsKeyEvent() )
     352             :         {
     353           0 :             if((pTbx->GetKeyModifier() & KEY_MOD1) != 0)
     354           0 :                 pIMapWnd->SelectFirstObject();
     355             :             else
     356           0 :                 pIMapWnd->GrabFocus();
     357             :         }
     358             :     }
     359           0 :     else if(nNewItemId == mnRectId)
     360             :     {
     361           0 :         pTbx->CheckItem( nNewItemId, true );
     362           0 :         pIMapWnd->SetObjKind( OBJ_RECT );
     363           0 :         if( pTbx->IsKeyEvent() && ((pTbx->GetKeyModifier() & KEY_MOD1) != 0) )
     364             :         {
     365           0 :             pIMapWnd->CreateDefaultObject();
     366           0 :             pIMapWnd->GrabFocus();
     367             :         }
     368             :     }
     369           0 :     else if(nNewItemId == mnCircleId)
     370             :     {
     371           0 :         pTbx->CheckItem( nNewItemId, true );
     372           0 :         pIMapWnd->SetObjKind( OBJ_CIRC );
     373           0 :         if( pTbx->IsKeyEvent() && ((pTbx->GetKeyModifier() & KEY_MOD1) != 0) )
     374             :         {
     375           0 :             pIMapWnd->CreateDefaultObject();
     376           0 :             pIMapWnd->GrabFocus();
     377             :         }
     378             :     }
     379           0 :     else if(nNewItemId == mnPolyId)
     380             :     {
     381           0 :         pTbx->CheckItem( nNewItemId, true );
     382           0 :         pIMapWnd->SetObjKind( OBJ_POLY );
     383           0 :         if( pTbx->IsKeyEvent() && ((pTbx->GetKeyModifier() & KEY_MOD1) != 0) )
     384             :         {
     385           0 :             pIMapWnd->CreateDefaultObject();
     386           0 :             pIMapWnd->GrabFocus();
     387             :         }
     388             :     }
     389           0 :     else if(nNewItemId == mnFreePolyId)
     390             :     {
     391           0 :         pTbx->CheckItem( nNewItemId, true );
     392           0 :         pIMapWnd->SetObjKind( OBJ_FREEFILL );
     393           0 :         if( pTbx->IsKeyEvent() && ((pTbx->GetKeyModifier() & KEY_MOD1) != 0) )
     394             :         {
     395           0 :             pIMapWnd->CreateDefaultObject();
     396           0 :             pIMapWnd->GrabFocus();
     397             :         }
     398             :     }
     399           0 :     else if(nNewItemId == mnActiveId)
     400             :     {
     401           0 :         URLLoseFocusHdl( NULL );
     402           0 :         bool bNewState = !pTbx->IsItemChecked( TBI_ACTIVE );
     403           0 :         pTbx->CheckItem( TBI_ACTIVE, bNewState );
     404           0 :         pIMapWnd->SetCurrentObjState( !bNewState );
     405             :     }
     406           0 :     else if(nNewItemId == mnMacroId)
     407           0 :         pIMapWnd->DoMacroAssign();
     408           0 :     else if(nNewItemId == mnPropertyId)
     409           0 :         pIMapWnd->DoPropertyDialog();
     410           0 :     else if(nNewItemId == mnPolyEditId)
     411             :     {
     412           0 :         pIMapWnd->SetPolyEditMode( pTbx->IsItemChecked( TBI_POLYEDIT ) ? SID_BEZIER_MOVE : 0 );
     413           0 :         if( pTbx->IsKeyEvent() && pTbx->IsItemChecked( TBI_POLYEDIT ) )
     414           0 :             pIMapWnd->StartPolyEdit();
     415             :     }
     416           0 :     else if(nNewItemId == mnPolyMoveId)
     417           0 :         pIMapWnd->SetPolyEditMode( SID_BEZIER_MOVE );
     418           0 :     else if(nNewItemId == mnPolyInsertId)
     419           0 :         pIMapWnd->SetPolyEditMode( SID_BEZIER_INSERT );
     420           0 :     else if(nNewItemId == mnPolyDeleteId)
     421           0 :         pIMapWnd->GetSdrView()->DeleteMarkedPoints();
     422           0 :     else if(nNewItemId == mnUndoId)
     423             :     {
     424           0 :         URLLoseFocusHdl( NULL );
     425           0 :         pIMapWnd->GetSdrModel()->Undo();
     426             :     }
     427           0 :     else if(nNewItemId == mnRedoId)
     428             :     {
     429           0 :         URLLoseFocusHdl( NULL );
     430           0 :         pIMapWnd->GetSdrModel()->Redo();
     431             :     }
     432             : 
     433           0 :     return 0;
     434             : }
     435             : 
     436           0 : void SvxIMapDlg::DoOpen()
     437             : {
     438             :     ::sfx2::FileDialogHelper aDlg(
     439           0 :         com::sun::star::ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE, 0 );
     440             : 
     441           0 :     ImageMap        aLoadIMap;
     442           0 :     const OUString  aFilter( IMAP_ALL_FILTER );
     443             : 
     444           0 :     aDlg.AddFilter( aFilter, IMAP_ALL_TYPE );
     445           0 :     aDlg.AddFilter( IMAP_CERN_FILTER, IMAP_CERN_TYPE );
     446           0 :     aDlg.AddFilter( IMAP_NCSA_FILTER, IMAP_NCSA_TYPE );
     447           0 :     aDlg.AddFilter( IMAP_BINARY_FILTER, IMAP_BINARY_TYPE );
     448             : 
     449           0 :     aDlg.SetCurrentFilter( aFilter );
     450           0 :     aDlg.SetDisplayDirectory( SvtPathOptions().GetWorkPath() );
     451             : 
     452           0 :     if( aDlg.Execute() == ERRCODE_NONE )
     453             :     {
     454           0 :         INetURLObject aURL( aDlg.GetPath() );
     455             :         DBG_ASSERT( aURL.GetProtocol() != INET_PROT_NOT_VALID, "invalid URL" );
     456           0 :         boost::scoped_ptr<SvStream> pIStm(::utl::UcbStreamHelper::CreateStream( aURL.GetMainURL( INetURLObject::NO_DECODE ), STREAM_READ ));
     457             : 
     458           0 :         if( pIStm )
     459             :         {
     460           0 :             aLoadIMap.Read( *pIStm, IMAP_FORMAT_DETECT, "" );
     461             : 
     462           0 :             if( pIStm->GetError() )
     463             :             {
     464           0 :                 SfxErrorContext eEC(ERRCODE_SFX_GENERAL,this);
     465           0 :                 ErrorHandler::HandleError( ERRCODE_IO_GENERAL );
     466             :             }
     467             :             else
     468           0 :                 pIMapWnd->SetImageMap( aLoadIMap );
     469             :         }
     470             : 
     471           0 :         pIMapWnd->Invalidate();
     472           0 :     }
     473           0 : }
     474             : 
     475           0 : bool SvxIMapDlg::DoSave()
     476             : {
     477             :     ::sfx2::FileDialogHelper aDlg(
     478           0 :         com::sun::star::ui::dialogs::TemplateDescription::FILESAVE_SIMPLE, 0 );
     479             : 
     480           0 :     const OUString    aBinFilter( IMAP_BINARY_FILTER );
     481           0 :     const OUString    aCERNFilter( IMAP_CERN_FILTER );
     482           0 :     const OUString    aNCSAFilter( IMAP_NCSA_FILTER );
     483           0 :     SdrModel*       pModel = pIMapWnd->GetSdrModel();
     484           0 :     const bool bChanged = pModel->IsChanged();
     485           0 :     bool            bRet = false;
     486             : 
     487           0 :     aDlg.AddFilter( aCERNFilter, IMAP_CERN_TYPE );
     488           0 :     aDlg.AddFilter( aNCSAFilter, IMAP_NCSA_TYPE );
     489           0 :     aDlg.AddFilter( aBinFilter, IMAP_BINARY_TYPE );
     490             : 
     491           0 :     aDlg.SetCurrentFilter( aCERNFilter );
     492           0 :     aDlg.SetDisplayDirectory( SvtPathOptions().GetWorkPath() );
     493             : 
     494           0 :     if( aDlg.Execute() == ERRCODE_NONE )
     495             :     {
     496           0 :         const OUString    aFilter( aDlg.GetCurrentFilter() );
     497           0 :         OUString          aExt;
     498             :         sal_uIntPtr       nFormat;
     499             : 
     500           0 :         if ( aFilter == aBinFilter )
     501             :         {
     502           0 :             nFormat = IMAP_FORMAT_BIN;
     503           0 :             aExt = IMAP_BINARY_EXT;
     504             :         }
     505           0 :         else if ( aFilter == aCERNFilter )
     506             :         {
     507           0 :             nFormat = IMAP_FORMAT_CERN;
     508           0 :             aExt = IMAP_CERN_EXT;
     509             :         }
     510           0 :         else if ( aFilter == aNCSAFilter )
     511             :         {
     512           0 :             nFormat = IMAP_FORMAT_NCSA;
     513           0 :             aExt = IMAP_NCSA_EXT;
     514             :         }
     515             :         else
     516             :         {
     517           0 :             return false;
     518             :         }
     519             : 
     520           0 :         INetURLObject aURL( aDlg.GetPath() );
     521             : 
     522           0 :         if( aURL.GetProtocol() == INET_PROT_NOT_VALID )
     523             :         {
     524             :             OSL_FAIL( "invalid URL" );
     525             :         }
     526             :         else
     527             :         {
     528           0 :             if( aURL.getExtension().isEmpty() )
     529           0 :                 aURL.setExtension( aExt );
     530             : 
     531           0 :             boost::scoped_ptr<SvStream> pOStm(::utl::UcbStreamHelper::CreateStream( aURL.GetMainURL( INetURLObject::NO_DECODE ), STREAM_WRITE | STREAM_TRUNC ));
     532           0 :             if( pOStm )
     533             :             {
     534           0 :                 pIMapWnd->GetImageMap().Write( *pOStm, nFormat, "" );
     535             : 
     536           0 :                 if( pOStm->GetError() )
     537           0 :                     ErrorHandler::HandleError( ERRCODE_IO_GENERAL );
     538             : 
     539           0 :                 pOStm.reset();
     540           0 :                 pModel->SetChanged( bChanged );
     541           0 :                 bRet = true;
     542           0 :             }
     543           0 :         }
     544             :     }
     545             : 
     546           0 :     return bRet;
     547             : }
     548             : 
     549           0 : IMPL_LINK( SvxIMapDlg, InfoHdl, IMapWindow*, pWnd )
     550             : {
     551           0 :     OUString            aStr;
     552           0 :     const NotifyInfo&   rInfo = pWnd->GetInfo();
     553             : 
     554           0 :     if ( rInfo.bNewObj )
     555             :     {
     556           0 :         if( !rInfo.aMarkURL.isEmpty() && ( m_pURLBox->GetEntryPos( rInfo.aMarkURL ) == LISTBOX_ENTRY_NOTFOUND ) )
     557           0 :             m_pURLBox->InsertEntry( rInfo.aMarkURL );
     558             : 
     559           0 :         m_pURLBox->SetText( rInfo.aMarkURL );
     560           0 :         m_pEdtText->SetText( rInfo.aMarkAltText );
     561             : 
     562           0 :         if ( rInfo.aMarkTarget.isEmpty() )
     563           0 :             m_pCbbTarget->SetText( SELF_TARGET );
     564             :         else
     565           0 :             m_pCbbTarget->SetText( rInfo.aMarkTarget );
     566             :     }
     567             : 
     568           0 :     if ( !rInfo.bOneMarked )
     569             :     {
     570           0 :         m_pTbxIMapDlg1->CheckItem( mnActiveId, false );
     571           0 :         m_pTbxIMapDlg1->EnableItem( mnActiveId, false );
     572           0 :         m_pTbxIMapDlg1->EnableItem( mnMacroId, false );
     573           0 :         m_pTbxIMapDlg1->EnableItem( mnPropertyId, false );
     574           0 :         m_pStbStatus->SetItemText( 1, aStr );
     575             : 
     576           0 :         m_pFtURL->Disable();
     577           0 :         m_pURLBox->Disable();
     578           0 :         m_pFtText->Disable();
     579           0 :         m_pEdtText->Disable();
     580           0 :         m_pFtTarget->Disable();
     581           0 :         m_pCbbTarget->Disable();
     582             : 
     583           0 :         m_pURLBox->SetText( "" );
     584           0 :         m_pEdtText->SetText( "" );
     585             :     }
     586             :     else
     587             :     {
     588           0 :         m_pTbxIMapDlg1->EnableItem( mnActiveId, true );
     589           0 :         m_pTbxIMapDlg1->CheckItem( mnActiveId, !rInfo.bActivated );
     590           0 :         m_pTbxIMapDlg1->EnableItem( mnMacroId, true );
     591           0 :         m_pTbxIMapDlg1->EnableItem( mnPropertyId, true );
     592             : 
     593           0 :         m_pFtURL->Enable();
     594           0 :         m_pURLBox->Enable();
     595           0 :         m_pFtText->Enable();
     596           0 :         m_pEdtText->Enable();
     597           0 :         m_pFtTarget->Enable();
     598           0 :         m_pCbbTarget->Enable();
     599             : 
     600           0 :         m_pStbStatus->SetItemText( 1, rInfo.aMarkURL );
     601             : 
     602           0 :         if ( m_pURLBox->GetText() != OUString(rInfo.aMarkURL) )
     603           0 :             m_pURLBox->SetText( rInfo.aMarkURL );
     604             : 
     605           0 :         if ( m_pEdtText->GetText() != OUString(rInfo.aMarkAltText) )
     606           0 :             m_pEdtText->SetText( rInfo.aMarkAltText );
     607             : 
     608           0 :         if ( rInfo.aMarkTarget.isEmpty() )
     609           0 :             m_pCbbTarget->SetText( SELF_TARGET );
     610             :         else
     611           0 :             m_pCbbTarget->SetText(  rInfo.aMarkTarget );
     612             :     }
     613             : 
     614           0 :     return 0;
     615             : }
     616             : 
     617           0 : IMPL_LINK( SvxIMapDlg, MousePosHdl, IMapWindow*, pWnd )
     618             : {
     619           0 :     const FieldUnit eFieldUnit = GetBindings().GetDispatcher()->GetModule()->GetFieldUnit();
     620           0 :     const Point& rMousePos = pWnd->GetMousePos();
     621           0 :     const LocaleDataWrapper& rLocaleWrapper( Application::GetSettings().GetLocaleDataWrapper() );
     622           0 :     const sal_Unicode cSep = rLocaleWrapper.getNumDecimalSep()[0];
     623             : 
     624           0 :     OUString aStr = GetUnitString( rMousePos.X(), eFieldUnit, cSep ) +
     625           0 :                     " / " + GetUnitString( rMousePos.Y(), eFieldUnit, cSep );
     626             : 
     627           0 :     m_pStbStatus->SetItemText( 2, aStr );
     628             : 
     629           0 :     return 0L;
     630             : }
     631             : 
     632           0 : IMPL_LINK( SvxIMapDlg, GraphSizeHdl, IMapWindow*, pWnd )
     633             : {
     634           0 :     const FieldUnit eFieldUnit = GetBindings().GetDispatcher()->GetModule()->GetFieldUnit();
     635           0 :     const Size& rSize = pWnd->GetGraphicSize();
     636           0 :     const LocaleDataWrapper& rLocaleWrapper( Application::GetSettings().GetLocaleDataWrapper() );
     637           0 :     const sal_Unicode cSep = rLocaleWrapper.getNumDecimalSep()[0];
     638             : 
     639           0 :     OUString aStr = GetUnitString( rSize.Width(), eFieldUnit, cSep ) +
     640           0 :                     " x " + GetUnitString( rSize.Height(), eFieldUnit, cSep );
     641             : 
     642           0 :     m_pStbStatus->SetItemText( 3, aStr );
     643             : 
     644           0 :     return 0L;
     645             : }
     646             : 
     647           0 : IMPL_LINK_NOARG(SvxIMapDlg, URLModifyHdl)
     648             : {
     649           0 :     NotifyInfo  aNewInfo;
     650             : 
     651           0 :     aNewInfo.aMarkURL = m_pURLBox->GetText();
     652           0 :     aNewInfo.aMarkAltText = m_pEdtText->GetText();
     653           0 :     aNewInfo.aMarkTarget = m_pCbbTarget->GetText();
     654             : 
     655           0 :     pIMapWnd->ReplaceActualIMapInfo( aNewInfo );
     656             : 
     657           0 :     return 0;
     658             : }
     659             : 
     660           0 : IMPL_LINK_NOARG(SvxIMapDlg, URLLoseFocusHdl)
     661             : {
     662           0 :     NotifyInfo        aNewInfo;
     663           0 :     const OUString    aURLText( m_pURLBox->GetText() );
     664           0 :     const OUString    aTargetText( m_pCbbTarget->GetText() );
     665             : 
     666           0 :     if ( !aURLText.isEmpty() )
     667             :     {
     668           0 :         OUString aBase = GetBindings().GetDispatcher()->GetFrame()->GetObjectShell()->GetMedium()->GetBaseURL();
     669           0 :         aNewInfo.aMarkURL = ::URIHelper::SmartRel2Abs( INetURLObject(aBase), aURLText, URIHelper::GetMaybeFileHdl(), true, false,
     670             :                                                         INetURLObject::WAS_ENCODED,
     671           0 :                                                         INetURLObject::DECODE_UNAMBIGUOUS );
     672             :     }
     673             :     else
     674           0 :         aNewInfo.aMarkURL = aURLText;
     675             : 
     676           0 :     aNewInfo.aMarkAltText = m_pEdtText->GetText();
     677             : 
     678           0 :     if ( aTargetText.isEmpty() )
     679           0 :         aNewInfo.aMarkTarget = SELF_TARGET;
     680             :     else
     681           0 :         aNewInfo.aMarkTarget = aTargetText;
     682             : 
     683           0 :     pIMapWnd->ReplaceActualIMapInfo( aNewInfo );
     684             : 
     685           0 :     return 0;
     686             : }
     687             : 
     688           0 : IMPL_LINK_NOARG(SvxIMapDlg, UpdateHdl)
     689             : {
     690           0 :     pOwnData->aTimer.Stop();
     691             : 
     692           0 :     if ( pOwnData->pUpdateEditingObject != pCheckObj )
     693             :     {
     694           0 :         if ( pIMapWnd->IsChanged() &&
     695             :              ( MessageDialog( this,"QuerySaveImageMapChangesDialog",
     696           0 :              "svx/ui/querysaveimagemapchangesdialog.ui" ).Execute() == RET_YES ) )
     697             :         {
     698           0 :             DoSave();
     699             :         }
     700             : 
     701           0 :         SetGraphic( pOwnData->aUpdateGraphic );
     702           0 :         SetImageMap( pOwnData->aUpdateImageMap );
     703           0 :         SetTargetList( pOwnData->aUpdateTargetList );
     704           0 :         SetEditingObject( pOwnData->pUpdateEditingObject );
     705             : 
     706             :         // After changes => default selection
     707           0 :         m_pTbxIMapDlg1->CheckItem( mnSelectId, true );
     708           0 :         pIMapWnd->SetEditMode( true );
     709             :     }
     710             : 
     711             :     // Delete the copied list again in the Update method
     712           0 :     pOwnData->aUpdateTargetList.clear();
     713             : 
     714           0 :     GetBindings().Invalidate( SID_IMAP_EXEC );
     715             : 
     716           0 :     return 0L;
     717             : }
     718             : 
     719           0 : IMPL_LINK( SvxIMapDlg, StateHdl, IMapWindow*, pWnd )
     720             : {
     721           0 :     const SdrObject*    pObj = pWnd->GetSelectedSdrObject();
     722           0 :     const SdrModel*     pModel = pWnd->GetSdrModel();
     723           0 :     const SdrView*      pView = pWnd->GetSdrView();
     724           0 :     const bool          bPolyEdit = ( pObj != NULL ) && pObj->ISA( SdrPathObj );
     725           0 :     const bool          bDrawEnabled = !( bPolyEdit && m_pTbxIMapDlg1->IsItemChecked( mnPolyEditId ) );
     726             : 
     727           0 :     m_pTbxIMapDlg1->EnableItem( mnApplyId, pOwnData->bExecState && pWnd->IsChanged() );
     728             : 
     729           0 :     m_pTbxIMapDlg1->EnableItem( mnSelectId, bDrawEnabled );
     730           0 :     m_pTbxIMapDlg1->EnableItem( mnRectId, bDrawEnabled );
     731           0 :     m_pTbxIMapDlg1->EnableItem( mnCircleId, bDrawEnabled );
     732           0 :     m_pTbxIMapDlg1->EnableItem( mnPolyId, bDrawEnabled );
     733           0 :     m_pTbxIMapDlg1->EnableItem( mnFreePolyId, bDrawEnabled );
     734             : 
     735             :     // BezierEditor State
     736           0 :     m_pTbxIMapDlg1->EnableItem( mnPolyEditId, bPolyEdit );
     737           0 :     m_pTbxIMapDlg1->EnableItem( mnPolyMoveId, !bDrawEnabled );
     738           0 :     m_pTbxIMapDlg1->EnableItem( mnPolyInsertId, !bDrawEnabled );
     739           0 :     m_pTbxIMapDlg1->EnableItem( mnPolyDeleteId, !bDrawEnabled && pView->IsDeleteMarkedPointsPossible() );
     740             : 
     741             :     // Undo/Redo
     742           0 :     m_pTbxIMapDlg1->EnableItem( mnUndoId, pModel->HasUndoActions() );
     743           0 :     m_pTbxIMapDlg1->EnableItem( mnRedoId, pModel->HasRedoActions() );
     744             : 
     745           0 :     if ( bPolyEdit )
     746             :     {
     747           0 :         sal_uInt16 nId = 0;
     748             : 
     749           0 :         switch( pWnd->GetPolyEditMode() )
     750             :         {
     751           0 :             case( SID_BEZIER_MOVE ): nId = mnPolyMoveId; break;
     752           0 :             case( SID_BEZIER_INSERT ): nId = mnPolyInsertId; break;
     753             : 
     754             :             default:
     755           0 :             break;
     756             :         }
     757             : 
     758           0 :         m_pTbxIMapDlg1->CheckItem( nId, true );
     759             :     }
     760             :     else
     761             :     {
     762           0 :         m_pTbxIMapDlg1->CheckItem( mnPolyEditId, false );
     763           0 :         m_pTbxIMapDlg1->CheckItem( mnPolyMoveId, true );
     764           0 :         m_pTbxIMapDlg1->CheckItem( mnPolyInsertId, false );
     765           0 :         pWnd->SetPolyEditMode( 0 );
     766             :     }
     767             : 
     768           0 :     return 0L;
     769             : }
     770             : 
     771           0 : IMPL_LINK_NOARG(SvxIMapDlg, MiscHdl)
     772             : {
     773           0 :        SvtMiscOptions aMiscOptions;
     774           0 :     m_pTbxIMapDlg1->SetOutStyle( aMiscOptions.GetToolboxStyle() );
     775             : 
     776           0 :     return 0L;
     777         594 : }
     778             : 
     779             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10