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

Generated by: LCOV version 1.11