1*f6e50924SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*f6e50924SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*f6e50924SAndrew Rist * or more contributor license agreements. See the NOTICE file 5*f6e50924SAndrew Rist * distributed with this work for additional information 6*f6e50924SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*f6e50924SAndrew Rist * to you under the Apache License, Version 2.0 (the 8*f6e50924SAndrew Rist * "License"); you may not use this file except in compliance 9*f6e50924SAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11*f6e50924SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13*f6e50924SAndrew Rist * Unless required by applicable law or agreed to in writing, 14*f6e50924SAndrew Rist * software distributed under the License is distributed on an 15*f6e50924SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*f6e50924SAndrew Rist * KIND, either express or implied. See the License for the 17*f6e50924SAndrew Rist * specific language governing permissions and limitations 18*f6e50924SAndrew Rist * under the License. 19cdf0e10cSrcweir * 20*f6e50924SAndrew Rist *************************************************************/ 21*f6e50924SAndrew Rist 22*f6e50924SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_svx.hxx" 26cdf0e10cSrcweir #include <tools/urlobj.hxx> 27cdf0e10cSrcweir #include <vcl/msgbox.hxx> 28cdf0e10cSrcweir #include <vcl/help.hxx> 29cdf0e10cSrcweir #include <sfx2/sfxsids.hrc> // SID_ATTR_MACROITEM 30cdf0e10cSrcweir #define _ANIMATION 31cdf0e10cSrcweir #include <svtools/imaprect.hxx> 32cdf0e10cSrcweir #include <svtools/imapcirc.hxx> 33cdf0e10cSrcweir #include <svtools/imappoly.hxx> 34cdf0e10cSrcweir #include <svl/urlbmk.hxx> 35cdf0e10cSrcweir 36cdf0e10cSrcweir #include <svx/xoutbmp.hxx> 37cdf0e10cSrcweir #include <svx/dialmgr.hxx> 38cdf0e10cSrcweir #include <svx/dialogs.hrc> 39cdf0e10cSrcweir #include <svx/svxids.hrc> 40cdf0e10cSrcweir #include <imapdlg.hrc> 41cdf0e10cSrcweir #include <imapwnd.hxx> 42cdf0e10cSrcweir #include <svx/svdpage.hxx> 43cdf0e10cSrcweir #include <svx/svdorect.hxx> 44cdf0e10cSrcweir #include <svx/svdocirc.hxx> 45cdf0e10cSrcweir #include <svx/svdopath.hxx> 46cdf0e10cSrcweir #include <svx/xfltrit.hxx> 47cdf0e10cSrcweir #include <svx/svdpagv.hxx> 48cdf0e10cSrcweir #include <svl/urihelper.hxx> 49cdf0e10cSrcweir #include <svx/xfillit.hxx> 50cdf0e10cSrcweir #include <svx/xlineit.hxx> 51cdf0e10cSrcweir #include <sfx2/evntconf.hxx> 52cdf0e10cSrcweir 53cdf0e10cSrcweir #include <sot/formats.hxx> 54cdf0e10cSrcweir 55cdf0e10cSrcweir #include <svx/svxdlg.hxx> 56cdf0e10cSrcweir #include <svx/dialogs.hrc> 57cdf0e10cSrcweir #include <basegfx/point/b2dpoint.hxx> 58cdf0e10cSrcweir #include <basegfx/polygon/b2dpolygon.hxx> 59cdf0e10cSrcweir 60cdf0e10cSrcweir using ::com::sun::star::frame::XFrame; 61cdf0e10cSrcweir using ::com::sun::star::uno::Reference; 62cdf0e10cSrcweir 63cdf0e10cSrcweir #define TRANSCOL Color( COL_WHITE ) 64cdf0e10cSrcweir 65cdf0e10cSrcweir /************************************************************************* 66cdf0e10cSrcweir |* 67cdf0e10cSrcweir |* 68cdf0e10cSrcweir |* 69cdf0e10cSrcweir \************************************************************************/ 70cdf0e10cSrcweir 71cdf0e10cSrcweir IMapWindow::IMapWindow( Window* pParent, const ResId& rResId, const Reference< XFrame >& rxDocumentFrame ) : 72cdf0e10cSrcweir GraphCtrl( pParent, rResId ), 73cdf0e10cSrcweir DropTargetHelper( this ), 74cdf0e10cSrcweir mxDocumentFrame( rxDocumentFrame ) 75cdf0e10cSrcweir { 76cdf0e10cSrcweir SetWinStyle( WB_SDRMODE ); 77cdf0e10cSrcweir 78cdf0e10cSrcweir pItemInfo = new SfxItemInfo[ 1 ]; 79cdf0e10cSrcweir memset( pItemInfo, 0, sizeof( SfxItemInfo ) ); 80cdf0e10cSrcweir pIMapPool = new SfxItemPool( String::CreateFromAscii( "IMapItemPool" ), 81cdf0e10cSrcweir SID_ATTR_MACROITEM, SID_ATTR_MACROITEM, pItemInfo ); 82cdf0e10cSrcweir pIMapPool->FreezeIdRanges(); 83cdf0e10cSrcweir } 84cdf0e10cSrcweir 85cdf0e10cSrcweir /************************************************************************* 86cdf0e10cSrcweir |* 87cdf0e10cSrcweir |* 88cdf0e10cSrcweir |* 89cdf0e10cSrcweir \************************************************************************/ 90cdf0e10cSrcweir 91cdf0e10cSrcweir IMapWindow::~IMapWindow() 92cdf0e10cSrcweir { 93cdf0e10cSrcweir // Liste loeschen 94cdf0e10cSrcweir for( String* pStr = aTargetList.First(); pStr; pStr = aTargetList.Next() ) 95cdf0e10cSrcweir delete pStr; 96cdf0e10cSrcweir 97cdf0e10cSrcweir SfxItemPool::Free(pIMapPool); 98cdf0e10cSrcweir delete[] pItemInfo; 99cdf0e10cSrcweir } 100cdf0e10cSrcweir 101cdf0e10cSrcweir /************************************************************************* 102cdf0e10cSrcweir |* 103cdf0e10cSrcweir |* 104cdf0e10cSrcweir |* 105cdf0e10cSrcweir \************************************************************************/ 106cdf0e10cSrcweir 107cdf0e10cSrcweir void IMapWindow::SetImageMap( const ImageMap& rImageMap ) 108cdf0e10cSrcweir { 109cdf0e10cSrcweir ReplaceImageMap( rImageMap, sal_False ); 110cdf0e10cSrcweir } 111cdf0e10cSrcweir 112cdf0e10cSrcweir /************************************************************************* 113cdf0e10cSrcweir |* 114cdf0e10cSrcweir |* 115cdf0e10cSrcweir |* 116cdf0e10cSrcweir \************************************************************************/ 117cdf0e10cSrcweir 118cdf0e10cSrcweir void IMapWindow::ReplaceImageMap( const ImageMap& rImageMap, sal_Bool /*bScaleToGraphic*/ ) 119cdf0e10cSrcweir { 120cdf0e10cSrcweir SdrPage* pPage = 0; 121cdf0e10cSrcweir aIMap = rImageMap; 122cdf0e10cSrcweir 123cdf0e10cSrcweir if(GetSdrModel()) 124cdf0e10cSrcweir { 125cdf0e10cSrcweir // try to access page 126cdf0e10cSrcweir pPage = GetSdrModel()->GetPage(0L); 127cdf0e10cSrcweir } 128cdf0e10cSrcweir 129cdf0e10cSrcweir if(pPage) 130cdf0e10cSrcweir { 131cdf0e10cSrcweir // clear all draw objects 132cdf0e10cSrcweir pPage->Clear(); 133cdf0e10cSrcweir } 134cdf0e10cSrcweir 135cdf0e10cSrcweir if(GetSdrView()) 136cdf0e10cSrcweir { 137cdf0e10cSrcweir // #i63762# reset selection at view 138cdf0e10cSrcweir GetSdrView()->UnmarkAllObj(); 139cdf0e10cSrcweir } 140cdf0e10cSrcweir 141cdf0e10cSrcweir // create new drawing objects 142cdf0e10cSrcweir const sal_uInt16 nCount(rImageMap.GetIMapObjectCount()); 143cdf0e10cSrcweir 144cdf0e10cSrcweir for ( sal_uInt16 i(nCount); i > 0; i-- ) 145cdf0e10cSrcweir { 146cdf0e10cSrcweir SdrObject* pNewObj = CreateObj( rImageMap.GetIMapObject( i - 1 ) ); 147cdf0e10cSrcweir 148cdf0e10cSrcweir if ( pNewObj ) 149cdf0e10cSrcweir { 150cdf0e10cSrcweir pPage->InsertObject( pNewObj ); 151cdf0e10cSrcweir } 152cdf0e10cSrcweir } 153cdf0e10cSrcweir } 154cdf0e10cSrcweir 155cdf0e10cSrcweir /************************************************************************* 156cdf0e10cSrcweir |* 157cdf0e10cSrcweir |* 158cdf0e10cSrcweir |* 159cdf0e10cSrcweir \************************************************************************/ 160cdf0e10cSrcweir 161cdf0e10cSrcweir sal_Bool IMapWindow::ReplaceActualIMapInfo( const NotifyInfo& rNewInfo ) 162cdf0e10cSrcweir { 163cdf0e10cSrcweir const SdrObject* pSdrObj = GetSelectedSdrObject(); 164cdf0e10cSrcweir IMapObject* pIMapObj; 165cdf0e10cSrcweir sal_Bool bRet = sal_False; 166cdf0e10cSrcweir 167cdf0e10cSrcweir if ( pSdrObj && ( ( pIMapObj = GetIMapObj( pSdrObj ) ) != NULL ) ) 168cdf0e10cSrcweir { 169cdf0e10cSrcweir pIMapObj->SetURL( rNewInfo.aMarkURL ); 170cdf0e10cSrcweir pIMapObj->SetAltText( rNewInfo.aMarkAltText ); 171cdf0e10cSrcweir pIMapObj->SetTarget( rNewInfo.aMarkTarget ); 172cdf0e10cSrcweir pModel->SetChanged( sal_True ); 173cdf0e10cSrcweir UpdateInfo( sal_False ); 174cdf0e10cSrcweir 175cdf0e10cSrcweir bRet = sal_True; 176cdf0e10cSrcweir } 177cdf0e10cSrcweir 178cdf0e10cSrcweir return bRet; 179cdf0e10cSrcweir } 180cdf0e10cSrcweir 181cdf0e10cSrcweir /************************************************************************* 182cdf0e10cSrcweir |* 183cdf0e10cSrcweir |* 184cdf0e10cSrcweir |* 185cdf0e10cSrcweir \************************************************************************/ 186cdf0e10cSrcweir 187cdf0e10cSrcweir const ImageMap& IMapWindow::GetImageMap() 188cdf0e10cSrcweir { 189cdf0e10cSrcweir if ( pModel->IsChanged() ) 190cdf0e10cSrcweir { 191cdf0e10cSrcweir SdrPage* pPage = (SdrPage*) pModel->GetPage( 0 ); 192cdf0e10cSrcweir 193cdf0e10cSrcweir if ( pPage ) 194cdf0e10cSrcweir { 195cdf0e10cSrcweir const long nCount = pPage->GetObjCount(); 196cdf0e10cSrcweir 197cdf0e10cSrcweir aIMap.ClearImageMap(); 198cdf0e10cSrcweir 199cdf0e10cSrcweir for ( long i = nCount - 1; i > -1; i-- ) 200cdf0e10cSrcweir aIMap.InsertIMapObject( *( ( (IMapUserData*) pPage->GetObj( i )->GetUserData( 0 ) )->GetObject() ) ); 201cdf0e10cSrcweir } 202cdf0e10cSrcweir 203cdf0e10cSrcweir pModel->SetChanged( sal_False ); 204cdf0e10cSrcweir } 205cdf0e10cSrcweir 206cdf0e10cSrcweir return aIMap; 207cdf0e10cSrcweir } 208cdf0e10cSrcweir 209cdf0e10cSrcweir /************************************************************************* 210cdf0e10cSrcweir |* 211cdf0e10cSrcweir |* 212cdf0e10cSrcweir |* 213cdf0e10cSrcweir \************************************************************************/ 214cdf0e10cSrcweir 215cdf0e10cSrcweir void IMapWindow::SetTargetList( TargetList& rTargetList ) 216cdf0e10cSrcweir { 217cdf0e10cSrcweir String* pStr; 218cdf0e10cSrcweir 219cdf0e10cSrcweir // alte Liste loeschen 220cdf0e10cSrcweir for( pStr = aTargetList.First(); pStr; pStr = aTargetList.Next() ) 221cdf0e10cSrcweir delete pStr; 222cdf0e10cSrcweir 223cdf0e10cSrcweir aTargetList.Clear(); 224cdf0e10cSrcweir 225cdf0e10cSrcweir // mit uebergebener Liste fuellen 226cdf0e10cSrcweir for( pStr = rTargetList.First(); pStr; pStr = rTargetList.Next() ) 227cdf0e10cSrcweir aTargetList.Insert( new String( *pStr ) ); 228cdf0e10cSrcweir 229cdf0e10cSrcweir pModel->SetChanged( sal_False ); 230cdf0e10cSrcweir } 231cdf0e10cSrcweir 232cdf0e10cSrcweir /************************************************************************* 233cdf0e10cSrcweir |* 234cdf0e10cSrcweir |* 235cdf0e10cSrcweir |* 236cdf0e10cSrcweir \************************************************************************/ 237cdf0e10cSrcweir 238cdf0e10cSrcweir SdrObject* IMapWindow::CreateObj( const IMapObject* pIMapObj ) 239cdf0e10cSrcweir { 240cdf0e10cSrcweir Point aPoint; 241cdf0e10cSrcweir Rectangle aClipRect( aPoint, GetGraphicSize() ); 242cdf0e10cSrcweir SdrObject* pSdrObj = NULL; 243cdf0e10cSrcweir IMapObjectPtr pCloneIMapObj; 244cdf0e10cSrcweir 245cdf0e10cSrcweir switch( pIMapObj->GetType() ) 246cdf0e10cSrcweir { 247cdf0e10cSrcweir case( IMAP_OBJ_RECTANGLE ): 248cdf0e10cSrcweir { 249cdf0e10cSrcweir IMapRectangleObject* pIMapRectObj = (IMapRectangleObject*) pIMapObj; 250cdf0e10cSrcweir Rectangle aDrawRect( pIMapRectObj->GetRectangle( sal_False ) ); 251cdf0e10cSrcweir 252cdf0e10cSrcweir // auf Zeichenflaeche clippen 253cdf0e10cSrcweir aDrawRect.Intersection( aClipRect ); 254cdf0e10cSrcweir 255cdf0e10cSrcweir pSdrObj = (SdrObject*) new SdrRectObj( aDrawRect ); 256cdf0e10cSrcweir pCloneIMapObj.reset((IMapObject*) new IMapRectangleObject( *pIMapRectObj )); 257cdf0e10cSrcweir } 258cdf0e10cSrcweir break; 259cdf0e10cSrcweir 260cdf0e10cSrcweir case( IMAP_OBJ_CIRCLE ): 261cdf0e10cSrcweir { 262cdf0e10cSrcweir IMapCircleObject* pIMapCircleObj = (IMapCircleObject*) pIMapObj; 263cdf0e10cSrcweir const Point aCenter( pIMapCircleObj->GetCenter( sal_False ) ); 264cdf0e10cSrcweir const long nRadius = pIMapCircleObj->GetRadius( sal_False ); 265cdf0e10cSrcweir const Point aOffset( nRadius, nRadius ); 266cdf0e10cSrcweir Rectangle aCircle( aCenter - aOffset, aCenter + aOffset ); 267cdf0e10cSrcweir 268cdf0e10cSrcweir // auf Zeichenflaeche begrenzen 269cdf0e10cSrcweir aCircle.Intersection( aClipRect ); 270cdf0e10cSrcweir 271cdf0e10cSrcweir pSdrObj = (SdrObject*) new SdrCircObj( OBJ_CIRC, aCircle, 0, 36000 ); 272cdf0e10cSrcweir pCloneIMapObj.reset((IMapObject*) new IMapCircleObject( *pIMapCircleObj )); 273cdf0e10cSrcweir } 274cdf0e10cSrcweir break; 275cdf0e10cSrcweir 276cdf0e10cSrcweir case( IMAP_OBJ_POLYGON ): 277cdf0e10cSrcweir { 278cdf0e10cSrcweir IMapPolygonObject* pIMapPolyObj = (IMapPolygonObject*) pIMapObj; 279cdf0e10cSrcweir 280cdf0e10cSrcweir // Falls wir eigentlich eine Ellipse sind, 281cdf0e10cSrcweir // erzeugen wir auch wieder eine Ellipse 282cdf0e10cSrcweir if ( pIMapPolyObj->HasExtraEllipse() ) 283cdf0e10cSrcweir { 284cdf0e10cSrcweir Rectangle aDrawRect( pIMapPolyObj->GetExtraEllipse() ); 285cdf0e10cSrcweir 286cdf0e10cSrcweir // auf Zeichenflaeche clippen 287cdf0e10cSrcweir aDrawRect.Intersection( aClipRect ); 288cdf0e10cSrcweir 289cdf0e10cSrcweir pSdrObj = (SdrObject*) new SdrCircObj( OBJ_CIRC, aDrawRect, 0, 36000 ); 290cdf0e10cSrcweir } 291cdf0e10cSrcweir else 292cdf0e10cSrcweir { 293cdf0e10cSrcweir const Polygon& rPoly = pIMapPolyObj->GetPolygon( sal_False ); 294cdf0e10cSrcweir Polygon aDrawPoly( rPoly ); 295cdf0e10cSrcweir 296cdf0e10cSrcweir // auf Zeichenflaeche clippen 297cdf0e10cSrcweir aDrawPoly.Clip( aClipRect ); 298cdf0e10cSrcweir 299cdf0e10cSrcweir basegfx::B2DPolygon aPolygon; 300cdf0e10cSrcweir aPolygon.append(aDrawPoly.getB2DPolygon()); 301cdf0e10cSrcweir pSdrObj = (SdrObject*)new SdrPathObj(OBJ_POLY, basegfx::B2DPolyPolygon(aPolygon)); 302cdf0e10cSrcweir } 303cdf0e10cSrcweir 304cdf0e10cSrcweir pCloneIMapObj.reset((IMapObject*) new IMapPolygonObject( *pIMapPolyObj )); 305cdf0e10cSrcweir } 306cdf0e10cSrcweir break; 307cdf0e10cSrcweir 308cdf0e10cSrcweir default: 309cdf0e10cSrcweir break; 310cdf0e10cSrcweir } 311cdf0e10cSrcweir 312cdf0e10cSrcweir if ( pSdrObj ) 313cdf0e10cSrcweir { 314cdf0e10cSrcweir SfxItemSet aSet( pModel->GetItemPool() ); 315cdf0e10cSrcweir 316cdf0e10cSrcweir aSet.Put( XFillStyleItem( XFILL_SOLID ) ); 317cdf0e10cSrcweir aSet.Put( XFillColorItem( String(), TRANSCOL ) ); 318cdf0e10cSrcweir 319cdf0e10cSrcweir if ( !pIMapObj->IsActive() ) 320cdf0e10cSrcweir { 321cdf0e10cSrcweir aSet.Put( XFillTransparenceItem( 100 ) ); 322cdf0e10cSrcweir aSet.Put( XLineColorItem( String(), Color( COL_RED ) ) ); 323cdf0e10cSrcweir } 324cdf0e10cSrcweir else 325cdf0e10cSrcweir { 326cdf0e10cSrcweir aSet.Put( XFillTransparenceItem( 50 ) ); 327cdf0e10cSrcweir aSet.Put( XLineColorItem( String(), Color( COL_BLACK ) ) ); 328cdf0e10cSrcweir } 329cdf0e10cSrcweir 330cdf0e10cSrcweir //pSdrObj->SetItemSetAndBroadcast(aSet); 331cdf0e10cSrcweir pSdrObj->SetMergedItemSetAndBroadcast(aSet); 332cdf0e10cSrcweir 333cdf0e10cSrcweir pSdrObj->InsertUserData( new IMapUserData( pCloneIMapObj ) ); 334cdf0e10cSrcweir pSdrObj->SetUserCall( GetSdrUserCall() ); 335cdf0e10cSrcweir } 336cdf0e10cSrcweir 337cdf0e10cSrcweir return pSdrObj; 338cdf0e10cSrcweir } 339cdf0e10cSrcweir 340cdf0e10cSrcweir /************************************************************************* 341cdf0e10cSrcweir |* 342cdf0e10cSrcweir |* 343cdf0e10cSrcweir |* 344cdf0e10cSrcweir \************************************************************************/ 345cdf0e10cSrcweir 346cdf0e10cSrcweir void IMapWindow::InitSdrModel() 347cdf0e10cSrcweir { 348cdf0e10cSrcweir GraphCtrl::InitSdrModel(); 349cdf0e10cSrcweir 350cdf0e10cSrcweir SfxItemSet aSet( pModel->GetItemPool() ); 351cdf0e10cSrcweir 352cdf0e10cSrcweir aSet.Put( XFillColorItem( String(), TRANSCOL ) ); 353cdf0e10cSrcweir aSet.Put( XFillTransparenceItem( 50 ) ); 354cdf0e10cSrcweir pView->SetAttributes( aSet ); 355cdf0e10cSrcweir pView->SetFrameDragSingles( sal_True ); 356cdf0e10cSrcweir } 357cdf0e10cSrcweir 358cdf0e10cSrcweir /************************************************************************* 359cdf0e10cSrcweir |* 360cdf0e10cSrcweir |* 361cdf0e10cSrcweir |* 362cdf0e10cSrcweir \************************************************************************/ 363cdf0e10cSrcweir 364cdf0e10cSrcweir void IMapWindow::SdrObjCreated( const SdrObject& rObj ) 365cdf0e10cSrcweir { 366cdf0e10cSrcweir switch( rObj.GetObjIdentifier() ) 367cdf0e10cSrcweir { 368cdf0e10cSrcweir case( OBJ_RECT ): 369cdf0e10cSrcweir { 370cdf0e10cSrcweir SdrRectObj* pRectObj = (SdrRectObj*) &rObj; 371cdf0e10cSrcweir IMapRectangleObject* pObj = new IMapRectangleObject( pRectObj->GetLogicRect(), 372cdf0e10cSrcweir String(), String(), String(), String(), String(), sal_True, sal_False ); 373cdf0e10cSrcweir 374cdf0e10cSrcweir pRectObj->InsertUserData( new IMapUserData( IMapObjectPtr(pObj) ) ); 375cdf0e10cSrcweir } 376cdf0e10cSrcweir break; 377cdf0e10cSrcweir 378cdf0e10cSrcweir case( OBJ_CIRC ): 379cdf0e10cSrcweir { 380cdf0e10cSrcweir SdrCircObj* pCircObj = (SdrCircObj*) &rObj; 381cdf0e10cSrcweir SdrPathObj* pPathObj = (SdrPathObj*) pCircObj->ConvertToPolyObj( sal_False, sal_False ); 382cdf0e10cSrcweir Polygon aPoly(pPathObj->GetPathPoly().getB2DPolygon(0L)); 383cdf0e10cSrcweir delete pPathObj; 384cdf0e10cSrcweir 385cdf0e10cSrcweir IMapPolygonObject* pObj = new IMapPolygonObject( Polygon(aPoly), String(), String(), String(), String(), String(), sal_True, sal_False ); 386cdf0e10cSrcweir pObj->SetExtraEllipse( aPoly.GetBoundRect() ); 387cdf0e10cSrcweir pCircObj->InsertUserData( new IMapUserData( IMapObjectPtr(pObj) ) ); 388cdf0e10cSrcweir } 389cdf0e10cSrcweir break; 390cdf0e10cSrcweir 391cdf0e10cSrcweir case( OBJ_POLY ): 392cdf0e10cSrcweir case( OBJ_FREEFILL ): 393cdf0e10cSrcweir case( OBJ_PATHPOLY ): 394cdf0e10cSrcweir case( OBJ_PATHFILL ): 395cdf0e10cSrcweir { 396cdf0e10cSrcweir SdrPathObj* pPathObj = (SdrPathObj*) &rObj; 397cdf0e10cSrcweir const basegfx::B2DPolyPolygon& rXPolyPoly = pPathObj->GetPathPoly(); 398cdf0e10cSrcweir 399cdf0e10cSrcweir if ( rXPolyPoly.count() ) 400cdf0e10cSrcweir { 401cdf0e10cSrcweir Polygon aPoly(rXPolyPoly.getB2DPolygon(0L)); 402cdf0e10cSrcweir IMapPolygonObject* pObj = new IMapPolygonObject( aPoly, String(), String(), String(), String(), String(), sal_True, sal_False ); 403cdf0e10cSrcweir pPathObj->InsertUserData( new IMapUserData( IMapObjectPtr(pObj) ) ); 404cdf0e10cSrcweir } 405cdf0e10cSrcweir } 406cdf0e10cSrcweir break; 407cdf0e10cSrcweir 408cdf0e10cSrcweir default: 409cdf0e10cSrcweir break; 410cdf0e10cSrcweir } 411cdf0e10cSrcweir } 412cdf0e10cSrcweir 413cdf0e10cSrcweir /************************************************************************* 414cdf0e10cSrcweir |* 415cdf0e10cSrcweir |* 416cdf0e10cSrcweir |* 417cdf0e10cSrcweir \************************************************************************/ 418cdf0e10cSrcweir 419cdf0e10cSrcweir void IMapWindow::SdrObjChanged( const SdrObject& rObj ) 420cdf0e10cSrcweir { 421cdf0e10cSrcweir IMapUserData* pUserData = (IMapUserData*) rObj.GetUserData( 0 ); 422cdf0e10cSrcweir 423cdf0e10cSrcweir if ( pUserData ) 424cdf0e10cSrcweir { 425cdf0e10cSrcweir String aURL; 426cdf0e10cSrcweir String aAltText; 427cdf0e10cSrcweir String aDesc; 428cdf0e10cSrcweir String aTarget; 429cdf0e10cSrcweir IMapObjectPtr pIMapObj = pUserData->GetObject(); 430cdf0e10cSrcweir sal_Bool bActive = sal_True; 431cdf0e10cSrcweir 432cdf0e10cSrcweir if ( pIMapObj.get() ) 433cdf0e10cSrcweir { 434cdf0e10cSrcweir aURL = pIMapObj->GetURL(); 435cdf0e10cSrcweir aAltText = pIMapObj->GetAltText(); 436cdf0e10cSrcweir aDesc = pIMapObj->GetDesc(); 437cdf0e10cSrcweir aTarget = pIMapObj->GetTarget(); 438cdf0e10cSrcweir bActive = pIMapObj->IsActive(); 439cdf0e10cSrcweir } 440cdf0e10cSrcweir 441cdf0e10cSrcweir switch( rObj.GetObjIdentifier() ) 442cdf0e10cSrcweir { 443cdf0e10cSrcweir case( OBJ_RECT ): 444cdf0e10cSrcweir { 445cdf0e10cSrcweir pUserData->ReplaceObject( IMapObjectPtr(new IMapRectangleObject( ( (const SdrRectObj&) rObj ).GetLogicRect(), 446cdf0e10cSrcweir aURL, aAltText, aDesc, aTarget, String(), bActive, sal_False ) ) ); 447cdf0e10cSrcweir } 448cdf0e10cSrcweir break; 449cdf0e10cSrcweir 450cdf0e10cSrcweir case( OBJ_CIRC ): 451cdf0e10cSrcweir { 452cdf0e10cSrcweir const SdrCircObj& rCircObj = (const SdrCircObj&) rObj; 453cdf0e10cSrcweir SdrPathObj* pPathObj = (SdrPathObj*) rCircObj.ConvertToPolyObj( sal_False, sal_False ); 454cdf0e10cSrcweir Polygon aPoly(pPathObj->GetPathPoly().getB2DPolygon(0L)); 455cdf0e10cSrcweir 456cdf0e10cSrcweir IMapPolygonObject* pObj = new IMapPolygonObject( aPoly, aURL, aAltText, aDesc, aTarget, String(), bActive, sal_False ); 457cdf0e10cSrcweir pObj->SetExtraEllipse( aPoly.GetBoundRect() ); 458cdf0e10cSrcweir 459cdf0e10cSrcweir // wurde von uns nur temporaer angelegt 460cdf0e10cSrcweir delete pPathObj; 461cdf0e10cSrcweir pUserData->ReplaceObject( IMapObjectPtr(pObj) ); 462cdf0e10cSrcweir } 463cdf0e10cSrcweir break; 464cdf0e10cSrcweir 465cdf0e10cSrcweir case( OBJ_POLY ): 466cdf0e10cSrcweir case( OBJ_FREEFILL ): 467cdf0e10cSrcweir case( OBJ_PATHPOLY ): 468cdf0e10cSrcweir case( OBJ_PATHFILL ): 469cdf0e10cSrcweir { 470cdf0e10cSrcweir const SdrPathObj& rPathObj = (const SdrPathObj&) rObj; 471cdf0e10cSrcweir const basegfx::B2DPolyPolygon& rXPolyPoly = rPathObj.GetPathPoly(); 472cdf0e10cSrcweir 473cdf0e10cSrcweir if ( rXPolyPoly.count() ) 474cdf0e10cSrcweir { 475cdf0e10cSrcweir Polygon aPoly(rPathObj.GetPathPoly().getB2DPolygon(0L)); 476cdf0e10cSrcweir IMapPolygonObject* pObj = new IMapPolygonObject( aPoly, aURL, aAltText, aDesc, aTarget, String(), bActive, sal_False ); 477cdf0e10cSrcweir pUserData->ReplaceObject( IMapObjectPtr(pObj) ); 478cdf0e10cSrcweir } 479cdf0e10cSrcweir } 480cdf0e10cSrcweir break; 481cdf0e10cSrcweir 482cdf0e10cSrcweir default: 483cdf0e10cSrcweir break; 484cdf0e10cSrcweir } 485cdf0e10cSrcweir } 486cdf0e10cSrcweir } 487cdf0e10cSrcweir 488cdf0e10cSrcweir /************************************************************************* 489cdf0e10cSrcweir |* 490cdf0e10cSrcweir |* 491cdf0e10cSrcweir |* 492cdf0e10cSrcweir \************************************************************************/ 493cdf0e10cSrcweir 494cdf0e10cSrcweir void IMapWindow::MouseButtonUp(const MouseEvent& rMEvt) 495cdf0e10cSrcweir { 496cdf0e10cSrcweir GraphCtrl::MouseButtonUp( rMEvt ); 497cdf0e10cSrcweir UpdateInfo( sal_True ); 498cdf0e10cSrcweir } 499cdf0e10cSrcweir 500cdf0e10cSrcweir /************************************************************************* 501cdf0e10cSrcweir |* 502cdf0e10cSrcweir |* 503cdf0e10cSrcweir |* 504cdf0e10cSrcweir \************************************************************************/ 505cdf0e10cSrcweir 506cdf0e10cSrcweir void IMapWindow::MarkListHasChanged() 507cdf0e10cSrcweir { 508cdf0e10cSrcweir GraphCtrl::MarkListHasChanged(); 509cdf0e10cSrcweir UpdateInfo( sal_False ); 510cdf0e10cSrcweir } 511cdf0e10cSrcweir 512cdf0e10cSrcweir /************************************************************************* 513cdf0e10cSrcweir |* 514cdf0e10cSrcweir |* 515cdf0e10cSrcweir |* 516cdf0e10cSrcweir \************************************************************************/ 517cdf0e10cSrcweir 518cdf0e10cSrcweir SdrObject* IMapWindow::GetHitSdrObj( const Point& rPosPixel ) const 519cdf0e10cSrcweir { 520cdf0e10cSrcweir SdrObject* pObj = NULL; 521cdf0e10cSrcweir Point aPt = PixelToLogic( rPosPixel ); 522cdf0e10cSrcweir 523cdf0e10cSrcweir if ( Rectangle( Point(), GetGraphicSize() ).IsInside( aPt ) ) 524cdf0e10cSrcweir { 525cdf0e10cSrcweir SdrPage* pPage = (SdrPage*) pModel->GetPage( 0 ); 526cdf0e10cSrcweir sal_uIntPtr nCount; 527cdf0e10cSrcweir 528cdf0e10cSrcweir if ( pPage && ( ( nCount = pPage->GetObjCount() ) > 0 ) ) 529cdf0e10cSrcweir { 530cdf0e10cSrcweir for ( long i = nCount - 1; i >= 0; i-- ) 531cdf0e10cSrcweir { 532cdf0e10cSrcweir SdrObject* pTestObj = pPage->GetObj( i ); 533cdf0e10cSrcweir IMapObject* pIMapObj = GetIMapObj( pTestObj ); 534cdf0e10cSrcweir 535cdf0e10cSrcweir if ( pIMapObj && pIMapObj->IsHit( aPt ) ) 536cdf0e10cSrcweir { 537cdf0e10cSrcweir pObj = pTestObj; 538cdf0e10cSrcweir break; 539cdf0e10cSrcweir } 540cdf0e10cSrcweir } 541cdf0e10cSrcweir } 542cdf0e10cSrcweir } 543cdf0e10cSrcweir 544cdf0e10cSrcweir return pObj; 545cdf0e10cSrcweir } 546cdf0e10cSrcweir 547cdf0e10cSrcweir /************************************************************************* 548cdf0e10cSrcweir |* 549cdf0e10cSrcweir |* 550cdf0e10cSrcweir |* 551cdf0e10cSrcweir \************************************************************************/ 552cdf0e10cSrcweir 553cdf0e10cSrcweir IMapObject* IMapWindow::GetIMapObj( const SdrObject* pSdrObj ) const 554cdf0e10cSrcweir { 555cdf0e10cSrcweir IMapObject* pIMapObj = NULL; 556cdf0e10cSrcweir 557cdf0e10cSrcweir if ( pSdrObj ) 558cdf0e10cSrcweir { 559cdf0e10cSrcweir IMapUserData* pUserData = (IMapUserData*) pSdrObj->GetUserData( 0 ); 560cdf0e10cSrcweir 561cdf0e10cSrcweir if ( pUserData ) 562cdf0e10cSrcweir pIMapObj = pUserData->GetObject().get(); 563cdf0e10cSrcweir } 564cdf0e10cSrcweir 565cdf0e10cSrcweir return pIMapObj; 566cdf0e10cSrcweir } 567cdf0e10cSrcweir 568cdf0e10cSrcweir /************************************************************************* 569cdf0e10cSrcweir |* 570cdf0e10cSrcweir |* 571cdf0e10cSrcweir |* 572cdf0e10cSrcweir \************************************************************************/ 573cdf0e10cSrcweir 574cdf0e10cSrcweir SdrObject* IMapWindow::GetSdrObj( const IMapObject* pIMapObj ) const 575cdf0e10cSrcweir { 576cdf0e10cSrcweir SdrObject* pSdrObj = NULL; 577cdf0e10cSrcweir SdrPage* pPage = (SdrPage*) pModel->GetPage( 0 ); 578cdf0e10cSrcweir sal_uIntPtr nCount; 579cdf0e10cSrcweir 580cdf0e10cSrcweir if ( pPage && ( ( nCount = pPage->GetObjCount() ) > 0 ) ) 581cdf0e10cSrcweir { 582cdf0e10cSrcweir for ( sal_uIntPtr i = 0; i < nCount; i++ ) 583cdf0e10cSrcweir { 584cdf0e10cSrcweir SdrObject* pTestObj = pPage->GetObj( i ); 585cdf0e10cSrcweir 586cdf0e10cSrcweir if ( pIMapObj == GetIMapObj( pTestObj ) ) 587cdf0e10cSrcweir { 588cdf0e10cSrcweir pSdrObj = pTestObj; 589cdf0e10cSrcweir break; 590cdf0e10cSrcweir } 591cdf0e10cSrcweir } 592cdf0e10cSrcweir } 593cdf0e10cSrcweir 594cdf0e10cSrcweir return pSdrObj; 595cdf0e10cSrcweir } 596cdf0e10cSrcweir 597cdf0e10cSrcweir /************************************************************************* 598cdf0e10cSrcweir |* 599cdf0e10cSrcweir |* 600cdf0e10cSrcweir |* 601cdf0e10cSrcweir \************************************************************************/ 602cdf0e10cSrcweir 603cdf0e10cSrcweir void IMapWindow::Command(const CommandEvent& rCEvt) 604cdf0e10cSrcweir { 605cdf0e10cSrcweir Region aRegion; 606cdf0e10cSrcweir 607cdf0e10cSrcweir if ( rCEvt.GetCommand() == COMMAND_CONTEXTMENU ) 608cdf0e10cSrcweir { 609cdf0e10cSrcweir PopupMenu aMenu( SVX_RES( RID_SVXMN_IMAP ) ); 610cdf0e10cSrcweir const SdrMarkList& rMarkList = pView->GetMarkedObjectList(); 611cdf0e10cSrcweir sal_uIntPtr nMarked = rMarkList.GetMarkCount(); 612cdf0e10cSrcweir 613cdf0e10cSrcweir aMenu.EnableItem( MN_URL, sal_False ); 614cdf0e10cSrcweir aMenu.EnableItem( MN_ACTIVATE, sal_False ); 615cdf0e10cSrcweir aMenu.EnableItem( MN_MACRO, sal_False ); 616cdf0e10cSrcweir aMenu.EnableItem( MN_MARK_ALL, pModel->GetPage( 0 )->GetObjCount() != pView->GetMarkedObjectCount() ); 617cdf0e10cSrcweir 618cdf0e10cSrcweir if ( !nMarked ) 619cdf0e10cSrcweir { 620cdf0e10cSrcweir aMenu.EnableItem( MN_POSITION, sal_False ); 621cdf0e10cSrcweir aMenu.EnableItem( MN_FRAME_TO_TOP, sal_False ); 622cdf0e10cSrcweir aMenu.EnableItem( MN_MOREFRONT, sal_False ); 623cdf0e10cSrcweir aMenu.EnableItem( MN_MOREBACK, sal_False ); 624cdf0e10cSrcweir aMenu.EnableItem( MN_FRAME_TO_BOTTOM, sal_False ); 625cdf0e10cSrcweir aMenu.EnableItem( MN_DELETE1, sal_False ); 626cdf0e10cSrcweir } 627cdf0e10cSrcweir else 628cdf0e10cSrcweir { 629cdf0e10cSrcweir if ( nMarked == 1 ) 630cdf0e10cSrcweir { 631cdf0e10cSrcweir SdrObject* pSdrObj = GetSelectedSdrObject(); 632cdf0e10cSrcweir 633cdf0e10cSrcweir aMenu.EnableItem( MN_URL, sal_True ); 634cdf0e10cSrcweir aMenu.EnableItem( MN_ACTIVATE, sal_True ); 635cdf0e10cSrcweir aMenu.EnableItem( MN_MACRO, sal_True ); 636cdf0e10cSrcweir aMenu.CheckItem( MN_ACTIVATE, GetIMapObj( pSdrObj )->IsActive() ); 637cdf0e10cSrcweir } 638cdf0e10cSrcweir 639cdf0e10cSrcweir aMenu.EnableItem( MN_POSITION, sal_True ); 640cdf0e10cSrcweir aMenu.EnableItem( MN_FRAME_TO_TOP, sal_True ); 641cdf0e10cSrcweir aMenu.EnableItem( MN_MOREFRONT, sal_True ); 642cdf0e10cSrcweir aMenu.EnableItem( MN_MOREBACK, sal_True ); 643cdf0e10cSrcweir aMenu.EnableItem( MN_FRAME_TO_BOTTOM, sal_True ); 644cdf0e10cSrcweir aMenu.EnableItem( MN_DELETE1, sal_True ); 645cdf0e10cSrcweir } 646cdf0e10cSrcweir 647cdf0e10cSrcweir aMenu.SetSelectHdl( LINK( this, IMapWindow, MenuSelectHdl ) ); 648cdf0e10cSrcweir aMenu.Execute( this, rCEvt.GetMousePosPixel() ); 649cdf0e10cSrcweir } 650cdf0e10cSrcweir else 651cdf0e10cSrcweir Window::Command(rCEvt); 652cdf0e10cSrcweir } 653cdf0e10cSrcweir 654cdf0e10cSrcweir /************************************************************************* 655cdf0e10cSrcweir |* 656cdf0e10cSrcweir |* 657cdf0e10cSrcweir |* 658cdf0e10cSrcweir \************************************************************************/ 659cdf0e10cSrcweir 660cdf0e10cSrcweir sal_Int8 IMapWindow::AcceptDrop( const AcceptDropEvent& rEvt ) 661cdf0e10cSrcweir { 662cdf0e10cSrcweir return( ( GetHitSdrObj( rEvt.maPosPixel ) != NULL ) ? rEvt.mnAction : DND_ACTION_NONE ); 663cdf0e10cSrcweir } 664cdf0e10cSrcweir 665cdf0e10cSrcweir /************************************************************************* 666cdf0e10cSrcweir |* 667cdf0e10cSrcweir |* 668cdf0e10cSrcweir |* 669cdf0e10cSrcweir \************************************************************************/ 670cdf0e10cSrcweir 671cdf0e10cSrcweir sal_Int8 IMapWindow::ExecuteDrop( const ExecuteDropEvent& rEvt ) 672cdf0e10cSrcweir { 673cdf0e10cSrcweir sal_Int8 nRet = DND_ACTION_NONE; 674cdf0e10cSrcweir 675cdf0e10cSrcweir if( IsDropFormatSupported( SOT_FORMATSTR_ID_NETSCAPE_BOOKMARK ) ) 676cdf0e10cSrcweir { 677cdf0e10cSrcweir const String aString; 678cdf0e10cSrcweir INetBookmark aBookMark( aString, aString ); 679cdf0e10cSrcweir SdrObject* pSdrObj = GetHitSdrObj( rEvt.maPosPixel ); 680cdf0e10cSrcweir 681cdf0e10cSrcweir if( pSdrObj && TransferableDataHelper( rEvt.maDropEvent.Transferable ).GetINetBookmark( SOT_FORMATSTR_ID_NETSCAPE_BOOKMARK, aBookMark ) ) 682cdf0e10cSrcweir { 683cdf0e10cSrcweir IMapObject* pIMapObj = GetIMapObj( pSdrObj ); 684cdf0e10cSrcweir 685cdf0e10cSrcweir pIMapObj->SetURL( aBookMark.GetURL() ); 686cdf0e10cSrcweir pIMapObj->SetAltText( aBookMark.GetDescription() ); 687cdf0e10cSrcweir pModel->SetChanged( sal_True ); 688cdf0e10cSrcweir pView->UnmarkAll(); 689cdf0e10cSrcweir pView->MarkObj( pSdrObj, pView->GetSdrPageView() ); 690cdf0e10cSrcweir UpdateInfo( sal_True ); 691cdf0e10cSrcweir nRet = rEvt.mnAction; 692cdf0e10cSrcweir } 693cdf0e10cSrcweir } 694cdf0e10cSrcweir 695cdf0e10cSrcweir return nRet; 696cdf0e10cSrcweir } 697cdf0e10cSrcweir 698cdf0e10cSrcweir /************************************************************************* 699cdf0e10cSrcweir |* 700cdf0e10cSrcweir |* 701cdf0e10cSrcweir |* 702cdf0e10cSrcweir \************************************************************************/ 703cdf0e10cSrcweir 704cdf0e10cSrcweir void IMapWindow::RequestHelp( const HelpEvent& rHEvt ) 705cdf0e10cSrcweir { 706cdf0e10cSrcweir SdrObject* pSdrObj = NULL; 707cdf0e10cSrcweir SdrPageView* pPageView = NULL; 708cdf0e10cSrcweir Point aPos = PixelToLogic( ScreenToOutputPixel( rHEvt.GetMousePosPixel() ) ); 709cdf0e10cSrcweir 710cdf0e10cSrcweir if ( Help::IsBalloonHelpEnabled() || Help::IsQuickHelpEnabled() ) 711cdf0e10cSrcweir { 712cdf0e10cSrcweir if ( pView->PickObj( aPos, pView->getHitTolLog(), pSdrObj, pPageView ) ) 713cdf0e10cSrcweir { 714cdf0e10cSrcweir const IMapObject* pIMapObj = GetIMapObj( pSdrObj ); 715cdf0e10cSrcweir String aStr; 716cdf0e10cSrcweir 717cdf0e10cSrcweir if ( pIMapObj && ( aStr = pIMapObj->GetURL() ).Len() ) 718cdf0e10cSrcweir { 719cdf0e10cSrcweir String aDescr( pIMapObj->GetAltText() ); 720cdf0e10cSrcweir Rectangle aLogicPix( LogicToPixel( Rectangle( Point(), GetGraphicSize() ) ) ); 721cdf0e10cSrcweir Rectangle aScreenRect( OutputToScreenPixel( aLogicPix.TopLeft() ), 722cdf0e10cSrcweir OutputToScreenPixel( aLogicPix.BottomRight() ) ); 723cdf0e10cSrcweir 724cdf0e10cSrcweir if ( Help::IsBalloonHelpEnabled() ) 725cdf0e10cSrcweir Help::ShowBalloon( this, rHEvt.GetMousePosPixel(), aScreenRect, aStr ); 726cdf0e10cSrcweir else if ( Help::IsQuickHelpEnabled() ) 727cdf0e10cSrcweir Help::ShowQuickHelp( this, aScreenRect, aStr ); 728cdf0e10cSrcweir } 729cdf0e10cSrcweir } 730cdf0e10cSrcweir else 731cdf0e10cSrcweir Window::RequestHelp( rHEvt ); 732cdf0e10cSrcweir } 733cdf0e10cSrcweir } 734cdf0e10cSrcweir 735cdf0e10cSrcweir /************************************************************************* 736cdf0e10cSrcweir |* 737cdf0e10cSrcweir |* 738cdf0e10cSrcweir |* 739cdf0e10cSrcweir \************************************************************************/ 740cdf0e10cSrcweir 741cdf0e10cSrcweir void IMapWindow::SetCurrentObjState( sal_Bool bActive ) 742cdf0e10cSrcweir { 743cdf0e10cSrcweir SdrObject* pObj = GetSelectedSdrObject(); 744cdf0e10cSrcweir 745cdf0e10cSrcweir if ( pObj ) 746cdf0e10cSrcweir { 747cdf0e10cSrcweir SfxItemSet aSet( pModel->GetItemPool() ); 748cdf0e10cSrcweir 749cdf0e10cSrcweir GetIMapObj( pObj )->SetActive( bActive ); 750cdf0e10cSrcweir 751cdf0e10cSrcweir aSet.Put( XFillColorItem( String(), TRANSCOL ) ); 752cdf0e10cSrcweir 753cdf0e10cSrcweir if ( !bActive ) 754cdf0e10cSrcweir { 755cdf0e10cSrcweir aSet.Put( XFillTransparenceItem( 100 ) ); 756cdf0e10cSrcweir aSet.Put( XLineColorItem( String(), Color( COL_RED ) ) ); 757cdf0e10cSrcweir } 758cdf0e10cSrcweir else 759cdf0e10cSrcweir { 760cdf0e10cSrcweir aSet.Put( XFillTransparenceItem( 50 ) ); 761cdf0e10cSrcweir aSet.Put( XLineColorItem( String(), Color( COL_BLACK ) ) ); 762cdf0e10cSrcweir } 763cdf0e10cSrcweir 764cdf0e10cSrcweir pView->SetAttributes( aSet, sal_False ); 765cdf0e10cSrcweir } 766cdf0e10cSrcweir } 767cdf0e10cSrcweir 768cdf0e10cSrcweir /************************************************************************* 769cdf0e10cSrcweir |* 770cdf0e10cSrcweir |* 771cdf0e10cSrcweir |* 772cdf0e10cSrcweir \************************************************************************/ 773cdf0e10cSrcweir 774cdf0e10cSrcweir void IMapWindow::UpdateInfo( sal_Bool bNewObj ) 775cdf0e10cSrcweir { 776cdf0e10cSrcweir if ( aInfoLink.IsSet() ) 777cdf0e10cSrcweir { 778cdf0e10cSrcweir const SdrObject* pSdrObj = GetSelectedSdrObject(); 779cdf0e10cSrcweir const IMapObject* pIMapObj = pSdrObj ? GetIMapObj( pSdrObj ) : NULL; 780cdf0e10cSrcweir 781cdf0e10cSrcweir aInfo.bNewObj = bNewObj; 782cdf0e10cSrcweir 783cdf0e10cSrcweir if ( pIMapObj ) 784cdf0e10cSrcweir { 785cdf0e10cSrcweir aInfo.bOneMarked = sal_True; 786cdf0e10cSrcweir aInfo.aMarkURL = pIMapObj->GetURL(); 787cdf0e10cSrcweir aInfo.aMarkAltText = pIMapObj->GetAltText(); 788cdf0e10cSrcweir aInfo.aMarkTarget = pIMapObj->GetTarget(); 789cdf0e10cSrcweir aInfo.bActivated = pIMapObj->IsActive(); 790cdf0e10cSrcweir aInfoLink.Call( this ); 791cdf0e10cSrcweir } 792cdf0e10cSrcweir else 793cdf0e10cSrcweir { 794cdf0e10cSrcweir aInfo.aMarkURL = aInfo.aMarkAltText = aInfo.aMarkTarget = String(); 795cdf0e10cSrcweir aInfo.bOneMarked = sal_False; 796cdf0e10cSrcweir aInfo.bActivated = sal_False; 797cdf0e10cSrcweir } 798cdf0e10cSrcweir 799cdf0e10cSrcweir aInfoLink.Call( this ); 800cdf0e10cSrcweir } 801cdf0e10cSrcweir } 802cdf0e10cSrcweir 803cdf0e10cSrcweir /************************************************************************* 804cdf0e10cSrcweir |* 805cdf0e10cSrcweir |* 806cdf0e10cSrcweir |* 807cdf0e10cSrcweir \************************************************************************/ 808cdf0e10cSrcweir 809cdf0e10cSrcweir void IMapWindow::DoMacroAssign() 810cdf0e10cSrcweir { 811cdf0e10cSrcweir SdrObject* pSdrObj = GetSelectedSdrObject(); 812cdf0e10cSrcweir 813cdf0e10cSrcweir if ( pSdrObj ) 814cdf0e10cSrcweir { 815cdf0e10cSrcweir SfxItemSet aSet( *pIMapPool, SID_ATTR_MACROITEM, SID_ATTR_MACROITEM, SID_EVENTCONFIG, SID_EVENTCONFIG, 0 ); 816cdf0e10cSrcweir 817cdf0e10cSrcweir SfxEventNamesItem aNamesItem(SID_EVENTCONFIG); 818cdf0e10cSrcweir aNamesItem.AddEvent( String::CreateFromAscii( "MouseOver" ), String(), SFX_EVENT_MOUSEOVER_OBJECT ); 819cdf0e10cSrcweir aNamesItem.AddEvent( String::CreateFromAscii( "MouseOut" ), String(), SFX_EVENT_MOUSEOUT_OBJECT ); 820cdf0e10cSrcweir aSet.Put( aNamesItem ); 821cdf0e10cSrcweir 822cdf0e10cSrcweir SvxMacroItem aMacroItem(SID_ATTR_MACROITEM); 823cdf0e10cSrcweir IMapObject* pIMapObj = GetIMapObj( pSdrObj ); 824cdf0e10cSrcweir aMacroItem.SetMacroTable( pIMapObj->GetMacroTable() ); 825cdf0e10cSrcweir aSet.Put( aMacroItem, SID_ATTR_MACROITEM ); 826cdf0e10cSrcweir 827cdf0e10cSrcweir SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); 828cdf0e10cSrcweir SfxAbstractDialog* pMacroDlg = pFact->CreateSfxDialog( this, aSet, mxDocumentFrame, SID_EVENTCONFIG ); 829cdf0e10cSrcweir 830cdf0e10cSrcweir if ( pMacroDlg && pMacroDlg->Execute() == RET_OK ) 831cdf0e10cSrcweir { 832cdf0e10cSrcweir const SfxItemSet* pOutSet = pMacroDlg->GetOutputItemSet(); 833cdf0e10cSrcweir pIMapObj->SetMacroTable( ((const SvxMacroItem& )pOutSet->Get( SID_ATTR_MACROITEM )).GetMacroTable() ); 834cdf0e10cSrcweir pModel->SetChanged( sal_True ); 835cdf0e10cSrcweir UpdateInfo( sal_False ); 836cdf0e10cSrcweir } 837cdf0e10cSrcweir 838cdf0e10cSrcweir delete pMacroDlg; 839cdf0e10cSrcweir } 840cdf0e10cSrcweir } 841cdf0e10cSrcweir 842cdf0e10cSrcweir /************************************************************************* 843cdf0e10cSrcweir |* 844cdf0e10cSrcweir |* 845cdf0e10cSrcweir |* 846cdf0e10cSrcweir \************************************************************************/ 847cdf0e10cSrcweir 848cdf0e10cSrcweir void IMapWindow::DoPropertyDialog() 849cdf0e10cSrcweir { 850cdf0e10cSrcweir SdrObject* pSdrObj = GetSelectedSdrObject(); 851cdf0e10cSrcweir 852cdf0e10cSrcweir if ( pSdrObj ) 853cdf0e10cSrcweir { 854cdf0e10cSrcweir IMapObject* pIMapObj = GetIMapObj( pSdrObj ); 855cdf0e10cSrcweir SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); 856cdf0e10cSrcweir if(pFact) 857cdf0e10cSrcweir { 858cdf0e10cSrcweir AbstractURLDlg* aDlg = pFact->CreateURLDialog( this, pIMapObj->GetURL(), pIMapObj->GetAltText(), pIMapObj->GetDesc(), 859cdf0e10cSrcweir pIMapObj->GetTarget(), pIMapObj->GetName(), aTargetList ); 860cdf0e10cSrcweir DBG_ASSERT(aDlg, "Dialogdiet fail!"); 861cdf0e10cSrcweir if ( aDlg->Execute() == RET_OK ) 862cdf0e10cSrcweir { 863cdf0e10cSrcweir const String aURLText( aDlg->GetURL() ); 864cdf0e10cSrcweir 865cdf0e10cSrcweir if ( aURLText.Len() ) 866cdf0e10cSrcweir { 867cdf0e10cSrcweir INetURLObject aObj( aURLText, INET_PROT_FILE ); 868cdf0e10cSrcweir DBG_ASSERT( aObj.GetProtocol() != INET_PROT_NOT_VALID, "Invalid URL" ); 869cdf0e10cSrcweir pIMapObj->SetURL( aObj.GetMainURL( INetURLObject::NO_DECODE ) ); 870cdf0e10cSrcweir } 871cdf0e10cSrcweir else 872cdf0e10cSrcweir pIMapObj->SetURL( aURLText ); 873cdf0e10cSrcweir 874cdf0e10cSrcweir pIMapObj->SetAltText( aDlg->GetAltText() ); 875cdf0e10cSrcweir pIMapObj->SetDesc( aDlg->GetDesc() ); 876cdf0e10cSrcweir pIMapObj->SetTarget( aDlg->GetTarget() ); 877cdf0e10cSrcweir pIMapObj->SetName( aDlg->GetName() ); 878cdf0e10cSrcweir pModel->SetChanged( sal_True ); 879cdf0e10cSrcweir UpdateInfo( sal_True ); 880cdf0e10cSrcweir } 881cdf0e10cSrcweir delete aDlg; //add by CHINA001 882cdf0e10cSrcweir } 883cdf0e10cSrcweir } 884cdf0e10cSrcweir } 885cdf0e10cSrcweir 886cdf0e10cSrcweir /************************************************************************* 887cdf0e10cSrcweir |* 888cdf0e10cSrcweir |* 889cdf0e10cSrcweir |* 890cdf0e10cSrcweir \************************************************************************/ 891cdf0e10cSrcweir 892cdf0e10cSrcweir IMPL_LINK( IMapWindow, MenuSelectHdl, Menu*, pMenu ) 893cdf0e10cSrcweir { 894cdf0e10cSrcweir if (pMenu) 895cdf0e10cSrcweir { 896cdf0e10cSrcweir sal_uInt16 nId = pMenu->GetCurItemId(); 897cdf0e10cSrcweir 898cdf0e10cSrcweir switch(nId) 899cdf0e10cSrcweir { 900cdf0e10cSrcweir case( MN_URL ): 901cdf0e10cSrcweir DoPropertyDialog(); 902cdf0e10cSrcweir break; 903cdf0e10cSrcweir 904cdf0e10cSrcweir case( MN_MACRO ): 905cdf0e10cSrcweir DoMacroAssign(); 906cdf0e10cSrcweir break; 907cdf0e10cSrcweir 908cdf0e10cSrcweir case( MN_ACTIVATE ): 909cdf0e10cSrcweir { 910cdf0e10cSrcweir const sal_Bool bNewState = !pMenu->IsItemChecked( MN_ACTIVATE ); 911cdf0e10cSrcweir 912cdf0e10cSrcweir pMenu->CheckItem( MN_ACTIVATE, bNewState ); 913cdf0e10cSrcweir SetCurrentObjState( bNewState ); 914cdf0e10cSrcweir UpdateInfo( sal_False ); 915cdf0e10cSrcweir } 916cdf0e10cSrcweir 917cdf0e10cSrcweir case( MN_FRAME_TO_TOP ): 918cdf0e10cSrcweir pView->PutMarkedToTop(); 919cdf0e10cSrcweir break; 920cdf0e10cSrcweir 921cdf0e10cSrcweir case( MN_MOREFRONT ): 922cdf0e10cSrcweir pView->MovMarkedToTop(); 923cdf0e10cSrcweir break; 924cdf0e10cSrcweir 925cdf0e10cSrcweir case( MN_MOREBACK ): 926cdf0e10cSrcweir pView->MovMarkedToBtm(); 927cdf0e10cSrcweir break; 928cdf0e10cSrcweir 929cdf0e10cSrcweir case( MN_FRAME_TO_BOTTOM ): 930cdf0e10cSrcweir pView->PutMarkedToBtm(); 931cdf0e10cSrcweir break; 932cdf0e10cSrcweir 933cdf0e10cSrcweir case( MN_MARK_ALL ): 934cdf0e10cSrcweir pView->MarkAll(); 935cdf0e10cSrcweir break; 936cdf0e10cSrcweir 937cdf0e10cSrcweir case( MN_DELETE1 ): 938cdf0e10cSrcweir pView->DeleteMarked(); 939cdf0e10cSrcweir 940cdf0e10cSrcweir default : 941cdf0e10cSrcweir break; 942cdf0e10cSrcweir } 943cdf0e10cSrcweir } 944cdf0e10cSrcweir 945cdf0e10cSrcweir return 0; 946cdf0e10cSrcweir } 947cdf0e10cSrcweir 948cdf0e10cSrcweir void IMapWindow::CreateDefaultObject() 949cdf0e10cSrcweir { 950cdf0e10cSrcweir SdrPageView* pPageView = pView->GetSdrPageView(); 951cdf0e10cSrcweir 952cdf0e10cSrcweir if(pPageView) 953cdf0e10cSrcweir { 954cdf0e10cSrcweir // calc position and size 955cdf0e10cSrcweir Point aPagePos(0, 0); // = pPageView->GetOffset(); 956cdf0e10cSrcweir Size aPageSize = pPageView->GetPage()->GetSize(); 957cdf0e10cSrcweir sal_uInt32 nDefaultObjectSizeWidth = aPageSize.Width() / 4; 958cdf0e10cSrcweir sal_uInt32 nDefaultObjectSizeHeight = aPageSize.Height() / 4; 959cdf0e10cSrcweir aPagePos.X() += (aPageSize.Width() / 2) - (nDefaultObjectSizeWidth / 2); 960cdf0e10cSrcweir aPagePos.Y() += (aPageSize.Height() / 2) - (nDefaultObjectSizeHeight / 2); 961cdf0e10cSrcweir Rectangle aNewObjectRectangle(aPagePos, Size(nDefaultObjectSizeWidth, nDefaultObjectSizeHeight)); 962cdf0e10cSrcweir 963cdf0e10cSrcweir SdrObject* pObj = SdrObjFactory::MakeNewObject( pView->GetCurrentObjInventor(), pView->GetCurrentObjIdentifier(), 0L, pModel); 964cdf0e10cSrcweir pObj->SetLogicRect(aNewObjectRectangle); 965cdf0e10cSrcweir 966cdf0e10cSrcweir switch( pObj->GetObjIdentifier() ) 967cdf0e10cSrcweir { 968cdf0e10cSrcweir case OBJ_POLY: 969cdf0e10cSrcweir case OBJ_PATHPOLY: 970cdf0e10cSrcweir { 971cdf0e10cSrcweir basegfx::B2DPolygon aInnerPoly; 972cdf0e10cSrcweir aInnerPoly.append(basegfx::B2DPoint(aNewObjectRectangle.BottomLeft().X(), aNewObjectRectangle.BottomLeft().Y())); 973cdf0e10cSrcweir aInnerPoly.append(basegfx::B2DPoint(aNewObjectRectangle.TopLeft().X(), aNewObjectRectangle.TopLeft().Y())); 974cdf0e10cSrcweir aInnerPoly.append(basegfx::B2DPoint(aNewObjectRectangle.TopCenter().X(), aNewObjectRectangle.TopCenter().Y())); 975cdf0e10cSrcweir aInnerPoly.append(basegfx::B2DPoint(aNewObjectRectangle.Center().X(), aNewObjectRectangle.Center().Y())); 976cdf0e10cSrcweir aInnerPoly.append(basegfx::B2DPoint(aNewObjectRectangle.RightCenter().X(), aNewObjectRectangle.RightCenter().Y())); 977cdf0e10cSrcweir aInnerPoly.append(basegfx::B2DPoint(aNewObjectRectangle.BottomRight().X(), aNewObjectRectangle.BottomRight().Y())); 978cdf0e10cSrcweir aInnerPoly.setClosed(true); 979cdf0e10cSrcweir ((SdrPathObj*)pObj)->SetPathPoly(basegfx::B2DPolyPolygon(aInnerPoly)); 980cdf0e10cSrcweir break; 981cdf0e10cSrcweir } 982cdf0e10cSrcweir case OBJ_FREEFILL: 983cdf0e10cSrcweir case OBJ_PATHFILL: 984cdf0e10cSrcweir { 985cdf0e10cSrcweir sal_Int32 nWdt(aNewObjectRectangle.GetWidth() / 2); 986cdf0e10cSrcweir sal_Int32 nHgt(aNewObjectRectangle.GetHeight() / 2); 987cdf0e10cSrcweir basegfx::B2DPolygon aInnerPoly(XPolygon(aNewObjectRectangle.Center(), nWdt, nHgt).getB2DPolygon()); 988cdf0e10cSrcweir ((SdrPathObj*)pObj)->SetPathPoly(basegfx::B2DPolyPolygon(aInnerPoly)); 989cdf0e10cSrcweir break; 990cdf0e10cSrcweir } 991cdf0e10cSrcweir 992cdf0e10cSrcweir } 993cdf0e10cSrcweir 994cdf0e10cSrcweir pView->InsertObjectAtView(pObj, *pPageView); 995cdf0e10cSrcweir SdrObjCreated( *pObj ); 996cdf0e10cSrcweir SetCurrentObjState( true ); 997cdf0e10cSrcweir pView->MarkObj( pObj, pPageView ); 998cdf0e10cSrcweir } 999cdf0e10cSrcweir } 1000cdf0e10cSrcweir 1001cdf0e10cSrcweir void IMapWindow::KeyInput( const KeyEvent& rKEvt ) 1002cdf0e10cSrcweir { 1003cdf0e10cSrcweir KeyCode aCode = rKEvt.GetKeyCode(); 1004cdf0e10cSrcweir 1005cdf0e10cSrcweir /* 1006cdf0e10cSrcweir switch(aCode.GetCode()) 1007cdf0e10cSrcweir { 1008cdf0e10cSrcweir case KEY_ESCAPE: 1009cdf0e10cSrcweir { 1010cdf0e10cSrcweir if ( pView->IsAction() ) 1011cdf0e10cSrcweir { 1012cdf0e10cSrcweir pView->BrkAction(); 1013cdf0e10cSrcweir return; 1014cdf0e10cSrcweir } 1015cdf0e10cSrcweir else if ( pView->AreObjectsMarked() ) 1016cdf0e10cSrcweir { 1017cdf0e10cSrcweir const SdrHdlList& rHdlList = pView->GetHdlList(); 1018cdf0e10cSrcweir SdrHdl* pHdl = rHdlList.GetFocusHdl(); 1019cdf0e10cSrcweir 1020cdf0e10cSrcweir if(pHdl) 1021cdf0e10cSrcweir { 1022cdf0e10cSrcweir ((SdrHdlList&)rHdlList).ResetFocusHdl(); 1023cdf0e10cSrcweir } 1024cdf0e10cSrcweir else 1025cdf0e10cSrcweir { 1026cdf0e10cSrcweir pView->UnmarkAllObj(); 1027cdf0e10cSrcweir ((Dialog*)GetParent())->GrabFocusToFirstControl(); 1028cdf0e10cSrcweir } 1029cdf0e10cSrcweir 1030cdf0e10cSrcweir return; 1031cdf0e10cSrcweir } 1032cdf0e10cSrcweir } 1033cdf0e10cSrcweir break; 1034cdf0e10cSrcweir 1035cdf0e10cSrcweir } 1036cdf0e10cSrcweir */ 1037cdf0e10cSrcweir GraphCtrl::KeyInput( rKEvt ); 1038cdf0e10cSrcweir } 1039cdf0e10cSrcweir 1040cdf0e10cSrcweir void IMapWindow::SelectFirstObject() 1041cdf0e10cSrcweir { 1042cdf0e10cSrcweir SdrPage* pPage = (SdrPage*) pModel->GetPage( 0 ); 1043cdf0e10cSrcweir if( pPage->GetObjCount() != 0 ) 1044cdf0e10cSrcweir { 1045cdf0e10cSrcweir GrabFocus(); 1046cdf0e10cSrcweir pView->UnmarkAllObj(); 1047cdf0e10cSrcweir pView->MarkNextObj(sal_True); 1048cdf0e10cSrcweir } 1049cdf0e10cSrcweir } 1050cdf0e10cSrcweir 1051cdf0e10cSrcweir void IMapWindow::StartPolyEdit() 1052cdf0e10cSrcweir { 1053cdf0e10cSrcweir GrabFocus(); 1054cdf0e10cSrcweir 1055cdf0e10cSrcweir if( !pView->AreObjectsMarked() ) 1056cdf0e10cSrcweir pView->MarkNextObj(sal_True); 1057cdf0e10cSrcweir 1058cdf0e10cSrcweir const SdrHdlList& rHdlList = pView->GetHdlList(); 1059cdf0e10cSrcweir SdrHdl* pHdl = rHdlList.GetFocusHdl(); 1060cdf0e10cSrcweir 1061cdf0e10cSrcweir if(!pHdl) 1062cdf0e10cSrcweir { 1063cdf0e10cSrcweir ((SdrHdlList&)rHdlList).TravelFocusHdl(true); 1064cdf0e10cSrcweir } 1065cdf0e10cSrcweir } 1066