summaryrefslogtreecommitdiff
path: root/soldep/source/depper.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'soldep/source/depper.cxx')
-rw-r--r--soldep/source/depper.cxx687
1 files changed, 687 insertions, 0 deletions
diff --git a/soldep/source/depper.cxx b/soldep/source/depper.cxx
new file mode 100644
index 000000000000..11610ea1fcef
--- /dev/null
+++ b/soldep/source/depper.cxx
@@ -0,0 +1,687 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * 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.
+ *
+ * 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).
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+
+#include <stdio.h>
+#include <tools/stream.hxx>
+#include <tools/debug.hxx>
+#include <vcl/msgbox.hxx>
+#include <svtools/prgsbar.hxx>
+
+#include <soldep/depper.hxx>
+#include <soldep/objwin.hxx>
+
+#include "math.h"
+#include "time.h"
+#include "stdlib.h"
+#include "dtsodcmp.hrc"
+
+#include <vcl/svapp.hxx>
+
+#define MIN(a,b) (a)<(b)?(a):(b)
+#define MAX(a,b) (a)>(b)?(a):(b)
+
+ByteString sDelimiterLine("#==========================================================================");
+
+
+
+
+Depper::Depper( Window* pBaseWindow ):
+ Window( pBaseWindow ),
+ mbIsPrjView(FALSE),
+ maDefPos( 50, 50 ),
+ maDefSize( 60, 25 ),
+ mnViewMask( 1 ),
+ pSubBar( NULL ),
+ pMainBar( NULL ),
+ pSubText( NULL ),
+ pMainText( NULL ),
+ maArrangeDlg( pBaseWindow ),
+ mpPrjIdMapper( NULL ),
+ maToolBox( pBaseWindow, DtSodResId(TID_SOLDEP_MAIN) ),
+ maTaskBarFrame( pBaseWindow, 0)
+{
+ maArrangeDlg.Hide();
+
+ mpProcessWin = pBaseWindow;
+ mpGraphWin = new GraphWin( mpProcessWin, this );
+ mpGraphPrjWin = new GraphWin( mpProcessWin, this );
+ //mpBaseWin paints into virtual OutputDevice
+ mpBaseWin = new DepWin( mpGraphWin->GetBufferWindow(), WB_NOBORDER | WB_SIZEABLE | WB_AUTOSIZE );
+ mpBasePrjWin = new DepWin( mpGraphPrjWin->GetBufferWindow(), WB_NOBORDER | WB_SIZEABLE | WB_AUTOSIZE );
+
+ mpGraphWin->SetBackground( Wallpaper( Color( COL_RED )));
+ mpGraphPrjWin->SetBackground( Wallpaper( Color( COL_BLUE )));
+ mpGraphPrjWin->Hide();
+ mpBaseWin->SetBackground( Wallpaper( Color( COL_WHITE )));
+ mpBasePrjWin->SetBackground( Wallpaper( Color( COL_LIGHTGRAY )));
+/*
+ mpGraphWin->SetZOrder( NULL, WINDOW_ZORDER_FIRST );
+ mpGraphPrjWin->SetZOrder( NULL, WINDOW_ZORDER_FIRST );
+ mpBaseWin->SetZOrder( NULL, WINDOW_ZORDER_FIRST );
+*/
+ mpGraphWin->EnableClipSiblings();
+ mpGraphPrjWin->EnableClipSiblings();
+
+ mpParentProcessWin = mpProcessWin->GetParent();
+ mpBaseWin->Show();
+ nZoomed = 0;
+
+ mpBaseWin->SetPopupHdl( this );
+ mpBasePrjWin->SetPopupHdl( this );
+
+ mpObjectList = new ObjectList(); //ObjectList unbekannt
+ mpObjectPrjList = new ObjectList();
+}
+
+Depper::~Depper()
+{
+// delete mpObjectList;
+ delete mpBaseWin;
+ delete mpGraphWin;
+}
+
+BOOL Depper::TogglePrjViewStatus()
+{
+ GetDepWin()->Hide(); //Hide old content window
+ GetGraphWin()->Hide();
+ mbIsPrjView = !mbIsPrjView; //switch now
+ GetDepWin()->Invalidate();
+ GetGraphWin()->Show();
+ GetDepWin()->Show(); //Show new content window
+ return mbIsPrjView;
+}
+
+void Depper::HideObjectsAndConnections( ObjectList* pObjLst )
+{
+ for ( ULONG i = 0; i < pObjLst->Count(); i ++ ) {
+ ObjectWin *pWin = pObjLst->GetObject( i );
+ pWin->Hide();
+ }
+ mpGraphWin->Hide();
+ mpBaseWin->Hide();
+ mpGraphPrjWin->Show();
+ mpBasePrjWin->Show();
+}
+
+void Depper::ShowObjectsAndConnections( ObjectList* pObjLst )
+{
+ for ( ULONG i = 0; i < pObjLst->Count(); i ++ ) {
+ ObjectWin *pWin = pObjLst->GetObject( i );
+ pWin->Show();
+ }
+ mpBasePrjWin->Hide();
+ mpGraphPrjWin->Hide();
+ mpGraphWin->Show();
+ mpBaseWin->Show();
+}
+
+
+void Depper::RemoveAllObjects( ObjectList* pObjLst )
+{
+ ULONG i;
+
+ for ( i = pObjLst->Count(); i > 0; i-- )
+ delete pObjLst->GetObject( i - 1 );
+ pObjLst->Clear();
+}
+
+USHORT Depper::Save( const ByteString& rFileName )
+{
+ DBG_ASSERT( FALSE , "you are dead!" );
+ SvFileStream aOutFile( String( rFileName, RTL_TEXTENCODING_UTF8 ), STREAM_WRITE );
+ depper_head dh;
+ USHORT i;
+ ULONG nObjCount = mpObjectList->Count();
+
+ ConnectorList* pConList = GetDepWin()->GetConnectorList();
+ ULONG nCnctrCount = pConList->Count();
+
+ dh.nID = DEPPER_ID;
+ dh.nObjectCount = nObjCount;
+ dh.nCnctrCount = nCnctrCount;
+
+ aOutFile.Write( &dh, sizeof( dh ));
+
+ for ( i=0; i < nObjCount ; i++ )
+ {
+ mpObjectList->GetObject( i )->Save( aOutFile );
+ }
+
+ for ( i=0; i < nCnctrCount ; i++ )
+ {
+ pConList->GetObject( i )->Save( aOutFile );
+ }
+
+ return 0;
+}
+
+
+USHORT Depper::WriteSource()
+{
+ DBG_ASSERT( FALSE , "overload it!" );
+ return 0;
+};
+
+USHORT Depper::ReadSource( BOOL bUpdater )
+{
+ DBG_ASSERT( FALSE , "overload it!" );
+ return 0;
+};
+
+USHORT Depper::OpenSource()
+{
+ DBG_ASSERT( FALSE , "overload it!" );
+ return 0;
+};
+
+ObjectWin* Depper::ObjIdToPtr( ObjectList* pObjLst, ULONG nId )
+{
+ ULONG nObjCount = pObjLst->Count();
+ ULONG i = 0;
+ ObjectWin* pWin;
+ ULONG nWinId = 0;
+
+ do
+ {
+ pWin = pObjLst->GetObject( i );
+ nWinId = pWin->GetId();
+ i++;
+ }
+ while( i < nObjCount && pWin->GetId() != nId );
+ if ( pWin->GetId() == nId )
+ return pWin;
+ else
+ return NULL;
+}
+
+void Depper::SetMainProgressBar( USHORT i)
+{
+ if ( pMainBar ) {
+ pMainBar->SetValue( 100 );
+ pMainBar->Update();
+ }
+}
+
+void Depper::UpdateMainProgressBar(USHORT i, USHORT nScaleVal, USHORT &nStep, BOOL bCountingDown )
+{
+ ULONG val = 0;
+ if ( pMainBar ) {
+ // val = i * 50 / nScaleVal + 1;
+ val = bCountingDown ? 50 + ( nScaleVal - i ) * 50 / nScaleVal : i * 50 / nScaleVal;
+
+ pMainBar->SetValue( val );
+ pMainBar->Update();
+ String sText( String::CreateFromAscii( "Optimize step " ));
+ sText += String::CreateFromInt32( ++nStep );
+ pSubText->SetText( sText );
+ }
+}
+
+void Depper::UpdateSubProgrssBar(ULONG i)
+{
+ if ( pSubBar )
+ {
+ pSubBar->SetValue( i );
+ pSubBar->Update();
+ GetpApp()->Reschedule();
+ }
+}
+
+
+USHORT Depper::AutoArrangeDlgStart()
+{
+ pSubBar = maArrangeDlg.GetSubBar();
+ pMainBar = maArrangeDlg.GetMainBar();
+ pSubText = maArrangeDlg.GetSubText();
+ pMainText = maArrangeDlg.GetMainText();
+ pMainText->SetText( String::CreateFromAscii( "Overall status" ));
+ maArrangeDlg.Show();
+ GetDepWin()->Enable( FALSE );
+ GetDepWin()->Hide();
+ return 0;
+}
+
+USHORT Depper::AutoArrangeDlgStop()
+{
+ maArrangeDlg.Hide();
+ GetDepWin()->Enable( TRUE );
+ GetDepWin()->Show();
+ pSubBar = NULL;
+ pMainBar = NULL;
+ pSubText = NULL;
+ pMainText = NULL;
+ return 0;
+}
+
+
+
+USHORT Depper::Zoom( MapMode& rMapMode )
+{
+ ULONG i;
+ ObjectWin* pWin;
+ Point aPos;
+ Size aSize;
+ ObjectList* pObjList;
+ pObjList = GetObjectList();
+// aSize = mpBaseWin->GetSizePixel();
+// mpGraphWin->SetTotalSize( aSize );
+// mpGraphWin->EndScroll( 0, 0 );
+
+ for ( i = pObjList->Count(); i > 0; i-- )
+ {
+ pWin = pObjList->GetObject( i - 1 );
+ aPos = pWin->PixelToLogic( pWin->GetPosPixel());
+ aSize = pWin->PixelToLogic( pWin->GetSizePixel());
+ pWin->SetMapMode( rMapMode );
+ aPos = pWin->LogicToPixel( aPos );
+ aSize = pWin->LogicToPixel( aSize );
+ pWin->SetPosSizePixel( aPos, aSize );
+ }
+ GetDepWin()->Invalidate();
+ return 0;
+}
+
+ULONG Depper::AddObjectToList( DepWin* pParentWin, ObjectList* pObjLst, ULONG &LastID, ULONG &WinCount, ByteString& rBodyText, BOOL bInteract )
+{
+ Point aPos;
+ Size aSize = GetDefSize();
+
+ aPos = GetDepWin()->LogicToPixel( aPos );
+ aSize = GetDepWin()->LogicToPixel( aSize );
+ return AddObjectToList( pParentWin, pObjLst, LastID, WinCount, rBodyText, aPos, aSize );
+}
+
+ULONG Depper::AddObjectToList( DepWin* pParentWin, ObjectList* pObjLst, ULONG &LastID, ULONG &WinCount, ByteString& rBodyText, Point& rPos, Size& rSize )
+{
+ ObjectWin* pWin = new ObjectWin( pParentWin, WB_BORDER );
+ //pWin->mpDepperDontuseme = this;
+ pWin->SetGlobalViewMask(mnViewMask); // Set ViewMask for all ObjectWin and Connector objects
+
+ Size aNewSize;
+ aNewSize.Width() = pWin->GetTextWidth( String( rBodyText, RTL_TEXTENCODING_UTF8 ));
+ aNewSize.Height() = pWin->GetTextHeight();
+ if ( aNewSize.Width() > rSize.Width() - 8 )
+ {
+ aNewSize.Width() = aNewSize.Width() + 8;
+ aNewSize.Height() = rSize.Height();
+ }
+ else
+ aNewSize = rSize;
+ pWin->SetPosSizePixel( rPos,aNewSize);
+
+ MapMode aMapMode = mpBaseWin->GetMapMode();
+ pWin->SetMapMode( aMapMode );
+
+ pObjLst->Insert( pWin, LIST_APPEND );
+ pWin->SetId( LastID );
+ LastID++;
+ WinCount++;
+ pWin->SetBodyText( rBodyText );
+// pWin->Show();
+ return pWin->GetId();
+}
+
+/*void Depper::DrawOutput( OutputDevice* pDevice )
+{
+ GetDepWin()->DrawOutput( pDevice );
+ ObjectList* pObjList = GetObjectList();
+ for ( USHORT i = pObjList->Count(); i > 0; i-- )
+ {
+ ObjectWin* pWin = pObjList->GetObject( i - 1 );
+ pWin->DrawOutput( pDevice );
+ }
+}*/
+
+ObjectWin* Depper::RemoveObjectFromList( ObjectList* pObjLst, ULONG &WinCount, USHORT nId, BOOL bDelete )
+{
+ ObjectWin* pWin = ObjIdToPtr( pObjLst, nId );
+
+ if ( pWin )
+ {
+ pObjLst->Remove( pWin );
+ WinCount--;
+ if( bDelete )
+ delete pWin;
+ return pWin;
+ }
+ else
+ return NULL;
+}
+USHORT Depper::AddConnectorToObjects( ObjectList* pObjLst, ULONG nStartId, ULONG nEndId )
+{
+ ObjectWin* pStartWin = ObjIdToPtr( pObjLst, nStartId );
+
+ if ( !pStartWin )
+ return DEP_STARTID_NOT_FOUND;
+
+ ObjectWin* pEndWin = ObjIdToPtr( pObjLst, nEndId );
+
+ if ( !pEndWin )
+ return DEP_STARTID_NOT_FOUND;
+
+ return AddConnectorToObjects( pStartWin, pEndWin );
+}
+
+USHORT Depper::RemoveConnectorFromObjects( ObjectList* pObjLst, ULONG nStartId, ULONG nEndId )
+{
+// DBG_ASSERT( FALSE , "noch nicht" );
+ ObjectWin* pStartWin = ObjIdToPtr( pObjLst, nStartId );
+
+ if ( !pStartWin )
+ return DEP_STARTID_NOT_FOUND;
+
+ ObjectWin* pEndWin = ObjIdToPtr( pObjLst, nEndId );
+
+ if ( !pEndWin )
+ return DEP_STARTID_NOT_FOUND;
+
+ return RemoveConnectorFromObjects( pStartWin, pEndWin );
+}
+
+USHORT Depper::AddConnectorToObjects( ObjectWin* pStartWin, ObjectWin* pEndWin )
+{
+ if ( pStartWin->ConnectionExistsInAnyDirection( pEndWin ))
+ return 0;
+
+ Connector* pCon = new Connector( GetDepWin(), WB_NOBORDER );
+// pCon->Initialize( pStartWin, pEndWin );
+ if (pStartWin->IsNullObject()) //null_project
+ pCon->Initialize( pStartWin, pEndWin, FALSE );
+ else
+ pCon->Initialize( pStartWin, pEndWin, TRUE );
+ return 0;
+}
+
+USHORT Depper::RemoveConnectorFromObjects( ObjectWin* pStartWin, ObjectWin* pEndWin )
+{
+ Connector* pCon = pStartWin->GetConnector( pStartWin->GetId(), pEndWin->GetId() );
+
+ if ( !pCon )
+ return DEP_CONNECTOR_NOT_FOUND;
+ else
+ {
+ delete pCon;
+ return DEP_OK;
+ }
+}
+
+ULONG Depper::HandleNewPrjDialog( ByteString &rBodyText )
+{
+ SolNewProjectDlg aNewProjectDlg( GetDepWin(), DtSodResId( RID_SD_DIALOG_NEWPROJECT ));
+ if ( aNewProjectDlg.Execute() )
+ {
+ rBodyText = ByteString( aNewProjectDlg.maEName.GetText(), RTL_TEXTENCODING_UTF8);
+//hashtable auf stand halten
+ MyHashObject* pHObject;
+ ULONG nObjectId = AddObjectToList( mpBaseWin, mpObjectList, mnSolLastId, mnSolWinCount, rBodyText, FALSE );
+ pHObject = new MyHashObject( nObjectId, ObjIdToPtr( mpObjectList, nObjectId ));
+ mpSolIdMapper->Insert( rBodyText, pHObject );
+
+ ByteString sTokenLine( aNewProjectDlg.maEShort.GetText(), RTL_TEXTENCODING_UTF8 );
+ sTokenLine += '\t';
+ sTokenLine += ByteString( aNewProjectDlg.maEName.GetText(), RTL_TEXTENCODING_UTF8 );
+ sTokenLine += "\t:\t";
+
+ ByteString sDeps = ByteString( aNewProjectDlg.maEDeps.GetText(), RTL_TEXTENCODING_UTF8 );
+
+ if ( sDeps != "" )
+ {
+ USHORT i;
+ ByteString sDepName;
+ USHORT nToken = sDeps.GetTokenCount(' ');
+ for ( i = 0 ; i < nToken ; i++)
+ {
+ sDepName = sDeps.GetToken( i, ' ' );
+ sTokenLine += sDepName;
+ sTokenLine +='\t';
+ }
+ }
+ sTokenLine +="NULL";
+
+ mpStarWriter->InsertTokenLine( sTokenLine );
+ mpStarWriter->InsertTokenLine( sDelimiterLine );
+
+ if ( sDeps != "" )
+ {
+ USHORT i;
+ ByteString sDepName;
+ ULONG nObjectId_l, nHashedId;
+ MyHashObject* pHObject_l;
+ USHORT nToken = sDeps.GetTokenCount(' ');
+ for ( i = 0 ; i < nToken ; i++)
+ {
+ sDepName = sDeps.GetToken( i, ' ' );
+
+ pHObject_l = mpSolIdMapper->Find( sDepName );
+ if ( !pHObject_l )
+ {
+ String sMessage;
+ sMessage += String::CreateFromAscii("can't find ");
+ sMessage += String( sDepName, RTL_TEXTENCODING_UTF8 );
+ sMessage += String::CreateFromAscii(".\ndependency ignored");
+ WarningBox aBox( GetDepWin(), WB_OK, sMessage);
+ aBox.Execute();
+ }
+ else
+ {
+ nHashedId = pHObject_l->GetId();
+ pHObject_l = mpSolIdMapper->Find( rBodyText );
+ nObjectId_l = pHObject_l->GetId();
+ AddConnectorToObjects( mpObjectList, nHashedId, nObjectId_l );
+ }
+ }
+ }
+ return nObjectId;
+ }
+ return 0;
+}
+
+ULONG Depper::HandleNewDirectoryDialog(ByteString &rBodyText)
+{
+ SolNewDirectoryDlg aNewDirectoryDlg( GetDepWin(), DtSodResId( RID_SD_DIALOG_NEWDIRECTORY ));
+//todo: set defaults
+ if ( aNewDirectoryDlg.Execute() )
+ {
+ rBodyText = ByteString( aNewDirectoryDlg.maEFlag.GetText(), RTL_TEXTENCODING_UTF8 );
+//hashtable auf stand halten
+ MyHashObject* pHObject;
+ ULONG nObjectId = AddObjectToList( GetDepWin(), mpObjectPrjList, mnSolLastId, mnSolWinCount, rBodyText );
+ pHObject = new MyHashObject( nObjectId, ObjIdToPtr( mpObjectPrjList, nObjectId ));
+ mpPrjIdMapper->Insert( rBodyText, pHObject ); // mpPrjIdMapper
+
+ String sTokenLine;
+ sTokenLine = String( mpPrj->GetPreFix(), RTL_TEXTENCODING_UTF8 );
+ sTokenLine += '\t';
+ String sNameConvert = aNewDirectoryDlg.maEName.GetText();
+ sNameConvert.SearchAndReplaceAll( '/', '\\' );
+ if ( sNameConvert.GetToken( 0, 0x5c ) != String( mpPrj->GetProjectName(), RTL_TEXTENCODING_UTF8 ))
+ {
+ sTokenLine += String( mpPrj->GetProjectName(), RTL_TEXTENCODING_UTF8 );
+ sTokenLine += String("\\", RTL_TEXTENCODING_UTF8 );
+ sTokenLine += sNameConvert;
+ }
+ else
+ sTokenLine += sNameConvert;
+ sTokenLine += '\t';
+ sTokenLine += aNewDirectoryDlg.maEAction.GetText();
+ sTokenLine += String( "\t-\t", RTL_TEXTENCODING_UTF8 );
+ sTokenLine += aNewDirectoryDlg.maEEnv.GetText();
+ sTokenLine += '\t';
+ sTokenLine += aNewDirectoryDlg.maEFlag.GetText();
+ sTokenLine += '\t';
+
+ sTokenLine += String( "NULL", RTL_TEXTENCODING_UTF8 );
+
+ ByteString bsTokenLine = ByteString( sTokenLine, RTL_TEXTENCODING_UTF8 );
+ mpStarWriter->InsertTokenLine( bsTokenLine );
+
+ if ( aNewDirectoryDlg.maEDeps.GetText() != String( "", RTL_TEXTENCODING_UTF8 ))
+ {
+ USHORT i;
+ ByteString sDeps = ByteString( aNewDirectoryDlg.maEDeps.GetText(), RTL_TEXTENCODING_UTF8 );
+ ByteString sDepName;
+ ULONG nObjectId_l, nHashedId;
+ MyHashObject* pHObject_l;
+ USHORT nToken = sDeps.GetTokenCount(' ');
+ for ( i = 0 ; i < nToken ; i++)
+ {
+ sDepName = sDeps.GetToken( i, ' ' );
+
+ pHObject_l = mpPrjIdMapper->Find( sDepName ); // mpPrjIdMapper
+ if ( !pHObject_l )
+ {
+ String sMessage;
+ sMessage += String::CreateFromAscii("can't find ");
+ sMessage += String( sDepName, RTL_TEXTENCODING_UTF8 );
+ sMessage += String::CreateFromAscii(".\ndependency ignored");
+ WarningBox aBox( mpBaseWin, WB_OK, sMessage);
+ aBox.Execute();
+ }
+ else
+ {
+ sTokenLine += String( sDepName, RTL_TEXTENCODING_UTF8 );
+ sTokenLine +='\t';
+ nHashedId = pHObject_l->GetId();
+ pHObject_l = mpPrjIdMapper->Find( rBodyText ); // mpPrjIdMapper
+ nObjectId_l = pHObject_l->GetId();
+ AddConnectorToObjects( mpObjectPrjList, nHashedId, nObjectId_l );
+ }
+ }
+ }
+
+ if ( mpPrj->Count() > 1 )
+ {
+ CommandData* pData = mpPrj->GetObject( mpPrj->Count() - 1 );
+ pData = mpPrj->Replace( pData, mpPrj->Count() - 2 );
+ mpPrj->Replace( pData, mpPrj->Count() - 1 );
+ }
+
+ return nObjectId;
+ }
+ return 0;
+}
+
+// Context-Menue
+IMPL_LINK( Depper, PopupSelected, PopupMenu*, mpPopup )
+{
+ USHORT nItemId = mpPopup->GetCurItemId();
+
+ switch( nItemId )
+ {
+ case DEPPOPUP_NEW :
+ {
+ ByteString sNewItem = ByteString("new");
+ //AddObject( mpObjectList, sNewItem , TRUE );
+ }
+ break;
+ case DEPPOPUP_AUTOARRANGE :
+ //AutoArrange( mpObjectList, mpObjectList, GetStart(), 0 );
+ break;
+ case DEPPOPUP_LOAD :
+ //Load( ByteString("test.dep"));
+ break;
+ case DEPPOPUP_SAVE :
+ Save( ByteString("test.dep"));
+ break;
+ case DEPPOPUP_WRITE_SOURCE :
+ WriteSource();
+ break;
+ case DEPPOPUP_READ_SOURCE :
+ ReadSource(TRUE);
+ break;
+ case DEPPOPUP_OPEN_SOURCE :
+ OpenSource();
+ break;
+ case DEPPOPUP_ZOOMIN :
+ {
+// DBG_ASSERT( FALSE,"zoomin");
+ MapMode aMapMode = GetDepWin()->GetMapMode();
+ aMapMode.SetScaleX( aMapMode.GetScaleX() * Fraction( 1.25 ));
+ aMapMode.SetScaleY( aMapMode.GetScaleY() * Fraction( 1.25 ));
+ GetDepWin()->SetMapMode( aMapMode );
+
+ if ( nZoomed < 1 )
+ {
+ Size aZoomInSize( GetDepWin()->GetSizePixel());
+ aZoomInSize.Width() *= 1.25;
+ aZoomInSize.Height() *= 1.25;
+ GetDepWin()->SetSizePixel( aZoomInSize );
+ }
+ nZoomed--;
+
+ Zoom( aMapMode );
+ };
+ break;
+ case DEPPOPUP_ZOOMOUT :
+ {
+// DBG_ASSERT( FALSE,"zoomout");
+ MapMode aMapMode = GetDepWin()->GetMapMode();
+ if ( aMapMode.GetScaleX() > Fraction( 0.25 ))
+ {
+ aMapMode.SetScaleX( aMapMode.GetScaleX() * Fraction( 0.8 ));
+ aMapMode.SetScaleY( aMapMode.GetScaleY() * Fraction( 0.8 ));
+ GetDepWin()->SetMapMode( aMapMode );
+
+ if ( nZoomed < 0 )
+ {
+ Size aZoomOutSize( mpBaseWin->GetSizePixel());
+ aZoomOutSize.Width() *= 0.8;
+ aZoomOutSize.Height() *= 0.8;
+ GetDepWin()->SetSizePixel( aZoomOutSize );
+ }
+ nZoomed++;
+
+ Zoom( aMapMode );
+ }
+ };
+ break;
+ case DEPPOPUP_CLEAR :
+// DBG_ASSERT( FALSE,"clear");
+// RemoveAllObjects( mpObjectList );
+ break;
+ case DEPPOPUP_CLOSE :
+// DBG_ASSERT( FALSE,"close");
+ CloseWindow();
+ break;
+ case DEPPOPUP_HELP :
+// DBG_ASSERT( FALSE,"help");
+ ShowHelp();
+ break;
+ case DEPPOPUP_TEST :
+// DBG_ASSERT( FALSE,"TEST!");
+// test();
+ break;
+ case DEPPOPUP_SHOW_TOOLBOX:
+ maToolBox.Show();
+ break;
+ default :
+ DBG_ASSERT( FALSE, "default" );
+ break;
+ }
+ return 0;
+} \ No newline at end of file