2000-09-18 16:07:07 +00:00
|
|
|
/*************************************************************************
|
|
|
|
*
|
2008-04-10 21:48:53 +00:00
|
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
2000-09-18 16:07:07 +00:00
|
|
|
*
|
2008-04-10 21:48:53 +00:00
|
|
|
* Copyright 2008 by Sun Microsystems, Inc.
|
2000-09-18 16:07:07 +00:00
|
|
|
*
|
2008-04-10 21:48:53 +00:00
|
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
2000-09-18 16:07:07 +00:00
|
|
|
*
|
2008-04-10 21:48:53 +00:00
|
|
|
* $RCSfile: imapwnd.cxx,v $
|
|
|
|
* $Revision: 1.26 $
|
2000-09-18 16:07:07 +00:00
|
|
|
*
|
2008-04-10 21:48:53 +00:00
|
|
|
* This file is part of OpenOffice.org.
|
2000-09-18 16:07:07 +00:00
|
|
|
*
|
2008-04-10 21:48:53 +00:00
|
|
|
* OpenOffice.org is free software: you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU Lesser General Public License version 3
|
|
|
|
* only, as published by the Free Software Foundation.
|
2000-09-18 16:07:07 +00:00
|
|
|
*
|
2008-04-10 21:48:53 +00:00
|
|
|
* OpenOffice.org is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU Lesser General Public License version 3 for more details
|
|
|
|
* (a copy is included in the LICENSE file that accompanied this code).
|
2000-09-18 16:07:07 +00:00
|
|
|
*
|
2008-04-10 21:48:53 +00:00
|
|
|
* You should have received a copy of the GNU Lesser General Public License
|
|
|
|
* version 3 along with OpenOffice.org. If not, see
|
|
|
|
* <http://www.openoffice.org/license.html>
|
|
|
|
* for a copy of the LGPLv3 License.
|
2000-09-18 16:07:07 +00:00
|
|
|
*
|
|
|
|
************************************************************************/
|
|
|
|
|
2006-09-17 03:25:24 +00:00
|
|
|
// MARKER(update_precomp.py): autogen include statement, do not remove
|
|
|
|
#include "precompiled_svx.hxx"
|
2000-09-18 16:07:07 +00:00
|
|
|
#include <tools/urlobj.hxx>
|
|
|
|
#include <vcl/msgbox.hxx>
|
|
|
|
#include <vcl/help.hxx>
|
|
|
|
#include <sfx2/sfxsids.hrc> // SID_ATTR_MACROITEM
|
|
|
|
#define _ANIMATION
|
|
|
|
#include <sfx2/macropg.hxx>
|
|
|
|
#include <svtools/imaprect.hxx>
|
|
|
|
#include <svtools/imapcirc.hxx>
|
|
|
|
#include <svtools/imappoly.hxx>
|
|
|
|
#include <svtools/urlbmk.hxx>
|
|
|
|
|
|
|
|
#include <xoutbmp.hxx>
|
2007-06-27 16:16:02 +00:00
|
|
|
#include <svx/dialmgr.hxx>
|
|
|
|
#include <svx/dialogs.hrc>
|
|
|
|
#include <svx/svxids.hrc>
|
2000-09-18 16:07:07 +00:00
|
|
|
#include <imapdlg.hrc>
|
|
|
|
#include <imapwnd.hxx>
|
2007-06-27 16:16:02 +00:00
|
|
|
#include <svx/svdpage.hxx>
|
|
|
|
#include <svx/svdorect.hxx>
|
|
|
|
#include <svx/svdocirc.hxx>
|
|
|
|
#include <svx/svdopath.hxx>
|
|
|
|
#include <svx/xfltrit.hxx>
|
|
|
|
#include <svx/svdpagv.hxx>
|
2000-09-18 16:07:07 +00:00
|
|
|
#include <svtools/urihelper.hxx>
|
2007-06-27 16:16:02 +00:00
|
|
|
#include <svx/xfillit.hxx>
|
|
|
|
#include <svx/xlineit.hxx>
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
#include <sot/formats.hxx>
|
|
|
|
|
2007-06-27 16:16:02 +00:00
|
|
|
#include <svx/svxdlg.hxx>
|
|
|
|
#include <svx/dialogs.hrc>
|
2006-11-14 12:16:18 +00:00
|
|
|
#include <basegfx/point/b2dpoint.hxx>
|
|
|
|
#include <basegfx/polygon/b2dpolygon.hxx>
|
2004-02-03 17:33:10 +00:00
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
#define TRANSCOL Color( COL_WHITE )
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|*
|
|
|
|
|* URLDlg
|
|
|
|
|*
|
|
|
|
\************************************************************************/
|
2004-02-03 17:33:10 +00:00
|
|
|
/* move to cui //CHINA001
|
2000-09-18 16:07:07 +00:00
|
|
|
URLDlg::URLDlg( Window* pWindow, const String& rURL,
|
|
|
|
const String& rDescription, const String& rTarget,
|
|
|
|
const String& rName, TargetList& rTargetList ) :
|
|
|
|
|
|
|
|
ModalDialog ( pWindow, SVX_RES( RID_SVXDLG_IMAPURL ) ),
|
|
|
|
|
2001-06-14 15:14:56 +00:00
|
|
|
aFlURL ( this, ResId( FL_URL ) ),
|
2000-09-18 16:07:07 +00:00
|
|
|
aBtnOk ( this, ResId( BTN_OK ) ),
|
2006-06-19 14:16:29 +00:00
|
|
|
aBtnCancel ( this, ResId( BTN_CANCEL1 ) ),
|
2000-09-18 16:07:07 +00:00
|
|
|
aFtURL1 ( this, ResId( FT_URL1 ) ),
|
|
|
|
aEdtURL ( this, ResId( EDT_URL ) ),
|
|
|
|
aFtURLDescription ( this, ResId( FT_URLDESCRIPTION ) ),
|
|
|
|
aEdtURLDescription ( this, ResId( EDT_URLDESCRIPTION ) ),
|
|
|
|
aFtTarget ( this, ResId( FT_TARGET ) ),
|
|
|
|
aCbbTargets ( this, ResId( CBB_TARGETS ) ),
|
|
|
|
aFtName ( this, ResId( FT_NAME ) ),
|
|
|
|
aEdtName ( this, ResId( EDT_NAME ) )
|
|
|
|
|
|
|
|
{
|
|
|
|
FreeResource();
|
|
|
|
|
|
|
|
aEdtURL.SetText( rURL );
|
|
|
|
aEdtURLDescription.SetText( rDescription );
|
|
|
|
aEdtName.SetText( rName );
|
|
|
|
|
|
|
|
for( String* pStr = rTargetList.First(); pStr; pStr = rTargetList.Next() )
|
|
|
|
aCbbTargets.InsertEntry( *pStr );
|
|
|
|
|
|
|
|
if( !rTarget.Len() )
|
|
|
|
aCbbTargets.SetText( String::CreateFromAscii( "_self" ) );
|
|
|
|
else
|
|
|
|
aCbbTargets.SetText( rTarget );
|
|
|
|
}
|
2004-02-03 17:33:10 +00:00
|
|
|
*/
|
2000-09-18 16:07:07 +00:00
|
|
|
/*************************************************************************
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
\************************************************************************/
|
|
|
|
|
|
|
|
IMapWindow::IMapWindow( Window* pParent, const ResId& rResId ) :
|
2001-03-15 16:21:24 +00:00
|
|
|
GraphCtrl( pParent, rResId ),
|
|
|
|
DropTargetHelper( this )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
|
|
|
SetWinStyle( WB_SDRMODE );
|
|
|
|
|
|
|
|
pItemInfo = new SfxItemInfo[ 1 ];
|
|
|
|
memset( pItemInfo, 0, sizeof( SfxItemInfo ) );
|
|
|
|
pIMapPool = new SfxItemPool( String::CreateFromAscii( "IMapItemPool" ),
|
|
|
|
SID_ATTR_MACROITEM, SID_ATTR_MACROITEM, pItemInfo );
|
|
|
|
pIMapPool->FreezeIdRanges();
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
\************************************************************************/
|
|
|
|
|
|
|
|
IMapWindow::~IMapWindow()
|
|
|
|
{
|
|
|
|
// Liste loeschen
|
|
|
|
for( String* pStr = aTargetList.First(); pStr; pStr = aTargetList.Next() )
|
|
|
|
delete pStr;
|
|
|
|
|
|
|
|
delete pIMapPool;
|
|
|
|
delete[] pItemInfo;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
\************************************************************************/
|
|
|
|
|
|
|
|
void IMapWindow::SetImageMap( const ImageMap& rImageMap )
|
|
|
|
{
|
|
|
|
ReplaceImageMap( rImageMap, FALSE );
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
\************************************************************************/
|
|
|
|
|
2006-06-19 14:16:29 +00:00
|
|
|
void IMapWindow::ReplaceImageMap( const ImageMap& rImageMap, BOOL /*bScaleToGraphic*/ )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2006-07-25 11:49:48 +00:00
|
|
|
SdrPage* pPage = 0;
|
2000-09-18 16:07:07 +00:00
|
|
|
aIMap = rImageMap;
|
|
|
|
|
2006-07-25 11:49:48 +00:00
|
|
|
if(GetSdrModel())
|
|
|
|
{
|
|
|
|
// try to access page
|
|
|
|
pPage = GetSdrModel()->GetPage(0L);
|
|
|
|
}
|
|
|
|
|
|
|
|
if(pPage)
|
|
|
|
{
|
|
|
|
// clear all draw objects
|
|
|
|
pPage->Clear();
|
|
|
|
}
|
|
|
|
|
|
|
|
if(GetSdrView())
|
|
|
|
{
|
|
|
|
// #i63762# reset selection at view
|
|
|
|
GetSdrView()->UnmarkAllObj();
|
|
|
|
}
|
|
|
|
|
|
|
|
// create new drawing objects
|
2006-10-12 11:16:34 +00:00
|
|
|
const USHORT nCount(rImageMap.GetIMapObjectCount());
|
2006-07-25 11:49:48 +00:00
|
|
|
|
2006-10-12 11:16:34 +00:00
|
|
|
for ( USHORT i(nCount); i > 0; i-- )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2006-10-12 11:16:34 +00:00
|
|
|
SdrObject* pNewObj = CreateObj( rImageMap.GetIMapObject( i - 1 ) );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
if ( pNewObj )
|
2006-07-25 11:49:48 +00:00
|
|
|
{
|
2000-09-18 16:07:07 +00:00
|
|
|
pPage->InsertObject( pNewObj );
|
2006-07-25 11:49:48 +00:00
|
|
|
}
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
\************************************************************************/
|
|
|
|
|
|
|
|
BOOL IMapWindow::ReplaceActualIMapInfo( const NotifyInfo& rNewInfo )
|
|
|
|
{
|
|
|
|
const SdrObject* pSdrObj = GetSelectedSdrObject();
|
|
|
|
IMapObject* pIMapObj;
|
|
|
|
BOOL bRet = FALSE;
|
|
|
|
|
|
|
|
if ( pSdrObj && ( ( pIMapObj = GetIMapObj( pSdrObj ) ) != NULL ) )
|
|
|
|
{
|
|
|
|
pIMapObj->SetURL( rNewInfo.aMarkURL );
|
2007-06-26 12:51:32 +00:00
|
|
|
pIMapObj->SetAltText( rNewInfo.aMarkAltText );
|
2000-09-18 16:07:07 +00:00
|
|
|
pIMapObj->SetTarget( rNewInfo.aMarkTarget );
|
2003-11-24 15:34:44 +00:00
|
|
|
pModel->SetChanged( sal_True );
|
2000-09-18 16:07:07 +00:00
|
|
|
UpdateInfo( FALSE );
|
|
|
|
|
|
|
|
bRet = TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
return bRet;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
\************************************************************************/
|
|
|
|
|
|
|
|
const ImageMap& IMapWindow::GetImageMap()
|
|
|
|
{
|
|
|
|
if ( pModel->IsChanged() )
|
|
|
|
{
|
|
|
|
SdrPage* pPage = (SdrPage*) pModel->GetPage( 0 );
|
|
|
|
|
|
|
|
if ( pPage )
|
|
|
|
{
|
|
|
|
const long nCount = pPage->GetObjCount();
|
|
|
|
|
|
|
|
aIMap.ClearImageMap();
|
|
|
|
|
|
|
|
for ( long i = nCount - 1; i > -1; i-- )
|
|
|
|
aIMap.InsertIMapObject( *( ( (IMapUserData*) pPage->GetObj( i )->GetUserData( 0 ) )->GetObject() ) );
|
|
|
|
}
|
|
|
|
|
2003-11-24 15:34:44 +00:00
|
|
|
pModel->SetChanged( sal_False );
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return aIMap;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
\************************************************************************/
|
|
|
|
|
|
|
|
void IMapWindow::SetTargetList( TargetList& rTargetList )
|
|
|
|
{
|
|
|
|
String* pStr;
|
|
|
|
|
|
|
|
// alte Liste loeschen
|
|
|
|
for( pStr = aTargetList.First(); pStr; pStr = aTargetList.Next() )
|
|
|
|
delete pStr;
|
|
|
|
|
|
|
|
aTargetList.Clear();
|
|
|
|
|
|
|
|
// mit uebergebener Liste fuellen
|
|
|
|
for( pStr = rTargetList.First(); pStr; pStr = rTargetList.Next() )
|
|
|
|
aTargetList.Insert( new String( *pStr ) );
|
|
|
|
|
2003-11-24 15:34:44 +00:00
|
|
|
pModel->SetChanged( sal_False );
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
\************************************************************************/
|
|
|
|
|
|
|
|
SdrObject* IMapWindow::CreateObj( const IMapObject* pIMapObj )
|
|
|
|
{
|
|
|
|
Point aPoint;
|
|
|
|
Rectangle aClipRect( aPoint, GetGraphicSize() );
|
|
|
|
SdrObject* pSdrObj = NULL;
|
2006-10-12 11:16:34 +00:00
|
|
|
IMapObject* pCloneIMapObj = NULL;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
switch( pIMapObj->GetType() )
|
|
|
|
{
|
|
|
|
case( IMAP_OBJ_RECTANGLE ):
|
|
|
|
{
|
|
|
|
IMapRectangleObject* pIMapRectObj = (IMapRectangleObject*) pIMapObj;
|
|
|
|
Rectangle aDrawRect( pIMapRectObj->GetRectangle( FALSE ) );
|
|
|
|
|
|
|
|
// auf Zeichenflaeche clippen
|
|
|
|
aDrawRect.Intersection( aClipRect );
|
|
|
|
|
|
|
|
pSdrObj = (SdrObject*) new SdrRectObj( aDrawRect );
|
|
|
|
pCloneIMapObj = (IMapObject*) new IMapRectangleObject( *pIMapRectObj );
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case( IMAP_OBJ_CIRCLE ):
|
|
|
|
{
|
|
|
|
IMapCircleObject* pIMapCircleObj = (IMapCircleObject*) pIMapObj;
|
|
|
|
const Point aCenter( pIMapCircleObj->GetCenter( FALSE ) );
|
|
|
|
const long nRadius = pIMapCircleObj->GetRadius( FALSE );
|
|
|
|
const Point aOffset( nRadius, nRadius );
|
|
|
|
Rectangle aCircle( aCenter - aOffset, aCenter + aOffset );
|
|
|
|
|
|
|
|
// auf Zeichenflaeche begrenzen
|
|
|
|
aCircle.Intersection( aClipRect );
|
|
|
|
|
|
|
|
pSdrObj = (SdrObject*) new SdrCircObj( OBJ_CIRC, aCircle, 0, 36000 );
|
|
|
|
pCloneIMapObj = (IMapObject*) new IMapCircleObject( *pIMapCircleObj );
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case( IMAP_OBJ_POLYGON ):
|
|
|
|
{
|
|
|
|
IMapPolygonObject* pIMapPolyObj = (IMapPolygonObject*) pIMapObj;
|
|
|
|
|
|
|
|
// Falls wir eigentlich eine Ellipse sind,
|
|
|
|
// erzeugen wir auch wieder eine Ellipse
|
|
|
|
if ( pIMapPolyObj->HasExtraEllipse() )
|
|
|
|
{
|
|
|
|
Rectangle aDrawRect( pIMapPolyObj->GetExtraEllipse() );
|
|
|
|
|
|
|
|
// auf Zeichenflaeche clippen
|
|
|
|
aDrawRect.Intersection( aClipRect );
|
|
|
|
|
|
|
|
pSdrObj = (SdrObject*) new SdrCircObj( OBJ_CIRC, aDrawRect, 0, 36000 );
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
const Polygon& rPoly = pIMapPolyObj->GetPolygon( FALSE );
|
|
|
|
Polygon aDrawPoly( rPoly );
|
|
|
|
|
|
|
|
// auf Zeichenflaeche clippen
|
|
|
|
aDrawPoly.Clip( aClipRect );
|
|
|
|
|
2006-11-14 12:16:18 +00:00
|
|
|
basegfx::B2DPolygon aPolygon;
|
|
|
|
aPolygon.append(aDrawPoly.getB2DPolygon());
|
|
|
|
pSdrObj = (SdrObject*)new SdrPathObj(OBJ_POLY, basegfx::B2DPolyPolygon(aPolygon));
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
pCloneIMapObj = (IMapObject*) new IMapPolygonObject( *pIMapPolyObj );
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( pSdrObj )
|
|
|
|
{
|
|
|
|
SfxItemSet aSet( pModel->GetItemPool() );
|
|
|
|
|
|
|
|
aSet.Put( XFillStyleItem( XFILL_SOLID ) );
|
|
|
|
aSet.Put( XFillColorItem( String(), TRANSCOL ) );
|
|
|
|
|
|
|
|
if ( !pIMapObj->IsActive() )
|
|
|
|
{
|
|
|
|
aSet.Put( XFillTransparenceItem( 100 ) );
|
|
|
|
aSet.Put( XLineColorItem( String(), Color( COL_RED ) ) );
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
aSet.Put( XFillTransparenceItem( 50 ) );
|
|
|
|
aSet.Put( XLineColorItem( String(), Color( COL_BLACK ) ) );
|
|
|
|
}
|
|
|
|
|
2003-11-24 15:34:44 +00:00
|
|
|
//pSdrObj->SetItemSetAndBroadcast(aSet);
|
|
|
|
pSdrObj->SetMergedItemSetAndBroadcast(aSet);
|
2000-10-30 09:48:03 +00:00
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
pSdrObj->InsertUserData( new IMapUserData( pCloneIMapObj ) );
|
|
|
|
pSdrObj->SetUserCall( GetSdrUserCall() );
|
|
|
|
}
|
|
|
|
|
|
|
|
return pSdrObj;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
\************************************************************************/
|
|
|
|
|
|
|
|
void IMapWindow::InitSdrModel()
|
|
|
|
{
|
|
|
|
GraphCtrl::InitSdrModel();
|
|
|
|
|
|
|
|
SfxItemSet aSet( pModel->GetItemPool() );
|
|
|
|
|
|
|
|
aSet.Put( XFillColorItem( String(), TRANSCOL ) );
|
|
|
|
aSet.Put( XFillTransparenceItem( 50 ) );
|
|
|
|
pView->SetAttributes( aSet );
|
|
|
|
pView->SetFrameDragSingles( TRUE );
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
\************************************************************************/
|
|
|
|
|
|
|
|
void IMapWindow::SdrObjCreated( const SdrObject& rObj )
|
|
|
|
{
|
|
|
|
switch( rObj.GetObjIdentifier() )
|
|
|
|
{
|
|
|
|
case( OBJ_RECT ):
|
|
|
|
{
|
|
|
|
SdrRectObj* pRectObj = (SdrRectObj*) &rObj;
|
|
|
|
IMapRectangleObject* pObj = new IMapRectangleObject( pRectObj->GetLogicRect(),
|
2007-06-26 12:51:32 +00:00
|
|
|
String(), String(), String(), String(), String(), TRUE, FALSE );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
pRectObj->InsertUserData( new IMapUserData( pObj ) );
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case( OBJ_CIRC ):
|
|
|
|
{
|
2006-11-14 12:16:18 +00:00
|
|
|
SdrCircObj* pCircObj = (SdrCircObj*) &rObj;
|
|
|
|
SdrPathObj* pPathObj = (SdrPathObj*) pCircObj->ConvertToPolyObj( FALSE, FALSE );
|
|
|
|
Polygon aPoly(pPathObj->GetPathPoly().getB2DPolygon(0L));
|
2000-09-18 16:07:07 +00:00
|
|
|
delete pPathObj;
|
|
|
|
|
2007-06-26 12:51:32 +00:00
|
|
|
IMapPolygonObject* pObj = new IMapPolygonObject( Polygon(aPoly), String(), String(), String(), String(), String(), TRUE, FALSE );
|
2000-09-18 16:07:07 +00:00
|
|
|
pObj->SetExtraEllipse( aPoly.GetBoundRect() );
|
|
|
|
pCircObj->InsertUserData( new IMapUserData( pObj ) );
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case( OBJ_POLY ):
|
|
|
|
case( OBJ_FREEFILL ):
|
|
|
|
case( OBJ_PATHPOLY ):
|
|
|
|
case( OBJ_PATHFILL ):
|
|
|
|
{
|
2006-11-14 12:16:18 +00:00
|
|
|
SdrPathObj* pPathObj = (SdrPathObj*) &rObj;
|
|
|
|
const basegfx::B2DPolyPolygon& rXPolyPoly = pPathObj->GetPathPoly();
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2006-11-14 12:16:18 +00:00
|
|
|
if ( rXPolyPoly.count() )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2006-11-14 12:16:18 +00:00
|
|
|
Polygon aPoly(rXPolyPoly.getB2DPolygon(0L));
|
2007-06-26 12:51:32 +00:00
|
|
|
IMapPolygonObject* pObj = new IMapPolygonObject( aPoly, String(), String(), String(), String(), String(), TRUE, FALSE );
|
2000-09-18 16:07:07 +00:00
|
|
|
pPathObj->InsertUserData( new IMapUserData( pObj ) );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
\************************************************************************/
|
|
|
|
|
|
|
|
void IMapWindow::SdrObjChanged( const SdrObject& rObj )
|
|
|
|
{
|
|
|
|
IMapUserData* pUserData = (IMapUserData*) rObj.GetUserData( 0 );
|
|
|
|
|
|
|
|
if ( pUserData )
|
|
|
|
{
|
|
|
|
String aURL;
|
2007-06-26 12:51:32 +00:00
|
|
|
String aAltText;
|
|
|
|
String aDesc;
|
2000-09-18 16:07:07 +00:00
|
|
|
String aTarget;
|
|
|
|
IMapObject* pIMapObj = pUserData->GetObject();
|
|
|
|
BOOL bActive = TRUE;
|
|
|
|
|
|
|
|
if ( pIMapObj )
|
|
|
|
{
|
|
|
|
aURL = pIMapObj->GetURL();
|
2007-06-26 12:51:32 +00:00
|
|
|
aAltText = pIMapObj->GetAltText();
|
|
|
|
aDesc = pIMapObj->GetDesc();
|
2000-09-18 16:07:07 +00:00
|
|
|
aTarget = pIMapObj->GetTarget();
|
|
|
|
bActive = pIMapObj->IsActive();
|
|
|
|
}
|
|
|
|
|
|
|
|
switch( rObj.GetObjIdentifier() )
|
|
|
|
{
|
|
|
|
case( OBJ_RECT ):
|
|
|
|
{
|
|
|
|
pUserData->ReplaceObject( new IMapRectangleObject( ( (const SdrRectObj&) rObj ).GetLogicRect(),
|
2007-06-26 12:51:32 +00:00
|
|
|
aURL, aAltText, aDesc, aTarget, String(), bActive, FALSE ) );
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case( OBJ_CIRC ):
|
|
|
|
{
|
2006-11-14 12:16:18 +00:00
|
|
|
const SdrCircObj& rCircObj = (const SdrCircObj&) rObj;
|
|
|
|
SdrPathObj* pPathObj = (SdrPathObj*) rCircObj.ConvertToPolyObj( FALSE, FALSE );
|
|
|
|
Polygon aPoly(pPathObj->GetPathPoly().getB2DPolygon(0L));
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2007-06-26 12:51:32 +00:00
|
|
|
IMapPolygonObject* pObj = new IMapPolygonObject( aPoly, aURL, aAltText, aDesc, aTarget, String(), bActive, FALSE );
|
2000-09-18 16:07:07 +00:00
|
|
|
pObj->SetExtraEllipse( aPoly.GetBoundRect() );
|
|
|
|
|
|
|
|
// wurde von uns nur temporaer angelegt
|
|
|
|
delete pPathObj;
|
|
|
|
pUserData->ReplaceObject( pObj );
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case( OBJ_POLY ):
|
|
|
|
case( OBJ_FREEFILL ):
|
|
|
|
case( OBJ_PATHPOLY ):
|
|
|
|
case( OBJ_PATHFILL ):
|
|
|
|
{
|
2006-11-14 12:16:18 +00:00
|
|
|
const SdrPathObj& rPathObj = (const SdrPathObj&) rObj;
|
|
|
|
const basegfx::B2DPolyPolygon& rXPolyPoly = rPathObj.GetPathPoly();
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2006-11-14 12:16:18 +00:00
|
|
|
if ( rXPolyPoly.count() )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2006-11-14 12:16:18 +00:00
|
|
|
Polygon aPoly(rPathObj.GetPathPoly().getB2DPolygon(0L));
|
2007-06-26 12:51:32 +00:00
|
|
|
IMapPolygonObject* pObj = new IMapPolygonObject( aPoly, aURL, aAltText, aDesc, aTarget, String(), bActive, FALSE );
|
2000-09-18 16:07:07 +00:00
|
|
|
pUserData->ReplaceObject( pObj );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
\************************************************************************/
|
|
|
|
|
|
|
|
void IMapWindow::MouseButtonUp(const MouseEvent& rMEvt)
|
|
|
|
{
|
|
|
|
GraphCtrl::MouseButtonUp( rMEvt );
|
|
|
|
UpdateInfo( TRUE );
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
\************************************************************************/
|
|
|
|
|
|
|
|
void IMapWindow::MarkListHasChanged()
|
|
|
|
{
|
|
|
|
GraphCtrl::MarkListHasChanged();
|
|
|
|
UpdateInfo( FALSE );
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
\************************************************************************/
|
|
|
|
|
|
|
|
SdrObject* IMapWindow::GetHitSdrObj( const Point& rPosPixel ) const
|
|
|
|
{
|
|
|
|
SdrObject* pObj = NULL;
|
|
|
|
Point aPt = PixelToLogic( rPosPixel );
|
|
|
|
|
|
|
|
if ( Rectangle( Point(), GetGraphicSize() ).IsInside( aPt ) )
|
|
|
|
{
|
|
|
|
SdrPage* pPage = (SdrPage*) pModel->GetPage( 0 );
|
|
|
|
ULONG nCount;
|
|
|
|
|
|
|
|
if ( pPage && ( ( nCount = pPage->GetObjCount() ) > 0 ) )
|
|
|
|
{
|
|
|
|
for ( long i = nCount - 1; i >= 0; i-- )
|
|
|
|
{
|
|
|
|
SdrObject* pTestObj = pPage->GetObj( i );
|
|
|
|
IMapObject* pIMapObj = GetIMapObj( pTestObj );
|
|
|
|
|
|
|
|
if ( pIMapObj && pIMapObj->IsHit( aPt ) )
|
|
|
|
{
|
|
|
|
pObj = pTestObj;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return pObj;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
\************************************************************************/
|
|
|
|
|
|
|
|
IMapObject* IMapWindow::GetIMapObj( const SdrObject* pSdrObj ) const
|
|
|
|
{
|
|
|
|
IMapObject* pIMapObj = NULL;
|
|
|
|
|
|
|
|
if ( pSdrObj )
|
|
|
|
{
|
|
|
|
IMapUserData* pUserData = (IMapUserData*) pSdrObj->GetUserData( 0 );
|
|
|
|
|
|
|
|
if ( pUserData )
|
|
|
|
pIMapObj = pUserData->GetObject();
|
|
|
|
}
|
|
|
|
|
|
|
|
return pIMapObj;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
\************************************************************************/
|
|
|
|
|
|
|
|
SdrObject* IMapWindow::GetSdrObj( const IMapObject* pIMapObj ) const
|
|
|
|
{
|
|
|
|
SdrObject* pSdrObj = NULL;
|
|
|
|
SdrPage* pPage = (SdrPage*) pModel->GetPage( 0 );
|
|
|
|
ULONG nCount;
|
|
|
|
|
|
|
|
if ( pPage && ( ( nCount = pPage->GetObjCount() ) > 0 ) )
|
|
|
|
{
|
|
|
|
for ( ULONG i = 0; i < nCount; i++ )
|
|
|
|
{
|
|
|
|
SdrObject* pTestObj = pPage->GetObj( i );
|
|
|
|
|
|
|
|
if ( pIMapObj == GetIMapObj( pTestObj ) )
|
|
|
|
{
|
|
|
|
pSdrObj = pTestObj;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return pSdrObj;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
\************************************************************************/
|
|
|
|
|
|
|
|
void IMapWindow::Command(const CommandEvent& rCEvt)
|
|
|
|
{
|
|
|
|
Region aRegion;
|
|
|
|
|
|
|
|
if ( rCEvt.GetCommand() == COMMAND_CONTEXTMENU )
|
|
|
|
{
|
|
|
|
PopupMenu aMenu( SVX_RES( RID_SVXMN_IMAP ) );
|
2004-07-12 13:33:36 +00:00
|
|
|
const SdrMarkList& rMarkList = pView->GetMarkedObjectList();
|
2000-09-18 16:07:07 +00:00
|
|
|
ULONG nMarked = rMarkList.GetMarkCount();
|
|
|
|
|
|
|
|
aMenu.EnableItem( MN_URL, FALSE );
|
|
|
|
aMenu.EnableItem( MN_ACTIVATE, FALSE );
|
|
|
|
aMenu.EnableItem( MN_MACRO, FALSE );
|
2004-07-12 13:33:36 +00:00
|
|
|
aMenu.EnableItem( MN_MARK_ALL, pModel->GetPage( 0 )->GetObjCount() != pView->GetMarkedObjectCount() );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
if ( !nMarked )
|
|
|
|
{
|
|
|
|
aMenu.EnableItem( MN_POSITION, FALSE );
|
|
|
|
aMenu.EnableItem( MN_FRAME_TO_TOP, FALSE );
|
|
|
|
aMenu.EnableItem( MN_MOREFRONT, FALSE );
|
|
|
|
aMenu.EnableItem( MN_MOREBACK, FALSE );
|
|
|
|
aMenu.EnableItem( MN_FRAME_TO_BOTTOM, FALSE );
|
2006-06-19 14:16:29 +00:00
|
|
|
aMenu.EnableItem( MN_DELETE1, FALSE );
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if ( nMarked == 1 )
|
|
|
|
{
|
|
|
|
SdrObject* pSdrObj = GetSelectedSdrObject();
|
|
|
|
|
|
|
|
aMenu.EnableItem( MN_URL, TRUE );
|
|
|
|
aMenu.EnableItem( MN_ACTIVATE, TRUE );
|
|
|
|
aMenu.EnableItem( MN_MACRO, TRUE );
|
|
|
|
aMenu.CheckItem( MN_ACTIVATE, GetIMapObj( pSdrObj )->IsActive() );
|
|
|
|
}
|
|
|
|
|
|
|
|
aMenu.EnableItem( MN_POSITION, TRUE );
|
|
|
|
aMenu.EnableItem( MN_FRAME_TO_TOP, TRUE );
|
|
|
|
aMenu.EnableItem( MN_MOREFRONT, TRUE );
|
|
|
|
aMenu.EnableItem( MN_MOREBACK, TRUE );
|
|
|
|
aMenu.EnableItem( MN_FRAME_TO_BOTTOM, TRUE );
|
2006-06-19 14:16:29 +00:00
|
|
|
aMenu.EnableItem( MN_DELETE1, TRUE );
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
aMenu.SetSelectHdl( LINK( this, IMapWindow, MenuSelectHdl ) );
|
2002-01-08 11:02:06 +00:00
|
|
|
aMenu.Execute( this, rCEvt.GetMousePosPixel() );
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
Window::Command(rCEvt);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
\************************************************************************/
|
|
|
|
|
2001-03-15 16:21:24 +00:00
|
|
|
sal_Int8 IMapWindow::AcceptDrop( const AcceptDropEvent& rEvt )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2001-03-15 16:21:24 +00:00
|
|
|
return( ( GetHitSdrObj( rEvt.maPosPixel ) != NULL ) ? rEvt.mnAction : DND_ACTION_NONE );
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
\************************************************************************/
|
|
|
|
|
2001-03-15 16:21:24 +00:00
|
|
|
sal_Int8 IMapWindow::ExecuteDrop( const ExecuteDropEvent& rEvt )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2001-03-15 16:21:24 +00:00
|
|
|
sal_Int8 nRet = DND_ACTION_NONE;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2001-03-15 16:21:24 +00:00
|
|
|
if( IsDropFormatSupported( SOT_FORMATSTR_ID_NETSCAPE_BOOKMARK ) )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2001-03-15 16:21:24 +00:00
|
|
|
const String aString;
|
|
|
|
INetBookmark aBookMark( aString, aString );
|
|
|
|
SdrObject* pSdrObj = GetHitSdrObj( rEvt.maPosPixel );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2001-03-15 16:21:24 +00:00
|
|
|
if( pSdrObj && TransferableDataHelper( rEvt.maDropEvent.Transferable ).GetINetBookmark( SOT_FORMATSTR_ID_NETSCAPE_BOOKMARK, aBookMark ) )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
|
|
|
IMapObject* pIMapObj = GetIMapObj( pSdrObj );
|
|
|
|
|
|
|
|
pIMapObj->SetURL( aBookMark.GetURL() );
|
2007-06-26 12:51:32 +00:00
|
|
|
pIMapObj->SetAltText( aBookMark.GetDescription() );
|
2003-11-24 15:34:44 +00:00
|
|
|
pModel->SetChanged( sal_True );
|
2000-09-18 16:07:07 +00:00
|
|
|
pView->UnmarkAll();
|
2006-11-14 12:16:18 +00:00
|
|
|
pView->MarkObj( pSdrObj, pView->GetSdrPageView() );
|
2000-09-18 16:07:07 +00:00
|
|
|
UpdateInfo( TRUE );
|
2001-03-15 16:21:24 +00:00
|
|
|
nRet = rEvt.mnAction;
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2001-03-15 16:21:24 +00:00
|
|
|
return nRet;
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
\************************************************************************/
|
|
|
|
|
|
|
|
void IMapWindow::RequestHelp( const HelpEvent& rHEvt )
|
|
|
|
{
|
|
|
|
SdrObject* pSdrObj = NULL;
|
|
|
|
SdrPageView* pPageView = NULL;
|
|
|
|
Point aPos = PixelToLogic( ScreenToOutputPixel( rHEvt.GetMousePosPixel() ) );
|
|
|
|
|
|
|
|
if ( Help::IsBalloonHelpEnabled() || Help::IsQuickHelpEnabled() )
|
|
|
|
{
|
|
|
|
if ( pView->PickObj( aPos, pSdrObj, pPageView ) )
|
|
|
|
{
|
|
|
|
const IMapObject* pIMapObj = GetIMapObj( pSdrObj );
|
|
|
|
String aStr;
|
|
|
|
|
|
|
|
if ( pIMapObj && ( aStr = pIMapObj->GetURL() ).Len() )
|
|
|
|
{
|
2007-06-26 12:51:32 +00:00
|
|
|
String aDescr( pIMapObj->GetAltText() );
|
2000-09-18 16:07:07 +00:00
|
|
|
Rectangle aLogicPix( LogicToPixel( Rectangle( Point(), GetGraphicSize() ) ) );
|
|
|
|
Rectangle aScreenRect( OutputToScreenPixel( aLogicPix.TopLeft() ),
|
|
|
|
OutputToScreenPixel( aLogicPix.BottomRight() ) );
|
|
|
|
|
|
|
|
if ( Help::IsBalloonHelpEnabled() )
|
|
|
|
Help::ShowBalloon( this, rHEvt.GetMousePosPixel(), aScreenRect, aStr );
|
|
|
|
else if ( Help::IsQuickHelpEnabled() )
|
|
|
|
Help::ShowQuickHelp( this, aScreenRect, aStr );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
Window::RequestHelp( rHEvt );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
\************************************************************************/
|
|
|
|
|
|
|
|
void IMapWindow::SetCurrentObjState( BOOL bActive )
|
|
|
|
{
|
|
|
|
SdrObject* pObj = GetSelectedSdrObject();
|
|
|
|
|
|
|
|
if ( pObj )
|
|
|
|
{
|
|
|
|
SfxItemSet aSet( pModel->GetItemPool() );
|
|
|
|
|
|
|
|
GetIMapObj( pObj )->SetActive( bActive );
|
|
|
|
|
|
|
|
aSet.Put( XFillColorItem( String(), TRANSCOL ) );
|
|
|
|
|
|
|
|
if ( !bActive )
|
|
|
|
{
|
|
|
|
aSet.Put( XFillTransparenceItem( 100 ) );
|
|
|
|
aSet.Put( XLineColorItem( String(), Color( COL_RED ) ) );
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
aSet.Put( XFillTransparenceItem( 50 ) );
|
|
|
|
aSet.Put( XLineColorItem( String(), Color( COL_BLACK ) ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
pView->SetAttributes( aSet, FALSE );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
\************************************************************************/
|
|
|
|
|
|
|
|
void IMapWindow::UpdateInfo( BOOL bNewObj )
|
|
|
|
{
|
|
|
|
if ( aInfoLink.IsSet() )
|
|
|
|
{
|
|
|
|
const SdrObject* pSdrObj = GetSelectedSdrObject();
|
|
|
|
const IMapObject* pIMapObj = pSdrObj ? GetIMapObj( pSdrObj ) : NULL;
|
|
|
|
|
|
|
|
aInfo.bNewObj = bNewObj;
|
|
|
|
|
|
|
|
if ( pIMapObj )
|
|
|
|
{
|
|
|
|
aInfo.bOneMarked = TRUE;
|
|
|
|
aInfo.aMarkURL = pIMapObj->GetURL();
|
2007-06-26 12:51:32 +00:00
|
|
|
aInfo.aMarkAltText = pIMapObj->GetAltText();
|
2000-09-18 16:07:07 +00:00
|
|
|
aInfo.aMarkTarget = pIMapObj->GetTarget();
|
|
|
|
aInfo.bActivated = pIMapObj->IsActive();
|
|
|
|
aInfoLink.Call( this );
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2007-06-26 12:51:32 +00:00
|
|
|
aInfo.aMarkURL = aInfo.aMarkAltText = aInfo.aMarkTarget = String();
|
2000-09-18 16:07:07 +00:00
|
|
|
aInfo.bOneMarked = FALSE;
|
|
|
|
aInfo.bActivated = FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
aInfoLink.Call( this );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
\************************************************************************/
|
|
|
|
|
|
|
|
void IMapWindow::DoMacroAssign()
|
|
|
|
{
|
|
|
|
SdrObject* pSdrObj = GetSelectedSdrObject();
|
|
|
|
|
|
|
|
if ( pSdrObj )
|
|
|
|
{
|
|
|
|
SfxItemSet aSet( *pIMapPool, SID_ATTR_MACROITEM, SID_ATTR_MACROITEM );
|
2007-05-10 13:37:54 +00:00
|
|
|
SvxMacroItem aMacroItem(SID_ATTR_MACROITEM);
|
2000-09-18 16:07:07 +00:00
|
|
|
IMapObject* pIMapObj = GetIMapObj( pSdrObj );
|
|
|
|
|
|
|
|
aMacroItem.SetMacroTable( pIMapObj->GetMacroTable() );
|
|
|
|
aSet.Put( aMacroItem, SID_ATTR_MACROITEM );
|
|
|
|
|
|
|
|
SfxMacroAssignDlg aMacroDlg( this, aSet );
|
|
|
|
SfxMacroTabPage* pMacroTabPage = (SfxMacroTabPage*) aMacroDlg.GetTabPage();
|
|
|
|
|
|
|
|
if ( pMacroTabPage )
|
|
|
|
{
|
|
|
|
pMacroTabPage->AddEvent( String::CreateFromAscii( "MouseOver" ), SFX_EVENT_MOUSEOVER_OBJECT );
|
|
|
|
pMacroTabPage->AddEvent( String::CreateFromAscii( "MouseOut" ), SFX_EVENT_MOUSEOUT_OBJECT );
|
|
|
|
|
|
|
|
if ( aMacroDlg.Execute() == RET_OK )
|
|
|
|
{
|
|
|
|
const SfxItemSet* pOutSet = aMacroDlg.GetOutputItemSet();
|
|
|
|
pIMapObj->SetMacroTable( ((const SvxMacroItem& )pOutSet->Get( SID_ATTR_MACROITEM )).GetMacroTable() );
|
2003-11-24 15:34:44 +00:00
|
|
|
pModel->SetChanged( sal_True );
|
2002-03-20 10:31:18 +00:00
|
|
|
UpdateInfo( FALSE );
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
\************************************************************************/
|
|
|
|
|
|
|
|
void IMapWindow::DoPropertyDialog()
|
|
|
|
{
|
|
|
|
SdrObject* pSdrObj = GetSelectedSdrObject();
|
|
|
|
|
|
|
|
if ( pSdrObj )
|
|
|
|
{
|
|
|
|
IMapObject* pIMapObj = GetIMapObj( pSdrObj );
|
2004-02-03 17:33:10 +00:00
|
|
|
SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
|
|
|
|
if(pFact)
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2007-06-26 12:51:32 +00:00
|
|
|
AbstractURLDlg* aDlg = pFact->CreateURLDialog( this, pIMapObj->GetURL(), pIMapObj->GetAltText(), pIMapObj->GetDesc(),
|
2007-04-26 06:34:40 +00:00
|
|
|
pIMapObj->GetTarget(), pIMapObj->GetName(), aTargetList, RID_SVXDLG_IMAPURL );
|
2007-06-26 12:51:32 +00:00
|
|
|
DBG_ASSERT(aDlg, "Dialogdiet fail!");
|
|
|
|
if ( aDlg->Execute() == RET_OK )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2007-06-26 12:51:32 +00:00
|
|
|
const String aURLText( aDlg->GetURL() );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2004-02-03 17:33:10 +00:00
|
|
|
if ( aURLText.Len() )
|
|
|
|
{
|
2005-01-11 11:56:33 +00:00
|
|
|
INetURLObject aObj( aURLText, INET_PROT_FILE );
|
|
|
|
DBG_ASSERT( aObj.GetProtocol() != INET_PROT_NOT_VALID, "Invalid URL" );
|
|
|
|
pIMapObj->SetURL( aObj.GetMainURL( INetURLObject::NO_DECODE ) );
|
2004-02-03 17:33:10 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
pIMapObj->SetURL( aURLText );
|
|
|
|
|
2007-06-26 12:51:32 +00:00
|
|
|
pIMapObj->SetAltText( aDlg->GetAltText() );
|
|
|
|
pIMapObj->SetDesc( aDlg->GetDesc() );
|
|
|
|
pIMapObj->SetTarget( aDlg->GetTarget() );
|
|
|
|
pIMapObj->SetName( aDlg->GetName() );
|
2004-02-03 17:33:10 +00:00
|
|
|
pModel->SetChanged( sal_True );
|
|
|
|
UpdateInfo( TRUE );
|
|
|
|
}
|
|
|
|
delete aDlg; //add by CHINA001
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
|*
|
|
|
|
\************************************************************************/
|
|
|
|
|
|
|
|
IMPL_LINK( IMapWindow, MenuSelectHdl, Menu*, pMenu )
|
|
|
|
{
|
|
|
|
if (pMenu)
|
|
|
|
{
|
|
|
|
USHORT nId = pMenu->GetCurItemId();
|
|
|
|
|
|
|
|
switch(nId)
|
|
|
|
{
|
|
|
|
case( MN_URL ):
|
|
|
|
DoPropertyDialog();
|
|
|
|
break;
|
|
|
|
|
|
|
|
case( MN_MACRO ):
|
|
|
|
DoMacroAssign();
|
|
|
|
break;
|
|
|
|
|
|
|
|
case( MN_ACTIVATE ):
|
|
|
|
{
|
|
|
|
const BOOL bNewState = !pMenu->IsItemChecked( MN_ACTIVATE );
|
|
|
|
|
|
|
|
pMenu->CheckItem( MN_ACTIVATE, bNewState );
|
|
|
|
SetCurrentObjState( bNewState );
|
|
|
|
UpdateInfo( FALSE );
|
|
|
|
}
|
|
|
|
|
|
|
|
case( MN_FRAME_TO_TOP ):
|
|
|
|
pView->PutMarkedToTop();
|
|
|
|
break;
|
|
|
|
|
|
|
|
case( MN_MOREFRONT ):
|
|
|
|
pView->MovMarkedToTop();
|
|
|
|
break;
|
|
|
|
|
|
|
|
case( MN_MOREBACK ):
|
|
|
|
pView->MovMarkedToBtm();
|
|
|
|
break;
|
|
|
|
|
|
|
|
case( MN_FRAME_TO_BOTTOM ):
|
|
|
|
pView->PutMarkedToBtm();
|
|
|
|
break;
|
|
|
|
|
|
|
|
case( MN_MARK_ALL ):
|
|
|
|
pView->MarkAll();
|
|
|
|
break;
|
|
|
|
|
2006-06-19 14:16:29 +00:00
|
|
|
case( MN_DELETE1 ):
|
2000-09-18 16:07:07 +00:00
|
|
|
pView->DeleteMarked();
|
|
|
|
|
|
|
|
default :
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2002-04-09 06:31:52 +00:00
|
|
|
void IMapWindow::CreateDefaultObject()
|
|
|
|
{
|
2006-11-14 12:16:18 +00:00
|
|
|
SdrPageView* pPageView = pView->GetSdrPageView();
|
2002-04-09 06:31:52 +00:00
|
|
|
|
|
|
|
if(pPageView)
|
|
|
|
{
|
|
|
|
// calc position and size
|
2006-11-14 12:16:18 +00:00
|
|
|
Point aPagePos(0, 0); // = pPageView->GetOffset();
|
2002-04-09 06:31:52 +00:00
|
|
|
Size aPageSize = pPageView->GetPage()->GetSize();
|
|
|
|
sal_uInt32 nDefaultObjectSizeWidth = aPageSize.Width() / 4;
|
|
|
|
sal_uInt32 nDefaultObjectSizeHeight = aPageSize.Height() / 4;
|
|
|
|
aPagePos.X() += (aPageSize.Width() / 2) - (nDefaultObjectSizeWidth / 2);
|
|
|
|
aPagePos.Y() += (aPageSize.Height() / 2) - (nDefaultObjectSizeHeight / 2);
|
|
|
|
Rectangle aNewObjectRectangle(aPagePos, Size(nDefaultObjectSizeWidth, nDefaultObjectSizeHeight));
|
|
|
|
|
|
|
|
SdrObject* pObj = SdrObjFactory::MakeNewObject( pView->GetCurrentObjInventor(), pView->GetCurrentObjIdentifier(), 0L, pModel);
|
|
|
|
pObj->SetLogicRect(aNewObjectRectangle);
|
|
|
|
|
|
|
|
switch( pObj->GetObjIdentifier() )
|
|
|
|
{
|
|
|
|
case OBJ_POLY:
|
|
|
|
case OBJ_PATHPOLY:
|
|
|
|
{
|
2006-11-14 12:16:18 +00:00
|
|
|
basegfx::B2DPolygon aInnerPoly;
|
|
|
|
aInnerPoly.append(basegfx::B2DPoint(aNewObjectRectangle.BottomLeft().X(), aNewObjectRectangle.BottomLeft().Y()));
|
|
|
|
aInnerPoly.append(basegfx::B2DPoint(aNewObjectRectangle.TopLeft().X(), aNewObjectRectangle.TopLeft().Y()));
|
|
|
|
aInnerPoly.append(basegfx::B2DPoint(aNewObjectRectangle.TopCenter().X(), aNewObjectRectangle.TopCenter().Y()));
|
|
|
|
aInnerPoly.append(basegfx::B2DPoint(aNewObjectRectangle.Center().X(), aNewObjectRectangle.Center().Y()));
|
|
|
|
aInnerPoly.append(basegfx::B2DPoint(aNewObjectRectangle.RightCenter().X(), aNewObjectRectangle.RightCenter().Y()));
|
|
|
|
aInnerPoly.append(basegfx::B2DPoint(aNewObjectRectangle.BottomRight().X(), aNewObjectRectangle.BottomRight().Y()));
|
|
|
|
aInnerPoly.setClosed(true);
|
|
|
|
((SdrPathObj*)pObj)->SetPathPoly(basegfx::B2DPolyPolygon(aInnerPoly));
|
2002-04-09 06:31:52 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
case OBJ_FREEFILL:
|
|
|
|
case OBJ_PATHFILL:
|
|
|
|
{
|
|
|
|
sal_Int32 nWdt(aNewObjectRectangle.GetWidth() / 2);
|
|
|
|
sal_Int32 nHgt(aNewObjectRectangle.GetHeight() / 2);
|
2006-11-14 12:16:18 +00:00
|
|
|
basegfx::B2DPolygon aInnerPoly(XPolygon(aNewObjectRectangle.Center(), nWdt, nHgt).getB2DPolygon());
|
|
|
|
((SdrPathObj*)pObj)->SetPathPoly(basegfx::B2DPolyPolygon(aInnerPoly));
|
2002-04-09 06:31:52 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2006-11-14 12:16:18 +00:00
|
|
|
pView->InsertObjectAtView(pObj, *pPageView);
|
2002-04-09 06:31:52 +00:00
|
|
|
SdrObjCreated( *pObj );
|
|
|
|
SetCurrentObjState( true );
|
2002-04-12 10:54:45 +00:00
|
|
|
pView->MarkObj( pObj, pPageView );
|
2002-04-09 06:31:52 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void IMapWindow::KeyInput( const KeyEvent& rKEvt )
|
|
|
|
{
|
|
|
|
KeyCode aCode = rKEvt.GetKeyCode();
|
|
|
|
|
|
|
|
/*
|
|
|
|
switch(aCode.GetCode())
|
|
|
|
{
|
2002-04-12 10:54:45 +00:00
|
|
|
case KEY_ESCAPE:
|
|
|
|
{
|
|
|
|
if ( pView->IsAction() )
|
|
|
|
{
|
|
|
|
pView->BrkAction();
|
|
|
|
return;
|
|
|
|
}
|
2004-07-12 13:33:36 +00:00
|
|
|
else if ( pView->AreObjectsMarked() )
|
2002-04-12 10:54:45 +00:00
|
|
|
{
|
|
|
|
const SdrHdlList& rHdlList = pView->GetHdlList();
|
|
|
|
SdrHdl* pHdl = rHdlList.GetFocusHdl();
|
|
|
|
|
|
|
|
if(pHdl)
|
|
|
|
{
|
|
|
|
((SdrHdlList&)rHdlList).ResetFocusHdl();
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
pView->UnmarkAllObj();
|
|
|
|
((Dialog*)GetParent())->GrabFocusToFirstControl();
|
|
|
|
}
|
|
|
|
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
2002-04-09 06:31:52 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
*/
|
|
|
|
GraphCtrl::KeyInput( rKEvt );
|
|
|
|
}
|
|
|
|
|
|
|
|
void IMapWindow::SelectFirstObject()
|
|
|
|
{
|
|
|
|
SdrPage* pPage = (SdrPage*) pModel->GetPage( 0 );
|
|
|
|
if( pPage->GetObjCount() != 0 )
|
|
|
|
{
|
|
|
|
GrabFocus();
|
|
|
|
pView->UnmarkAllObj();
|
|
|
|
pView->MarkNextObj(TRUE);
|
|
|
|
}
|
|
|
|
}
|
2002-04-12 10:54:45 +00:00
|
|
|
|
|
|
|
void IMapWindow::StartPolyEdit()
|
|
|
|
{
|
|
|
|
GrabFocus();
|
|
|
|
|
2004-07-12 13:33:36 +00:00
|
|
|
if( !pView->AreObjectsMarked() )
|
2002-04-12 10:54:45 +00:00
|
|
|
pView->MarkNextObj(TRUE);
|
|
|
|
|
|
|
|
const SdrHdlList& rHdlList = pView->GetHdlList();
|
|
|
|
SdrHdl* pHdl = rHdlList.GetFocusHdl();
|
|
|
|
|
|
|
|
if(!pHdl)
|
|
|
|
{
|
|
|
|
((SdrHdlList&)rHdlList).TravelFocusHdl(true);
|
|
|
|
}
|
2003-10-06 14:30:58 +00:00
|
|
|
}
|