1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 25 #include <stdio.h> 26 #include <tools/stream.hxx> 27 #include <tools/debug.hxx> 28 #include <vcl/msgbox.hxx> 29 #include <svtools/prgsbar.hxx> 30 31 #include <soldep/depper.hxx> 32 #include <soldep/objwin.hxx> 33 34 #include "math.h" 35 #include "time.h" 36 #include "stdlib.h" 37 #include "dtsodcmp.hrc" 38 39 #include <vcl/svapp.hxx> 40 41 #define MIN(a,b) (a)<(b)?(a):(b) 42 #define MAX(a,b) (a)>(b)?(a):(b) 43 44 ByteString sDelimiterLine("#=========================================================================="); 45 46 47 48 49 Depper::Depper( Window* pBaseWindow ): 50 Window( pBaseWindow ), 51 mbIsPrjView(sal_False), 52 maDefPos( 50, 50 ), 53 maDefSize( 60, 25 ), 54 mnViewMask( 1 ), 55 pSubBar( NULL ), 56 pMainBar( NULL ), 57 pSubText( NULL ), 58 pMainText( NULL ), 59 maArrangeDlg( pBaseWindow ), 60 mpPrjIdMapper( NULL ), 61 maToolBox( pBaseWindow, DtSodResId(TID_SOLDEP_MAIN) ), 62 maTaskBarFrame( pBaseWindow, 0) 63 { 64 maArrangeDlg.Hide(); 65 66 mpProcessWin = pBaseWindow; 67 mpGraphWin = new GraphWin( mpProcessWin, this ); 68 mpGraphPrjWin = new GraphWin( mpProcessWin, this ); 69 //mpBaseWin paints into virtual OutputDevice 70 mpBaseWin = new DepWin( mpGraphWin->GetBufferWindow(), WB_NOBORDER | WB_SIZEABLE | WB_AUTOSIZE ); 71 mpBasePrjWin = new DepWin( mpGraphPrjWin->GetBufferWindow(), WB_NOBORDER | WB_SIZEABLE | WB_AUTOSIZE ); 72 73 mpGraphWin->SetBackground( Wallpaper( Color( COL_RED ))); 74 mpGraphPrjWin->SetBackground( Wallpaper( Color( COL_BLUE ))); 75 mpGraphPrjWin->Hide(); 76 mpBaseWin->SetBackground( Wallpaper( Color( COL_WHITE ))); 77 mpBasePrjWin->SetBackground( Wallpaper( Color( COL_LIGHTGRAY ))); 78 /* 79 mpGraphWin->SetZOrder( NULL, WINDOW_ZORDER_FIRST ); 80 mpGraphPrjWin->SetZOrder( NULL, WINDOW_ZORDER_FIRST ); 81 mpBaseWin->SetZOrder( NULL, WINDOW_ZORDER_FIRST ); 82 */ 83 mpGraphWin->EnableClipSiblings(); 84 mpGraphPrjWin->EnableClipSiblings(); 85 86 mpParentProcessWin = mpProcessWin->GetParent(); 87 mpBaseWin->Show(); 88 nZoomed = 0; 89 90 mpBaseWin->SetPopupHdl( this ); 91 mpBasePrjWin->SetPopupHdl( this ); 92 93 mpObjectList = new ObjectList(); //ObjectList unbekannt 94 mpObjectPrjList = new ObjectList(); 95 } 96 97 Depper::~Depper() 98 { 99 // delete mpObjectList; 100 delete mpBaseWin; 101 delete mpGraphWin; 102 } 103 104 sal_Bool Depper::TogglePrjViewStatus() 105 { 106 GetDepWin()->Hide(); //Hide old content window 107 GetGraphWin()->Hide(); 108 mbIsPrjView = !mbIsPrjView; //switch now 109 GetDepWin()->Invalidate(); 110 GetGraphWin()->Show(); 111 GetDepWin()->Show(); //Show new content window 112 return mbIsPrjView; 113 } 114 115 void Depper::HideObjectsAndConnections( ObjectList* pObjLst ) 116 { 117 for ( sal_uIntPtr i = 0; i < pObjLst->Count(); i ++ ) { 118 ObjectWin *pWin = pObjLst->GetObject( i ); 119 pWin->Hide(); 120 } 121 mpGraphWin->Hide(); 122 mpBaseWin->Hide(); 123 mpGraphPrjWin->Show(); 124 mpBasePrjWin->Show(); 125 } 126 127 void Depper::ShowObjectsAndConnections( ObjectList* pObjLst ) 128 { 129 for ( sal_uIntPtr i = 0; i < pObjLst->Count(); i ++ ) { 130 ObjectWin *pWin = pObjLst->GetObject( i ); 131 pWin->Show(); 132 } 133 mpBasePrjWin->Hide(); 134 mpGraphPrjWin->Hide(); 135 mpGraphWin->Show(); 136 mpBaseWin->Show(); 137 } 138 139 140 void Depper::RemoveAllObjects( ObjectList* pObjLst ) 141 { 142 sal_uIntPtr i; 143 144 for ( i = pObjLst->Count(); i > 0; i-- ) 145 delete pObjLst->GetObject( i - 1 ); 146 pObjLst->Clear(); 147 } 148 149 sal_uInt16 Depper::Save( const ByteString& rFileName ) 150 { 151 DBG_ASSERT( sal_False , "you are dead!" ); 152 SvFileStream aOutFile( String( rFileName, RTL_TEXTENCODING_UTF8 ), STREAM_WRITE ); 153 depper_head dh; 154 sal_uInt16 i; 155 sal_uIntPtr nObjCount = mpObjectList->Count(); 156 157 ConnectorList* pConList = GetDepWin()->GetConnectorList(); 158 sal_uIntPtr nCnctrCount = pConList->Count(); 159 160 dh.nID = DEPPER_ID; 161 dh.nObjectCount = nObjCount; 162 dh.nCnctrCount = nCnctrCount; 163 164 aOutFile.Write( &dh, sizeof( dh )); 165 166 for ( i=0; i < nObjCount ; i++ ) 167 { 168 mpObjectList->GetObject( i )->Save( aOutFile ); 169 } 170 171 for ( i=0; i < nCnctrCount ; i++ ) 172 { 173 pConList->GetObject( i )->Save( aOutFile ); 174 } 175 176 return 0; 177 } 178 179 180 sal_uInt16 Depper::WriteSource() 181 { 182 DBG_ASSERT( sal_False , "overload it!" ); 183 return 0; 184 }; 185 186 sal_uInt16 Depper::ReadSource( sal_Bool bUpdater ) 187 { 188 DBG_ASSERT( sal_False , "overload it!" ); 189 return 0; 190 }; 191 192 sal_uInt16 Depper::OpenSource() 193 { 194 DBG_ASSERT( sal_False , "overload it!" ); 195 return 0; 196 }; 197 198 ObjectWin* Depper::ObjIdToPtr( ObjectList* pObjLst, sal_uIntPtr nId ) 199 { 200 sal_uIntPtr nObjCount = pObjLst->Count(); 201 sal_uIntPtr i = 0; 202 ObjectWin* pWin; 203 sal_uIntPtr nWinId = 0; 204 205 do 206 { 207 pWin = pObjLst->GetObject( i ); 208 nWinId = pWin->GetId(); 209 i++; 210 } 211 while( i < nObjCount && pWin->GetId() != nId ); 212 if ( pWin->GetId() == nId ) 213 return pWin; 214 else 215 return NULL; 216 } 217 218 void Depper::SetMainProgressBar( sal_uInt16 i) 219 { 220 if ( pMainBar ) { 221 pMainBar->SetValue( 100 ); 222 pMainBar->Update(); 223 } 224 } 225 226 void Depper::UpdateMainProgressBar(sal_uInt16 i, sal_uInt16 nScaleVal, sal_uInt16 &nStep, sal_Bool bCountingDown ) 227 { 228 sal_uIntPtr val = 0; 229 if ( pMainBar ) { 230 // val = i * 50 / nScaleVal + 1; 231 val = bCountingDown ? 50 + ( nScaleVal - i ) * 50 / nScaleVal : i * 50 / nScaleVal; 232 233 pMainBar->SetValue( val ); 234 pMainBar->Update(); 235 String sText( String::CreateFromAscii( "Optimize step " )); 236 sText += String::CreateFromInt32( ++nStep ); 237 pSubText->SetText( sText ); 238 } 239 } 240 241 void Depper::UpdateSubProgrssBar(sal_uIntPtr i) 242 { 243 if ( pSubBar ) 244 { 245 pSubBar->SetValue( i ); 246 pSubBar->Update(); 247 GetpApp()->Reschedule(); 248 } 249 } 250 251 252 sal_uInt16 Depper::AutoArrangeDlgStart() 253 { 254 pSubBar = maArrangeDlg.GetSubBar(); 255 pMainBar = maArrangeDlg.GetMainBar(); 256 pSubText = maArrangeDlg.GetSubText(); 257 pMainText = maArrangeDlg.GetMainText(); 258 pMainText->SetText( String::CreateFromAscii( "Overall status" )); 259 maArrangeDlg.Show(); 260 GetDepWin()->Enable( sal_False ); 261 GetDepWin()->Hide(); 262 return 0; 263 } 264 265 sal_uInt16 Depper::AutoArrangeDlgStop() 266 { 267 maArrangeDlg.Hide(); 268 GetDepWin()->Enable( sal_True ); 269 GetDepWin()->Show(); 270 pSubBar = NULL; 271 pMainBar = NULL; 272 pSubText = NULL; 273 pMainText = NULL; 274 return 0; 275 } 276 277 278 279 sal_uInt16 Depper::Zoom( MapMode& rMapMode ) 280 { 281 sal_uIntPtr i; 282 ObjectWin* pWin; 283 Point aPos; 284 Size aSize; 285 ObjectList* pObjList; 286 pObjList = GetObjectList(); 287 // aSize = mpBaseWin->GetSizePixel(); 288 // mpGraphWin->SetTotalSize( aSize ); 289 // mpGraphWin->EndScroll( 0, 0 ); 290 291 for ( i = pObjList->Count(); i > 0; i-- ) 292 { 293 pWin = pObjList->GetObject( i - 1 ); 294 aPos = pWin->PixelToLogic( pWin->GetPosPixel()); 295 aSize = pWin->PixelToLogic( pWin->GetSizePixel()); 296 pWin->SetMapMode( rMapMode ); 297 aPos = pWin->LogicToPixel( aPos ); 298 aSize = pWin->LogicToPixel( aSize ); 299 pWin->SetPosSizePixel( aPos, aSize ); 300 } 301 GetDepWin()->Invalidate(); 302 return 0; 303 } 304 305 sal_uIntPtr Depper::AddObjectToList( DepWin* pParentWin, ObjectList* pObjLst, sal_uIntPtr &LastID, sal_uIntPtr &WinCount, ByteString& rBodyText, sal_Bool bInteract ) 306 { 307 Point aPos; 308 Size aSize = GetDefSize(); 309 310 aPos = GetDepWin()->LogicToPixel( aPos ); 311 aSize = GetDepWin()->LogicToPixel( aSize ); 312 return AddObjectToList( pParentWin, pObjLst, LastID, WinCount, rBodyText, aPos, aSize ); 313 } 314 315 sal_uIntPtr Depper::AddObjectToList( DepWin* pParentWin, ObjectList* pObjLst, sal_uIntPtr &LastID, sal_uIntPtr &WinCount, ByteString& rBodyText, Point& rPos, Size& rSize ) 316 { 317 ObjectWin* pWin = new ObjectWin( pParentWin, WB_BORDER ); 318 //pWin->mpDepperDontuseme = this; 319 pWin->SetGlobalViewMask(mnViewMask); // Set ViewMask for all ObjectWin and Connector objects 320 321 Size aNewSize; 322 aNewSize.Width() = pWin->GetTextWidth( String( rBodyText, RTL_TEXTENCODING_UTF8 )); 323 aNewSize.Height() = pWin->GetTextHeight(); 324 if ( aNewSize.Width() > rSize.Width() - 8 ) 325 { 326 aNewSize.Width() = aNewSize.Width() + 8; 327 aNewSize.Height() = rSize.Height(); 328 } 329 else 330 aNewSize = rSize; 331 pWin->SetPosSizePixel( rPos,aNewSize); 332 333 MapMode aMapMode = mpBaseWin->GetMapMode(); 334 pWin->SetMapMode( aMapMode ); 335 336 pObjLst->Insert( pWin, LIST_APPEND ); 337 pWin->SetId( LastID ); 338 LastID++; 339 WinCount++; 340 pWin->SetBodyText( rBodyText ); 341 // pWin->Show(); 342 return pWin->GetId(); 343 } 344 345 /*void Depper::DrawOutput( OutputDevice* pDevice ) 346 { 347 GetDepWin()->DrawOutput( pDevice ); 348 ObjectList* pObjList = GetObjectList(); 349 for ( sal_uInt16 i = pObjList->Count(); i > 0; i-- ) 350 { 351 ObjectWin* pWin = pObjList->GetObject( i - 1 ); 352 pWin->DrawOutput( pDevice ); 353 } 354 }*/ 355 356 ObjectWin* Depper::RemoveObjectFromList( ObjectList* pObjLst, sal_uIntPtr &WinCount, sal_uInt16 nId, sal_Bool bDelete ) 357 { 358 ObjectWin* pWin = ObjIdToPtr( pObjLst, nId ); 359 360 if ( pWin ) 361 { 362 pObjLst->Remove( pWin ); 363 WinCount--; 364 if( bDelete ) 365 delete pWin; 366 return pWin; 367 } 368 else 369 return NULL; 370 } 371 sal_uInt16 Depper::AddConnectorToObjects( ObjectList* pObjLst, sal_uIntPtr nStartId, sal_uIntPtr nEndId ) 372 { 373 ObjectWin* pStartWin = ObjIdToPtr( pObjLst, nStartId ); 374 375 if ( !pStartWin ) 376 return DEP_STARTID_NOT_FOUND; 377 378 ObjectWin* pEndWin = ObjIdToPtr( pObjLst, nEndId ); 379 380 if ( !pEndWin ) 381 return DEP_STARTID_NOT_FOUND; 382 383 return AddConnectorToObjects( pStartWin, pEndWin ); 384 } 385 386 sal_uInt16 Depper::RemoveConnectorFromObjects( ObjectList* pObjLst, sal_uIntPtr nStartId, sal_uIntPtr nEndId ) 387 { 388 // DBG_ASSERT( FALSE , "noch nicht" ); 389 ObjectWin* pStartWin = ObjIdToPtr( pObjLst, nStartId ); 390 391 if ( !pStartWin ) 392 return DEP_STARTID_NOT_FOUND; 393 394 ObjectWin* pEndWin = ObjIdToPtr( pObjLst, nEndId ); 395 396 if ( !pEndWin ) 397 return DEP_STARTID_NOT_FOUND; 398 399 return RemoveConnectorFromObjects( pStartWin, pEndWin ); 400 } 401 402 sal_uInt16 Depper::AddConnectorToObjects( ObjectWin* pStartWin, ObjectWin* pEndWin ) 403 { 404 if ( pStartWin->ConnectionExistsInAnyDirection( pEndWin )) 405 return 0; 406 407 Connector* pCon = new Connector( GetDepWin(), WB_NOBORDER ); 408 // pCon->Initialize( pStartWin, pEndWin ); 409 if (pStartWin->IsNullObject()) //null_project 410 pCon->Initialize( pStartWin, pEndWin, sal_False ); 411 else 412 pCon->Initialize( pStartWin, pEndWin, sal_True ); 413 return 0; 414 } 415 416 sal_uInt16 Depper::RemoveConnectorFromObjects( ObjectWin* pStartWin, ObjectWin* pEndWin ) 417 { 418 Connector* pCon = pStartWin->GetConnector( pStartWin->GetId(), pEndWin->GetId() ); 419 420 if ( !pCon ) 421 return DEP_CONNECTOR_NOT_FOUND; 422 else 423 { 424 delete pCon; 425 return DEP_OK; 426 } 427 } 428 429 sal_uIntPtr Depper::HandleNewPrjDialog( ByteString &rBodyText ) 430 { 431 SolNewProjectDlg aNewProjectDlg( GetDepWin(), DtSodResId( RID_SD_DIALOG_NEWPROJECT )); 432 if ( aNewProjectDlg.Execute() ) 433 { 434 rBodyText = ByteString( aNewProjectDlg.maEName.GetText(), RTL_TEXTENCODING_UTF8); 435 //hashtable auf stand halten 436 MyHashObject* pHObject; 437 sal_uIntPtr nObjectId = AddObjectToList( mpBaseWin, mpObjectList, mnSolLastId, mnSolWinCount, rBodyText, sal_False ); 438 pHObject = new MyHashObject( nObjectId, ObjIdToPtr( mpObjectList, nObjectId )); 439 mpSolIdMapper->Insert( rBodyText, pHObject ); 440 441 ByteString sTokenLine( aNewProjectDlg.maEShort.GetText(), RTL_TEXTENCODING_UTF8 ); 442 sTokenLine += '\t'; 443 sTokenLine += ByteString( aNewProjectDlg.maEName.GetText(), RTL_TEXTENCODING_UTF8 ); 444 sTokenLine += "\t:\t"; 445 446 ByteString sDeps = ByteString( aNewProjectDlg.maEDeps.GetText(), RTL_TEXTENCODING_UTF8 ); 447 448 if ( sDeps != "" ) 449 { 450 sal_uInt16 i; 451 ByteString sDepName; 452 sal_uInt16 nToken = sDeps.GetTokenCount(' '); 453 for ( i = 0 ; i < nToken ; i++) 454 { 455 sDepName = sDeps.GetToken( i, ' ' ); 456 sTokenLine += sDepName; 457 sTokenLine +='\t'; 458 } 459 } 460 sTokenLine +="NULL"; 461 462 mpStarWriter->InsertTokenLine( sTokenLine ); 463 mpStarWriter->InsertTokenLine( sDelimiterLine ); 464 465 if ( sDeps != "" ) 466 { 467 sal_uInt16 i; 468 ByteString sDepName; 469 sal_uIntPtr nObjectId_l, nHashedId; 470 MyHashObject* pHObject_l; 471 sal_uInt16 nToken = sDeps.GetTokenCount(' '); 472 for ( i = 0 ; i < nToken ; i++) 473 { 474 sDepName = sDeps.GetToken( i, ' ' ); 475 476 pHObject_l = mpSolIdMapper->Find( sDepName ); 477 if ( !pHObject_l ) 478 { 479 String sMessage; 480 sMessage += String::CreateFromAscii("can't find "); 481 sMessage += String( sDepName, RTL_TEXTENCODING_UTF8 ); 482 sMessage += String::CreateFromAscii(".\ndependency ignored"); 483 WarningBox aBox( GetDepWin(), WB_OK, sMessage); 484 aBox.Execute(); 485 } 486 else 487 { 488 nHashedId = pHObject_l->GetId(); 489 pHObject_l = mpSolIdMapper->Find( rBodyText ); 490 nObjectId_l = pHObject_l->GetId(); 491 AddConnectorToObjects( mpObjectList, nHashedId, nObjectId_l ); 492 } 493 } 494 } 495 return nObjectId; 496 } 497 return 0; 498 } 499 500 sal_uIntPtr Depper::HandleNewDirectoryDialog(ByteString &rBodyText) 501 { 502 SolNewDirectoryDlg aNewDirectoryDlg( GetDepWin(), DtSodResId( RID_SD_DIALOG_NEWDIRECTORY )); 503 //todo: set defaults 504 if ( aNewDirectoryDlg.Execute() ) 505 { 506 rBodyText = ByteString( aNewDirectoryDlg.maEFlag.GetText(), RTL_TEXTENCODING_UTF8 ); 507 //hashtable auf stand halten 508 MyHashObject* pHObject; 509 sal_uIntPtr nObjectId = AddObjectToList( GetDepWin(), mpObjectPrjList, mnSolLastId, mnSolWinCount, rBodyText ); 510 pHObject = new MyHashObject( nObjectId, ObjIdToPtr( mpObjectPrjList, nObjectId )); 511 mpPrjIdMapper->Insert( rBodyText, pHObject ); // mpPrjIdMapper 512 513 String sTokenLine; 514 sTokenLine = String( mpPrj->GetPreFix(), RTL_TEXTENCODING_UTF8 ); 515 sTokenLine += '\t'; 516 String sNameConvert = aNewDirectoryDlg.maEName.GetText(); 517 sNameConvert.SearchAndReplaceAll( '/', '\\' ); 518 if ( sNameConvert.GetToken( 0, 0x5c ) != String( mpPrj->GetProjectName(), RTL_TEXTENCODING_UTF8 )) 519 { 520 sTokenLine += String( mpPrj->GetProjectName(), RTL_TEXTENCODING_UTF8 ); 521 sTokenLine += String("\\", RTL_TEXTENCODING_UTF8 ); 522 sTokenLine += sNameConvert; 523 } 524 else 525 sTokenLine += sNameConvert; 526 sTokenLine += '\t'; 527 sTokenLine += aNewDirectoryDlg.maEAction.GetText(); 528 sTokenLine += String( "\t-\t", RTL_TEXTENCODING_UTF8 ); 529 sTokenLine += aNewDirectoryDlg.maEEnv.GetText(); 530 sTokenLine += '\t'; 531 sTokenLine += aNewDirectoryDlg.maEFlag.GetText(); 532 sTokenLine += '\t'; 533 534 sTokenLine += String( "NULL", RTL_TEXTENCODING_UTF8 ); 535 536 ByteString bsTokenLine = ByteString( sTokenLine, RTL_TEXTENCODING_UTF8 ); 537 mpStarWriter->InsertTokenLine( bsTokenLine ); 538 539 if ( aNewDirectoryDlg.maEDeps.GetText() != String( "", RTL_TEXTENCODING_UTF8 )) 540 { 541 sal_uInt16 i; 542 ByteString sDeps = ByteString( aNewDirectoryDlg.maEDeps.GetText(), RTL_TEXTENCODING_UTF8 ); 543 ByteString sDepName; 544 sal_uIntPtr nObjectId_l, nHashedId; 545 MyHashObject* pHObject_l; 546 sal_uInt16 nToken = sDeps.GetTokenCount(' '); 547 for ( i = 0 ; i < nToken ; i++) 548 { 549 sDepName = sDeps.GetToken( i, ' ' ); 550 551 pHObject_l = mpPrjIdMapper->Find( sDepName ); // mpPrjIdMapper 552 if ( !pHObject_l ) 553 { 554 String sMessage; 555 sMessage += String::CreateFromAscii("can't find "); 556 sMessage += String( sDepName, RTL_TEXTENCODING_UTF8 ); 557 sMessage += String::CreateFromAscii(".\ndependency ignored"); 558 WarningBox aBox( mpBaseWin, WB_OK, sMessage); 559 aBox.Execute(); 560 } 561 else 562 { 563 sTokenLine += String( sDepName, RTL_TEXTENCODING_UTF8 ); 564 sTokenLine +='\t'; 565 nHashedId = pHObject_l->GetId(); 566 pHObject_l = mpPrjIdMapper->Find( rBodyText ); // mpPrjIdMapper 567 nObjectId_l = pHObject_l->GetId(); 568 AddConnectorToObjects( mpObjectPrjList, nHashedId, nObjectId_l ); 569 } 570 } 571 } 572 573 if ( mpPrj->Count() > 1 ) 574 { 575 CommandData* pData = mpPrj->GetObject( mpPrj->Count() - 1 ); 576 pData = mpPrj->Replace( pData, mpPrj->Count() - 2 ); 577 mpPrj->Replace( pData, mpPrj->Count() - 1 ); 578 } 579 580 return nObjectId; 581 } 582 return 0; 583 } 584 585 // Context-Menue 586 IMPL_LINK( Depper, PopupSelected, PopupMenu*, mpPopup ) 587 { 588 sal_uInt16 nItemId = mpPopup->GetCurItemId(); 589 590 switch( nItemId ) 591 { 592 case DEPPOPUP_NEW : 593 { 594 ByteString sNewItem = ByteString("new"); 595 //AddObject( mpObjectList, sNewItem , sal_True ); 596 } 597 break; 598 case DEPPOPUP_AUTOARRANGE : 599 //AutoArrange( mpObjectList, mpObjectList, GetStart(), 0 ); 600 break; 601 case DEPPOPUP_LOAD : 602 //Load( ByteString("test.dep")); 603 break; 604 case DEPPOPUP_SAVE : 605 Save( ByteString("test.dep")); 606 break; 607 case DEPPOPUP_WRITE_SOURCE : 608 WriteSource(); 609 break; 610 case DEPPOPUP_READ_SOURCE : 611 ReadSource(sal_True); 612 break; 613 case DEPPOPUP_OPEN_SOURCE : 614 OpenSource(); 615 break; 616 case DEPPOPUP_ZOOMIN : 617 { 618 // DBG_ASSERT( FALSE,"zoomin"); 619 MapMode aMapMode = GetDepWin()->GetMapMode(); 620 aMapMode.SetScaleX( aMapMode.GetScaleX() * Fraction( 1.25 )); 621 aMapMode.SetScaleY( aMapMode.GetScaleY() * Fraction( 1.25 )); 622 GetDepWin()->SetMapMode( aMapMode ); 623 624 if ( nZoomed < 1 ) 625 { 626 Size aZoomInSize( GetDepWin()->GetSizePixel()); 627 aZoomInSize.Width() *= 1.25; 628 aZoomInSize.Height() *= 1.25; 629 GetDepWin()->SetSizePixel( aZoomInSize ); 630 } 631 nZoomed--; 632 633 Zoom( aMapMode ); 634 }; 635 break; 636 case DEPPOPUP_ZOOMOUT : 637 { 638 // DBG_ASSERT( FALSE,"zoomout"); 639 MapMode aMapMode = GetDepWin()->GetMapMode(); 640 if ( aMapMode.GetScaleX() > Fraction( 0.25 )) 641 { 642 aMapMode.SetScaleX( aMapMode.GetScaleX() * Fraction( 0.8 )); 643 aMapMode.SetScaleY( aMapMode.GetScaleY() * Fraction( 0.8 )); 644 GetDepWin()->SetMapMode( aMapMode ); 645 646 if ( nZoomed < 0 ) 647 { 648 Size aZoomOutSize( mpBaseWin->GetSizePixel()); 649 aZoomOutSize.Width() *= 0.8; 650 aZoomOutSize.Height() *= 0.8; 651 GetDepWin()->SetSizePixel( aZoomOutSize ); 652 } 653 nZoomed++; 654 655 Zoom( aMapMode ); 656 } 657 }; 658 break; 659 case DEPPOPUP_CLEAR : 660 // DBG_ASSERT( FALSE,"clear"); 661 // RemoveAllObjects( mpObjectList ); 662 break; 663 case DEPPOPUP_CLOSE : 664 // DBG_ASSERT( FALSE,"close"); 665 CloseWindow(); 666 break; 667 case DEPPOPUP_HELP : 668 // DBG_ASSERT( FALSE,"help"); 669 ShowHelp(); 670 break; 671 case DEPPOPUP_TEST : 672 // DBG_ASSERT( FALSE,"TEST!"); 673 // test(); 674 break; 675 case DEPPOPUP_SHOW_TOOLBOX: 676 maToolBox.Show(); 677 break; 678 default : 679 DBG_ASSERT( sal_False, "default" ); 680 break; 681 } 682 return 0; 683 } 684