office-gobmx/soldep/source/depper.cxx

679 lines
21 KiB
C++
Raw Normal View History

2004-02-26 07:51:54 -06:00
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
2004-02-26 07:51:54 -06:00
*
* Copyright 2008 by Sun Microsystems, Inc.
2004-02-26 07:51:54 -06:00
*
* OpenOffice.org - a multi-platform office productivity suite
2004-02-26 07:51:54 -06:00
*
* $RCSfile: depper.cxx,v $
* $Revision: 1.8 $
2004-02-26 07:51:54 -06:00
*
* This file is part of OpenOffice.org.
2004-02-26 07:51:54 -06: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.
2004-02-26 07:51:54 -06: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).
2004-02-26 07:51:54 -06: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.
2004-02-26 07:51:54 -06:00
*
************************************************************************/
#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>
2004-02-26 07:51:54 -06:00
#include "math.h"
#include "time.h"
#include "stdlib.h"
2006-04-20 09:16:35 -05:00
#include "dtsodcmp.hrc"
2004-02-26 07:51:54 -06:00
#include <vcl/svapp.hxx>
#define MIN(a,b) (a)<(b)?(a):(b)
#define MAX(a,b) (a)>(b)?(a):(b)
2006-04-20 09:16:35 -05:00
ByteString sDelimiterLine("#==========================================================================");
2004-02-26 07:51:54 -06:00
Depper::Depper( Window* pBaseWindow ):
2006-04-20 09:16:35 -05:00
Window( pBaseWindow ),
mbIsPrjView(FALSE),
2004-02-26 07:51:54 -06:00
maDefPos( 50, 50 ),
maDefSize( 60, 25 ),
2006-04-20 09:16:35 -05:00
mnViewMask( 1 ),
2004-02-26 07:51:54 -06:00
pSubBar( NULL ),
pMainBar( NULL ),
2006-04-20 09:16:35 -05:00
pSubText( NULL ),
pMainText( NULL ),
maArrangeDlg( pBaseWindow ),
mpPrjIdMapper( NULL ),
maToolBox( pBaseWindow, DtSodResId(TID_SOLDEP_MAIN) ),
maTaskBarFrame( pBaseWindow, 0)
2004-02-26 07:51:54 -06:00
{
2006-04-20 09:16:35 -05:00
maArrangeDlg.Hide();
2004-02-26 07:51:54 -06:00
mpProcessWin = pBaseWindow;
2006-04-20 09:16:35 -05:00
mpGraphWin = new GraphWin( mpProcessWin, this );
mpGraphPrjWin = new GraphWin( mpProcessWin, this );
//mpBaseWin paints into virtual OutputDevice
2004-02-26 07:51:54 -06:00
mpBaseWin = new DepWin( mpGraphWin->GetBufferWindow(), WB_NOBORDER | WB_SIZEABLE | WB_AUTOSIZE );
2006-04-20 09:16:35 -05:00
mpBasePrjWin = new DepWin( mpGraphPrjWin->GetBufferWindow(), WB_NOBORDER | WB_SIZEABLE | WB_AUTOSIZE );
2004-02-26 07:51:54 -06:00
2006-04-20 09:16:35 -05:00
mpGraphWin->SetBackground( Wallpaper( Color( COL_RED )));
mpGraphPrjWin->SetBackground( Wallpaper( Color( COL_BLUE )));
mpGraphPrjWin->Hide();
2004-04-01 07:18:34 -06:00
mpBaseWin->SetBackground( Wallpaper( Color( COL_WHITE )));
mpBasePrjWin->SetBackground( Wallpaper( Color( COL_LIGHTGRAY )));
2006-04-20 09:16:35 -05:00
/*
2004-02-26 07:51:54 -06:00
mpGraphWin->SetZOrder( NULL, WINDOW_ZORDER_FIRST );
2006-04-20 09:16:35 -05:00
mpGraphPrjWin->SetZOrder( NULL, WINDOW_ZORDER_FIRST );
2004-02-26 07:51:54 -06:00
mpBaseWin->SetZOrder( NULL, WINDOW_ZORDER_FIRST );
2006-04-20 09:16:35 -05:00
*/
2004-02-26 07:51:54 -06:00
mpGraphWin->EnableClipSiblings();
2006-04-20 09:16:35 -05:00
mpGraphPrjWin->EnableClipSiblings();
2004-02-26 07:51:54 -06:00
2006-04-20 09:16:35 -05:00
mpParentProcessWin = mpProcessWin->GetParent();
2004-02-26 07:51:54 -06:00
mpBaseWin->Show();
nZoomed = 0;
mpBaseWin->SetPopupHdl( this );
2006-04-20 09:16:35 -05:00
mpBasePrjWin->SetPopupHdl( this );
mpObjectList = new ObjectList(); //ObjectList unbekannt
mpObjectPrjList = new ObjectList();
2004-02-26 07:51:54 -06:00
}
Depper::~Depper()
{
2006-04-20 09:16:35 -05:00
// delete mpObjectList;
2004-02-26 07:51:54 -06:00
delete mpBaseWin;
delete mpGraphWin;
}
2006-04-20 09:16:35 -05:00
BOOL Depper::TogglePrjViewStatus()
2004-02-26 07:51:54 -06:00
{
2006-04-20 09:16:35 -05:00
GetDepWin()->Hide(); //Hide old content window
GetGraphWin()->Hide();
mbIsPrjView = !mbIsPrjView; //switch now
GetDepWin()->Invalidate();
GetGraphWin()->Show();
GetDepWin()->Show(); //Show new content window
return mbIsPrjView;
2004-02-26 07:51:54 -06:00
}
2006-04-20 09:16:35 -05:00
void Depper::HideObjectsAndConnections( ObjectList* pObjLst )
2004-02-26 07:51:54 -06:00
{
2006-04-20 09:16:35 -05:00
for ( ULONG i = 0; i < pObjLst->Count(); i ++ ) {
ObjectWin *pWin = pObjLst->GetObject( i );
pWin->Hide();
2004-02-26 07:51:54 -06:00
}
2006-04-20 09:16:35 -05:00
mpGraphWin->Hide();
mpBaseWin->Hide();
mpGraphPrjWin->Show();
mpBasePrjWin->Show();
2004-02-26 07:51:54 -06:00
}
2006-04-20 09:16:35 -05:00
void Depper::ShowObjectsAndConnections( ObjectList* pObjLst )
2004-02-26 07:51:54 -06:00
{
2006-04-20 09:16:35 -05:00
for ( ULONG i = 0; i < pObjLst->Count(); i ++ ) {
ObjectWin *pWin = pObjLst->GetObject( i );
pWin->Show();
2004-02-26 07:51:54 -06:00
}
2006-04-20 09:16:35 -05:00
mpBasePrjWin->Hide();
mpGraphPrjWin->Hide();
mpGraphWin->Show();
mpBaseWin->Show();
2004-02-26 07:51:54 -06:00
}
2006-04-20 09:16:35 -05:00
void Depper::RemoveAllObjects( ObjectList* pObjLst )
2004-02-26 07:51:54 -06:00
{
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;
2006-04-20 09:16:35 -05:00
ULONG nObjCount = mpObjectList->Count();
2004-02-26 07:51:54 -06:00
2006-04-20 09:16:35 -05:00
ConnectorList* pConList = GetDepWin()->GetConnectorList();
2004-02-26 07:51:54 -06:00
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++ )
{
2006-04-20 09:16:35 -05:00
mpObjectList->GetObject( i )->Save( aOutFile );
2004-02-26 07:51:54 -06:00
}
for ( i=0; i < nCnctrCount ; i++ )
{
pConList->GetObject( i )->Save( aOutFile );
}
return 0;
}
USHORT Depper::WriteSource()
{
DBG_ASSERT( FALSE , "overload it!" );
return 0;
};
2006-04-20 09:16:35 -05:00
USHORT Depper::ReadSource( BOOL bUpdater )
2004-02-26 07:51:54 -06:00
{
DBG_ASSERT( FALSE , "overload it!" );
return 0;
};
USHORT Depper::OpenSource()
{
DBG_ASSERT( FALSE , "overload it!" );
return 0;
};
2006-04-20 09:16:35 -05:00
ObjectWin* Depper::ObjIdToPtr( ObjectList* pObjLst, ULONG nId )
2004-02-26 07:51:54 -06:00
{
2006-04-20 09:16:35 -05:00
ULONG nObjCount = pObjLst->Count();
2004-02-26 07:51:54 -06:00
ULONG i = 0;
ObjectWin* pWin;
2006-04-20 09:16:35 -05:00
ULONG nWinId = 0;
2004-02-26 07:51:54 -06:00
do
{
2006-04-20 09:16:35 -05:00
pWin = pObjLst->GetObject( i );
nWinId = pWin->GetId();
2004-02-26 07:51:54 -06:00
i++;
}
while( i < nObjCount && pWin->GetId() != nId );
if ( pWin->GetId() == nId )
return pWin;
else
return NULL;
}
2006-04-20 09:16:35 -05:00
void Depper::SetMainProgressBar( USHORT i)
2004-02-26 07:51:54 -06:00
{
2006-04-20 09:16:35 -05:00
if ( pMainBar ) {
pMainBar->SetValue( 100 );
pMainBar->Update();
2004-02-26 07:51:54 -06:00
}
}
2006-04-20 09:16:35 -05:00
void Depper::UpdateMainProgressBar(USHORT i, USHORT nScaleVal, USHORT &nStep, BOOL bCountingDown )
2004-02-26 07:51:54 -06:00
{
2006-04-20 09:16:35 -05:00
ULONG val = 0;
if ( pMainBar ) {
// val = i * 50 / nScaleVal + 1;
val = bCountingDown ? 50 + ( nScaleVal - i ) * 50 / nScaleVal : i * 50 / nScaleVal;
2004-02-26 07:51:54 -06:00
2006-04-20 09:16:35 -05:00
pMainBar->SetValue( val );
pMainBar->Update();
String sText( String::CreateFromAscii( "Optimize step " ));
sText += String::CreateFromInt32( ++nStep );
pSubText->SetText( sText );
2004-02-26 07:51:54 -06:00
}
}
2006-04-20 09:16:35 -05:00
void Depper::UpdateSubProgrssBar(ULONG i)
2004-02-26 07:51:54 -06:00
{
2006-04-20 09:16:35 -05:00
if ( pSubBar )
2004-02-26 07:51:54 -06:00
{
2006-04-20 09:16:35 -05:00
pSubBar->SetValue( i );
pSubBar->Update();
GetpApp()->Reschedule();
2004-02-26 07:51:54 -06:00
}
}
2006-04-20 09:16:35 -05:00
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;
2004-02-26 07:51:54 -06:00
}
2006-04-20 09:16:35 -05:00
USHORT Depper::AutoArrangeDlgStop()
2004-02-26 07:51:54 -06:00
{
2006-04-20 09:16:35 -05:00
maArrangeDlg.Hide();
GetDepWin()->Enable( TRUE );
GetDepWin()->Show();
2004-02-26 07:51:54 -06:00
pSubBar = NULL;
pMainBar = NULL;
pSubText = NULL;
pMainText = NULL;
return 0;
}
2006-04-20 09:16:35 -05:00
USHORT Depper::Zoom( MapMode& rMapMode )
2004-02-26 07:51:54 -06:00
{
2006-04-20 09:16:35 -05:00
ULONG i;
2004-02-26 07:51:54 -06:00
ObjectWin* pWin;
2006-04-20 09:16:35 -05:00
Point aPos;
Size aSize;
ObjectList* pObjList;
pObjList = GetObjectList();
// aSize = mpBaseWin->GetSizePixel();
// mpGraphWin->SetTotalSize( aSize );
// mpGraphWin->EndScroll( 0, 0 );
2004-02-26 07:51:54 -06:00
2006-04-20 09:16:35 -05:00
for ( i = pObjList->Count(); i > 0; i-- )
2004-02-26 07:51:54 -06:00
{
2006-04-20 09:16:35 -05:00
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 );
2004-02-26 07:51:54 -06:00
}
2006-04-20 09:16:35 -05:00
GetDepWin()->Invalidate();
return 0;
}
2004-02-26 07:51:54 -06:00
2006-04-20 09:16:35 -05:00
ULONG Depper::AddObjectToList( DepWin* pParentWin, ObjectList* pObjLst, ULONG &LastID, ULONG &WinCount, ByteString& rBodyText, BOOL bInteract )
{
Point aPos;
Size aSize = GetDefSize();
2004-02-26 07:51:54 -06:00
2006-04-20 09:16:35 -05:00
aPos = GetDepWin()->LogicToPixel( aPos );
aSize = GetDepWin()->LogicToPixel( aSize );
return AddObjectToList( pParentWin, pObjLst, LastID, WinCount, rBodyText, aPos, aSize );
}
2004-02-26 07:51:54 -06:00
2006-04-20 09:16:35 -05:00
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 )
2004-02-26 07:51:54 -06:00
{
2006-04-20 09:16:35 -05:00
aNewSize.Width() = aNewSize.Width() + 8;
aNewSize.Height() = rSize.Height();
2004-02-26 07:51:54 -06:00
}
2006-04-20 09:16:35 -05:00
else
aNewSize = rSize;
pWin->SetPosSizePixel( rPos,aNewSize);
2004-02-26 07:51:54 -06:00
2006-04-20 09:16:35 -05:00
MapMode aMapMode = mpBaseWin->GetMapMode();
pWin->SetMapMode( aMapMode );
2004-02-26 07:51:54 -06:00
2006-04-20 09:16:35 -05:00
pObjLst->Insert( pWin, LIST_APPEND );
pWin->SetId( LastID );
LastID++;
WinCount++;
pWin->SetBodyText( rBodyText );
// pWin->Show();
return pWin->GetId();
}
2004-02-26 07:51:54 -06:00
2006-04-20 09:16:35 -05:00
ObjectWin* Depper::RemoveObjectFromList( ObjectList* pObjLst, ULONG &WinCount, USHORT nId, BOOL bDelete )
{
ObjectWin* pWin = ObjIdToPtr( pObjLst, nId );
2004-02-26 07:51:54 -06:00
2006-04-20 09:16:35 -05:00
if ( pWin )
{
pObjLst->Remove( pWin );
WinCount--;
if( bDelete )
delete pWin;
return pWin;
2004-02-26 07:51:54 -06:00
}
2006-04-20 09:16:35 -05:00
else
return NULL;
}
USHORT Depper::AddConnectorToObjects( ObjectList* pObjLst, ULONG nStartId, ULONG nEndId )
{
ObjectWin* pStartWin = ObjIdToPtr( pObjLst, nStartId );
2004-02-26 07:51:54 -06:00
2006-04-20 09:16:35 -05:00
if ( !pStartWin )
return DEP_STARTID_NOT_FOUND;
2004-02-26 07:51:54 -06:00
2006-04-20 09:16:35 -05:00
ObjectWin* pEndWin = ObjIdToPtr( pObjLst, nEndId );
2004-02-26 07:51:54 -06:00
2006-04-20 09:16:35 -05:00
if ( !pEndWin )
return DEP_STARTID_NOT_FOUND;
2004-02-26 07:51:54 -06:00
2006-04-20 09:16:35 -05:00
return AddConnectorToObjects( pStartWin, pEndWin );
}
2004-02-26 07:51:54 -06:00
2006-04-20 09:16:35 -05:00
USHORT Depper::RemoveConnectorFromObjects( ObjectList* pObjLst, ULONG nStartId, ULONG nEndId )
{
// DBG_ASSERT( FALSE , "noch nicht" );
ObjectWin* pStartWin = ObjIdToPtr( pObjLst, nStartId );
2004-02-26 07:51:54 -06:00
2006-04-20 09:16:35 -05:00
if ( !pStartWin )
return DEP_STARTID_NOT_FOUND;
2004-02-26 07:51:54 -06:00
2006-04-20 09:16:35 -05:00
ObjectWin* pEndWin = ObjIdToPtr( pObjLst, nEndId );
2004-02-26 07:51:54 -06:00
2006-04-20 09:16:35 -05:00
if ( !pEndWin )
return DEP_STARTID_NOT_FOUND;
2004-02-26 07:51:54 -06:00
2006-04-20 09:16:35 -05:00
return RemoveConnectorFromObjects( pStartWin, pEndWin );
}
2004-02-26 07:51:54 -06:00
2006-04-20 09:16:35 -05:00
USHORT Depper::AddConnectorToObjects( ObjectWin* pStartWin, ObjectWin* pEndWin )
{
if ( pStartWin->ConnectionExistsInAnyDirection( pEndWin ))
return 0;
2004-02-26 07:51:54 -06:00
2006-04-20 09:16:35 -05:00
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;
}
2004-02-26 07:51:54 -06:00
2006-04-20 09:16:35 -05:00
USHORT Depper::RemoveConnectorFromObjects( ObjectWin* pStartWin, ObjectWin* pEndWin )
{
Connector* pCon = pStartWin->GetConnector( pStartWin->GetId(), pEndWin->GetId() );
2004-02-26 07:51:54 -06:00
2006-04-20 09:16:35 -05:00
if ( !pCon )
return DEP_CONNECTOR_NOT_FOUND;
else
{
delete pCon;
return DEP_OK;
}
}
2004-02-26 07:51:54 -06:00
2006-04-20 09:16:35 -05:00
ULONG Depper::HandleNewPrjDialog( ByteString &rBodyText )
{
SolNewProjectDlg aNewProjectDlg( GetDepWin(), DtSodResId( RID_SD_DIALOG_NEWPROJECT ));
if ( aNewProjectDlg.Execute() )
2004-02-26 07:51:54 -06:00
{
2006-04-20 09:16:35 -05:00
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 );
2004-02-26 07:51:54 -06:00
2006-04-20 09:16:35 -05:00
ByteString sTokenLine( aNewProjectDlg.maEShort.GetText(), RTL_TEXTENCODING_UTF8 );
sTokenLine += '\t';
sTokenLine += ByteString( aNewProjectDlg.maEName.GetText(), RTL_TEXTENCODING_UTF8 );
sTokenLine += "\t:\t";
2004-02-26 07:51:54 -06:00
2006-04-20 09:16:35 -05:00
ByteString sDeps = ByteString( aNewProjectDlg.maEDeps.GetText(), RTL_TEXTENCODING_UTF8 );
2004-02-26 07:51:54 -06:00
2006-04-20 09:16:35 -05:00
if ( sDeps != "" )
2004-02-26 07:51:54 -06:00
{
2006-04-20 09:16:35 -05:00
USHORT i;
ByteString sDepName;
USHORT nToken = sDeps.GetTokenCount(' ');
for ( i = 0 ; i < nToken ; i++)
2004-02-26 07:51:54 -06:00
{
2006-04-20 09:16:35 -05:00
sDepName = sDeps.GetToken( i, ' ' );
sTokenLine += sDepName;
sTokenLine +='\t';
2004-02-26 07:51:54 -06:00
}
}
2006-04-20 09:16:35 -05:00
sTokenLine +="NULL";
2004-02-26 07:51:54 -06:00
2006-04-20 09:16:35 -05:00
mpStarWriter->InsertTokenLine( sTokenLine );
mpStarWriter->InsertTokenLine( sDelimiterLine );
2004-02-26 07:51:54 -06:00
2006-04-20 09:16:35 -05:00
if ( sDeps != "" )
2004-02-26 07:51:54 -06:00
{
2006-04-20 09:16:35 -05:00
USHORT i;
ByteString sDepName;
ULONG nObjectId_l, nHashedId;
MyHashObject* pHObject_l;
2006-04-20 09:16:35 -05:00
USHORT nToken = sDeps.GetTokenCount(' ');
for ( i = 0 ; i < nToken ; i++)
{
sDepName = sDeps.GetToken( i, ' ' );
2004-02-26 07:51:54 -06:00
pHObject_l = mpSolIdMapper->Find( sDepName );
if ( !pHObject_l )
2006-04-20 09:16:35 -05:00
{
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 );
2006-04-20 09:16:35 -05:00
}
}
}
return nObjectId;
2004-02-26 07:51:54 -06:00
}
2006-04-20 09:16:35 -05:00
return 0;
}
2004-02-26 07:51:54 -06:00
2006-04-20 09:16:35 -05:00
ULONG Depper::HandleNewDirectoryDialog(ByteString &rBodyText)
{
SolNewDirectoryDlg aNewDirectoryDlg( GetDepWin(), DtSodResId( RID_SD_DIALOG_NEWDIRECTORY ));
//todo: set defaults
if ( aNewDirectoryDlg.Execute() )
2004-02-26 07:51:54 -06:00
{
2006-04-20 09:16:35 -05:00
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';
2004-02-26 07:51:54 -06:00
2006-04-20 09:16:35 -05:00
sTokenLine += String( "NULL", RTL_TEXTENCODING_UTF8 );
2004-02-26 07:51:54 -06:00
2006-04-24 05:18:48 -05:00
ByteString bsTokenLine = ByteString( sTokenLine, RTL_TEXTENCODING_UTF8 );
mpStarWriter->InsertTokenLine( bsTokenLine );
2004-02-26 07:51:54 -06:00
2006-04-20 09:16:35 -05:00
if ( aNewDirectoryDlg.maEDeps.GetText() != String( "", RTL_TEXTENCODING_UTF8 ))
2004-02-26 07:51:54 -06:00
{
2006-04-20 09:16:35 -05:00
USHORT i;
ByteString sDeps = ByteString( aNewDirectoryDlg.maEDeps.GetText(), RTL_TEXTENCODING_UTF8 );
ByteString sDepName;
ULONG nObjectId_l, nHashedId;
MyHashObject* pHObject_l;
2006-04-20 09:16:35 -05:00
USHORT nToken = sDeps.GetTokenCount(' ');
for ( i = 0 ; i < nToken ; i++)
2004-02-26 07:51:54 -06:00
{
2006-04-20 09:16:35 -05:00
sDepName = sDeps.GetToken( i, ' ' );
pHObject_l = mpPrjIdMapper->Find( sDepName ); // mpPrjIdMapper
if ( !pHObject_l )
2006-04-20 09:16:35 -05:00
{
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 );
2006-04-20 09:16:35 -05:00
}
2004-02-26 07:51:54 -06:00
}
}
2006-04-20 09:16:35 -05:00
if ( mpPrj->Count() > 1 )
2004-02-26 07:51:54 -06:00
{
2006-04-20 09:16:35 -05:00
CommandData* pData = mpPrj->GetObject( mpPrj->Count() - 1 );
pData = mpPrj->Replace( pData, mpPrj->Count() - 2 );
mpPrj->Replace( pData, mpPrj->Count() - 1 );
2004-02-26 07:51:54 -06:00
}
2006-04-20 09:16:35 -05:00
return nObjectId;
2004-02-26 07:51:54 -06:00
}
2006-04-20 09:16:35 -05:00
return 0;
2004-02-26 07:51:54 -06:00
}
2006-04-20 09:16:35 -05:00
// Context-Menue
2004-02-26 07:51:54 -06:00
IMPL_LINK( Depper, PopupSelected, PopupMenu*, mpPopup )
{
USHORT nItemId = mpPopup->GetCurItemId();
switch( nItemId )
{
case DEPPOPUP_NEW :
2006-04-20 09:16:35 -05:00
{
ByteString sNewItem = ByteString("new");
//AddObject( mpObjectList, sNewItem , TRUE );
}
2004-02-26 07:51:54 -06:00
break;
case DEPPOPUP_AUTOARRANGE :
2006-04-20 09:16:35 -05:00
//AutoArrange( mpObjectList, mpObjectList, GetStart(), 0 );
2004-02-26 07:51:54 -06:00
break;
case DEPPOPUP_LOAD :
2006-04-20 09:16:35 -05:00
//Load( ByteString("test.dep"));
2004-02-26 07:51:54 -06:00
break;
case DEPPOPUP_SAVE :
Save( ByteString("test.dep"));
break;
case DEPPOPUP_WRITE_SOURCE :
WriteSource();
break;
case DEPPOPUP_READ_SOURCE :
2006-04-20 09:16:35 -05:00
ReadSource(TRUE);
2004-02-26 07:51:54 -06:00
break;
case DEPPOPUP_OPEN_SOURCE :
OpenSource();
break;
case DEPPOPUP_ZOOMIN :
{
// DBG_ASSERT( FALSE,"zoomin");
2006-04-20 09:16:35 -05:00
MapMode aMapMode = GetDepWin()->GetMapMode();
2004-02-26 07:51:54 -06:00
aMapMode.SetScaleX( aMapMode.GetScaleX() * Fraction( 1.25 ));
aMapMode.SetScaleY( aMapMode.GetScaleY() * Fraction( 1.25 ));
2006-04-20 09:16:35 -05:00
GetDepWin()->SetMapMode( aMapMode );
2004-02-26 07:51:54 -06:00
if ( nZoomed < 1 )
{
2006-04-20 09:16:35 -05:00
Size aZoomInSize( GetDepWin()->GetSizePixel());
2004-02-26 07:51:54 -06:00
aZoomInSize.Width() *= 1.25;
aZoomInSize.Height() *= 1.25;
2006-04-20 09:16:35 -05:00
GetDepWin()->SetSizePixel( aZoomInSize );
2004-02-26 07:51:54 -06:00
}
nZoomed--;
Zoom( aMapMode );
};
break;
case DEPPOPUP_ZOOMOUT :
{
// DBG_ASSERT( FALSE,"zoomout");
2006-04-20 09:16:35 -05:00
MapMode aMapMode = GetDepWin()->GetMapMode();
2004-02-26 07:51:54 -06:00
if ( aMapMode.GetScaleX() > Fraction( 0.25 ))
{
aMapMode.SetScaleX( aMapMode.GetScaleX() * Fraction( 0.8 ));
aMapMode.SetScaleY( aMapMode.GetScaleY() * Fraction( 0.8 ));
2006-04-20 09:16:35 -05:00
GetDepWin()->SetMapMode( aMapMode );
2004-02-26 07:51:54 -06:00
if ( nZoomed < 0 )
{
Size aZoomOutSize( mpBaseWin->GetSizePixel());
aZoomOutSize.Width() *= 0.8;
aZoomOutSize.Height() *= 0.8;
2006-04-20 09:16:35 -05:00
GetDepWin()->SetSizePixel( aZoomOutSize );
2004-02-26 07:51:54 -06:00
}
nZoomed++;
Zoom( aMapMode );
}
};
break;
case DEPPOPUP_CLEAR :
// DBG_ASSERT( FALSE,"clear");
2006-04-20 09:16:35 -05:00
// RemoveAllObjects( mpObjectList );
2004-02-26 07:51:54 -06:00
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;
2006-04-20 09:16:35 -05:00
case DEPPOPUP_SHOW_TOOLBOX:
maToolBox.Show();
break;
2004-02-26 07:51:54 -06:00
default :
DBG_ASSERT( FALSE, "default" );
break;
}
return 0;
}