diff options
Diffstat (limited to 'soldep/source')
-rw-r--r-- | soldep/source/connctr.cxx | 528 | ||||
-rw-r--r-- | soldep/source/depapp.cxx | 290 | ||||
-rw-r--r-- | soldep/source/depapp.hxx | 2 | ||||
-rw-r--r-- | soldep/source/objwin.cxx | 1560 | ||||
-rw-r--r-- | soldep/source/soldep.cxx | 3510 |
5 files changed, 2965 insertions, 2925 deletions
diff --git a/soldep/source/connctr.cxx b/soldep/source/connctr.cxx index 8eaba9ace236..acba58ce48d9 100644 --- a/soldep/source/connctr.cxx +++ b/soldep/source/connctr.cxx @@ -1,168 +1,168 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * $RCSfile: connctr.cxx,v $ - * $Revision: 1.6 $ - * - * 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. - * - ************************************************************************/ -#ifdef _MSC_VER -#pragma warning(disable:4100) -#endif -#include <soldep/connctr.hxx> -#include <soldep/objwin.hxx> -#include <soldep/depwin.hxx> -#include "math.h" - -BOOL Connector::msbHideMode = FALSE; - -Connector::Connector( DepWin* pParent, WinBits nWinStyle ) : -mpStartWin( 0L ), -mpEndWin( 0L ), -mnStartId( 0 ), -mnEndId( 0 ), -bVisible( FALSE ), -len( 70 ) -{ - mpParent = pParent; - if ( mpParent ) - mpParent->AddConnector( this ); -} - -Connector::~Connector() -{ - if ( mpStartWin ) - mpStartWin->RemoveConnector( this ); - if ( mpEndWin ) - mpEndWin->RemoveConnector( this ); - if ( mpParent ) - mpParent->RemoveConnector( this ); - mpParent->Invalidate( Rectangle( mStart, mEnd )); - mpParent->Invalidate( Rectangle( mEnd - Point( 3, 3), mEnd + Point( 3, 3))); -} - -void Connector::Initialize( ObjectWin* pStartWin, ObjectWin* pEndWin, BOOL bVis ) -{ - mpStartWin = pStartWin; - mpEndWin = pEndWin; - mpStartWin->AddConnector( this ); - mpEndWin->AddConnector( this ); - mCenter = GetMiddle(); - mStart = pStartWin->GetFixPoint( mCenter ); - mEnd = pEndWin->GetFixPoint( mCenter ); - mnStartId = pStartWin->GetId(); - mnEndId = pEndWin->GetId(); - bVisible = bVis; - -// if ( mpParent->IsPaintEnabled()) - if ( IsVisible() ) - { - mpParent->DrawLine( mEnd, mStart ); - mpParent->DrawEllipse( Rectangle( mEnd - Point( 2, 2), mEnd + Point( 2, 2))); - } - UpdateVisibility(); //null_Project -} - -void Connector::UpdateVisibility() -{ - bVisible = mpStartWin->IsVisible() && mpEndWin->IsVisible(); -} - - -Point Connector::GetMiddle() -{ - Point aStartPoint = mpStartWin->GetPosPixel(); - Size aStartSize = mpStartWin->GetSizePixel(); - int nMoveHorz, nMoveVert; - aStartPoint.Move( aStartSize.Width() / 2, aStartSize.Height() / 2 ); - - Point aEndPoint = mpEndWin->GetPosPixel(); - Size aEndSize = mpEndWin->GetSizePixel(); - - aEndPoint.Move( aEndSize.Width() / 2, aEndSize.Height() / 2 ); - - Point aRetPoint = aEndPoint; - - nMoveHorz = aStartPoint.X() - aEndPoint.X(); - if ( nMoveHorz ) - nMoveHorz /= 2; - nMoveVert = aStartPoint.Y() - aEndPoint.Y(); - if ( nMoveVert ) - nMoveVert /= 2; - aRetPoint.Move( nMoveHorz, nMoveVert ); - return aRetPoint; - -} - -void Connector::Paint( const Rectangle& rRect ) -{ - //MyApp *pApp = (MyApp*)GetpApp(); - //SolDep *pSoldep = pApp->GetSolDep(); - if (msbHideMode) - { - if (!(mpStartWin->IsNullObject())) //null_project - { - if ( mpStartWin->GetMarkMode() == 0 || mpStartWin->GetMarkMode() == MARKMODE_DEPENDING ) - { - mpStartWin->SetViewMask(0); //objwin invisible - } else - { - mpStartWin->SetViewMask(1); //objwin visible - } - } - if (!(mpEndWin->IsNullObject())) - { - if ( mpEndWin->GetMarkMode() == 0 || mpEndWin->GetMarkMode() == MARKMODE_DEPENDING ) - { - mpEndWin->SetViewMask(0); //objwin invisible - } else - { - mpEndWin->SetViewMask(1); //objwin visible - } - } - UpdateVisibility(); - } else //IsHideMode - { - //bVisible = TRUE; - if (!(mpStartWin->IsNullObject())) //null_project - { - mpStartWin->SetViewMask(1); - } - if (!(mpEndWin->IsNullObject())) //null_project - { - mpEndWin->SetViewMask(1); - } - UpdateVisibility(); - } - if ( (mpStartWin->GetBodyText() != ByteString("null")) && //null_project - (mpEndWin->GetBodyText() != ByteString("null")) && IsVisible()) //null_project - { - mpParent->DrawLine( mEnd, mStart ); - mpParent->DrawEllipse( Rectangle( mEnd - Point( 2, 2), mEnd + Point( 2, 2))); - } -} - +/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: connctr.cxx,v $
+ * $Revision: 1.6 $
+ *
+ * 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.
+ *
+ ************************************************************************/
+#ifdef _MSC_VER
+#pragma warning(disable:4100)
+#endif
+#include <soldep/connctr.hxx>
+#include <soldep/objwin.hxx>
+#include <soldep/depwin.hxx>
+#include "math.h"
+
+BOOL Connector::msbHideMode = FALSE;
+
+Connector::Connector( DepWin* pParent, WinBits nWinStyle ) :
+mpStartWin( 0L ),
+mpEndWin( 0L ),
+mnStartId( 0 ),
+mnEndId( 0 ),
+bVisible( FALSE ),
+len( 70 )
+{
+ mpParent = pParent;
+ if ( mpParent )
+ mpParent->AddConnector( this );
+}
+
+Connector::~Connector()
+{
+ if ( mpStartWin )
+ mpStartWin->RemoveConnector( this );
+ if ( mpEndWin )
+ mpEndWin->RemoveConnector( this );
+ if ( mpParent )
+ mpParent->RemoveConnector( this );
+ mpParent->Invalidate( Rectangle( mStart, mEnd ));
+ mpParent->Invalidate( Rectangle( mEnd - Point( 3, 3), mEnd + Point( 3, 3)));
+}
+
+void Connector::Initialize( ObjectWin* pStartWin, ObjectWin* pEndWin, BOOL bVis )
+{
+ mpStartWin = pStartWin;
+ mpEndWin = pEndWin;
+ mpStartWin->AddConnector( this );
+ mpEndWin->AddConnector( this );
+ mCenter = GetMiddle();
+ mStart = pStartWin->GetFixPoint( mCenter );
+ mEnd = pEndWin->GetFixPoint( mCenter );
+ mnStartId = pStartWin->GetId();
+ mnEndId = pEndWin->GetId();
+ bVisible = bVis;
+
+// if ( mpParent->IsPaintEnabled())
+ if ( IsVisible() )
+ {
+ mpParent->DrawLine( mEnd, mStart );
+ mpParent->DrawEllipse( Rectangle( mEnd - Point( 2, 2), mEnd + Point( 2, 2)));
+ }
+ UpdateVisibility(); //null_Project
+}
+
+void Connector::UpdateVisibility()
+{
+ bVisible = mpStartWin->IsVisible() && mpEndWin->IsVisible();
+}
+
+
+Point Connector::GetMiddle()
+{
+ Point aStartPoint = mpStartWin->GetPosPixel();
+ Size aStartSize = mpStartWin->GetSizePixel();
+ int nMoveHorz, nMoveVert;
+ aStartPoint.Move( aStartSize.Width() / 2, aStartSize.Height() / 2 );
+
+ Point aEndPoint = mpEndWin->GetPosPixel();
+ Size aEndSize = mpEndWin->GetSizePixel();
+
+ aEndPoint.Move( aEndSize.Width() / 2, aEndSize.Height() / 2 );
+
+ Point aRetPoint = aEndPoint;
+
+ nMoveHorz = aStartPoint.X() - aEndPoint.X();
+ if ( nMoveHorz )
+ nMoveHorz /= 2;
+ nMoveVert = aStartPoint.Y() - aEndPoint.Y();
+ if ( nMoveVert )
+ nMoveVert /= 2;
+ aRetPoint.Move( nMoveHorz, nMoveVert );
+ return aRetPoint;
+
+}
+
+void Connector::Paint( const Rectangle& rRect )
+{
+ //MyApp *pApp = (MyApp*)GetpApp();
+ //SolDep *pSoldep = pApp->GetSolDep();
+ if (msbHideMode)
+ {
+ if (!(mpStartWin->IsNullObject())) //null_project
+ {
+ if ( mpStartWin->GetMarkMode() == 0 || mpStartWin->GetMarkMode() == MARKMODE_DEPENDING )
+ {
+ mpStartWin->SetViewMask(0); //objwin invisible
+ } else
+ {
+ mpStartWin->SetViewMask(1); //objwin visible
+ }
+ }
+ if (!(mpEndWin->IsNullObject()))
+ {
+ if ( mpEndWin->GetMarkMode() == 0 || mpEndWin->GetMarkMode() == MARKMODE_DEPENDING )
+ {
+ mpEndWin->SetViewMask(0); //objwin invisible
+ } else
+ {
+ mpEndWin->SetViewMask(1); //objwin visible
+ }
+ }
+ UpdateVisibility();
+ } else //IsHideMode
+ {
+ //bVisible = TRUE;
+ if (!(mpStartWin->IsNullObject())) //null_project
+ {
+ mpStartWin->SetViewMask(1);
+ }
+ if (!(mpEndWin->IsNullObject())) //null_project
+ {
+ mpEndWin->SetViewMask(1);
+ }
+ UpdateVisibility();
+ }
+ if ( (mpStartWin->GetBodyText() != ByteString("null")) && //null_project
+ (mpEndWin->GetBodyText() != ByteString("null")) && IsVisible()) //null_project
+ {
+ mpParent->DrawLine( mEnd, mStart );
+ mpParent->DrawEllipse( Rectangle( mEnd - Point( 2, 2), mEnd + Point( 2, 2)));
+ }
+}
+
void Connector::DrawOutput( OutputDevice* pDevice, const Point& rOffset )
{
if ( (mpStartWin->GetBodyText() != ByteString("null")) && //null_project
@@ -174,102 +174,102 @@ void Connector::DrawOutput( OutputDevice* pDevice, const Point& rOffset ) pDevice->DrawEllipse( aRect );
}
}
- -void Connector::UpdatePosition( ObjectWin* pWin, BOOL bPaint ) -{ -// more than one call ? -// - Point OldStart, OldEnd; - static ULONG nCallCount = 0; - - //MyApp *pApp = (MyApp*)GetpApp(); - //SolDep *pSoldep = pApp->GetSolDep(); - if (msbHideMode) - bVisible = 1; - - if ( nCallCount ) // only one call - nCallCount++; - else - { - nCallCount++; - while ( nCallCount ) - { - if ( bPaint ) - { - OldStart = mStart; - OldEnd = mEnd; - } - mCenter = GetMiddle(); - mStart=mpStartWin->GetFixPoint( mCenter, bPaint ); - mEnd=mpEndWin->GetFixPoint( mCenter, bPaint ); - if ( bPaint ) - { - mpParent->Invalidate( Rectangle( OldStart, OldEnd )); - mpParent->Invalidate( Rectangle( OldEnd - Point( 2, 2), OldEnd + Point( 2, 2))); -//Don't paint "null_project" connectors - if ( (mpStartWin->GetBodyText() != ByteString("null")) && //null_project - (mpEndWin->GetBodyText() != ByteString("null"))) //null_project - { - Paint ( Rectangle( mEnd - Point( 3, 3), mEnd + Point( 3, 3))); - Paint ( Rectangle( mEnd, mStart )); - } - } - nCallCount--; - } - } -} - -USHORT Connector::Save( SvFileStream& rOutFile ) -{ - rOutFile << mpStartWin->GetId(); - rOutFile << mpEndWin->GetId(); - - return 0; -} - -USHORT Connector::Load( SvFileStream& rInFile ) -{ - rInFile >> mnStartId; - rInFile >> mnEndId; - - return 0; -} - -ObjectWin* Connector::GetOtherWin( ObjectWin* pWin ) -{ -// get correspondent object ptr - if ( mpStartWin == pWin ) - return mpEndWin; - else - if ( mpEndWin == pWin ) - return mpStartWin; - - return NULL; -} - -ULONG Connector::GetOtherId( ULONG nId ) -{ -// get correspondent object id - if ( mnStartId == nId ) - return mnEndId; - else - if ( mnEndId == nId ) - return mnStartId; - - return NULL; -} - -ULONG Connector::GetLen() -{ - double dx, dy; - - dx = mStart.X() - mEnd.X(); - dy = mStart.Y() - mEnd.Y(); - - return (ULONG) sqrt( dx * dx + dy * dy ); -} - -BOOL Connector::IsStart( ObjectWin* pWin ) -{ - return pWin == mpStartWin; -} +
+void Connector::UpdatePosition( ObjectWin* pWin, BOOL bPaint )
+{
+// more than one call ?
+//
+ Point OldStart, OldEnd;
+ static ULONG nCallCount = 0;
+
+ //MyApp *pApp = (MyApp*)GetpApp();
+ //SolDep *pSoldep = pApp->GetSolDep();
+ if (msbHideMode)
+ bVisible = 1;
+
+ if ( nCallCount ) // only one call
+ nCallCount++;
+ else
+ {
+ nCallCount++;
+ while ( nCallCount )
+ {
+ if ( bPaint )
+ {
+ OldStart = mStart;
+ OldEnd = mEnd;
+ }
+ mCenter = GetMiddle();
+ mStart=mpStartWin->GetFixPoint( mCenter, bPaint );
+ mEnd=mpEndWin->GetFixPoint( mCenter, bPaint );
+ if ( bPaint )
+ {
+ mpParent->Invalidate( Rectangle( OldStart, OldEnd ));
+ mpParent->Invalidate( Rectangle( OldEnd - Point( 2, 2), OldEnd + Point( 2, 2)));
+//Don't paint "null_project" connectors
+ if ( (mpStartWin->GetBodyText() != ByteString("null")) && //null_project
+ (mpEndWin->GetBodyText() != ByteString("null"))) //null_project
+ {
+ Paint ( Rectangle( mEnd - Point( 3, 3), mEnd + Point( 3, 3)));
+ Paint ( Rectangle( mEnd, mStart ));
+ }
+ }
+ nCallCount--;
+ }
+ }
+}
+
+USHORT Connector::Save( SvFileStream& rOutFile )
+{
+ rOutFile << mpStartWin->GetId();
+ rOutFile << mpEndWin->GetId();
+
+ return 0;
+}
+
+USHORT Connector::Load( SvFileStream& rInFile )
+{
+ rInFile >> mnStartId;
+ rInFile >> mnEndId;
+
+ return 0;
+}
+
+ObjectWin* Connector::GetOtherWin( ObjectWin* pWin )
+{
+// get correspondent object ptr
+ if ( mpStartWin == pWin )
+ return mpEndWin;
+ else
+ if ( mpEndWin == pWin )
+ return mpStartWin;
+
+ return NULL;
+}
+
+ULONG Connector::GetOtherId( ULONG nId )
+{
+// get correspondent object id
+ if ( mnStartId == nId )
+ return mnEndId;
+ else
+ if ( mnEndId == nId )
+ return mnStartId;
+
+ return NULL;
+}
+
+ULONG Connector::GetLen()
+{
+ double dx, dy;
+
+ dx = mStart.X() - mEnd.X();
+ dy = mStart.Y() - mEnd.Y();
+
+ return (ULONG) sqrt( dx * dx + dy * dy );
+}
+
+BOOL Connector::IsStart( ObjectWin* pWin )
+{
+ return pWin == mpStartWin;
+}
diff --git a/soldep/source/depapp.cxx b/soldep/source/depapp.cxx index ab64557dbcf1..6b000cc6fbce 100644 --- a/soldep/source/depapp.cxx +++ b/soldep/source/depapp.cxx @@ -1,150 +1,150 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * $RCSfile: depapp.cxx,v $ - * $Revision: 1.6 $ - * - * 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 "depapp.hxx" +/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: depapp.cxx,v $
+ * $Revision: 1.6 $
+ *
+ * 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 "depapp.hxx"
#include <ucbhelper/contentbroker.hxx>
#include <ucbhelper/configurationkeys.hxx>
- -void MyApp::Main() -{ -#if defined(WNT) - pDebugFile = fopen( "fprintf.out", "w" ); -#endif - - pMyApp = GetpApp(); - MyWin aMainWin( NULL, WB_APP | WB_STDWORK ); - pAppWindow = &aMainWin; - // pToolBarFrame = new FloatingWindow( aMainWin, WB_STDWORK ); - //pToolBox = new ToolBox(pToolBarFrame,DtSodResId(TID_SOLDEP_MAIN)); - - pSolDep = new SolDep( &aMainWin ); - pSolDep->Init(); - aMainWin.SetText( String::CreateFromAscii( SOLDEPL_NAME )); - pSolDep->Hide(); - aMainWin.Show(); - Help aHelp; - SetHelp(&aHelp); - aHelp.EnableContextHelp(); - aHelp.EnableQuickHelp(); - Execute(); - delete pResMgr; - delete pSolDep; -} - -// ----------------------------------------------------------------------- - -MyWin::MyWin( Window* pParent, WinBits nWinStyle ) : - WorkWindow( pParent, nWinStyle )//,aToolBox( this, DtSodResId(TID_SOLDEP_MAIN)), - // depper aTaskBarFrame(this, 0) -{ -//depper aTaskBarFrame.EnableAlwaysOnTop(); - -//depper aMenuBar.InsertItem( 1, XubString( RTL_CONSTASCII_USTRINGPARAM( "~Source" ) ) ); -//depper aMenuBar.InsertItem( 2, XubString( RTL_CONSTASCII_USTRINGPARAM( "~Exit" ) ) ); -//depper SetMenuBar( &aMenuBar ); -//depper aToolBox.SetPosSizePixel( Point( 0,0 ), Size( 1100,35 )); -// aToolBox.Show(); -} - -// ----------------------------------------------------------------------- - -void MyWin::MouseMove( const MouseEvent& rMEvt ) -{ - WorkWindow::MouseMove( rMEvt ); -} - -// ----------------------------------------------------------------------- - -void MyWin::MouseButtonDown( const MouseEvent& rMEvt ) -{ - WorkWindow::MouseButtonDown( rMEvt ); -} - -// ----------------------------------------------------------------------- - -void MyWin::MouseButtonUp( const MouseEvent& rMEvt ) -{ - WorkWindow::MouseButtonUp( rMEvt ); -} - -// ----------------------------------------------------------------------- - -void MyWin::KeyInput( const KeyEvent& rKEvt ) -{ - WorkWindow::KeyInput( rKEvt ); -} - -// ----------------------------------------------------------------------- - -void MyWin::KeyUp( const KeyEvent& rKEvt ) -{ - WorkWindow::KeyUp( rKEvt ); -} - -// ----------------------------------------------------------------------- - -void MyWin::Paint( const Rectangle& rRect ) -{ - WorkWindow::Paint( rRect ); -} - -// ----------------------------------------------------------------------- - -void MyWin::Resize() -{ - ((MyApp*)GetpApp())->GetSolDep()->Resize(); - WorkWindow::Resize(); -} - -SAL_IMPLEMENT_MAIN() -{ - //Reference< XMultiServiceFactory > xMS; - - // for this to work make sure an <appname>.ini file is available, you can just copy soffice.ini - Reference< XComponentContext > xComponentContext = ::cppu::defaultBootstrap_InitialComponentContext(); - - //xMS = cppu::createRegistryServiceFactory( - // rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "applicat.rdb" ) ), sal_True ); - - Reference< XMultiServiceFactory > xMS( xComponentContext->getServiceManager(), UNO_QUERY); - - InitVCL( xMS ); - ::comphelper::setProcessServiceFactory(xMS); - com::sun::star::uno::Sequence< com::sun::star::uno::Any > aArgs(2); +
+void MyApp::Main()
+{
+#if defined(WNT)
+ pDebugFile = fopen( "fprintf.out", "w" );
+#endif
+
+ pMyApp = GetpApp();
+ MyWin aMainWin( NULL, WB_APP | WB_STDWORK );
+ pAppWindow = &aMainWin;
+ // pToolBarFrame = new FloatingWindow( aMainWin, WB_STDWORK );
+ //pToolBox = new ToolBox(pToolBarFrame,DtSodResId(TID_SOLDEP_MAIN));
+
+ pSolDep = new SolDep( &aMainWin );
+ pSolDep->Init();
+ aMainWin.SetText( String::CreateFromAscii( SOLDEPL_NAME ));
+ pSolDep->Hide();
+ aMainWin.Show();
+ Help aHelp;
+ SetHelp(&aHelp);
+ aHelp.EnableContextHelp();
+ aHelp.EnableQuickHelp();
+ Execute();
+ delete pResMgr;
+ delete pSolDep;
+}
+
+// -----------------------------------------------------------------------
+
+MyWin::MyWin( Window* pParent, WinBits nWinStyle ) :
+ WorkWindow( pParent, nWinStyle )//,aToolBox( this, DtSodResId(TID_SOLDEP_MAIN)),
+ // depper aTaskBarFrame(this, 0)
+{
+//depper aTaskBarFrame.EnableAlwaysOnTop();
+
+//depper aMenuBar.InsertItem( 1, XubString( RTL_CONSTASCII_USTRINGPARAM( "~Source" ) ) );
+//depper aMenuBar.InsertItem( 2, XubString( RTL_CONSTASCII_USTRINGPARAM( "~Exit" ) ) );
+//depper SetMenuBar( &aMenuBar );
+//depper aToolBox.SetPosSizePixel( Point( 0,0 ), Size( 1100,35 ));
+// aToolBox.Show();
+}
+
+// -----------------------------------------------------------------------
+
+void MyWin::MouseMove( const MouseEvent& rMEvt )
+{
+ WorkWindow::MouseMove( rMEvt );
+}
+
+// -----------------------------------------------------------------------
+
+void MyWin::MouseButtonDown( const MouseEvent& rMEvt )
+{
+ WorkWindow::MouseButtonDown( rMEvt );
+}
+
+// -----------------------------------------------------------------------
+
+void MyWin::MouseButtonUp( const MouseEvent& rMEvt )
+{
+ WorkWindow::MouseButtonUp( rMEvt );
+}
+
+// -----------------------------------------------------------------------
+
+void MyWin::KeyInput( const KeyEvent& rKEvt )
+{
+ WorkWindow::KeyInput( rKEvt );
+}
+
+// -----------------------------------------------------------------------
+
+void MyWin::KeyUp( const KeyEvent& rKEvt )
+{
+ WorkWindow::KeyUp( rKEvt );
+}
+
+// -----------------------------------------------------------------------
+
+void MyWin::Paint( const Rectangle& rRect )
+{
+ WorkWindow::Paint( rRect );
+}
+
+// -----------------------------------------------------------------------
+
+void MyWin::Resize()
+{
+ ((MyApp*)GetpApp())->GetSolDep()->Resize();
+ WorkWindow::Resize();
+}
+
+SAL_IMPLEMENT_MAIN()
+{
+ //Reference< XMultiServiceFactory > xMS;
+
+ // for this to work make sure an <appname>.ini file is available, you can just copy soffice.ini
+ Reference< XComponentContext > xComponentContext = ::cppu::defaultBootstrap_InitialComponentContext();
+
+ //xMS = cppu::createRegistryServiceFactory(
+ // rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "applicat.rdb" ) ), sal_True );
+
+ Reference< XMultiServiceFactory > xMS( xComponentContext->getServiceManager(), UNO_QUERY);
+
+ InitVCL( xMS );
+ ::comphelper::setProcessServiceFactory(xMS);
+ com::sun::star::uno::Sequence< com::sun::star::uno::Any > aArgs(2);
aArgs[0] <<= rtl::OUString::createFromAscii( UCB_CONFIGURATION_KEY1_LOCAL );
aArgs[1] <<= rtl::OUString::createFromAscii( UCB_CONFIGURATION_KEY2_OFFICE );
- +
::ucbhelper::ContentBroker::initialize( xMS, aArgs );
- - aMyApp.Main(); - DeInitVCL(); - return 0; -} +
+ aMyApp.Main();
+ DeInitVCL();
+ return 0;
+}
diff --git a/soldep/source/depapp.hxx b/soldep/source/depapp.hxx index 187907e87fe0..e6cb96a63832 100644 --- a/soldep/source/depapp.hxx +++ b/soldep/source/depapp.hxx @@ -35,7 +35,7 @@ #define EVENT_RESIZE 0x00000001 -#include <svtools/solar.hrc> +#include <svl/solar.hrc> #include <tools/resmgr.hxx> #include <bootstrp/sstring.hxx> #include <vcl/event.hxx> diff --git a/soldep/source/objwin.cxx b/soldep/source/objwin.cxx index 56eacedb4093..baa24d41fce0 100644 --- a/soldep/source/objwin.cxx +++ b/soldep/source/objwin.cxx @@ -1,487 +1,487 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * $RCSfile: objwin.cxx,v $ - * $Revision: 1.6 $ - * - * 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 <tools/list.hxx> -#include <tools/debug.hxx> -#include <vcl/svapp.hxx> -#include <vcl/help.hxx> +/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: objwin.cxx,v $
+ * $Revision: 1.6 $
+ *
+ * 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 <tools/list.hxx>
+#include <tools/debug.hxx>
+#include <vcl/svapp.hxx>
+#include <vcl/help.hxx>
#include <vcl/wall.hxx>
- -#include <soldep/objwin.hxx> -#include <soldep/depwin.hxx> -//#include "depapp.hxx" -#include <soldep/depper.hxx> -//#include "prjdep.hxx" -#include <soldep/connctr.hxx> -#include <stdio.h> - -static Color aDefaultColor = 0L; -static Wallpaper* pDefaultWallpaper = 0L; - -// Initialize static class member -BOOL ObjectWin::msbHideMode = FALSE; -ULONG ObjectWin::msnGlobalViewMask = 0; - - -UINT32 aColorMap[] = { - COL_TRANSPARENT, //MARKMODE_DEFAULT 0 - COL_GREEN, //MARKMODE_DEPENDING 1 - COL_RED, //MARKMODE_NEEDED 2 - COL_MAGENTA, //1+2 - COL_YELLOW, //MARKMODE_ACTIVATED 4 - COL_LIGHTGREEN, //1+4 - COL_LIGHTRED, //2+4 - COL_LIGHTMAGENTA, //1+2+4 - COL_BLUE, //MARKMODE_SELECTED 8 - COL_LIGHTGRAY, //1+8 - COL_CYAN, //2+8 - COL_LIGHTCYAN, //1+2+8 - COL_LIGHTBLUE, //4+8 - COL_BROWN, //1+4+8 - COL_BLACK, //2+4+8 - COL_BLUE //1+2+4+8 -}; - - -// -// class ObjectWin -// - -/*****************************************************************************/ -ObjectWin::ObjectWin( Window* pParent, WinBits nWinStyle ) -/*****************************************************************************/ - : Window( pParent, nWinStyle ), - msBodyText( "" ), - msTipText( "" ), - mnObjectId( 0 ), - mnMarkMode( 0 ), - mnViewMask( 0 ), - mbVisible( FALSE ), - mbMenuExecute( FALSE ), - mbVisited( FALSE ), - mnRootDist( 0 ), - mnHeadDist( 0 ), - mbFixed( FALSE ) -{ - SetBackground( Wallpaper( Color( COL_WHITE ))); - - aTipTimer.SetTimeout( 500 ); - aTipTimer.SetTimeoutHdl( - LINK( this, ObjectWin, TipHdl )); - - SetFont( Font( GetFont() ) ); +
+#include <soldep/objwin.hxx>
+#include <soldep/depwin.hxx>
+//#include "depapp.hxx"
+#include <soldep/depper.hxx>
+//#include "prjdep.hxx"
+#include <soldep/connctr.hxx>
+#include <stdio.h>
+
+static Color aDefaultColor = 0L;
+static Wallpaper* pDefaultWallpaper = 0L;
+
+// Initialize static class member
+BOOL ObjectWin::msbHideMode = FALSE;
+ULONG ObjectWin::msnGlobalViewMask = 0;
+
+
+UINT32 aColorMap[] = {
+ RGB_COLORDATA( 0xFF, 0xFF, 0x80 ), //MARKMODE_DEFAULT 0
+ COL_GREEN, //MARKMODE_DEPENDING 1
+ COL_RED, //MARKMODE_NEEDED 2
+ COL_MAGENTA, //1+2
+ COL_GRAY, //MARKMODE_ACTIVATED 4
+ COL_LIGHTGREEN, //1+4
+ COL_LIGHTRED, //2+4
+ COL_LIGHTMAGENTA, //1+2+4
+ COL_BLUE, //MARKMODE_SELECTED 8
+ COL_LIGHTGRAY, //1+8
+ COL_CYAN, //2+8
+ COL_LIGHTCYAN, //1+2+8
+ COL_LIGHTBLUE, //4+8
+ COL_BROWN, //1+4+8
+ COL_BLACK, //2+4+8
+ COL_BLUE //1+2+4+8
+};
+
+
+//
+// class ObjectWin
+//
+
+/*****************************************************************************/
+ObjectWin::ObjectWin( Window* pParent, WinBits nWinStyle )
+/*****************************************************************************/
+ : Window( pParent, nWinStyle ),
+ msBodyText( "" ),
+ msTipText( "" ),
+ mnObjectId( 0 ),
+ mnMarkMode( 0 ),
+ mnViewMask( 0 ),
+ mbVisible( FALSE ),
+ mbMenuExecute( FALSE ),
+ mbVisited( FALSE ),
+ mnRootDist( 0 ),
+ mnHeadDist( 0 ),
+ mbFixed( FALSE )
+{
+ SetBackground( Wallpaper( aColorMap[0] ));
+
+ aTipTimer.SetTimeout( 500 );
+ aTipTimer.SetTimeoutHdl(
+ LINK( this, ObjectWin, TipHdl ));
+
+ SetFont( Font( GetFont() ) );
Font aFont( GetFont() );
Size aSize = aFont.GetSize();
aFont.SetSize( aSize );
- SetFont( aFont ); - - EnableClipSiblings(); - SetZOrder( NULL, WINDOW_ZORDER_FIRST ); - mpPopup = new PopupMenu(); - mpPopup->InsertItem( OBJWIN_EDIT_TEXT, String::CreateFromAscii( "Details" )); - mpPopup->InsertItem( OBJWIN_ADD_CONNECTOR, String::CreateFromAscii( "New connection" )); - mpPopup->InsertItem( OBJWIN_REMOVE_WIN, String::CreateFromAscii( "Remove object" )); - mpPopup->InsertItem( OBJWIN_VIEW_CONTENT, String::CreateFromAscii( "View content" )); -// mpPopup->InsertSeparator(); - mpPopup->SetSelectHdl( LINK( this, ObjectWin, PopupSelected )); - mpPopup->SetDeactivateHdl( LINK( this, ObjectWin, PopupDeactivated )); - mnPopupStaticItems = mpPopup->GetItemCount(); - - if ( ! pDefaultWallpaper ) - { - pDefaultWallpaper = new Wallpaper( GetBackground() ); - aDefaultColor = GetTextColor(); - } - Hide(); -} - -/*****************************************************************************/ -ObjectWin::~ObjectWin() -/*****************************************************************************/ -{ - while ( mConnections.Count() > 0 ) - { - delete mConnections.GetObject( 0 ); - } -} - -void ObjectWin::SetHideMode(BOOL bHide) -{ - msbHideMode = bHide; - mConnections.GetObject(0)->SetHideMode(msbHideMode); -} - -BOOL ObjectWin::ToggleHideMode() -{ - msbHideMode = !msbHideMode; - mConnections.GetObject(0)->SetHideMode(msbHideMode); - return msbHideMode; -} - -/*****************************************************************************/ -void ObjectWin::SetViewMask( ULONG nMask ) -/*****************************************************************************/ -{ - mnViewMask = nMask; - // Compares - if ( mnViewMask & msnGlobalViewMask) { - mbVisible = TRUE; - Show(); - } - else { - Hide(); - mbVisible = FALSE; - } - for ( ULONG i = 0; i < mConnections.Count(); i++ ) - mConnections.GetObject( i )->UpdateVisibility(); -} - -/*****************************************************************************/ -void ObjectWin::SetBodyText( const ByteString& rNewString ) -/*****************************************************************************/ -{ - msBodyText = rNewString; -} - -/*****************************************************************************/ -ByteString& ObjectWin::GetBodyText() -/*****************************************************************************/ -{ - return msBodyText; -} - -/*****************************************************************************/ -void ObjectWin::SetTipText( const ByteString& rNewString ) -/*****************************************************************************/ -{ - msTipText = rNewString; -} - -/*****************************************************************************/ -ByteString& ObjectWin::GetTipText() -/*****************************************************************************/ -{ - return msTipText; -} - -/*****************************************************************************/ -Point ObjectWin::GetFixPoint( const Point& rRefPoint, BOOL bUseRealPos ) -/*****************************************************************************/ -{ - Point aLocalPoint; - if ( bUseRealPos ) - aLocalPoint = GetPosPixel(); - else - aLocalPoint = GetCalcPosPixel(); - - Size aLocalSize = GetSizePixel(); - Point aRetPoint; - - USHORT nRefX = aLocalPoint.X() + aLocalSize.Width() / 2 ; - USHORT nRefY = aLocalPoint.Y() + aLocalSize.Height() / 2 ; - - // always false... - //if ( nRefX < 0 ) nRefX = 0; - //if ( nRefY < 0 ) nRefY = 0; - - if ( rRefPoint.X() > nRefX ) - { - if ( rRefPoint.Y() > nRefY ) - { - if ( Abs( rRefPoint.X() - nRefX ) > Abs( rRefPoint.Y() - nRefY )) - { - aRetPoint.X() = aLocalPoint.X() + aLocalSize.Width(); - aRetPoint.Y() = nRefY; - } - else - { - aRetPoint.X() = nRefX; - aRetPoint.Y() = aLocalPoint.Y() + aLocalSize.Height(); - } - } - else - { - if ( Abs( rRefPoint.X() - nRefX ) > Abs( rRefPoint.Y() - nRefY )) - { - aRetPoint.X() = aLocalPoint.X() + aLocalSize.Width(); - aRetPoint.Y() = nRefY; - } - else - { - aRetPoint.X() = nRefX; - aRetPoint.Y() = aLocalPoint.Y(); - } - } - } - else - { - if ( rRefPoint.Y() > nRefY ) - { - if ( Abs( rRefPoint.X() - nRefX ) > Abs( rRefPoint.Y() - nRefY )) - { - aRetPoint.X() = aLocalPoint.X(); - aRetPoint.Y() = nRefY; - } - else - { - aRetPoint.X() = nRefX; - aRetPoint.Y() = aLocalPoint.Y() + aLocalSize.Height(); - } - } - else - { - if ( Abs( rRefPoint.X() - nRefX ) > Abs( rRefPoint.Y() - nRefY )) - { - aRetPoint.X() = aLocalPoint.X(); - aRetPoint.Y() = nRefY; - } - else - { - aRetPoint.X() = nRefX; - aRetPoint.Y() = aLocalPoint.Y(); - } - } - } - - return PixelToLogic(aRetPoint); - -} - -/*****************************************************************************/ -void ObjectWin::AddConnector( Connector* pNewCon ) -/*****************************************************************************/ -{ - mConnections.Insert( pNewCon ); -} - -/*****************************************************************************/ -BOOL ObjectWin::ConnectionExistsInAnyDirection( ObjectWin *pWin ) -/*****************************************************************************/ -{ - for ( ULONG i = 0; i < mConnections.Count(); i++ ) - if ( mConnections.GetObject( i )->GetOtherWin( this ) == pWin ) - return TRUE; - - return FALSE; -} - -/*****************************************************************************/ -void ObjectWin::RemoveConnector( Connector* pOldCon ) -/*****************************************************************************/ -{ - mConnections.Remove( pOldCon ); -} - -/*****************************************************************************/ -Connector* ObjectWin::GetConnector( ULONG nIndex ) -/*****************************************************************************/ -{ - ULONG nConCount = mConnections.Count(); - - if ( nIndex < nConCount ) - return mConnections.GetObject( nIndex ); - return NULL; -} - -/*****************************************************************************/ -Connector* ObjectWin::GetConnector( ULONG nStartId, ULONG nEndId ) -/*****************************************************************************/ -{ - if ( mnObjectId != nStartId ) - return NULL; - - USHORT i; - Connector* pCon; - ULONG nConCount = mConnections.Count(); - - for ( i = 0; i < nConCount; i++ ) - { - pCon = mConnections.GetObject( i ); - if ( pCon->GetOtherWin( this )->GetId() == nEndId ) - return pCon; - } - return NULL; -} - -void ObjectWin::SetAllConnectorsUnvisible() -{ - Connector* pCon; - ULONG nConCount = mConnections.Count(); - for ( ULONG i = 0; i < nConCount; i++ ) - { - pCon = mConnections.GetObject( i ); - if (pCon) pCon->SetVisibility( FALSE ); - } -} - -/*****************************************************************************/ -void ObjectWin::SetMarkMode( ULONG nMarkMode ) -/*****************************************************************************/ -{ - //Wallpaper aWallpaper; - - if ( nMarkMode == MARKMODE_DEFAULT ) - { - if ( pDefaultWallpaper ) - { - maObjWallpaper = GetBackground(); - maObjWallpaper.SetColor( pDefaultWallpaper->GetColor() ); - SetBackground( maObjWallpaper ); - SetTextColor( aDefaultColor ); - } - } - else - { - mnMarkMode |= nMarkMode; - maObjWallpaper = GetBackground(); - maObjWallpaper.SetColor( aColorMap[ mnMarkMode ] ); - SetBackground( maObjWallpaper ); - SetTextColor( COL_WHITE ); - } - - Invalidate(); -} - -/*****************************************************************************/ -void ObjectWin::UnsetMarkMode( ULONG nMarkMode ) -/*****************************************************************************/ -{ - //Wallpaper aWallpaper; - - ULONG nOldMode = mnMarkMode; - mnMarkMode &= ( !nMarkMode ); - - if ( nOldMode != mnMarkMode ) { - if ( mnMarkMode == MARKMODE_DEFAULT ) - { - if ( pDefaultWallpaper ) - { - maObjWallpaper = GetBackground(); - maObjWallpaper.SetColor( pDefaultWallpaper->GetColor() ); - SetBackground( maObjWallpaper ); - SetTextColor( aDefaultColor ); - } - } - else - { - maObjWallpaper = GetBackground(); - maObjWallpaper.SetColor( aColorMap[ mnMarkMode ] ); //mnMarkMode - SetBackground( maObjWallpaper ); - SetTextColor( COL_WHITE ); - } - Invalidate(); - } -} - -/*****************************************************************************/ -void ObjectWin::MarkNeeded( BOOL bReset ) -/*****************************************************************************/ -{ - Connector* pCon; - ObjectWin* pWin; - - ULONG nConCount = mConnections.Count(); - ULONG i; - - for ( i = 0; i < nConCount; i++ ) - { - pCon = mConnections.GetObject( i ); - if ( pCon && !pCon->IsStart( this)) - { - pWin = pCon->GetOtherWin( this ); - if ( pWin ) - { - if ( bReset ) - pWin->UnsetMarkMode( MARKMODE_NEEDED ); - else - pWin->SetMarkMode( MARKMODE_NEEDED ); - pWin->MarkNeeded( bReset ); // recursive call - } - } - } -} - -/*****************************************************************************/ -void ObjectWin::MarkDepending( BOOL bReset ) -/*****************************************************************************/ -{ - //if ( !bReset ) - // return; - - Connector* pCon; - ObjectWin* pWin; - - ULONG nConCount = mConnections.Count(); - ULONG i; - - for ( i = 0; i < nConCount; i++ ) - { - pCon = mConnections.GetObject( i ); - if ( pCon && pCon->IsStart( this) ) - { - pWin = pCon->GetOtherWin( this ); - if ( pWin ) - { - if ( bReset ) - pWin->UnsetMarkMode( MARKMODE_DEPENDING ); - else - pWin->SetMarkMode( MARKMODE_DEPENDING ); - pWin->MarkDepending( bReset ); // recursive call - } - } - } -} - -/*****************************************************************************/ -void ObjectWin::Paint( const Rectangle& rRect ) -/*****************************************************************************/ -{ - Size aWinSize = PixelToLogic( GetOutputSizePixel() ); - Size aTextSize; - ByteString sbt = msBodyText; //debug - //sbt += " "; //debug - //sbt += ByteString::CreateFromInt32(mnMarkMode); //debug - aTextSize.Width() = GetTextWidth( String( msBodyText, RTL_TEXTENCODING_UTF8 )); - aTextSize.Height() = GetTextHeight(); - Point aPos( aWinSize.Width() / 2 - aTextSize.Width() / 2, - aWinSize.Height() / 2 - aTextSize.Height() / 2 ); - - //DrawText( aPos , String( sBodyText, RTL_TEXTENCODING_UTF8 )); - if (msBodyText =="null") //don't paint this "window" - { - Hide(); - Invalidate(); - } else - DrawText( aPos , String( sbt, RTL_TEXTENCODING_UTF8 )); //debug -} - + SetFont( aFont );
+
+ EnableClipSiblings();
+ SetZOrder( NULL, WINDOW_ZORDER_FIRST );
+ mpPopup = new PopupMenu();
+ mpPopup->InsertItem( OBJWIN_EDIT_TEXT, String::CreateFromAscii( "Details" ));
+ mpPopup->InsertItem( OBJWIN_ADD_CONNECTOR, String::CreateFromAscii( "New connection" ));
+ mpPopup->InsertItem( OBJWIN_REMOVE_WIN, String::CreateFromAscii( "Remove object" ));
+ mpPopup->InsertItem( OBJWIN_VIEW_CONTENT, String::CreateFromAscii( "View content" ));
+// mpPopup->InsertSeparator();
+ mpPopup->SetSelectHdl( LINK( this, ObjectWin, PopupSelected ));
+ mpPopup->SetDeactivateHdl( LINK( this, ObjectWin, PopupDeactivated ));
+ mnPopupStaticItems = mpPopup->GetItemCount();
+
+ if ( ! pDefaultWallpaper )
+ {
+ pDefaultWallpaper = new Wallpaper( GetBackground() );
+ aDefaultColor = GetTextColor();
+ }
+ Hide();
+}
+
+/*****************************************************************************/
+ObjectWin::~ObjectWin()
+/*****************************************************************************/
+{
+ while ( mConnections.Count() > 0 )
+ {
+ delete mConnections.GetObject( 0 );
+ }
+}
+
+void ObjectWin::SetHideMode(BOOL bHide)
+{
+ msbHideMode = bHide;
+ mConnections.GetObject(0)->SetHideMode(msbHideMode);
+}
+
+BOOL ObjectWin::ToggleHideMode()
+{
+ msbHideMode = !msbHideMode;
+ mConnections.GetObject(0)->SetHideMode(msbHideMode);
+ return msbHideMode;
+}
+
+/*****************************************************************************/
+void ObjectWin::SetViewMask( ULONG nMask )
+/*****************************************************************************/
+{
+ mnViewMask = nMask;
+ // Compares
+ if ( mnViewMask & msnGlobalViewMask) {
+ mbVisible = TRUE;
+ Show();
+ }
+ else {
+ Hide();
+ mbVisible = FALSE;
+ }
+ for ( ULONG i = 0; i < mConnections.Count(); i++ )
+ mConnections.GetObject( i )->UpdateVisibility();
+}
+
+/*****************************************************************************/
+void ObjectWin::SetBodyText( const ByteString& rNewString )
+/*****************************************************************************/
+{
+ msBodyText = rNewString;
+}
+
+/*****************************************************************************/
+ByteString& ObjectWin::GetBodyText()
+/*****************************************************************************/
+{
+ return msBodyText;
+}
+
+/*****************************************************************************/
+void ObjectWin::SetTipText( const ByteString& rNewString )
+/*****************************************************************************/
+{
+ msTipText = rNewString;
+}
+
+/*****************************************************************************/
+ByteString& ObjectWin::GetTipText()
+/*****************************************************************************/
+{
+ return msTipText;
+}
+
+/*****************************************************************************/
+Point ObjectWin::GetFixPoint( const Point& rRefPoint, BOOL bUseRealPos )
+/*****************************************************************************/
+{
+ Point aLocalPoint;
+ if ( bUseRealPos )
+ aLocalPoint = GetPosPixel();
+ else
+ aLocalPoint = GetCalcPosPixel();
+
+ Size aLocalSize = GetSizePixel();
+ Point aRetPoint;
+
+ USHORT nRefX = aLocalPoint.X() + aLocalSize.Width() / 2 ;
+ USHORT nRefY = aLocalPoint.Y() + aLocalSize.Height() / 2 ;
+
+ // always false...
+ //if ( nRefX < 0 ) nRefX = 0;
+ //if ( nRefY < 0 ) nRefY = 0;
+
+ if ( rRefPoint.X() > nRefX )
+ {
+ if ( rRefPoint.Y() > nRefY )
+ {
+ if ( Abs( rRefPoint.X() - nRefX ) > Abs( rRefPoint.Y() - nRefY ))
+ {
+ aRetPoint.X() = aLocalPoint.X() + aLocalSize.Width();
+ aRetPoint.Y() = nRefY;
+ }
+ else
+ {
+ aRetPoint.X() = nRefX;
+ aRetPoint.Y() = aLocalPoint.Y() + aLocalSize.Height();
+ }
+ }
+ else
+ {
+ if ( Abs( rRefPoint.X() - nRefX ) > Abs( rRefPoint.Y() - nRefY ))
+ {
+ aRetPoint.X() = aLocalPoint.X() + aLocalSize.Width();
+ aRetPoint.Y() = nRefY;
+ }
+ else
+ {
+ aRetPoint.X() = nRefX;
+ aRetPoint.Y() = aLocalPoint.Y();
+ }
+ }
+ }
+ else
+ {
+ if ( rRefPoint.Y() > nRefY )
+ {
+ if ( Abs( rRefPoint.X() - nRefX ) > Abs( rRefPoint.Y() - nRefY ))
+ {
+ aRetPoint.X() = aLocalPoint.X();
+ aRetPoint.Y() = nRefY;
+ }
+ else
+ {
+ aRetPoint.X() = nRefX;
+ aRetPoint.Y() = aLocalPoint.Y() + aLocalSize.Height();
+ }
+ }
+ else
+ {
+ if ( Abs( rRefPoint.X() - nRefX ) > Abs( rRefPoint.Y() - nRefY ))
+ {
+ aRetPoint.X() = aLocalPoint.X();
+ aRetPoint.Y() = nRefY;
+ }
+ else
+ {
+ aRetPoint.X() = nRefX;
+ aRetPoint.Y() = aLocalPoint.Y();
+ }
+ }
+ }
+
+ return PixelToLogic(aRetPoint);
+
+}
+
+/*****************************************************************************/
+void ObjectWin::AddConnector( Connector* pNewCon )
+/*****************************************************************************/
+{
+ mConnections.Insert( pNewCon );
+}
+
+/*****************************************************************************/
+BOOL ObjectWin::ConnectionExistsInAnyDirection( ObjectWin *pWin )
+/*****************************************************************************/
+{
+ for ( ULONG i = 0; i < mConnections.Count(); i++ )
+ if ( mConnections.GetObject( i )->GetOtherWin( this ) == pWin )
+ return TRUE;
+
+ return FALSE;
+}
+
+/*****************************************************************************/
+void ObjectWin::RemoveConnector( Connector* pOldCon )
+/*****************************************************************************/
+{
+ mConnections.Remove( pOldCon );
+}
+
+/*****************************************************************************/
+Connector* ObjectWin::GetConnector( ULONG nIndex )
+/*****************************************************************************/
+{
+ ULONG nConCount = mConnections.Count();
+
+ if ( nIndex < nConCount )
+ return mConnections.GetObject( nIndex );
+ return NULL;
+}
+
+/*****************************************************************************/
+Connector* ObjectWin::GetConnector( ULONG nStartId, ULONG nEndId )
+/*****************************************************************************/
+{
+ if ( mnObjectId != nStartId )
+ return NULL;
+
+ USHORT i;
+ Connector* pCon;
+ ULONG nConCount = mConnections.Count();
+
+ for ( i = 0; i < nConCount; i++ )
+ {
+ pCon = mConnections.GetObject( i );
+ if ( pCon->GetOtherWin( this )->GetId() == nEndId )
+ return pCon;
+ }
+ return NULL;
+}
+
+void ObjectWin::SetAllConnectorsUnvisible()
+{
+ Connector* pCon;
+ ULONG nConCount = mConnections.Count();
+ for ( ULONG i = 0; i < nConCount; i++ )
+ {
+ pCon = mConnections.GetObject( i );
+ if (pCon) pCon->SetVisibility( FALSE );
+ }
+}
+
+/*****************************************************************************/
+void ObjectWin::SetMarkMode( ULONG nMarkMode )
+/*****************************************************************************/
+{
+ //Wallpaper aWallpaper;
+
+ if ( nMarkMode == MARKMODE_DEFAULT )
+ {
+ if ( pDefaultWallpaper )
+ {
+ maObjWallpaper = GetBackground();
+ maObjWallpaper.SetColor( pDefaultWallpaper->GetColor() );
+ SetBackground( maObjWallpaper );
+ SetTextColor( aDefaultColor );
+ }
+ }
+ else
+ {
+ mnMarkMode |= nMarkMode;
+ maObjWallpaper = GetBackground();
+ maObjWallpaper.SetColor( aColorMap[ mnMarkMode ] );
+ SetBackground( maObjWallpaper );
+ SetTextColor( COL_WHITE );
+ }
+
+ Invalidate();
+}
+
+/*****************************************************************************/
+void ObjectWin::UnsetMarkMode( ULONG nMarkMode )
+/*****************************************************************************/
+{
+ //Wallpaper aWallpaper;
+
+ ULONG nOldMode = mnMarkMode;
+ mnMarkMode &= ( !nMarkMode );
+
+ if ( nOldMode != mnMarkMode ) {
+ if ( mnMarkMode == MARKMODE_DEFAULT )
+ {
+ if ( pDefaultWallpaper )
+ {
+ maObjWallpaper = GetBackground();
+ maObjWallpaper.SetColor( pDefaultWallpaper->GetColor() );
+ SetBackground( maObjWallpaper );
+ SetTextColor( aDefaultColor );
+ }
+ }
+ else
+ {
+ maObjWallpaper = GetBackground();
+ maObjWallpaper.SetColor( aColorMap[ mnMarkMode ] ); //mnMarkMode
+ SetBackground( maObjWallpaper );
+ SetTextColor( COL_WHITE );
+ }
+ Invalidate();
+ }
+}
+
+/*****************************************************************************/
+void ObjectWin::MarkNeeded( BOOL bReset )
+/*****************************************************************************/
+{
+ Connector* pCon;
+ ObjectWin* pWin;
+
+ ULONG nConCount = mConnections.Count();
+ ULONG i;
+
+ for ( i = 0; i < nConCount; i++ )
+ {
+ pCon = mConnections.GetObject( i );
+ if ( pCon && !pCon->IsStart( this))
+ {
+ pWin = pCon->GetOtherWin( this );
+ if ( pWin )
+ {
+ if ( bReset )
+ pWin->UnsetMarkMode( MARKMODE_NEEDED );
+ else
+ pWin->SetMarkMode( MARKMODE_NEEDED );
+ pWin->MarkNeeded( bReset ); // recursive call
+ }
+ }
+ }
+}
+
+/*****************************************************************************/
+void ObjectWin::MarkDepending( BOOL bReset )
+/*****************************************************************************/
+{
+ //if ( !bReset )
+ // return;
+
+ Connector* pCon;
+ ObjectWin* pWin;
+
+ ULONG nConCount = mConnections.Count();
+ ULONG i;
+
+ for ( i = 0; i < nConCount; i++ )
+ {
+ pCon = mConnections.GetObject( i );
+ if ( pCon && pCon->IsStart( this) )
+ {
+ pWin = pCon->GetOtherWin( this );
+ if ( pWin )
+ {
+ if ( bReset )
+ pWin->UnsetMarkMode( MARKMODE_DEPENDING );
+ else
+ pWin->SetMarkMode( MARKMODE_DEPENDING );
+ pWin->MarkDepending( bReset ); // recursive call
+ }
+ }
+ }
+}
+
+/*****************************************************************************/
+void ObjectWin::Paint( const Rectangle& rRect )
+/*****************************************************************************/
+{
+ Size aWinSize = PixelToLogic( GetOutputSizePixel() );
+ Size aTextSize;
+ ByteString sbt = msBodyText; //debug
+ //sbt += " "; //debug
+ //sbt += ByteString::CreateFromInt32(mnMarkMode); //debug
+ aTextSize.Width() = GetTextWidth( String( msBodyText, RTL_TEXTENCODING_UTF8 ));
+ aTextSize.Height() = GetTextHeight();
+ Point aPos( aWinSize.Width() / 2 - aTextSize.Width() / 2,
+ aWinSize.Height() / 2 - aTextSize.Height() / 2 );
+
+ //DrawText( aPos , String( sBodyText, RTL_TEXTENCODING_UTF8 ));
+ if (msBodyText =="null") //don't paint this "window"
+ {
+ Hide();
+ Invalidate();
+ } else
+ DrawText( aPos , String( sbt, RTL_TEXTENCODING_UTF8 )); //debug
+}
+
void ObjectWin::DrawOutput( OutputDevice* pDevice, const Point& rOffset )
/*****************************************************************************/
{
@@ -508,291 +508,317 @@ void ObjectWin::DrawOutput( OutputDevice* pDevice, const Point& rOffset ) pDevice->SetTextColor( GetTextColor() );
pDevice->DrawText( aTextPos, String( sbt, RTL_TEXTENCODING_UTF8 ) );
}
-} - -/*****************************************************************************/ -void ObjectWin::MouseButtonDown( const MouseEvent& rMEvt ) -/*****************************************************************************/ -{ - //Notify Soldep to clear ObjectList - SetZOrder( NULL, WINDOW_ZORDER_FIRST ); - GrabFocus(); - - // workaround fuer vcl-bug -// GetWindow( WINDOW_REALPARENT)->Invalidate(); -// MyApp *pApp = (MyApp*)GetpApp(); -// SolDep *pSoldep = pApp->GetSolDep(); - - maMouseOffset = rMEvt.GetPosPixel(); - if ( rMEvt.IsLeft() ) - { - - if ( rMEvt.IsMod2() ) // alt + mouse click left - { - CallEventListeners( VCLEVENT_USER_MOUSEBUTTON_DOWN_ALT, this ); - } - else { - CallEventListeners( VCLEVENT_USER_MOUSEBUTTON_DOWN, this ); - } - if( rMEvt.GetClicks() == 2 ) - CallEventListeners( VCLEVENT_USER_MOUSEBUTTON_DOWN_DBLCLICK, this ); - else if ( !rMEvt.IsShift() && !((DepWin*)GetParent())->IsStartNewCon()) - { - //((DepWin*)GetParent())->SaveSelectedObjWin(&this); - CaptureMouse(); - } - } -} - -/*****************************************************************************/ -void ObjectWin::MouseButtonUp( const MouseEvent& rMEvt ) -/*****************************************************************************/ -{ - fprintf(stdout,"ObjectWin::MouseButtonUp\n"); - if ( rMEvt.IsLeft() ) - { - if ( rMEvt.IsShift() || ((DepWin*)GetParent())->IsStartNewCon()) - CallEventListeners( VCLEVENT_USER_MOUSEBUTTON_UP_SHFT, this ); -// ((DepWin*)GetParent())->NewConnector( this ); - else - { - CallEventListeners( VCLEVENT_USER_MOUSEBUTTON_UP, this ); - if ( IsMouseCaptured() ) ReleaseMouse(); - } - } - else if ( rMEvt.IsRight() ) - { - USHORT i; - - while ( mnPopupStaticItems < mpPopup->GetItemCount() ) - { - mpPopup->RemoveItem( mnPopupStaticItems ); - } - - if ( mConnections.Count()) { - mpPopup->InsertSeparator(); - - for( i = 0; i < mConnections.Count() ; i++ ) - { - mpPopup->InsertItem( mnPopupStaticItems + i + 1, String( ((mConnections.GetObject( i ))->GetOtherWin( this ))->GetBodyText(), RTL_TEXTENCODING_UTF8 )); - } - } - mbMenuExecute = TRUE; - mpPopup->Execute( GetParent(), rMEvt.GetPosPixel() + GetPosPixel()); - } -} - -/*****************************************************************************/ -void ObjectWin::MouseMove( const MouseEvent& rMEvt ) -/*****************************************************************************/ -{ - if ( IsMouseCaptured() ) - { - USHORT i; - - Point aNewWinPos( GetPosPixel() + rMEvt.GetPosPixel() - maMouseOffset ); - - aNewWinPos.X() = Max( 0L, aNewWinPos.X()); - aNewWinPos.Y() = Max( 0L, aNewWinPos.Y()); - SetPosPixel( aNewWinPos ); - //int t = mConnections.Count(); - - for ( i=0; i < mConnections.Count();i++) - { - mConnections.GetObject( i )->UpdatePosition( this ); - } - } - else // !IsMouseCaptured() - { - if ( rMEvt.IsLeaveWindow() ) - aTipTimer.Stop(); - else - aTipTimer.Start(); - - MouseEvent aNewMEvt( rMEvt.GetPosPixel() + GetPosPixel()); - - GetParent()->MouseMove( aNewMEvt ); //call to DepWin::MouseMove - } -} - -/*****************************************************************************/ -USHORT ObjectWin::Save( SvFileStream& rOutFile ) -/*****************************************************************************/ -{ - return 0; -} - -/*****************************************************************************/ -USHORT ObjectWin::Load( SvFileStream& rInFile ) -/*****************************************************************************/ -{ - return 0; -} - -/*****************************************************************************/ -void ObjectWin::SetId( ULONG nId ) -/*****************************************************************************/ -{ - mnObjectId = nId; -} - -/*****************************************************************************/ -ULONG ObjectWin::GetId() -/*****************************************************************************/ -{ - return mnObjectId; -} - -/*****************************************************************************/ -void ObjectWin::UpdateConnectors() -/*****************************************************************************/ -{ - USHORT i; - - for ( i = 0; i < mConnections.Count(); i++ ) - { - mConnections.GetObject( i )->UpdatePosition( this ); - } -} - -IMPL_LINK( ObjectWin, PopupSelected, PopupMenu*, mpPopup_l ) -{ - USHORT nItemId = mpPopup_l->GetCurItemId(); - - switch( nItemId ) - { - case OBJWIN_EDIT_TEXT : - DBG_ASSERT( FALSE,"edit"); - break; - case OBJWIN_REMOVE_WIN : -// DBG_ASSERT( FALSE,"remove"); -// DBG_ASSERT( mpDepperDontuseme,"remove"); - //mpDepperDontuseme->RemoveObject(mpDepperDontuseme->mpObjectList, ( USHORT ) GetId()); - break; - case OBJWIN_ADD_CONNECTOR : -// DBG_ASSERT( FALSE,"add con"); - ((DepWin*)GetParent())->NewConnector( this ); - break; - case OBJWIN_VIEW_CONTENT : -// DBG_ASSERT( FALSE,"view cnt"); -// mpDepperDontuseme->ViewContent( msBodyText ); -// TBD: CallEventListener - break; - default : -// DBG_ASSERT( FALSE, String (nItemId) ); - Connector* pCon = mConnections.GetObject( nItemId - mnPopupStaticItems - 1); - pCon = 0; -// delete pCon; -// mpDepperDontuseme->RemoveConnector( pCon->GetStartId(), pCon->GetEndId()); -// TBD: CallEventListener - - break; - } - return 0; -} - -/*****************************************************************************/ -IMPL_LINK( ObjectWin, TipHdl, void *, EMTY_ARG ) -/*****************************************************************************/ -{ - aTipTimer.Stop(); - - if ( msTipText.Len()) { - Point aPos( GetpApp()->GetAppWindow()->GetPointerPosPixel()); - Help::ShowBalloon( GetpApp()->GetAppWindow(), - Point( aPos.X(), aPos.Y()), - String( msTipText, RTL_TEXTENCODING_UTF8 )); - } - return 0; -} - -/*****************************************************************************/ -//void ObjectWin::GetFocus() -/*****************************************************************************/ -//{ - //SetMarkMode( MARKMODE_SELECTED ); -//} - -/*****************************************************************************/ -void ObjectWin::LoseFocus() -/*****************************************************************************/ -{ - if ( !mbMenuExecute && !msbHideMode ) { - UnsetMarkMode( MARKMODE_SELECTED ); - UnsetMarkMode( MARKMODE_ACTIVATED ); - MarkNeeded( TRUE ); - MarkDepending( TRUE ); - } - else - mbMenuExecute = FALSE; -} - -/*****************************************************************************/ -IMPL_LINK( ObjectWin, PopupDeactivated, PopupMenu*, mpPopup_l ) -/*****************************************************************************/ -{ - mbMenuExecute = FALSE; - - if ( !HasFocus()) { - UnsetMarkMode( MARKMODE_SELECTED ); - UnsetMarkMode( MARKMODE_ACTIVATED ); - MarkNeeded( TRUE ); - MarkDepending( TRUE ); - } - - return 0; -} - -/*****************************************************************************/ -void ObjectWin::Command( const CommandEvent& rEvent) -/*****************************************************************************/ -{ - fprintf(stdout, "ObjectWin::Command"); -// mpDepperDontuseme->GetGraphWin()->Command( rEvent ); -// TBD: CallEventListener - -} - -/*****************************************************************************/ -/*****************************************************************************/ - -ObjectList::ObjectList() : ObjWinList() -{ -} - -/*****************************************************************************/ -void ObjectList::ResetSelectedObject() -/*****************************************************************************/ -{ -// return; - - ULONG nCount_l = Count(); - ObjectWin* pObjectWin = NULL; - for (ULONG i=0; i < nCount_l; i++ ) - { - pObjectWin = GetObject( i ); - pObjectWin->UnsetMarkMode( MARKMODE_SELECTED ); - pObjectWin->UnsetMarkMode( MARKMODE_NEEDED ); - pObjectWin->UnsetMarkMode( MARKMODE_DEPENDING ); - pObjectWin->SetActualWallpaper(*pDefaultWallpaper); - pObjectWin->SetAllConnectorsUnvisible(); - } - return; -} - -/*****************************************************************************/ -ObjectWin* ObjectList::GetPtrByName( const ByteString& rText ) -/*****************************************************************************/ -{ - ULONG i = 0; - ULONG nCount_l = Count(); - ObjectWin* pObjectWin = NULL; - while ( i < nCount_l ) - { - pObjectWin = GetObject( i ); - ByteString sPrj = pObjectWin->GetBodyText(); - if (sPrj == rText) return pObjectWin; - i++; - } - return 0; +}
+
+/*****************************************************************************/
+void ObjectWin::MouseButtonDown( const MouseEvent& rMEvt )
+/*****************************************************************************/
+{
+ //Notify Soldep to clear ObjectList
+ SetZOrder( NULL, WINDOW_ZORDER_FIRST );
+ GrabFocus();
+
+ // workaround fuer vcl-bug
+// GetWindow( WINDOW_REALPARENT)->Invalidate();
+// MyApp *pApp = (MyApp*)GetpApp();
+// SolDep *pSoldep = pApp->GetSolDep();
+
+ maMouseOffset = rMEvt.GetPosPixel();
+ if ( rMEvt.IsLeft() )
+ {
+
+ if ( rMEvt.IsMod2() ) // alt + mouse click left
+ {
+ CallEventListeners( VCLEVENT_USER_MOUSEBUTTON_DOWN_ALT, this );
+ }
+ else {
+ CallEventListeners( VCLEVENT_USER_MOUSEBUTTON_DOWN, this );
+ }
+ if( rMEvt.GetClicks() == 2 )
+ CallEventListeners( VCLEVENT_USER_MOUSEBUTTON_DOWN_DBLCLICK, this );
+ else if ( !rMEvt.IsShift() && !((DepWin*)GetParent())->IsStartNewCon())
+ {
+ //((DepWin*)GetParent())->SaveSelectedObjWin(&this);
+ CaptureMouse();
+ }
+ }
+}
+
+/*****************************************************************************/
+void ObjectWin::MouseButtonUp( const MouseEvent& rMEvt )
+/*****************************************************************************/
+{
+ fprintf(stdout,"ObjectWin::MouseButtonUp\n");
+ if ( rMEvt.IsLeft() )
+ {
+ if ( rMEvt.IsShift() || ((DepWin*)GetParent())->IsStartNewCon())
+ CallEventListeners( VCLEVENT_USER_MOUSEBUTTON_UP_SHFT, this );
+// ((DepWin*)GetParent())->NewConnector( this );
+ else
+ {
+ CallEventListeners( VCLEVENT_USER_MOUSEBUTTON_UP, this );
+ if ( IsMouseCaptured() ) ReleaseMouse();
+ }
+ }
+ else if ( rMEvt.IsRight() )
+ {
+ USHORT i;
+
+ while ( mnPopupStaticItems < mpPopup->GetItemCount() )
+ {
+ mpPopup->RemoveItem( mnPopupStaticItems );
+ }
+
+ if ( mConnections.Count()) {
+ mpPopup->InsertSeparator();
+
+ for( i = 0; i < mConnections.Count() ; i++ )
+ {
+ mpPopup->InsertItem( mnPopupStaticItems + i + 1, String( ((mConnections.GetObject( i ))->GetOtherWin( this ))->GetBodyText(), RTL_TEXTENCODING_UTF8 ));
+ }
+ }
+ mbMenuExecute = TRUE;
+ mpPopup->Execute( GetParent(), rMEvt.GetPosPixel() + GetPosPixel());
+ }
+}
+
+/*****************************************************************************/
+void ObjectWin::MouseMove( const MouseEvent& rMEvt )
+/*****************************************************************************/
+{
+ if ( IsMouseCaptured() )
+ {
+ USHORT i;
+
+ Point aNewWinPos( GetPosPixel() + rMEvt.GetPosPixel() - maMouseOffset );
+
+ aNewWinPos.X() = Max( 0L, aNewWinPos.X());
+ aNewWinPos.Y() = Max( 0L, aNewWinPos.Y());
+ SetPosPixel( aNewWinPos );
+ //int t = mConnections.Count();
+
+ for ( i=0; i < mConnections.Count();i++)
+ {
+ mConnections.GetObject( i )->UpdatePosition( this );
+ }
+ }
+ else // !IsMouseCaptured()
+ {
+ if ( rMEvt.IsLeaveWindow() )
+ aTipTimer.Stop();
+ else
+ aTipTimer.Start();
+
+ MouseEvent aNewMEvt( rMEvt.GetPosPixel() + GetPosPixel());
+
+ GetParent()->MouseMove( aNewMEvt ); //call to DepWin::MouseMove
+ }
+}
+
+/*****************************************************************************/
+USHORT ObjectWin::Save( SvFileStream& rOutFile )
+/*****************************************************************************/
+{
+ return 0;
+}
+
+/*****************************************************************************/
+USHORT ObjectWin::Load( SvFileStream& rInFile )
+/*****************************************************************************/
+{
+ return 0;
+}
+
+/*****************************************************************************/
+void ObjectWin::SetId( ULONG nId )
+/*****************************************************************************/
+{
+ mnObjectId = nId;
+}
+
+/*****************************************************************************/
+ULONG ObjectWin::GetId()
+/*****************************************************************************/
+{
+ return mnObjectId;
+}
+
+/*****************************************************************************/
+void ObjectWin::UpdateConnectors()
+/*****************************************************************************/
+{
+ USHORT i;
+
+ for ( i = 0; i < mConnections.Count(); i++ )
+ {
+ mConnections.GetObject( i )->UpdatePosition( this );
+ }
+}
+
+IMPL_LINK( ObjectWin, PopupSelected, PopupMenu*, mpPopup_l )
+{
+ USHORT nItemId = mpPopup_l->GetCurItemId();
+
+ switch( nItemId )
+ {
+ case OBJWIN_EDIT_TEXT :
+ DBG_ASSERT( FALSE,"edit");
+ break;
+ case OBJWIN_REMOVE_WIN :
+// DBG_ASSERT( FALSE,"remove");
+// DBG_ASSERT( mpDepperDontuseme,"remove");
+ //mpDepperDontuseme->RemoveObject(mpDepperDontuseme->mpObjectList, ( USHORT ) GetId());
+ break;
+ case OBJWIN_ADD_CONNECTOR :
+// DBG_ASSERT( FALSE,"add con");
+ ((DepWin*)GetParent())->NewConnector( this );
+ break;
+ case OBJWIN_VIEW_CONTENT :
+// DBG_ASSERT( FALSE,"view cnt");
+// mpDepperDontuseme->ViewContent( msBodyText );
+// TBD: CallEventListener
+ break;
+ default :
+// DBG_ASSERT( FALSE, String (nItemId) );
+ Connector* pCon = mConnections.GetObject( nItemId - mnPopupStaticItems - 1);
+ pCon = 0;
+// delete pCon;
+// mpDepperDontuseme->RemoveConnector( pCon->GetStartId(), pCon->GetEndId());
+// TBD: CallEventListener
+
+ break;
+ }
+ return 0;
+}
+
+/*****************************************************************************/
+IMPL_LINK( ObjectWin, TipHdl, void *, EMTY_ARG )
+/*****************************************************************************/
+{
+ aTipTimer.Stop();
+
+ if ( msTipText.Len()) {
+ Point aPos( GetpApp()->GetAppWindow()->GetPointerPosPixel());
+ Help::ShowBalloon( GetpApp()->GetAppWindow(),
+ Point( aPos.X(), aPos.Y()),
+ String( msTipText, RTL_TEXTENCODING_UTF8 ));
+ }
+ return 0;
+}
+
+/*****************************************************************************/
+//void ObjectWin::GetFocus()
+/*****************************************************************************/
+//{
+ //SetMarkMode( MARKMODE_SELECTED );
+//}
+
+/*****************************************************************************/
+void ObjectWin::LoseFocus()
+/*****************************************************************************/
+{
+ if ( !mbMenuExecute && !msbHideMode ) {
+ UnsetMarkMode( MARKMODE_SELECTED );
+ UnsetMarkMode( MARKMODE_ACTIVATED );
+ MarkNeeded( TRUE );
+ MarkDepending( TRUE );
+ }
+ else
+ mbMenuExecute = FALSE;
+}
+
+/*****************************************************************************/
+IMPL_LINK( ObjectWin, PopupDeactivated, PopupMenu*, mpPopup_l )
+/*****************************************************************************/
+{
+ mbMenuExecute = FALSE;
+
+ if ( !HasFocus()) {
+ UnsetMarkMode( MARKMODE_SELECTED );
+ UnsetMarkMode( MARKMODE_ACTIVATED );
+ MarkNeeded( TRUE );
+ MarkDepending( TRUE );
+ }
+
+ return 0;
+}
+
+/*****************************************************************************/
+void ObjectWin::Command( const CommandEvent& rEvent)
+/*****************************************************************************/
+{
+ fprintf(stdout, "ObjectWin::Command");
+// mpDepperDontuseme->GetGraphWin()->Command( rEvent );
+// TBD: CallEventListener
+
+}
+
+/*****************************************************************************/
+/*****************************************************************************/
+
+ObjectList::ObjectList() : ObjWinList()
+{
+}
+
+/*****************************************************************************/
+void ObjectList::ResetSelectedObject()
+/*****************************************************************************/
+{
+// return;
+
+ ULONG nCount_l = Count();
+ ObjectWin* pObjectWin = NULL;
+ for (ULONG i=0; i < nCount_l; i++ )
+ {
+ pObjectWin = GetObject( i );
+ pObjectWin->UnsetMarkMode( MARKMODE_SELECTED );
+ pObjectWin->UnsetMarkMode( MARKMODE_NEEDED );
+ pObjectWin->UnsetMarkMode( MARKMODE_DEPENDING );
+ pObjectWin->SetActualWallpaper(*pDefaultWallpaper);
+ pObjectWin->SetAllConnectorsUnvisible();
+ }
+ return;
+}
+
+/*****************************************************************************/
+ObjectWin* ObjectList::GetPtrByName( const ByteString& rText )
+/*****************************************************************************/
+{
+ ULONG i = 0;
+ ULONG nCount_l = Count();
+ ObjectWin* pObjectWin = NULL;
+ while ( i < nCount_l )
+ {
+ pObjectWin = GetObject( i );
+ ByteString sPrj = pObjectWin->GetBodyText();
+ if (sPrj == rText) return pObjectWin;
+ i++;
+ }
+ return 0;
+}
+
+ObjectList* ObjectList::FindTopLevelModules()
+{
+ ObjectList* pList = new ObjectList;
+ for ( USHORT i=0; i<Count(); i++ )
+ {
+ ObjectWin* pObjectWin = GetObject( i );
+ if ( pObjectWin->IsTop() )
+ pList->Insert( pObjectWin );
+ }
+
+ return pList;
+}
+
+BOOL ObjectWin::IsTop()
+{
+ ULONG nConCount = mConnections.Count();
+ for ( ULONG i = 0; i < nConCount; i++ )
+ {
+ Connector* pCon = mConnections.GetObject( i );
+ if ( pCon && pCon->IsStart( this) )
+ return FALSE;
+ }
+
+ return TRUE;
}
\ No newline at end of file diff --git a/soldep/source/soldep.cxx b/soldep/source/soldep.cxx index 6c6abf80c33b..bc4d096f764e 100644 --- a/soldep/source/soldep.cxx +++ b/soldep/source/soldep.cxx @@ -1,243 +1,243 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * $RCSfile: soldep.cxx,v $ - * $Revision: 1.9 $ - * - * 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. - * - ************************************************************************/ -//TBD: ToolBox handling prjview/back - -#include <osl/file.hxx> -#include <rtl/ustring.hxx> -#include <tools/debug.hxx> -#include <bootstrp/sstring.hxx> -#include <svtools/filedlg.hxx> -#include <tools/iparser.hxx> -#include <tools/geninfo.hxx> +/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: soldep.cxx,v $
+ * $Revision: 1.9 $
+ *
+ * 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.
+ *
+ ************************************************************************/
+//TBD: ToolBox handling prjview/back
+
+#include <osl/file.hxx>
+#include <rtl/ustring.hxx>
+#include <tools/debug.hxx>
+#include <bootstrp/sstring.hxx>
+#include <svtools/filedlg.hxx>
+#include <tools/iparser.hxx>
+#include <tools/geninfo.hxx>
#include <vcl/gdimtf.hxx>
#include <vcl/bitmap.hxx>
-#include <appdef.hxx> -#include "time.h" -#include <soldep/depper.hxx> -#include <soldep/soldep.hxx> -#include <soldep/soldlg.hxx> -#include "dtsodcmp.hrc" - -IMPLEMENT_HASHTABLE_OWNER( SolIdMapper, ByteString, ULONG* ); -//IMPLEMENT_HASHTABLE_OWNER( PrjIdMapper, ByteString, ULONG* ); -#define EVENT_RESIZE 0x00000001 -#define MIN(a,b) (a)<(b)?(a):(b) -#define MAX(a,b) (a)>(b)?(a):(b) - - -//ByteString sDelimiterLine("#=========================================================================="); - - -// -// class SolDep -// - -/*****************************************************************************/ -SolDep::SolDep( Window* pBaseWindow ) -/*****************************************************************************/ - : Depper( pBaseWindow ), - mbBServer(FALSE), - mpTravellerList( NULL ), - mbIsHide( FALSE ) -{ - mnSolWinCount = 0; - mnSolLastId = 0; -// mpPrjIdMapper = new SolIdMapper( 63997 ); - maTaskBarFrame.EnableAlwaysOnTop(); - maTaskBarFrame.Show(); - maToolBox.SetPosSizePixel( Point( 0,0 ), Size( 1100,35 )); - maToolBox.SetSelectHdl( LINK ( this, SolDep, ToolSelect )); - maToolBox.Show(); - - mpBaseWin->AddChildEventListener( LINK( this, SolDep, ChildWindowEventListener )); - - // Kontext-Menue (gehrt zu soldep.cxx) - InitContextMenueMainWnd(); - InitContextMenuePrjViewWnd( mpBasePrjWin ); -} - -/*****************************************************************************/ -SolDep::~SolDep() -/*****************************************************************************/ -{ - mpBaseWin->RemoveChildEventListener( LINK( this, SolDep, ChildWindowEventListener ) ); - delete mpSolIdMapper; - delete mpStarWriter; - delete mpStandLst; -} - -/*****************************************************************************/ -void SolDep::Init() -/*****************************************************************************/ -{ - InformationParser aParser; - String sStandLst( GetDefStandList(), RTL_TEXTENCODING_ASCII_US ); - mpStandLst = aParser.Execute( sStandLst ); - ByteString aUpdater( getenv("UPDATER") ); - if ( mpStandLst && (aUpdater == "YES") ) { - if ( GetVersion() ) - ReadSource( TRUE ); - } else - { - ReadSource(); // if stand.lst isn't available - } -} - -/*****************************************************************************/ -void SolDep::Init( ByteString &rVersion, GenericInformationList *pVersionList ) -/*****************************************************************************/ -{ - // Interface for bs - mbBServer=TRUE; - if ( pVersionList ) - mpStandLst = new GenericInformationList( *pVersionList ); - else { - InformationParser aParser; - String sStandLst( GetDefStandList(), RTL_TEXTENCODING_ASCII_US ); - mpStandLst = aParser.Execute( sStandLst ); - } - if ( mpStandLst ) { - msVersionMajor = ByteString( rVersion ); - ReadSource(TRUE); //call from build server set UPDATER to TRUE - } -} - -/*****************************************************************************/ -IMPL_LINK( SolDep, ChildWindowEventListener, VclSimpleEvent*, pEvent ) -/*****************************************************************************/ -{ - if ( pEvent && pEvent->ISA( VclWindowEvent ) ) - { - ProcessChildWindowEvent( *static_cast< VclWindowEvent* >( pEvent ) ); - } - return 0; -} - - -/*****************************************************************************/ -void SolDep::ProcessChildWindowEvent( const VclWindowEvent& _rVclWindowEvent ) -/*****************************************************************************/ -{ - Window* pChildWin = _rVclWindowEvent.GetWindow(); -// Window* pParentWin = pChildWin->GetParent(); -//Resize(); - if ( isAlive() ) - { - ULONG id = _rVclWindowEvent.GetId(); - switch ( id ) - { - case VCLEVENT_USER_MOUSEBUTTON_DOWN: - { - ObjectWin* pObjWin = dynamic_cast<ObjectWin*>(pChildWin); - if( pObjWin ) - { - // handle mouse click on ObjectWin object - ObjectWin* pWin = (ObjectWin*) pChildWin; - //GetObjectList()->ResetSelectedObject(); - if (IsHideMode()) // simple mouse click left - { - pWin->CaptureMouse(); - pWin->SetMarkMode( MARKMODE_SELECTED ); - pWin->MarkNeeded(); - pWin->MarkDepending(); - pWin->Invalidate(); - } else - { - pWin->LoseFocus(); - pWin->SetMarkMode( MARKMODE_SELECTED ); - pWin->UnsetMarkMode( MARKMODE_ACTIVATED ); - pWin->MarkNeeded( TRUE ); - pWin->MarkDepending( TRUE ); - } - - } - } - break; - case VCLEVENT_USER_MOUSEBUTTON_DOWN_ALT: - { - ObjectWin* pObjWin = dynamic_cast<ObjectWin*>(pChildWin); - if( pObjWin ) - { - ObjectWin* pWin = (ObjectWin*) pChildWin; - MarkObjects( pWin ); - } - } - break; - case VCLEVENT_USER_MOUSEBUTTON_DOWN_DBLCLICK: - { - ObjectWin* pObjWin = dynamic_cast<ObjectWin*>(pChildWin); - if( pObjWin ) - { - if (IsHideMode()) ToggleHideDependency(); - ByteString text = ((ObjectWin*) pChildWin)->GetBodyText(); - ViewContent(text); - } - } - break; - case VCLEVENT_USER_MOUSEBUTTON_UP_SHFT: - { - ObjectWin* pObjWin = dynamic_cast<ObjectWin*>(pChildWin); - if( pObjWin ) - { - ObjectWin* pWin = (ObjectWin*) pChildWin; - GetDepWin()->NewConnector( pWin ); - } - } - break; - case VCLEVENT_USER_MOUSEBUTTON_UP: - { - ObjectWin* pObjWin = dynamic_cast<ObjectWin*>(pChildWin); - if( pObjWin ) - { - ObjectWin* pWin = (ObjectWin*) pChildWin; - pWin->ReleaseMouse(); - pWin->SetMarkMode(MARKMODE_SELECTED); - GetDepWin()->Invalidate(); - } - } - break; - } // switch - } // if isAlive - //fprintf(stdout,"BLA::Resize: %d\n",pChildWin); -} - -/*****************************************************************************/ -IMPL_LINK( SolDep, ToolSelect, SoldepToolBox* , pBox) -/*****************************************************************************/ -{ - USHORT nItemId = pBox->GetCurItemId(); - switch ( nItemId ) - { - case TID_SOLDEP_FIND: - FindProject(); - break; +#include <appdef.hxx>
+#include "time.h"
+#include <soldep/depper.hxx>
+#include <soldep/soldep.hxx>
+#include <soldep/soldlg.hxx>
+#include "dtsodcmp.hrc"
+
+IMPLEMENT_HASHTABLE_OWNER( SolIdMapper, ByteString, ULONG* );
+//IMPLEMENT_HASHTABLE_OWNER( PrjIdMapper, ByteString, ULONG* );
+#define EVENT_RESIZE 0x00000001
+#define MIN(a,b) (a)<(b)?(a):(b)
+#define MAX(a,b) (a)>(b)?(a):(b)
+
+
+//ByteString sDelimiterLine("#==========================================================================");
+
+
+//
+// class SolDep
+//
+
+/*****************************************************************************/
+SolDep::SolDep( Window* pBaseWindow )
+/*****************************************************************************/
+ : Depper( pBaseWindow ),
+ mbBServer(FALSE),
+ mpTravellerList( NULL ),
+ mbIsHide( FALSE )
+{
+ mnSolWinCount = 0;
+ mnSolLastId = 0;
+// mpPrjIdMapper = new SolIdMapper( 63997 );
+ maTaskBarFrame.EnableAlwaysOnTop();
+ maTaskBarFrame.Show();
+ maToolBox.SetPosSizePixel( Point( 0,0 ), Size( 1100,35 ));
+ maToolBox.SetSelectHdl( LINK ( this, SolDep, ToolSelect ));
+ maToolBox.Show();
+
+ mpBaseWin->AddChildEventListener( LINK( this, SolDep, ChildWindowEventListener ));
+
+ // Kontext-Menue (gehrt zu soldep.cxx)
+ InitContextMenueMainWnd();
+ InitContextMenuePrjViewWnd( mpBasePrjWin );
+}
+
+/*****************************************************************************/
+SolDep::~SolDep()
+/*****************************************************************************/
+{
+ mpBaseWin->RemoveChildEventListener( LINK( this, SolDep, ChildWindowEventListener ) );
+ delete mpSolIdMapper;
+ delete mpStarWriter;
+ delete mpStandLst;
+}
+
+/*****************************************************************************/
+void SolDep::Init()
+/*****************************************************************************/
+{
+ InformationParser aParser;
+ String sStandLst( GetDefStandList(), RTL_TEXTENCODING_ASCII_US );
+ mpStandLst = aParser.Execute( sStandLst );
+ ByteString aUpdater( getenv("UPDATER") );
+ if ( mpStandLst && (aUpdater == "YES") ) {
+ if ( GetVersion() )
+ ReadSource( TRUE );
+ } else
+ {
+ ReadSource(); // if stand.lst isn't available
+ }
+}
+
+/*****************************************************************************/
+void SolDep::Init( ByteString &rVersion, GenericInformationList *pVersionList )
+/*****************************************************************************/
+{
+ // Interface for bs
+ mbBServer=TRUE;
+ if ( pVersionList )
+ mpStandLst = new GenericInformationList( *pVersionList );
+ else {
+ InformationParser aParser;
+ String sStandLst( GetDefStandList(), RTL_TEXTENCODING_ASCII_US );
+ mpStandLst = aParser.Execute( sStandLst );
+ }
+ if ( mpStandLst ) {
+ msVersionMajor = ByteString( rVersion );
+ ReadSource(TRUE); //call from build server set UPDATER to TRUE
+ }
+}
+
+/*****************************************************************************/
+IMPL_LINK( SolDep, ChildWindowEventListener, VclSimpleEvent*, pEvent )
+/*****************************************************************************/
+{
+ if ( pEvent && pEvent->ISA( VclWindowEvent ) )
+ {
+ ProcessChildWindowEvent( *static_cast< VclWindowEvent* >( pEvent ) );
+ }
+ return 0;
+}
+
+
+/*****************************************************************************/
+void SolDep::ProcessChildWindowEvent( const VclWindowEvent& _rVclWindowEvent )
+/*****************************************************************************/
+{
+ Window* pChildWin = _rVclWindowEvent.GetWindow();
+// Window* pParentWin = pChildWin->GetParent();
+//Resize();
+ if ( isAlive() )
+ {
+ ULONG id = _rVclWindowEvent.GetId();
+ switch ( id )
+ {
+ case VCLEVENT_USER_MOUSEBUTTON_DOWN:
+ {
+ ObjectWin* pObjWin = dynamic_cast<ObjectWin*>(pChildWin);
+ if( pObjWin )
+ {
+ // handle mouse click on ObjectWin object
+ ObjectWin* pWin = (ObjectWin*) pChildWin;
+ //GetObjectList()->ResetSelectedObject();
+ if (IsHideMode()) // simple mouse click left
+ {
+ pWin->CaptureMouse();
+ pWin->SetMarkMode( MARKMODE_SELECTED );
+ pWin->MarkNeeded();
+ pWin->MarkDepending();
+ pWin->Invalidate();
+ } else
+ {
+ pWin->LoseFocus();
+ pWin->SetMarkMode( MARKMODE_SELECTED );
+ pWin->UnsetMarkMode( MARKMODE_ACTIVATED );
+ pWin->MarkNeeded( TRUE );
+ pWin->MarkDepending( TRUE );
+ }
+
+ }
+ }
+ break;
+ case VCLEVENT_USER_MOUSEBUTTON_DOWN_ALT:
+ {
+ ObjectWin* pObjWin = dynamic_cast<ObjectWin*>(pChildWin);
+ if( pObjWin )
+ {
+ ObjectWin* pWin = (ObjectWin*) pChildWin;
+ MarkObjects( pWin );
+ }
+ }
+ break;
+ case VCLEVENT_USER_MOUSEBUTTON_DOWN_DBLCLICK:
+ {
+ ObjectWin* pObjWin = dynamic_cast<ObjectWin*>(pChildWin);
+ if( pObjWin )
+ {
+ if (IsHideMode()) ToggleHideDependency();
+ ByteString text = ((ObjectWin*) pChildWin)->GetBodyText();
+ ViewContent(text);
+ }
+ }
+ break;
+ case VCLEVENT_USER_MOUSEBUTTON_UP_SHFT:
+ {
+ ObjectWin* pObjWin = dynamic_cast<ObjectWin*>(pChildWin);
+ if( pObjWin )
+ {
+ ObjectWin* pWin = (ObjectWin*) pChildWin;
+ GetDepWin()->NewConnector( pWin );
+ }
+ }
+ break;
+ case VCLEVENT_USER_MOUSEBUTTON_UP:
+ {
+ ObjectWin* pObjWin = dynamic_cast<ObjectWin*>(pChildWin);
+ if( pObjWin )
+ {
+ ObjectWin* pWin = (ObjectWin*) pChildWin;
+ pWin->ReleaseMouse();
+ pWin->SetMarkMode(MARKMODE_SELECTED);
+ GetDepWin()->Invalidate();
+ }
+ }
+ break;
+ } // switch
+ } // if isAlive
+ //fprintf(stdout,"BLA::Resize: %d\n",pChildWin);
+}
+
+/*****************************************************************************/
+IMPL_LINK( SolDep, ToolSelect, SoldepToolBox* , pBox)
+/*****************************************************************************/
+{
+ USHORT nItemId = pBox->GetCurItemId();
+ switch ( nItemId )
+ {
+ case TID_SOLDEP_FIND:
+ FindProject();
+ break;
case TID_SOLDEP_CREATEMETA :
{
VirtualDevice aVDev;
@@ -282,1515 +282,1529 @@ IMPL_LINK( SolDep, ToolSelect, SoldepToolBox* , pBox) SvFileStream aStream( String::CreateFromAscii("d:\\out.svm"), STREAM_STD_READWRITE );
aMtf.Write( aStream );
break;
- } - case TID_SOLDEP_HIDE_INDEPENDEND: - { - ToggleHideDependency(); + }
+ case TID_SOLDEP_HIDE_INDEPENDEND:
+ {
+ ToggleHideDependency();
for ( USHORT i=0; i<mpObjectList->Count(); i++ )
mpObjectList->GetObject(i)->SetViewMask(!mbIsHide);
- - maToolBox.CheckItem(TID_SOLDEP_HIDE_INDEPENDEND, IsHideMode()); - GetDepWin()->Invalidate(); //repaint Main-View - } - break; - case TID_SOLDEP_SELECT_WORKSPACE: - if (mpStandLst) - { - if (GetVersion()) // Version dialog box - { - delete mpSolIdMapper; - delete mpStarWriter; - mpObjectList->ClearAndDelete(); - ReadSource(TRUE); - } - } - break; - case TID_SOLDEP_BACK: - maToolBox.HideItem(TID_SOLDEP_BACK); - maToolBox.ShowItem(TID_SOLDEP_SELECT_WORKSPACE); //disabled for prj view (doubleclick ObjWin) - maToolBox.ShowItem(TID_SOLDEP_HIDE_INDEPENDEND); //disabled for prj view (doubleclick ObjWin) - maToolBox.ShowItem(TID_SOLDEP_FIND); //disabled for prj view (doubleclick ObjWin) - maToolBox.Resize(); - TogglePrjViewStatus(); - break; - } - return 0; -} - -/*****************************************************************************/ -void SolDep::ToggleHideDependency() -/*****************************************************************************/ -{ - mbIsHide = !mbIsHide; - maToolBox.CheckItem(TID_SOLDEP_HIDE_INDEPENDEND, IsHideMode()); - ObjectWin* pWin = GetObjectList()->GetObject( 0 ); - pWin->ToggleHideMode(); -}; - -/*****************************************************************************/ -BOOL SolDep::GetVersion() -/*****************************************************************************/ -{ - SolSelectVersionDlg aVersionDlg( GetDepWin(), mpStandLst ); - if ( aVersionDlg.Execute() == RET_OK ) { - msVersionMajor = aVersionDlg.GetVersionMajor(); - msVersionMinor = aVersionDlg.GetVersionMinor(); - return TRUE; - } - return FALSE; -} - -void SolDep::InitContextMenueMainWnd() -{ - InitContextMenuePrjViewWnd( mpBaseWin ); - return; // Disable not actually supported items - - mpBaseWin->mpPopup->InsertItem( DEPPOPUP_AUTOARRANGE, String::CreateFromAscii("Autoarrange")) ; - mpBaseWin->mpPopup->InsertSeparator(); - mpBaseWin->mpPopup->InsertItem( DEPPOPUP_READ_SOURCE, String::CreateFromAscii("Revert all changes") ); - mpBaseWin->mpPopup->InsertSeparator(); - mpBaseWin->mpPopup->InsertItem( DEPPOPUP_OPEN_SOURCE, String::CreateFromAscii("Open") ); - mpBaseWin->mpPopup->InsertItem( DEPPOPUP_WRITE_SOURCE, String::CreateFromAscii("Save") ); -} - -void SolDep::InitContextMenuePrjViewWnd(DepWin* pBaseWin ) -{ - // temp. disabled pBaseWin->mpPopup->InsertItem( DEPPOPUP_NEW, String::CreateFromAscii("New object") ); - pBaseWin->mpPopup->InsertItem( DEPPOPUP_ZOOMIN, String::CreateFromAscii("Zoom in") ); - pBaseWin->mpPopup->InsertItem( DEPPOPUP_ZOOMOUT, String::CreateFromAscii("Zoom out") ); - pBaseWin->mpPopup->InsertSeparator(); - // temp disabled pBaseWin->mpPopup->InsertItem( DEPPOPUP_CLEAR, String::CreateFromAscii("Clear") ); - pBaseWin->mpPopup->InsertItem( DEPPOPUP_SHOW_TOOLBOX, String::CreateFromAscii("Show Toolbox") ); -} - -/*****************************************************************************/ -ObjectWin *SolDep::RemoveObject( USHORT nId, BOOL bDelete ) -/*****************************************************************************/ -{ - Prj* pPrj; - -//hshtable auf stand halten - ObjectWin* pWin = RemoveObjectFromList( mpObjectList, mnSolWinCount, nId, FALSE ); - if ( pWin ) - { - ByteString aBodyText( pWin->GetBodyText() ); - if( (pPrj = mpStarWriter->GetPrj( aBodyText )) ) - { - mpStarWriter->Remove( pPrj ); -//cleanup ist teuer... - mpStarWriter->CleanUp(); - delete pPrj; - } - else - DBG_ASSERT( FALSE, "project not found - write" ); - - mpSolIdMapper->Delete( aBodyText ); - if ( bDelete ) - delete pWin; - return pWin; - } - else - return NULL; -} - -/*****************************************************************************/ -ULONG SolDep::AddObject( ByteString& rBodyText, BOOL bInteract ) -/*****************************************************************************/ -{ - ULONG nObjectId; - if ( bInteract ) - { - nObjectId = HandleNewPrjDialog( rBodyText ); - } - else - { -//hashtable auf stand halten - MyHashObject* pHObject; - nObjectId = AddObjectToList( mpBaseWin, mpObjectList, mnSolLastId, mnSolWinCount, rBodyText, FALSE ); - pHObject = new MyHashObject( nObjectId, ObjIdToPtr(mpObjectList, nObjectId )); - mpSolIdMapper->Insert( rBodyText, pHObject ); - } - return nObjectId; -} - -/*****************************************************************************/ -ULONG SolDep::AddPrjObject( ByteString& rBodyText, BOOL bInteract ) -/*****************************************************************************/ -{ - ULONG nObjectId; - if ( bInteract ) - { - nObjectId = HandleNewDirectoryDialog( rBodyText ); - } - else - { -//hshtable auf stand halten - MyHashObject* pHObject; - nObjectId = AddObjectToList( mpBasePrjWin, mpObjectPrjList, mnPrjLastId, mnPrjWinCount, rBodyText ); - pHObject = new MyHashObject( nObjectId, ObjIdToPtr( mpObjectPrjList, nObjectId )); - mpPrjIdMapper->Insert( rBodyText, pHObject ); // mpPrjIdMapper - } - return nObjectId; -} - -/*****************************************************************************/ -USHORT SolDep::AddConnector( ObjectWin* pStartWin, ObjectWin* pEndWin ) -/*****************************************************************************/ -{ -// DBG_ASSERT( FALSE , "not yet" ); - ByteString sEndName = pEndWin->GetBodyText(); - ByteString sStartName = pStartWin->GetBodyText(); - - Prj* pPrj = mpStarWriter->GetPrj( sEndName ); - if ( pPrj ) - { - pPrj->AddDependencies( sStartName ); - return AddConnectorToObjects( pStartWin, pEndWin ); - } - else - { - DBG_ASSERT( FALSE , "non existing Project" ); - return 1; - } -} - -/*****************************************************************************/ -USHORT SolDep::RemoveConnector( ObjectWin* pStartWin, ObjectWin* pEndWin ) -/*****************************************************************************/ -{ - SByteStringList* pPrjDeps = NULL; - ByteString sEndName = pEndWin->GetBodyText(); - ByteString sStartName = pStartWin->GetBodyText(); - - Prj* pPrj = mpStarWriter->GetPrj( sEndName ); - pPrjDeps = pPrj->GetDependencies( FALSE ); - if ( pPrjDeps ) - { - ByteString* pString; - ULONG nPrjDepsCount = pPrjDeps->Count(); - for ( ULONG j = nPrjDepsCount; j > 0; j-- ) - { - pString = pPrjDeps->GetObject( j - 1 ); - if ( pString->GetToken( 0, '.') == sStartName ) - pPrjDeps->Remove( pString ); - } - } - - return RemoveConnectorFromObjects( pStartWin, pEndWin ); -} - -/*****************************************************************************/ -void SolDep::RemoveAllObjects( ObjectList* pObjLst ) -/*****************************************************************************/ -{ - - Depper::RemoveAllObjects( pObjLst ); - - if ( mpSolIdMapper ) - { - delete mpSolIdMapper; - mpSolIdMapper = NULL; - } - if ( mpStarWriter ) - { - delete mpStarWriter; - mpStarWriter = NULL; - } -} - -/*****************************************************************************/ -ULONG SolDep::GetStart(SolIdMapper* pIdMapper, ObjectList* pObjList) -/*****************************************************************************/ -{ -// DBG_ASSERT( FALSE , "soldep" ); - MyHashObject* pHObject = pIdMapper->Find( "null" );//null_project - - if ( !pHObject ) { - ByteString sNullPrj = "null";//null_project - ULONG nObjectId = AddObject( sNullPrj, FALSE ); - ObjIdToPtr( pObjList, nObjectId )->SetViewMask( 1 ); - return nObjectId; - } - - return pHObject->GetId(); -} - -/*****************************************************************************/ -ULONG SolDep::GetStartPrj(SolIdMapper* pIdMapper, ObjectList* pObjList) -/*****************************************************************************/ -{ -// DBG_ASSERT( FALSE , "prjdep" ); - MyHashObject* pHObject = mpPrjIdMapper->Find( ByteString( "null" ) ); //null_dir - if ( !pHObject ) - { - ByteString bsNull("null"); - ULONG nObjectId = AddPrjObject( bsNull, FALSE); //null_dir - return nObjectId; - } - else - return pHObject->GetId(); -} - -/*****************************************************************************/ -USHORT SolDep::OpenSource() -/*****************************************************************************/ -{ - if ( mpStandLst ) { - if ( GetVersion()) - return ReadSource(); - } - return 0; -} - -/*****************************************************************************/ -USHORT SolDep::ReadSource(BOOL bUpdater) -/*****************************************************************************/ -{ - mpBaseWin->EnablePaint( FALSE ); - mpBaseWin->Hide(); - ULONG nObjectId, nHashedId; - ULONG i; - MyHashObject* pHObject; - ByteString* pStr; - ObjectWin *pStartWin, *pEndWin; - - mpSolIdMapper = new SolIdMapper( 63997 ); - if (mpStandLst && bUpdater) - { - mpStarWriter = new StarWriter( mpStandLst, msVersionMajor, msVersionMinor, TRUE ); - } else - { - SolarFileList* pSolarFileList; - pSolarFileList = GetPrjListFromDir(); - mpStarWriter = new StarWriter( pSolarFileList, TRUE ); - } - ByteString sTitle( SOLDEPL_NAME ); - if ( mpStarWriter->GetMode() == STAR_MODE_SINGLE_PARSE ) { - sTitle += ByteString( " - mode: single file [" ); - sTitle += (ByteString) mpStarWriter->GetName(); - sTitle += ByteString( "]" ); - } - else if ( mpStarWriter->GetMode() == STAR_MODE_MULTIPLE_PARSE ) { - sTitle += ByteString( " - mode: multiple files [" ); - sTitle += ByteString( "]" ); - } - SetTitle( String( sTitle, RTL_TEXTENCODING_UTF8) ); - - ULONG nCount = mpStarWriter->Count(); - for ( i=0; i<nCount; i++ ) - { - Prj *pPrj = mpStarWriter->GetObject(i); - ByteString sPrjName = pPrj->GetProjectName(); - nObjectId = AddObject( sPrjName, FALSE ); - ObjIdToPtr( mpObjectList, nObjectId )->SetViewMask( 1 ); - } - for ( i=0; i<nCount; i++ ) - { - Prj *pPrj = mpStarWriter->GetObject(i); - SByteStringList *pLst = pPrj->GetDependencies( FALSE ); - if ( pLst ) - { - ULONG nDepCount = pLst->Count(); - for ( ULONG m=0; m<nDepCount; m++) - { - pStr = pLst->GetObject(m); - pHObject = mpSolIdMapper->Find( *pStr ); - /*if ( !pHObject ) - { - // create new prj - Prj *pNewPrj = new Prj( *pStr ); - ByteString sPrjName = pNewPrj->GetProjectName(); - nObjectId = AddObject( sPrjName, FALSE ); - pHObject = mpSolIdMapper->Find( *pStr ); - ObjIdToPtr( mpObjectList, nObjectId )->SetViewMask( 2 ); - }*/ - - if ( pHObject ) - { - nHashedId = pHObject->GetId(); - ByteString sF_Os2 = pPrj->GetProjectName(); - pStr = &sF_Os2; - pHObject = mpSolIdMapper->Find( *pStr ); - nObjectId = pHObject->GetId(); - pStartWin = ObjIdToPtr( mpObjectList, nHashedId ); - pEndWin = ObjIdToPtr( mpObjectList, nObjectId ); - AddConnectorToObjects( pStartWin, pEndWin ); - } - } - } - } - if (!IsPrjView()) - { - AutoArrange( mpSolIdMapper, mpObjectList, GetStart(mpSolIdMapper,mpObjectList), 0, GetStart(mpSolIdMapper,mpObjectList) ); - GetDepWin()->EnablePaint( TRUE ); - } - return 0; -} - -SolarFileList* SolDep::GetPrjListFromDir() -{ - SolarFileList* pSolarFileList = new SolarFileList(); - String sPrjDir( String::CreateFromAscii( "prj" )); - String sBuildLst( String::CreateFromAscii( "build.lst" )); - DirEntry aCurrent( getenv( SOURCEROOT ) ); - - aCurrent.ToAbs(); - Dir aDir( aCurrent, FSYS_KIND_DIR ); - - USHORT nEntries = aDir.Count(); - if( nEntries ) - { - UniStringList aSortDirList; - for ( USHORT n = 0; n < nEntries; n++ ) - { - DirEntry& rEntry = aDir[n]; - UniString aName( rEntry.GetName() ); - if( aName.Len() && ( aName.GetChar(0) != '.' ) && rEntry.Exists() ) - { - rEntry += DirEntry( sPrjDir ); - rEntry += DirEntry( sBuildLst ); - if (rEntry.Exists()) - { - pSolarFileList->Insert( new String( rEntry.GetFull() ), LIST_APPEND ); - ByteString aName_dbg(rEntry.GetFull(),RTL_TEXTENCODING_UTF8); - fprintf(stdout, "bla:%s\n", aName_dbg.GetBuffer()); - } - } - } - } - if ( !pSolarFileList->Count() ) - { - //is empty!! TBD - delete pSolarFileList; - return NULL; - } - return pSolarFileList; -} - -/*****************************************************************************/ -USHORT SolDep::WriteSource() -/*****************************************************************************/ -{ -/* zur Sicherheit deaktiviert - USHORT nMode = mpStarWriter->GetMode(); - if ( nMode == STAR_MODE_SINGLE_PARSE ) { - ByteString sFileName = mpStarWriter->GetName(); - if ( sFileName.Len()) { - mpStarWriter->Write( String( sFileName, RTL_TEXTENCODING_UTF8) ); - mpStarWriter->RemoveProject( ByteString( "null")); //null_project - } - } - else if ( nMode == STAR_MODE_MULTIPLE_PARSE ) { - // *OBO* - //String sRoot = mpStarWriter->GetSourceRoot(); - //nicht mehr untersttzt mpStarWriter->GetSourceRoot() - ByteString sFileName = mpStarWriter->GetName(); - DirEntry aEntry( sFileName ); - aEntry.ToAbs(); - aEntry = aEntry.GetPath().GetPath().GetPath(); - String sRoot = aEntry.GetFull(); - - if ( sRoot.Len()) { - mpStarWriter->RemoveProject( ByteString( "null")); //null_project - mpStarWriter->WriteMultiple( sRoot ); - } - } -*/ - return 1; -} - -USHORT SolDep::Load( const ByteString& rFileName ) -{ -// moved from depper class - DBG_ASSERT( FALSE , "you are dead!" ); - SvFileStream aInFile( String( rFileName, RTL_TEXTENCODING_UTF8 ), STREAM_READ ); - depper_head dh; - ULONG i; - ULONG nLoadOffs = mnSolLastId; //or Prj?? - ObjectWin* pNewWin; - aInFile.Read( &dh, sizeof( dh )); - - ULONG nObjCount = dh.nObjectCount; - ULONG nCnctrCount = dh.nCnctrCount; - - for ( i=0; i < nObjCount ; i++ ) - { - ObjectWin* pWin = new ObjectWin( mpBaseWin, WB_BORDER ); - pWin->Load( aInFile ); - pNewWin = ObjIdToPtr( mpObjectList, AddObjectToList( mpBaseWin, mpObjectList, mnSolLastId, mnSolWinCount, pWin->GetBodyText(), FALSE )); - pNewWin->SetId( nLoadOffs + pWin->GetId()); - pNewWin->SetPosPixel( pWin->GetPosPixel()); - pNewWin->SetSizePixel( pWin->GetSizePixel()); - } - - ULONG nStartId; - ULONG nEndId; -// ueber addconnector fuehren! - for ( i=0; i < nCnctrCount ; i++ ) - { - Connector* pCon = new Connector( mpBaseWin, WB_NOBORDER ); - pCon->Load( aInFile ); - - nStartId = nLoadOffs + pCon->GetStartId(); - nEndId = nLoadOffs + pCon->GetEndId(); - - ObjectWin* pStartWin = ObjIdToPtr( mpObjectList, nStartId ); - ObjectWin* pEndWin = ObjIdToPtr( mpObjectList, nEndId ); - - pCon->Initialize( pStartWin, pEndWin ); - } - - - return 0; -} - -/*****************************************************************************/ -BOOL SolDep::ViewContent( ByteString& rObjectName ) -/*****************************************************************************/ -{ - mpFocusWin = NULL; - SetPrjViewStatus(TRUE); - - for ( ULONG i = 0; i < mpObjectList->Count() && !mpFocusWin; i++ ) - if ( mpObjectList->GetObject( i )->HasFocus()) - mpFocusWin = mpObjectList->GetObject( i ); - //HideObjectsAndConnections( mpObjectList ); - mpProcessWin->Resize(); - GetDepWin()->Show(); - return InitPrj( rObjectName ); -} - -/*****************************************************************************/ -BOOL SolDep::InitPrj( ByteString& rListName ) -/*****************************************************************************/ -{ - ULONG nObjectId, nHashedId; - ULONG i, j; - MyHashObject* pHObject; - ByteString *pDepName; - ByteString *pFlagName; - Prj* pPrj; - ObjectWin *pStartWin, *pEndWin; - maToolBox.HideItem(TID_SOLDEP_SELECT_WORKSPACE); - maToolBox.HideItem(TID_SOLDEP_HIDE_INDEPENDEND); - maToolBox.HideItem(TID_SOLDEP_FIND); - maToolBox.ShowItem(TID_SOLDEP_BACK); - maToolBox.Invalidate(); - - //clean up - mpObjectPrjList->ClearAndDelete(); - GetDepWin()->ClearConnectorList(); - if (mpPrjIdMapper) delete mpPrjIdMapper; - mpPrjIdMapper = new SolIdMapper( 63997 ); //generate clean mapper - mnPrjWinCount = 0; - mnPrjLastId = 0; - - ULONG nCount = mpStarWriter->Count(); - GetDepWin()->EnablePaint( FALSE ); - Point aPnt = GetGraphWin()->GetPosPixel(); - Size aSize = GetGraphWin()->GetSizePixel(); - - GetGraphWin()->SetPosSizePixel( aPnt, aSize ); // Hier wird das Window gesetzt - - BOOL bReturn = FALSE; - - for ( i=0; i<nCount; i++ ) - { -// pPrj->GetProjectName() returns the name of -// the project e.g. svtools - pPrj = mpStarWriter->GetObject(i); - ByteString sPrjName = pPrj->GetProjectName(); - if ( sPrjName == rListName ) - { - bReturn = TRUE; - - mpPrj = mpStarWriter->GetObject(i); - ULONG nDirCount = mpPrj->Count(); - for ( j=0; j<nDirCount; j++ ) - { - CommandData *pData = mpPrj->GetObject(j); - fprintf( stdout, "\tProjectDir : %s\n", - pData->GetLogFile().GetBuffer()); -// pData->GetLogFile() contains internal project IDs -// e.g. st_mkout etc. - if ( pData->GetLogFile() != "" ) - { - ByteString sItem = pData->GetLogFile(); - nObjectId = AddPrjObject( sItem, FALSE); -// there may be faster ways...... - ObjectWin *pWin = ObjIdToPtr( mpObjectPrjList, nObjectId ); - pWin->SetViewMask( 0x0001 ); -// pData->GetPath() contains internal project directories -// e.g. svtools/inc etc. - ByteString sPath = pData->GetPath(); - pWin->SetTipText( sPath ); - } - } - -// set connectors for dependencies here - for ( j=0; j<nDirCount; j++ ) - { - CommandData *pData = mpPrj->GetObject(j); - SByteStringList *pDeps = pData->GetDependencies(); - if ( pDeps ) - { - ByteString sFlagName = pData->GetLogFile(); - pFlagName = &sFlagName; - //pHObject = mpPrjIdMapper->Find( (*pFlagName).GetToken( 0, '.'));//mpSolIdMapper see ReadSource() - pHObject = mpPrjIdMapper->Find( sFlagName.GetToken( 0, '.')); - if (pHObject) - { - - nObjectId = pHObject->GetId(); - - ULONG nDepCount = pDeps->Count(); - for ( ULONG k=0; k<nDepCount; k++ ) - { - pDepName = pDeps->GetObject(k); - pHObject = mpPrjIdMapper->Find( (*pDepName).GetToken( 0, '.')); - if (pHObject ) - { - nHashedId = pHObject->GetId(); - pStartWin = ObjIdToPtr( mpObjectPrjList, nHashedId ); - pEndWin = ObjIdToPtr( mpObjectPrjList, nObjectId ); - - AddConnectorToObjects( pStartWin, pEndWin ); - } - else - { - String sMessage; - sMessage += String::CreateFromAscii("can't find "); - sMessage += String( *pDepName, RTL_TEXTENCODING_UTF8 ); - sMessage += String::CreateFromAscii(".\ndependency ignored"); - WarningBox aBox( GetDepWin(), WB_OK, sMessage); - aBox.Execute(); - } - } - } - } - - } - - break; - } - } - ByteString sNullDir = "null"; - nObjectId = AddPrjObject( sNullDir, FALSE); - ObjectWin *pWin = ObjIdToPtr( mpObjectPrjList, nObjectId ); - pWin->SetViewMask( 0x0001 ); - mpGraphPrjWin->EnablePaint( TRUE ); - //debug -// int test_l = GetStartPrj(mpPrjIdMapper, mpObjectPrjList); -// ObjectWin *pTestWin = ObjIdToPtr( mpObjectPrjList, test_l ); - AutoArrange( mpPrjIdMapper, mpObjectPrjList, GetStartPrj(mpPrjIdMapper, mpObjectPrjList), 0, GetStartPrj(mpPrjIdMapper, mpObjectPrjList) ); - mpGraphWin->Hide(); - mpGraphPrjWin->Show(); - mpGraphPrjWin->Invalidate(); - - return bReturn; -} - -/*****************************************************************************/ -USHORT SolDep::CloseWindow() -/*****************************************************************************/ -{ - - ((SystemWindow*)mpProcessWin)->Close(); - return 0; -} - -/*****************************************************************************/ -void SolDep::ShowHelp() -/*****************************************************************************/ -{ - SvFileStream aHelpFile( String::CreateFromAscii( "g:\\soldep.hlp" ), STREAM_READ ); - String aHelpText; - ByteString aGetStr; - - if ( aHelpFile.IsOpen() ) - { - while ( aHelpFile.ReadLine( aGetStr ) ) - { - aHelpText += String (aGetStr, RTL_TEXTENCODING_UTF8); - aHelpText += String::CreateFromAscii("\n"); - } - } - else - aHelpText = String::CreateFromAscii("No Helpfile found."); - - SolHelpDlg aHelpDlg( mpBaseWin, DtSodResId( RID_SD_DIALOG_HELP )); - aHelpDlg.maMLEHelp.SetText( aHelpText ); - aHelpDlg.maMLEHelp.SetReadOnly(); - aHelpDlg.maMLEHelp.EnableFocusSelectionHide( TRUE ); - aHelpDlg.Execute(); -} - -/*****************************************************************************/ -BOOL SolDep::FindProject() -/*****************************************************************************/ -{ - SolFindProjectDlg aFindProjectDlg( GetDepWin(), GetObjectList() ); - ObjectWin* pObjectWin = NULL; - mpObjectList->ResetSelectedObject(); - if (IsHideMode()) - { - GetDepWin()->Invalidate(); - } - - mpFocusWin=NULL; - - if ( aFindProjectDlg.Execute() == RET_OK ) { - msProject = aFindProjectDlg.GetProject(); - //now we have a project string - pObjectWin = mpObjectList->GetPtrByName( msProject ); - mpObjectList->ResetSelectedObject(); - MarkObjects( pObjectWin ); - } - return FALSE; -} - -BOOL SolDep::MarkObjects( ObjectWin* pObjectWin ) -{ - if (pObjectWin) - { - if (!(pObjectWin->IsNullObject())) - { - pObjectWin->SetMarkMode( MARKMODE_SELECTED ); - pObjectWin->MarkNeeded(); - pObjectWin->MarkDepending(); - if (IsHideMode()) - { - GetDepWin()->Invalidate(); - } - } else - { - fprintf(stdout,"null\n"); - } - } - return TRUE; -} - -void SolDep::Resize() -{ -//funzt! mu aber von der applikation aufgerufen werden. - Point aOutPos = Point( 0, 0 ); - Size aOutSize = mpProcessWin->GetOutputSizePixel(); - // calculate output size - ULONG nTaskHeight = maToolBox.CalcWindowSizePixel().Height(); - ULONG nTaskWidth = maToolBox.CalcWindowSizePixel().Width(); - Size aSize( aOutSize.Width(), nTaskHeight ); - -// ULONG nMenuHeight = 0; - Point aGraphWinPos = Point(0,0); - Size aGraphWinSize = Size(0,0); - -//wei nicht wie: nMenuHeight = aMenuBar.GetWindow()->GetSizePixel().Height(); //Hhe des Menues - - //aInRect = pTBManager->Resize( Rectangle( aOutPos, aOutSize ); - // Set Docking-Rectangle for ToolBar - Rectangle aInRect; - - if (( !maToolBox.IsFloatingMode() ) && ( maToolBox.GetAlign() == WINDOWALIGN_TOP )) - { - // waagerechte Toolbar oben - maToolBox.SetPosSizePixel( aOutPos, Size( aOutSize.Width(), maToolBox.CalcWindowSizePixel().Height())); - if( maToolBox.IsVisible()) - { - Point aOutPosTmp; - Size aOutSizeTmp; - aOutPosTmp = Point( aOutPos.X(), aOutPos.Y() + maToolBox.CalcWindowSizePixel().Height()); - aOutSizeTmp = Size( aOutSize.Width(), aOutSize.Height() - maToolBox.CalcWindowSizePixel().Height()); - aInRect = Rectangle( aOutPosTmp, aOutSizeTmp ); - aGraphWinPos = Point( 0, nTaskHeight ); - aGraphWinSize = Size( aOutSize.Width(), aOutSize.Height() - nTaskHeight); - } - } - if (( !maToolBox.IsFloatingMode() ) && ( maToolBox.GetAlign() == WINDOWALIGN_BOTTOM )) - { - // waagerechte Toolbar unten - Point aTbPos = Point( aOutPos.X(), aOutPos.Y() + aOutSize.Height() - maToolBox.CalcWindowSizePixel().Height()); - Size aTbSize = Size( aOutSize.Width(), maToolBox.CalcWindowSizePixel().Height()); - maToolBox.SetPosSizePixel( aTbPos, aTbSize ); - if( maToolBox.IsVisible()) - { - Point aOutPosTmp; - Size aOutSizeTmp; - aOutPosTmp = Point( aOutPos.X(), aOutPos.Y() + maToolBox.CalcWindowSizePixel().Height()); - aOutSizeTmp = Size( aOutSize.Width(), aOutSize.Height() - maToolBox.CalcWindowSizePixel().Height()); - aInRect = Rectangle( aOutPosTmp, aOutSizeTmp ); - aGraphWinPos = Point( 0, 0 ); - aGraphWinSize = Size( aOutSize.Width(), aOutSize.Height() - nTaskHeight); - } - } - if (( !maToolBox.IsFloatingMode() ) && ( maToolBox.GetAlign() == WINDOWALIGN_LEFT )) - { - // senkrechte ToolBar links - maToolBox.SetPosSizePixel( aOutPos, Size( maToolBox.CalcWindowSizePixel().Width(), aOutSize.Height())); - if( maToolBox.IsVisible()) - { - Point aOutPosTmp; - Size aOutSizeTmp; - aOutPosTmp = Point( aOutPos.X() + maToolBox.CalcWindowSizePixel().Width(), aOutPos.Y()); - aOutSizeTmp = Size( aOutSize.Width()- maToolBox.CalcWindowSizePixel().Width(), aOutSize.Height()); - aInRect = Rectangle( aOutPosTmp, aOutSizeTmp ); - aGraphWinPos = Point( nTaskWidth, 0 ); - aGraphWinSize = Size( aOutSize.Width() - nTaskWidth, aOutSize.Height()); - } - } - if (( !maToolBox.IsFloatingMode() ) && ( maToolBox.GetAlign() == WINDOWALIGN_RIGHT )) - { - // senkrechte ToolBar rechts - Point aTbPos = Point( aOutPos.X() + aOutSize.Width() - maToolBox.CalcWindowSizePixel().Width(), aOutPos.Y()); - Size aTbSize= Size( maToolBox.CalcWindowSizePixel().Width(), aOutSize.Height()); - maToolBox.SetPosSizePixel( aTbPos, aTbSize); - if( maToolBox.IsVisible()) - { - Point aOutPosTmp; - Size aOutSizeTmp; - aOutPosTmp = Point( aOutPos.X() + maToolBox.CalcWindowSizePixel().Width(), aOutPos.Y()); - aOutSizeTmp = Size( aOutSize.Width()- maToolBox.CalcWindowSizePixel().Width(), aOutSize.Height()); - aInRect = Rectangle( aOutPosTmp, aOutSizeTmp ); - aGraphWinPos = Point( 0, 0 ); - aGraphWinSize = Size( aOutSize.Width() - nTaskWidth, aOutSize.Height()); - } - } - - Rectangle rout = Rectangle( Point( 0,0 ), aOutSize ); //OutputToScreenPixel( aOutPos ) - Rectangle rin = Rectangle( Point( 0,0 ),//OutputToScreenPixel( Point( aOutPos.X() - 20, aInRect.Top()) - Size( aOutSize.Width(), aOutSize.Height())); -/* - Rectangle rout = mpProcessWin->OutputToScreenPixel( aOutPos ); - Rectangle rin = Rectangle( Point( 0,0 ),//OutputToScreenPixel( Point( aOutPos.X() - 20, aInRect.Top()) - Size( aOutSize.Width(), aOutSize.Height())); -*/ - maToolBox.SetDockingRects( rout, rin ); - - BOOL bFloating = maToolBox.IsFloatingMode(); - - if ( bFloating ) - { - GetGraphWin()->SetPosSizePixel(Point(0,0),aOutSize); - //if (IsPrjView() && (mpPrjDep)) mpPrjDep->Resize(); - if (maToolBox.IsVisible()) maToolBox.Show(); - } else - { - GetGraphWin()->SetPosSizePixel( aGraphWinPos, aGraphWinSize ); - } - if (maToolBox.IsVisible()) maToolBox.Show(); -} - -USHORT SolDep::AddConnectorPrjView( ObjectWin* pStartWin, ObjectWin* pEndWin ) -{ -// DBG_ASSERT( FALSE , "not yet" ); - ByteString sEndName = pEndWin->GetBodyText(); - ByteString sStartName = pStartWin->GetBodyText(); - if ( sStartName != ByteString("null")) - { - CommandData* pEndData = mpPrj->GetDirectoryData( sEndName ); - SByteStringList* pDeps = pEndData->GetDependencies(); - if ( pDeps ) - pDeps->PutString( &sStartName ); - else - { - pDeps = new SByteStringList(); - pEndData->SetDependencies( pDeps ); - pDeps->PutString( &sStartName ); - pEndData->GetDependencies(); - } - } - return AddConnectorToObjects( pStartWin, pEndWin ); -} - -USHORT SolDep::RemoveConnectorPrjView( ObjectWin* pStartWin, ObjectWin* pEndWin ) -{ - ByteString sEndName = pEndWin->GetBodyText(); - ByteString sStartName = pStartWin->GetBodyText(); - CommandData* pEndData = mpPrj->GetDirectoryData( sEndName ); - SByteStringList* pDeps = pEndData->GetDependencies(); - if ( pDeps ) - { - ByteString* pString; - ULONG nDepsCount = pDeps->Count(); - for ( ULONG j = nDepsCount; j > 0; j-- ) - { - pString = pDeps->GetObject( j - 1 ); - if ( pString->GetToken( 0, '.') == sStartName ) - pDeps->Remove( pString ); - } - } - return RemoveConnectorFromObjects( pStartWin, pEndWin ); -} - -USHORT SolDep::AutoArrange( SolIdMapper* pIdMapper, ObjectList* pObjLst, ULONG nTopId, ULONG nBottmId, ULONG aObjID ) -{ - AutoArrangeDlgStart(); - OptimizePos(pIdMapper, pObjLst, nTopId, nBottmId, aObjID ); - AutoArrangeDlgStop(); - return 0; -} - -Point SolDep::CalcPos( USHORT nSet, USHORT nIndex ) -{ - int nRowIndex = nIndex / DEPPER_MAX_WIDTH; - ULONG nPosX = mnXOffset + nRowIndex % 3 * GetDefSize().Width() / 3 + ( nIndex - ( DEPPER_MAX_WIDTH * nRowIndex )) * (GetDefSize().Width() + OBJWIN_X_SPACING ); - - ULONG nPosY = ( nSet + mnLevelOffset + nRowIndex ) * ( GetDefSize().Height() + OBJWIN_Y_SPACING ) + OBJWIN_Y_SPACING; - Point aPos( nPosX, nPosY ); - return aPos; -} - -ULONG SolDep::CalcXOffset( ULONG nObjectsToFit ) -{ - long nDynXOffs; - long nXMiddle; - ULONG nTrigger; - - nXMiddle = GetDepWin()->PixelToLogic( GetDepWin()->GetSizePixel()).Width() / 2; - if ( nObjectsToFit > DEPPER_MAX_WIDTH ) - nObjectsToFit = DEPPER_MAX_WIDTH - 1 + DEPPER_MAX_WIDTH % 2; - nTrigger = ( nObjectsToFit - 1 ) / 2; - nDynXOffs = ( GetDefSize().Width() + OBJWIN_X_SPACING ) * nTrigger; - ULONG nXOffs = nXMiddle - nDynXOffs; - - if ( ULONG(nXMiddle - nDynXOffs) < mnMinDynXOffs ) - mnMinDynXOffs = nXMiddle - nDynXOffs; - - return nXOffs; - -} - -double SolDep::CalcDistSum( ObjWinList* pObjList, DistType eDistType ) -{ - ObjectWin* pWin; - Connector* pCon; - ULONG nObjCount = pObjList->Count(); - double dRetVal = 0; - double dWinVal; - USHORT i, j; - BOOL bIsStart; - - for ( i = 0; i < nObjCount; i++ ) - { - pWin = pObjList->GetObject( i ); - - if ( pWin && pWin->IsVisible()) - { - j = 0; - dWinVal = 0; - while ( (pCon = pWin->GetConnector( j )) ) - { - if ( pCon->IsVisible()) { - bIsStart = pCon->IsStart( pWin ); - if ( eDistType != BOTH ) - if ( eDistType == TOPDOWN ) - { - if ( bIsStart ) - { - pCon->UpdatePosition( pWin, FALSE ); - dWinVal += pCon->GetLen() * pWin->mnHeadDist; - } - } - else - { - if ( !bIsStart ) - { - pCon->UpdatePosition( pWin, FALSE ); - dWinVal += pCon->GetLen() * pWin->mnRootDist; - } - - } - else - { - pCon->UpdatePosition( pWin, FALSE ); - if ( !bIsStart ) - dWinVal += pCon->GetLen() * ( pWin->mnHeadDist + 1 ); - else - dWinVal += pCon->GetLen() * pWin->mnRootDist; - } - } - j++; - } -// if ( j != 0 ) -// dWinVal /= j; - dRetVal += dWinVal; - } - } - - return dRetVal; -} - -USHORT SolDep::Impl_Traveller( ObjectWin* pWin, USHORT nDepth ) -{ - USHORT i = 0; - ObjectWin* pNewWin; - Connector* pCon; - - nDepth++; - - USHORT nMaxDepth = nDepth; - - pWin->mbVisited = TRUE; - pWin->mnRootDist = Max ( nDepth, pWin-> mnRootDist ); - if ( nDepth > DEPPER_MAX_DEPTH ) - { - DBG_ASSERT( nDepth != DEPPER_MAX_DEPTH + 1, "Ringabhngigkeit!" ); - nDepth++; - return DEP_ENDLES_RECURSION_FOUND; - } - - while ( (pCon = pWin->GetConnector( i )) ) - { - if ( pCon->IsStart( pWin )&& pCon->IsVisible() ) //removed: don't show null_project - { - pNewWin = pCon->GetOtherWin( pWin ); - nMaxDepth = Max( Impl_Traveller( pNewWin, nDepth ), nMaxDepth ); - if( nMaxDepth == DEP_ENDLES_RECURSION_FOUND ) - { - mpTravellerList->Insert( pWin, LIST_APPEND ); - return DEP_ENDLES_RECURSION_FOUND; - } - } - i++; - } - pWin->mnHeadDist = MAX( pWin->mnHeadDist, nMaxDepth - nDepth ); - return nMaxDepth; -} - - -double SolDep::Impl_PermuteMin( ObjWinList& rObjList, Point* pPosArray, ObjWinList& rResultList, double dMinDist, ULONG nStart, ULONG nSize, DistType eDistType ) -{ - - ULONG i, j, l; - ULONG nEnd = nStart + nSize; - ObjectWin* pSwapWin; - ULONG nLevelObjCount = rObjList.Count(); - -//dont use full recusion for more than 6 objects - if ( nLevelObjCount > 6 ) - { - srand(( unsigned ) time( NULL )); - - ULONG nIdx1, nIdx2; - for ( i = 0; i < 101; i++ ) - { - UpdateSubProgrssBar(i); - for ( j = 0; j < 100; j++ ) - { - nIdx1 = (ULONG) ( double( rand() ) / RAND_MAX * nLevelObjCount ); - while ( rObjList.GetObject( nIdx1 ) == NULL ) - nIdx1 = (ULONG) ( double( rand() ) / RAND_MAX * nLevelObjCount ); - nIdx2 = (ULONG) ( double( rand() ) / RAND_MAX * nLevelObjCount ); - while ( nIdx1 == nIdx2 || nIdx2 == nLevelObjCount ) - nIdx2 = (ULONG) ( double( rand() ) / RAND_MAX * nLevelObjCount ); - - pSwapWin = rObjList.GetObject( nIdx1 ); - if ( pSwapWin ) - pSwapWin->SetCalcPosPixel( pPosArray[ nIdx2 ] ); - pSwapWin = rObjList.Replace( pSwapWin, nIdx2 ); - if ( pSwapWin ) - pSwapWin->SetCalcPosPixel( pPosArray[ nIdx1 ] ); - rObjList.Replace( pSwapWin, nIdx1 ); - - double dCurDist = CalcDistSum( &rObjList, eDistType ); - - if ( dCurDist < dMinDist ) - { - dMinDist = dCurDist; - rResultList.Clear(); - for ( l = 0; l < nLevelObjCount; l++ ) - { - pSwapWin = rObjList.GetObject( l ); - rResultList.Insert( pSwapWin, LIST_APPEND); - } - } -// if ( dCurDist > dMinDist * 1.5 ) - if ( dCurDist > dMinDist * 15 ) - { - pSwapWin = rObjList.GetObject( nIdx1 ); - if ( pSwapWin ) - pSwapWin->SetCalcPosPixel( pPosArray[ nIdx2 ] ); - pSwapWin = rObjList.Replace( pSwapWin, nIdx2 ); - if ( pSwapWin ) - pSwapWin->SetCalcPosPixel( pPosArray[ nIdx1 ] ); - rObjList.Replace( pSwapWin, nIdx1 ); - } - } - } - } - else - { - for ( i = nStart ; i < nEnd; i++) - { - if ( nSize > 1 ) - { - pSwapWin = rObjList.GetObject( i ); - pSwapWin = rObjList.Replace( pSwapWin, nStart ); - rObjList.Replace( pSwapWin, i ); - double dPermuteDist = Impl_PermuteMin( rObjList, pPosArray, rResultList, dMinDist, nStart + 1, nSize - 1, eDistType ); - dMinDist = MIN( dMinDist, dPermuteDist); - pSwapWin = rObjList.GetObject( i ); - pSwapWin = rObjList.Replace( pSwapWin, nStart ); - rObjList.Replace( pSwapWin, i ); - - } - else - { - for ( l = 0; l < nLevelObjCount; l++ ) - { - pSwapWin = rObjList.GetObject( l ); - if ( pSwapWin ) - pSwapWin->SetCalcPosPixel( pPosArray[ l ] ); - } - - double dCurDist = CalcDistSum( &rObjList, eDistType ); - - if ( dCurDist < dMinDist ) - { - dMinDist = dCurDist; - rResultList.Clear(); - for ( l = 0; l < nLevelObjCount; l++ ) - { - pSwapWin = rObjList.GetObject( l ); - rResultList.Insert( pSwapWin, LIST_APPEND); - } - } - - } - } - } - - return dMinDist; -} - - -USHORT SolDep::OptimizePos(SolIdMapper* pIdMapper, ObjectList* pObjLst, ULONG nTopId, ULONG nBottmId, ULONG aObjID ) -{ - ObjWinList aWorkList; - ObjectWin* pWin; - Connector* pCon; - USHORT nRootDist = (USHORT) -1; - USHORT i, j, k, l, nRetVal; - USHORT LevelUse[ DEPPER_MAX_DEPTH ]; - USHORT LevelSecUse[ DEPPER_MAX_DEPTH ]; - ObjWinList* LevelList[ DEPPER_MAX_DEPTH ]; - ObjWinList* LevelSecList[ DEPPER_MAX_DEPTH ]; - Point aPosArray[ DEPPER_MAX_LEVEL_WIDTH * DEPPER_MAX_WIDTH ]; - - mnMinDynXOffs = 0xffff; - - for ( i = 0; i < DEPPER_MAX_DEPTH; i++ ) - { - LevelUse[ i ] = 0; - LevelList[ i ] = NULL; - LevelSecUse[ i ] = 0; - LevelSecList[ i ] = NULL; - } - - GetDepWin()->EnablePaint( FALSE ); - - ULONG nObjCount = pObjLst->Count(); - for ( i = 0; i < nObjCount; i++ ) - { - pWin = pObjLst->GetObject( i ); - if ( pWin->IsVisible()) { - pWin->mbVisited = FALSE; - pWin->mnHeadDist = 0; - pWin->mnRootDist = 0; - - // find initial objects which need to be connected with - // root object - j = 0; - USHORT nStartCount = 0; - USHORT nEndCount = 0; - while ( (pCon = pWin->GetConnector( j )) ) - { - if ( pCon->IsVisible()) { //null_project - if( pCon->IsStart( pWin )) - nStartCount++; - else - { - nEndCount = 1; - break; - } - } - j++; - } - - if ( nStartCount > 0 && nEndCount == 0 ) - if ( nTopId != pWin->GetId()) - AddConnectorToObjects( pObjLst, nTopId, pWin->GetId()); - - } - } - - pWin = ObjIdToPtr( pObjLst, nTopId ); - - if ( mpTravellerList ) - { - mpTravellerList->Clear(); - delete mpTravellerList; - } - mpTravellerList = new ObjWinList(); - // set root and top distance - nRetVal = Impl_Traveller( pWin, nRootDist ); - - DBG_ASSERT( nRetVal < DEPPER_MAX_DEPTH , "zu tief" ); - if ( nRetVal == DEP_ENDLES_RECURSION_FOUND ) - { - WriteToErrorFile(); - return nRetVal; - } - - ULONG nUnvisited = 0; - ULONG nUnvisYOffs = 0; - - // seperate mainstream, secondary and unconnected - for ( i = 0; i < nObjCount; i++ ) - { - pWin = pObjLst->GetObject( i ); - if ( pWin->IsVisible()) { - if (( pWin->mnHeadDist + pWin->mnRootDist ) == nRetVal ) - { - if ( !LevelList[ pWin->mnHeadDist ] ) - LevelList[ pWin->mnHeadDist ] = new ObjWinList; - LevelList[ pWin->mnHeadDist ]->Insert( pWin ); - LevelUse[ pWin->mnHeadDist ]++; - } - else - if ( pWin->mbVisited ) - { - if ( !LevelSecList[ nRetVal - pWin->mnRootDist ] ) - LevelSecList[ nRetVal - pWin->mnRootDist ] = new ObjWinList; - LevelSecList[ nRetVal - pWin->mnRootDist ]->Insert( pWin ); - LevelSecUse[ nRetVal - pWin->mnRootDist ]++; - } - else - { - // need to be arranged more intelligent... - Point aPos( 5, nUnvisYOffs ); - pWin->SetCalcPosPixel( aPos ); - - Point aTmpPos = pWin->GetCalcPosPixel(); - pWin->SetPosPixel( mpBaseWin->LogicToPixel( aTmpPos )); - - nUnvisYOffs += pWin->PixelToLogic( pWin->GetSizePixel()).Height(); - nUnvisited++; - } - } - } - - mnLevelOffset = 0; - - USHORT nScaleVal; - - if ( nRetVal == 0 ) - nScaleVal = 1; - else - nScaleVal = nRetVal; - - i = 0; - - USHORT nStep = 0; - - while ( LevelList[ i ] ) - { - UpdateMainProgressBar(i, nScaleVal, nStep); - DBG_ASSERT( LevelUse[ i ] == LevelList[ i ]->Count() , "level index im a..." ); - ObjectWin* pSwapWin; - ULONG nLevelObjCount = LevelList[ i ]->Count(); - - if ( nLevelObjCount % 2 == 0 ) - { - LevelList[ i ]->Insert( NULL, LIST_APPEND ); - nLevelObjCount++; -// LevelUse bleibt orginal... -// LevelUse[ i ]++; - } - -// catch too big lists - DBG_ASSERT( nLevelObjCount < DEPPER_MAX_LEVEL_WIDTH * DEPPER_MAX_WIDTH , "graph zu breit! dat geiht nich gut. breaking" ); - if ( nLevelObjCount >= DEPPER_MAX_LEVEL_WIDTH * DEPPER_MAX_WIDTH ) - { - WarningBox aWBox( mpBaseWin, WB_OK, String::CreateFromAscii("graph zu breit! dat geiht nich gut. breaking")); - aWBox.Execute(); - break; - } - mnXOffset = CalcXOffset( nLevelObjCount ); - aWorkList.Clear(); - - // initial positioning for mainstream - for ( j = 0; j < nLevelObjCount; j++ ) - { - pSwapWin = LevelList[ i ]->GetObject( j ); - aWorkList.Insert( pSwapWin, LIST_APPEND); - Point aPos = CalcPos( i, j ); - aPosArray[ j ] = aPos; - if ( pSwapWin ) - pSwapWin->SetCalcPosPixel( aPosArray[ j ] ); - } - - double dMinDist = CalcDistSum( LevelList[ i ] ); - - // optimize mainstream order and return best matching list in "aWorkList" - dMinDist = MIN( dMinDist, Impl_PermuteMin( *(LevelList[ i ]), aPosArray, aWorkList, dMinDist, 0, nLevelObjCount )); - - // set optimized positions - may still be wrong from later tries - for ( j = 0; j < nLevelObjCount; j++ ) - { - pSwapWin = aWorkList.GetObject( j ); - if ( pSwapWin ) - pSwapWin->SetCalcPosPixel( aPosArray[ j ] ); - } - - if ( LevelSecList[ i ] != NULL ) - { - ULONG nLevelSecObjCount = LevelSecList[ i ]->Count(); - // expand list for better positioning - while ( nLevelSecObjCount + LevelUse[ i ] < DEPPER_MAX_WIDTH - 1 ) - { - LevelSecList[ i ]->Insert( NULL, LIST_APPEND ); - nLevelSecObjCount++; - } - if ( ( nLevelSecObjCount + LevelUse[ i ])% 2 == 0 ) - { - LevelSecList[ i ]->Insert( NULL, LIST_APPEND ); - nLevelSecObjCount++; - } - - DBG_ASSERT( nLevelSecObjCount < DEPPER_MAX_LEVEL_WIDTH * DEPPER_MAX_WIDTH , "graph zu breit! dat geiht nich gut. breaking" ); - if ( nLevelObjCount >= DEPPER_MAX_LEVEL_WIDTH * DEPPER_MAX_WIDTH ) - { - WarningBox aWBox( mpBaseWin, WB_OK, String::CreateFromAscii("graph zu breit! dat geiht nich gut. breaking")); - aWBox.Execute(); - break; - } - mnXOffset = CalcXOffset( LevelUse[ i ] + nLevelSecObjCount ); - aWorkList.Clear(); - - l = 0; - BOOL bUsedPos; - - // find free positions for secondary objects - for ( j = 0; j < ( LevelUse[ i ] + nLevelSecObjCount ) ; j++ ) - { - Point aPos = CalcPos( i, j ); - bUsedPos = FALSE; - // is already occupied? - for ( k = 0; k < nLevelObjCount; k++ ) - { - if ( LevelList[ i ]->GetObject( k ) ) - if ( aPos == LevelList[ i ]->GetObject( k )->GetCalcPosPixel() ) - bUsedPos = TRUE; - } - // if its free, add to pool - if ( !bUsedPos ) - { - aPosArray[ l ] = aPos; - l++; - } - } - - // initial positioning for secodaries - for ( j = 0 ; j < nLevelSecObjCount ; j++ ) - { - pSwapWin = LevelSecList[ i ]->GetObject( j ); - aWorkList.Insert( pSwapWin, LIST_APPEND); - if ( pSwapWin ) - pSwapWin->SetCalcPosPixel( aPosArray[ j ] ); - } - dMinDist = CalcDistSum( LevelSecList[ i ] ); - - dMinDist = MIN( dMinDist, Impl_PermuteMin( *(LevelSecList[ i ]), aPosArray, aWorkList, dMinDist, 0, nLevelSecObjCount )); - - // set optimized positions - may still be wrong from later tries - for ( j = 0; j < nLevelSecObjCount; j++ ) - { - pSwapWin = aWorkList.GetObject( j ); - if ( pSwapWin ) - pSwapWin->SetCalcPosPixel( aPosArray[ j ] ); - } - if ( LevelUse[ i ] + LevelSecUse[ i ] > DEPPER_MAX_WIDTH ) - mnLevelOffset++; - } - if ( LevelUse[ i ] + LevelSecUse[ i ] > DEPPER_MAX_WIDTH ) - mnLevelOffset+= ( LevelUse[ i ] + LevelSecUse[ i ] ) / DEPPER_MAX_WIDTH ; - i++; - } - - mnMinDynXOffs = 0xffff; - -// and back again... - // get better results form already preoptimized upper and lower rows - - do - { - i--; - UpdateMainProgressBar(i, nScaleVal, nStep, TRUE); // TRUE ~ counting down - if ( LevelUse[ i ] + LevelSecUse[ i ] > DEPPER_MAX_WIDTH ) - mnLevelOffset-= ( LevelUse[ i ] + LevelSecUse[ i ] ) / DEPPER_MAX_WIDTH ; - ObjectWin* pSwapWin; - ULONG nLevelObjCount = LevelList[ i ]->Count(); - mnXOffset = CalcXOffset( nLevelObjCount ); - aWorkList.Clear(); - - for ( j = 0; j < nLevelObjCount; j++ ) - { - pSwapWin = LevelList[ i ]->GetObject( j ); - aWorkList.Insert( pSwapWin, LIST_APPEND); - Point aPos = CalcPos( i, j ); - aPosArray[ j ] = aPos; -//no need to do this stuff....... ????? - if ( pSwapWin ) - pSwapWin->SetCalcPosPixel( aPosArray[ j ] ); - } - - double dMinDist = CalcDistSum( LevelList[ i ], BOTH ); - - dMinDist = MIN( dMinDist, Impl_PermuteMin( *(LevelList[ i ]), aPosArray, aWorkList, dMinDist, 0, nLevelObjCount, BOTH )); -// wrong position for remaping - keep old positions for comparing - for ( j = 0; j < nLevelObjCount; j++ ) - { - pSwapWin = aWorkList.GetObject( j ); - if ( pSwapWin ) -// pSwapWin->SetCalcPosPixel( mpBaseWin->LogicToPixel( aPosArray[ j ] )); - pSwapWin->SetCalcPosPixel( aPosArray[ j ] ); - } - - if ( LevelSecList[ i ] != NULL ) - { - ULONG nLevelSecObjCount = LevelSecList[ i ]->Count(); - mnXOffset = CalcXOffset( LevelUse[ i ] + nLevelSecObjCount ); - aWorkList.Clear(); - - l = 0; - BOOL bUsedPos; - - for ( j = 0; j < ( LevelUse[ i ] + nLevelSecObjCount ) ; j++ ) - { - Point aPos = CalcPos( i, j ); - bUsedPos = FALSE; -// could be faster - for ( k = 0; k < nLevelObjCount; k++ ) - { - if ( LevelList[ i ]->GetObject( k ) ) - if ( aPos == LevelList[ i ]->GetObject( k )->GetCalcPosPixel() ) - bUsedPos = TRUE; - } - if ( !bUsedPos ) - { - aPosArray[ l ] = aPos; - l++; - } - } - - for ( j = 0 ; j < nLevelSecObjCount ; j++ ) - { - pSwapWin = LevelSecList[ i ]->GetObject( j ); - aWorkList.Insert( pSwapWin, LIST_APPEND); - if ( pSwapWin ) - pSwapWin->SetCalcPosPixel( aPosArray[ j ] ); - } - dMinDist = CalcDistSum( LevelSecList[ i ], BOTH ); - - dMinDist = MIN( dMinDist, Impl_PermuteMin( *(LevelSecList[ i ]), aPosArray, aWorkList, dMinDist, 0, nLevelSecObjCount, BOTH )); -// wrong position for remaping - keep old positions for comparing - for ( j = 0; j < nLevelSecObjCount; j++ ) - { - pSwapWin = aWorkList.GetObject( j ); - if ( pSwapWin ) - pSwapWin->SetCalcPosPixel( aPosArray[ j ] ); - } - } -// i--; - } while ( i != 0 ); - SetMainProgressBar( 100 ); - - ULONG nNewXSize = ( DEPPER_MAX_WIDTH + 1 ) * ( OBJWIN_X_SPACING + GetDefSize().Width() ); - - // ULONG aObjID = GetStart(pIdMapper, pObjLst) //hier mu man switchen GetStart/GetPrjStart oder so - - ObjectWin* pObjWin = ObjIdToPtr( pObjLst, aObjID); - - ULONG nNewYSize = pObjWin->GetCalcPosPixel().Y() + GetDefSize().Height() + 2 * OBJWIN_Y_SPACING; - if (( nUnvisYOffs + GetDefSize().Height()) > nNewYSize ) - nNewYSize = nUnvisYOffs + GetDefSize().Height(); - - MapMode aMapMode = GetDepWin()->GetMapMode(); - Size aTmpSize( (ULONG) (double(nNewXSize) * double( aMapMode.GetScaleX())), (ULONG) (double( nNewYSize) * double( aMapMode.GetScaleY()))); - - Size aNowSize( GetGraphWin()->GetSizePixel()); - - if ( GetDepWin()->LogicToPixel( aNowSize ).Width() > aTmpSize.Width() ) - aTmpSize.Width() = GetDepWin()->LogicToPixel( aNowSize ).Width() ; - - if ( GetDepWin()->LogicToPixel( aNowSize ).Height() > aTmpSize.Height() ) - aTmpSize.Height() = GetDepWin()->LogicToPixel( aNowSize ).Height() ; - -// if ( nZoomed <= 0 ) -// { -// mpBaseWin->SetSizePixel( aTmpSize ); -// mpGraphWin->SetTotalSize( aTmpSize ); -// mpGraphWin->EndScroll( 0, 0 ); -// } - -// now remap all objects - ULONG nAllObjCount = pObjLst->Count(); - Point aTmpPos; - for ( j = 0; j < nAllObjCount; j++ ) - { - pWin = pObjLst->GetObject( j ); - if ( pWin->IsVisible()) { - aTmpPos = pWin->GetCalcPosPixel(); - if ( pWin->mbVisited ) - { -// reserve space for unconnected - aTmpPos.X() -= mnMinDynXOffs; - aTmpPos.X() += GetDefSize().Width() + OBJWIN_X_SPACING; -// center window - aTmpPos.X() += GetDefSize().Width() / 2; - aTmpPos.X() -= pWin->PixelToLogic( pWin->GetSizePixel()).Width() / 2 ; - } - pWin->SetPosPixel( GetDepWin()->LogicToPixel( aTmpPos )); - } - } - aWorkList.Clear(); - GetDepWin()->EnablePaint( TRUE ); - GetDepWin()->Invalidate(); -//LevelListen loeschen H? Welche Levellisten? - -//Update all Connectors -// --> To be done: Don't call twice Object1-Connector-Object2 - ObjectWin* pObject1; - for ( i = 0 ; i < nObjCount ; i++) - { - pObject1 = pObjLst->GetObject( i ); - if ( pObject1->IsVisible()) - pObject1->UpdateConnectors(); - }; - return 0; -} - -void SolDep::WriteToErrorFile() -{ -//Needs some improvement - ObjectWin* pWin; - WarningBox aWBox( mpBaseWin, WB_OK, String::CreateFromAscii("graph too deep! dat geiht nich gut.\nlook at depper.err in your Tmp-directory\nfor list of objects")); - aWBox.Execute(); - char *tmpdir = getenv("TMP"); - char *errfilebasename = "depper.err"; - char *ErrFileName = (char*) malloc( strlen( tmpdir ) + strlen( errfilebasename) + 3 ); - *ErrFileName = '\0'; - strcat( ErrFileName, tmpdir ); - strcat( ErrFileName, "\\" ); - strcat( ErrFileName, errfilebasename ); - FILE* pErrFile = fopen( "depper.err", "w+" ); - if ( pErrFile ) - { - for ( USHORT i = 0; i < mpTravellerList->Count(); i++ ) - { - pWin = mpTravellerList->GetObject( i ); - fprintf( pErrFile, " %s -> \n", (pWin->GetBodyText()).GetBuffer()); - } - fclose( pErrFile ); - } -} +
+ maToolBox.CheckItem(TID_SOLDEP_HIDE_INDEPENDEND, IsHideMode());
+ GetDepWin()->Invalidate(); //repaint Main-View
+ }
+ break;
+ case TID_SOLDEP_SELECT_WORKSPACE:
+ if (mpStandLst)
+ {
+ if (GetVersion()) // Version dialog box
+ {
+ delete mpSolIdMapper;
+ delete mpStarWriter;
+ mpObjectList->ClearAndDelete();
+ ReadSource(TRUE);
+ }
+ }
+ break;
+ case TID_SOLDEP_BACK:
+ maToolBox.HideItem(TID_SOLDEP_BACK);
+ maToolBox.ShowItem(TID_SOLDEP_SELECT_WORKSPACE); //disabled for prj view (doubleclick ObjWin)
+ maToolBox.ShowItem(TID_SOLDEP_HIDE_INDEPENDEND); //disabled for prj view (doubleclick ObjWin)
+ maToolBox.ShowItem(TID_SOLDEP_FIND); //disabled for prj view (doubleclick ObjWin)
+ maToolBox.Resize();
+ TogglePrjViewStatus();
+ break;
+ }
+ return 0;
+}
+
+/*****************************************************************************/
+void SolDep::ToggleHideDependency()
+/*****************************************************************************/
+{
+ mbIsHide = !mbIsHide;
+ maToolBox.CheckItem(TID_SOLDEP_HIDE_INDEPENDEND, IsHideMode());
+ ObjectWin* pWin = GetObjectList()->GetObject( 0 );
+ pWin->ToggleHideMode();
+};
+
+/*****************************************************************************/
+BOOL SolDep::GetVersion()
+/*****************************************************************************/
+{
+ SolSelectVersionDlg aVersionDlg( GetDepWin(), mpStandLst );
+ if ( aVersionDlg.Execute() == RET_OK ) {
+ msVersionMajor = aVersionDlg.GetVersionMajor();
+ msVersionMinor = aVersionDlg.GetVersionMinor();
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void SolDep::InitContextMenueMainWnd()
+{
+ InitContextMenuePrjViewWnd( mpBaseWin );
+ return; // Disable not actually supported items
+
+ mpBaseWin->mpPopup->InsertItem( DEPPOPUP_AUTOARRANGE, String::CreateFromAscii("Autoarrange")) ;
+ mpBaseWin->mpPopup->InsertSeparator();
+ mpBaseWin->mpPopup->InsertItem( DEPPOPUP_READ_SOURCE, String::CreateFromAscii("Revert all changes") );
+ mpBaseWin->mpPopup->InsertSeparator();
+ mpBaseWin->mpPopup->InsertItem( DEPPOPUP_OPEN_SOURCE, String::CreateFromAscii("Open") );
+ mpBaseWin->mpPopup->InsertItem( DEPPOPUP_WRITE_SOURCE, String::CreateFromAscii("Save") );
+}
+
+void SolDep::InitContextMenuePrjViewWnd(DepWin* pBaseWin )
+{
+ // temp. disabled pBaseWin->mpPopup->InsertItem( DEPPOPUP_NEW, String::CreateFromAscii("New object") );
+ pBaseWin->mpPopup->InsertItem( DEPPOPUP_ZOOMIN, String::CreateFromAscii("Zoom in") );
+ pBaseWin->mpPopup->InsertItem( DEPPOPUP_ZOOMOUT, String::CreateFromAscii("Zoom out") );
+ pBaseWin->mpPopup->InsertSeparator();
+ // temp disabled pBaseWin->mpPopup->InsertItem( DEPPOPUP_CLEAR, String::CreateFromAscii("Clear") );
+ pBaseWin->mpPopup->InsertItem( DEPPOPUP_SHOW_TOOLBOX, String::CreateFromAscii("Show Toolbox") );
+}
+
+/*****************************************************************************/
+ObjectWin *SolDep::RemoveObject( USHORT nId, BOOL bDelete )
+/*****************************************************************************/
+{
+ Prj* pPrj;
+
+//hshtable auf stand halten
+ ObjectWin* pWin = RemoveObjectFromList( mpObjectList, mnSolWinCount, nId, FALSE );
+ if ( pWin )
+ {
+ ByteString aBodyText( pWin->GetBodyText() );
+ if( (pPrj = mpStarWriter->GetPrj( aBodyText )) )
+ {
+ mpStarWriter->Remove( pPrj );
+//cleanup ist teuer...
+ mpStarWriter->CleanUp();
+ delete pPrj;
+ }
+ else
+ DBG_ASSERT( FALSE, "project not found - write" );
+
+ mpSolIdMapper->Delete( aBodyText );
+ if ( bDelete )
+ delete pWin;
+ return pWin;
+ }
+ else
+ return NULL;
+}
+
+/*****************************************************************************/
+ULONG SolDep::AddObject( ByteString& rBodyText, BOOL bInteract )
+/*****************************************************************************/
+{
+ ULONG nObjectId;
+ if ( bInteract )
+ {
+ nObjectId = HandleNewPrjDialog( rBodyText );
+ }
+ else
+ {
+//hashtable auf stand halten
+ MyHashObject* pHObject;
+ nObjectId = AddObjectToList( mpBaseWin, mpObjectList, mnSolLastId, mnSolWinCount, rBodyText, FALSE );
+ pHObject = new MyHashObject( nObjectId, ObjIdToPtr(mpObjectList, nObjectId ));
+ mpSolIdMapper->Insert( rBodyText, pHObject );
+ }
+ return nObjectId;
+}
+
+/*****************************************************************************/
+ULONG SolDep::AddPrjObject( ByteString& rBodyText, BOOL bInteract )
+/*****************************************************************************/
+{
+ ULONG nObjectId;
+ if ( bInteract )
+ {
+ nObjectId = HandleNewDirectoryDialog( rBodyText );
+ }
+ else
+ {
+//hshtable auf stand halten
+ MyHashObject* pHObject;
+ nObjectId = AddObjectToList( mpBasePrjWin, mpObjectPrjList, mnPrjLastId, mnPrjWinCount, rBodyText );
+ pHObject = new MyHashObject( nObjectId, ObjIdToPtr( mpObjectPrjList, nObjectId ));
+ mpPrjIdMapper->Insert( rBodyText, pHObject ); // mpPrjIdMapper
+ }
+ return nObjectId;
+}
+
+/*****************************************************************************/
+USHORT SolDep::AddConnector( ObjectWin* pStartWin, ObjectWin* pEndWin )
+/*****************************************************************************/
+{
+// DBG_ASSERT( FALSE , "not yet" );
+ ByteString sEndName = pEndWin->GetBodyText();
+ ByteString sStartName = pStartWin->GetBodyText();
+
+ Prj* pPrj = mpStarWriter->GetPrj( sEndName );
+ if ( pPrj )
+ {
+ pPrj->AddDependencies( sStartName );
+ return AddConnectorToObjects( pStartWin, pEndWin );
+ }
+ else
+ {
+ DBG_ASSERT( FALSE , "non existing Project" );
+ return 1;
+ }
+}
+
+/*****************************************************************************/
+USHORT SolDep::RemoveConnector( ObjectWin* pStartWin, ObjectWin* pEndWin )
+/*****************************************************************************/
+{
+ SByteStringList* pPrjDeps = NULL;
+ ByteString sEndName = pEndWin->GetBodyText();
+ ByteString sStartName = pStartWin->GetBodyText();
+
+ Prj* pPrj = mpStarWriter->GetPrj( sEndName );
+ pPrjDeps = pPrj->GetDependencies( FALSE );
+ if ( pPrjDeps )
+ {
+ ByteString* pString;
+ ULONG nPrjDepsCount = pPrjDeps->Count();
+ for ( ULONG j = nPrjDepsCount; j > 0; j-- )
+ {
+ pString = pPrjDeps->GetObject( j - 1 );
+ if ( pString->GetToken( 0, '.') == sStartName )
+ pPrjDeps->Remove( pString );
+ }
+ }
+
+ return RemoveConnectorFromObjects( pStartWin, pEndWin );
+}
+
+/*****************************************************************************/
+void SolDep::RemoveAllObjects( ObjectList* pObjLst )
+/*****************************************************************************/
+{
+
+ Depper::RemoveAllObjects( pObjLst );
+
+ if ( mpSolIdMapper )
+ {
+ delete mpSolIdMapper;
+ mpSolIdMapper = NULL;
+ }
+ if ( mpStarWriter )
+ {
+ delete mpStarWriter;
+ mpStarWriter = NULL;
+ }
+}
+
+/*****************************************************************************/
+ULONG SolDep::GetStart(SolIdMapper* pIdMapper, ObjectList* pObjList)
+/*****************************************************************************/
+{
+// DBG_ASSERT( FALSE , "soldep" );
+ MyHashObject* pHObject = pIdMapper->Find( "null" );//null_project
+
+ if ( !pHObject ) {
+ ByteString sNullPrj = "null";//null_project
+ ULONG nObjectId = AddObject( sNullPrj, FALSE );
+ ObjIdToPtr( pObjList, nObjectId )->SetViewMask( 1 );
+ return nObjectId;
+ }
+
+ return pHObject->GetId();
+}
+
+/*****************************************************************************/
+ULONG SolDep::GetStartPrj(SolIdMapper* , ObjectList* )
+/*****************************************************************************/
+{
+// DBG_ASSERT( FALSE , "prjdep" );
+ MyHashObject* pHObject = mpPrjIdMapper->Find( ByteString( "null" ) ); //null_dir
+ if ( !pHObject )
+ {
+ ByteString bsNull("null");
+ ULONG nObjectId = AddPrjObject( bsNull, FALSE); //null_dir
+ return nObjectId;
+ }
+ else
+ return pHObject->GetId();
+}
+
+/*****************************************************************************/
+USHORT SolDep::OpenSource()
+/*****************************************************************************/
+{
+ if ( mpStandLst ) {
+ if ( GetVersion())
+ return ReadSource();
+ }
+ return 0;
+}
+
+/*****************************************************************************/
+USHORT SolDep::ReadSource(BOOL bUpdater)
+/*****************************************************************************/
+{
+ mpBaseWin->EnablePaint( FALSE );
+ mpBaseWin->Hide();
+ ULONG nObjectId, nHashedId;
+ ULONG i;
+ MyHashObject* pHObject;
+ ByteString* pStr;
+ ObjectWin *pStartWin, *pEndWin;
+
+ mpSolIdMapper = new SolIdMapper( 63997 );
+ if (mpStandLst && bUpdater)
+ {
+ mpStarWriter = new StarWriter( mpStandLst, msVersionMajor, msVersionMinor, TRUE );
+ } else
+ {
+ SolarFileList* pSolarFileList;
+ pSolarFileList = GetPrjListFromDir();
+ mpStarWriter = new StarWriter( pSolarFileList, TRUE );
+ }
+ ByteString sTitle( SOLDEPL_NAME );
+ if ( mpStarWriter->GetMode() == STAR_MODE_SINGLE_PARSE ) {
+ sTitle += ByteString( " - mode: single file [" );
+ sTitle += (ByteString) mpStarWriter->GetName();
+ sTitle += ByteString( "]" );
+ }
+ else if ( mpStarWriter->GetMode() == STAR_MODE_MULTIPLE_PARSE ) {
+ sTitle += ByteString( " - mode: multiple files [" );
+ sTitle += ByteString( "]" );
+ }
+ SetTitle( String( sTitle, RTL_TEXTENCODING_UTF8) );
+
+ ULONG nCount = mpStarWriter->Count();
+ for ( i=0; i<nCount; i++ )
+ {
+ Prj *pPrj = mpStarWriter->GetObject(i);
+ ByteString sPrjName = pPrj->GetProjectName();
+ nObjectId = AddObject( sPrjName, FALSE );
+ ObjIdToPtr( mpObjectList, nObjectId )->SetViewMask( 1 );
+ }
+ for ( i=0; i<nCount; i++ )
+ {
+ Prj *pPrj = mpStarWriter->GetObject(i);
+ SByteStringList *pLst = pPrj->GetDependencies( FALSE );
+ if ( pLst )
+ {
+ ULONG nDepCount = pLst->Count();
+ for ( ULONG m=0; m<nDepCount; m++)
+ {
+ pStr = pLst->GetObject(m);
+ pHObject = mpSolIdMapper->Find( *pStr );
+ /*if ( !pHObject )
+ {
+ // create new prj
+ Prj *pNewPrj = new Prj( *pStr );
+ ByteString sPrjName = pNewPrj->GetProjectName();
+ nObjectId = AddObject( sPrjName, FALSE );
+ pHObject = mpSolIdMapper->Find( *pStr );
+ ObjIdToPtr( mpObjectList, nObjectId )->SetViewMask( 2 );
+ }*/
+
+ if ( pHObject )
+ {
+ nHashedId = pHObject->GetId();
+ ByteString sF_Os2 = pPrj->GetProjectName();
+ pStr = &sF_Os2;
+ pHObject = mpSolIdMapper->Find( *pStr );
+ nObjectId = pHObject->GetId();
+ pStartWin = ObjIdToPtr( mpObjectList, nHashedId );
+ pEndWin = ObjIdToPtr( mpObjectList, nObjectId );
+ AddConnectorToObjects( pStartWin, pEndWin );
+ }
+ }
+ }
+ }
+ if (!IsPrjView())
+ {
+ AutoArrange( mpSolIdMapper, mpObjectList, GetStart(mpSolIdMapper,mpObjectList), 0, GetStart(mpSolIdMapper,mpObjectList) );
+ GetDepWin()->EnablePaint( TRUE );
+ }
+ return 0;
+}
+
+SolarFileList* SolDep::GetPrjListFromDir()
+{
+ SolarFileList* pSolarFileList = new SolarFileList();
+ String sPrjDir( String::CreateFromAscii( "prj" ));
+ String sBuildLst( String::CreateFromAscii( "build.lst" ));
+ DirEntry aCurrent( getenv( SOURCEROOT ) );
+
+ aCurrent.ToAbs();
+ Dir aDir( aCurrent, FSYS_KIND_DIR );
+
+ USHORT nEntries = aDir.Count();
+ if( nEntries )
+ {
+ UniStringList aSortDirList;
+ for ( USHORT n = 0; n < nEntries; n++ )
+ {
+ DirEntry& rEntry = aDir[n];
+ UniString aName( rEntry.GetName() );
+ if( aName.Len() && ( aName.GetChar(0) != '.' ) && rEntry.Exists() )
+ {
+ rEntry += DirEntry( sPrjDir );
+ rEntry += DirEntry( sBuildLst );
+ if (rEntry.Exists())
+ {
+ pSolarFileList->Insert( new String( rEntry.GetFull() ), LIST_APPEND );
+ ByteString aName_dbg(rEntry.GetFull(),RTL_TEXTENCODING_UTF8);
+ fprintf(stdout, "bla:%s\n", aName_dbg.GetBuffer());
+ }
+ }
+ }
+ }
+ if ( !pSolarFileList->Count() )
+ {
+ //is empty!! TBD
+ delete pSolarFileList;
+ return NULL;
+ }
+ return pSolarFileList;
+}
+
+/*****************************************************************************/
+USHORT SolDep::WriteSource()
+/*****************************************************************************/
+{
+/* zur Sicherheit deaktiviert
+ USHORT nMode = mpStarWriter->GetMode();
+ if ( nMode == STAR_MODE_SINGLE_PARSE ) {
+ ByteString sFileName = mpStarWriter->GetName();
+ if ( sFileName.Len()) {
+ mpStarWriter->Write( String( sFileName, RTL_TEXTENCODING_UTF8) );
+ mpStarWriter->RemoveProject( ByteString( "null")); //null_project
+ }
+ }
+ else if ( nMode == STAR_MODE_MULTIPLE_PARSE ) {
+ // *OBO*
+ //String sRoot = mpStarWriter->GetSourceRoot();
+ //nicht mehr untersttzt mpStarWriter->GetSourceRoot()
+ ByteString sFileName = mpStarWriter->GetName();
+ DirEntry aEntry( sFileName );
+ aEntry.ToAbs();
+ aEntry = aEntry.GetPath().GetPath().GetPath();
+ String sRoot = aEntry.GetFull();
+
+ if ( sRoot.Len()) {
+ mpStarWriter->RemoveProject( ByteString( "null")); //null_project
+ mpStarWriter->WriteMultiple( sRoot );
+ }
+ }
+*/
+ return 1;
+}
+
+USHORT SolDep::Load( const ByteString& rFileName )
+{
+// moved from depper class
+ DBG_ASSERT( FALSE , "you are dead!" );
+ SvFileStream aInFile( String( rFileName, RTL_TEXTENCODING_UTF8 ), STREAM_READ );
+ depper_head dh;
+ ULONG i;
+ ULONG nLoadOffs = mnSolLastId; //or Prj??
+ ObjectWin* pNewWin;
+ aInFile.Read( &dh, sizeof( dh ));
+
+ ULONG nObjCount = dh.nObjectCount;
+ ULONG nCnctrCount = dh.nCnctrCount;
+
+ for ( i=0; i < nObjCount ; i++ )
+ {
+ ObjectWin* pWin = new ObjectWin( mpBaseWin, WB_BORDER );
+ pWin->Load( aInFile );
+ pNewWin = ObjIdToPtr( mpObjectList, AddObjectToList( mpBaseWin, mpObjectList, mnSolLastId, mnSolWinCount, pWin->GetBodyText(), FALSE ));
+ pNewWin->SetId( nLoadOffs + pWin->GetId());
+ pNewWin->SetPosPixel( pWin->GetPosPixel());
+ pNewWin->SetSizePixel( pWin->GetSizePixel());
+ }
+
+ ULONG nStartId;
+ ULONG nEndId;
+// ueber addconnector fuehren!
+ for ( i=0; i < nCnctrCount ; i++ )
+ {
+ Connector* pCon = new Connector( mpBaseWin, WB_NOBORDER );
+ pCon->Load( aInFile );
+
+ nStartId = nLoadOffs + pCon->GetStartId();
+ nEndId = nLoadOffs + pCon->GetEndId();
+
+ ObjectWin* pStartWin = ObjIdToPtr( mpObjectList, nStartId );
+ ObjectWin* pEndWin = ObjIdToPtr( mpObjectList, nEndId );
+
+ pCon->Initialize( pStartWin, pEndWin );
+ }
+
+
+ return 0;
+}
+
+/*****************************************************************************/
+BOOL SolDep::ViewContent( ByteString& rObjectName )
+/*****************************************************************************/
+{
+ mpFocusWin = NULL;
+ SetPrjViewStatus(TRUE);
+
+ for ( ULONG i = 0; i < mpObjectList->Count() && !mpFocusWin; i++ )
+ if ( mpObjectList->GetObject( i )->HasFocus())
+ mpFocusWin = mpObjectList->GetObject( i );
+ //HideObjectsAndConnections( mpObjectList );
+ mpProcessWin->Resize();
+ GetDepWin()->Show();
+ return InitPrj( rObjectName );
+}
+
+/*****************************************************************************/
+BOOL SolDep::InitPrj( ByteString& rListName )
+/*****************************************************************************/
+{
+ ULONG nObjectId, nHashedId;
+ ULONG i, j;
+ MyHashObject* pHObject;
+ ByteString *pDepName;
+ ByteString *pFlagName;
+ Prj* pPrj;
+ ObjectWin *pStartWin, *pEndWin;
+ maToolBox.HideItem(TID_SOLDEP_SELECT_WORKSPACE);
+ maToolBox.HideItem(TID_SOLDEP_HIDE_INDEPENDEND);
+ maToolBox.HideItem(TID_SOLDEP_FIND);
+ maToolBox.ShowItem(TID_SOLDEP_BACK);
+ maToolBox.Invalidate();
+
+ //clean up
+ mpObjectPrjList->ClearAndDelete();
+ GetDepWin()->ClearConnectorList();
+ if (mpPrjIdMapper) delete mpPrjIdMapper;
+ mpPrjIdMapper = new SolIdMapper( 63997 ); //generate clean mapper
+ mnPrjWinCount = 0;
+ mnPrjLastId = 0;
+
+ ULONG nCount = mpStarWriter->Count();
+ GetDepWin()->EnablePaint( FALSE );
+ Point aPnt = GetGraphWin()->GetPosPixel();
+ Size aSize = GetGraphWin()->GetSizePixel();
+
+ GetGraphWin()->SetPosSizePixel( aPnt, aSize ); // Hier wird das Window gesetzt
+
+ BOOL bReturn = FALSE;
+
+ for ( i=0; i<nCount; i++ )
+ {
+// pPrj->GetProjectName() returns the name of
+// the project e.g. svtools
+ pPrj = mpStarWriter->GetObject(i);
+ ByteString sPrjName = pPrj->GetProjectName();
+ if ( sPrjName == rListName )
+ {
+ bReturn = TRUE;
+
+ mpPrj = mpStarWriter->GetObject(i);
+ ULONG nDirCount = mpPrj->Count();
+ for ( j=0; j<nDirCount; j++ )
+ {
+ CommandData *pData = mpPrj->GetObject(j);
+ fprintf( stdout, "\tProjectDir : %s\n",
+ pData->GetLogFile().GetBuffer());
+// pData->GetLogFile() contains internal project IDs
+// e.g. st_mkout etc.
+ if ( pData->GetLogFile() != "" )
+ {
+ ByteString sItem = pData->GetLogFile();
+ nObjectId = AddPrjObject( sItem, FALSE);
+// there may be faster ways......
+ ObjectWin *pWin = ObjIdToPtr( mpObjectPrjList, nObjectId );
+ pWin->SetViewMask( 0x0001 );
+// pData->GetPath() contains internal project directories
+// e.g. svtools/inc etc.
+ ByteString sPath = pData->GetPath();
+ pWin->SetTipText( sPath );
+ }
+ }
+
+// set connectors for dependencies here
+ for ( j=0; j<nDirCount; j++ )
+ {
+ CommandData *pData = mpPrj->GetObject(j);
+ SByteStringList *pDeps = pData->GetDependencies();
+ if ( pDeps )
+ {
+ ByteString sFlagName = pData->GetLogFile();
+ pFlagName = &sFlagName;
+ //pHObject = mpPrjIdMapper->Find( (*pFlagName).GetToken( 0, '.'));//mpSolIdMapper see ReadSource()
+ pHObject = mpPrjIdMapper->Find( sFlagName.GetToken( 0, '.'));
+ if (pHObject)
+ {
+
+ nObjectId = pHObject->GetId();
+
+ ULONG nDepCount = pDeps->Count();
+ for ( ULONG k=0; k<nDepCount; k++ )
+ {
+ pDepName = pDeps->GetObject(k);
+ pHObject = mpPrjIdMapper->Find( (*pDepName).GetToken( 0, '.'));
+ if (pHObject )
+ {
+ nHashedId = pHObject->GetId();
+ pStartWin = ObjIdToPtr( mpObjectPrjList, nHashedId );
+ pEndWin = ObjIdToPtr( mpObjectPrjList, nObjectId );
+
+ AddConnectorToObjects( pStartWin, pEndWin );
+ }
+ else
+ {
+ String sMessage;
+ sMessage += String::CreateFromAscii("can't find ");
+ sMessage += String( *pDepName, RTL_TEXTENCODING_UTF8 );
+ sMessage += String::CreateFromAscii(".\ndependency ignored");
+ WarningBox aBox( GetDepWin(), WB_OK, sMessage);
+ aBox.Execute();
+ }
+ }
+ }
+ }
+
+ }
+
+ break;
+ }
+ }
+ ByteString sNullDir = "null";
+ nObjectId = AddPrjObject( sNullDir, FALSE);
+ ObjectWin *pWin = ObjIdToPtr( mpObjectPrjList, nObjectId );
+ pWin->SetViewMask( 0x0001 );
+ mpGraphPrjWin->EnablePaint( TRUE );
+ //debug
+// int test_l = GetStartPrj(mpPrjIdMapper, mpObjectPrjList);
+// ObjectWin *pTestWin = ObjIdToPtr( mpObjectPrjList, test_l );
+ AutoArrange( mpPrjIdMapper, mpObjectPrjList, GetStartPrj(mpPrjIdMapper, mpObjectPrjList), 0, GetStartPrj(mpPrjIdMapper, mpObjectPrjList) );
+ mpGraphWin->Hide();
+ mpGraphPrjWin->Show();
+ mpGraphPrjWin->Invalidate();
+
+ return bReturn;
+}
+
+/*****************************************************************************/
+USHORT SolDep::CloseWindow()
+/*****************************************************************************/
+{
+
+ ((SystemWindow*)mpProcessWin)->Close();
+ return 0;
+}
+
+/*****************************************************************************/
+void SolDep::ShowHelp()
+/*****************************************************************************/
+{
+ SvFileStream aHelpFile( String::CreateFromAscii( "g:\\soldep.hlp" ), STREAM_READ );
+ String aHelpText;
+ ByteString aGetStr;
+
+ if ( aHelpFile.IsOpen() )
+ {
+ while ( aHelpFile.ReadLine( aGetStr ) )
+ {
+ aHelpText += String (aGetStr, RTL_TEXTENCODING_UTF8);
+ aHelpText += String::CreateFromAscii("\n");
+ }
+ }
+ else
+ aHelpText = String::CreateFromAscii("No Helpfile found.");
+
+ SolHelpDlg aHelpDlg( mpBaseWin, DtSodResId( RID_SD_DIALOG_HELP ));
+ aHelpDlg.maMLEHelp.SetText( aHelpText );
+ aHelpDlg.maMLEHelp.SetReadOnly();
+ aHelpDlg.maMLEHelp.EnableFocusSelectionHide( TRUE );
+ aHelpDlg.Execute();
+}
+
+/*****************************************************************************/
+BOOL SolDep::FindProject()
+/*****************************************************************************/
+{
+ SolFindProjectDlg aFindProjectDlg( GetDepWin(), GetObjectList() );
+ ObjectWin* pObjectWin = NULL;
+ mpObjectList->ResetSelectedObject();
+ if (IsHideMode())
+ {
+ GetDepWin()->Invalidate();
+ }
+
+ mpFocusWin=NULL;
+
+ if ( aFindProjectDlg.Execute() == RET_OK ) {
+ msProject = aFindProjectDlg.GetProject();
+ //now we have a project string
+
+ pObjectWin = mpObjectList->GetPtrByName( msProject );
+ if (pObjectWin)
+ {
+ mpObjectList->ResetSelectedObject();
+ MarkObjects( pObjectWin );
+ }
+ else
+ {
+ mpObjectList->ResetSelectedObject();
+ for ( USHORT i=0; i<mpObjectList->Count(); i++ )
+ {
+ ObjectWin* pObjectWin = mpObjectList->GetObject( i );
+ if ( !pObjectWin->IsTop() )
+ pObjectWin->SetViewMask(FALSE);
+ }
+ }
+ }
+ return FALSE;
+}
+
+BOOL SolDep::MarkObjects( ObjectWin* pObjectWin )
+{
+ if (pObjectWin)
+ {
+ if (!(pObjectWin->IsNullObject()))
+ {
+ pObjectWin->SetMarkMode( MARKMODE_SELECTED );
+ pObjectWin->MarkNeeded();
+ pObjectWin->MarkDepending();
+ if (IsHideMode())
+ {
+ GetDepWin()->Invalidate();
+ }
+ } else
+ {
+ fprintf(stdout,"null\n");
+ }
+ }
+ return TRUE;
+}
+
+void SolDep::Resize()
+{
+//funzt! mu aber von der applikation aufgerufen werden.
+ Point aOutPos = Point( 0, 0 );
+ Size aOutSize = mpProcessWin->GetOutputSizePixel();
+ // calculate output size
+ ULONG nTaskHeight = maToolBox.CalcWindowSizePixel().Height();
+ ULONG nTaskWidth = maToolBox.CalcWindowSizePixel().Width();
+ Size aSize( aOutSize.Width(), nTaskHeight );
+
+// ULONG nMenuHeight = 0;
+ Point aGraphWinPos = Point(0,0);
+ Size aGraphWinSize = Size(0,0);
+
+//wei nicht wie: nMenuHeight = aMenuBar.GetWindow()->GetSizePixel().Height(); //Hhe des Menues
+
+ //aInRect = pTBManager->Resize( Rectangle( aOutPos, aOutSize );
+ // Set Docking-Rectangle for ToolBar
+ Rectangle aInRect;
+
+ if (( !maToolBox.IsFloatingMode() ) && ( maToolBox.GetAlign() == WINDOWALIGN_TOP ))
+ {
+ // waagerechte Toolbar oben
+ maToolBox.SetPosSizePixel( aOutPos, Size( aOutSize.Width(), maToolBox.CalcWindowSizePixel().Height()));
+ if( maToolBox.IsVisible())
+ {
+ Point aOutPosTmp;
+ Size aOutSizeTmp;
+ aOutPosTmp = Point( aOutPos.X(), aOutPos.Y() + maToolBox.CalcWindowSizePixel().Height());
+ aOutSizeTmp = Size( aOutSize.Width(), aOutSize.Height() - maToolBox.CalcWindowSizePixel().Height());
+ aInRect = Rectangle( aOutPosTmp, aOutSizeTmp );
+ aGraphWinPos = Point( 0, nTaskHeight );
+ aGraphWinSize = Size( aOutSize.Width(), aOutSize.Height() - nTaskHeight);
+ }
+ }
+ if (( !maToolBox.IsFloatingMode() ) && ( maToolBox.GetAlign() == WINDOWALIGN_BOTTOM ))
+ {
+ // waagerechte Toolbar unten
+ Point aTbPos = Point( aOutPos.X(), aOutPos.Y() + aOutSize.Height() - maToolBox.CalcWindowSizePixel().Height());
+ Size aTbSize = Size( aOutSize.Width(), maToolBox.CalcWindowSizePixel().Height());
+ maToolBox.SetPosSizePixel( aTbPos, aTbSize );
+ if( maToolBox.IsVisible())
+ {
+ Point aOutPosTmp;
+ Size aOutSizeTmp;
+ aOutPosTmp = Point( aOutPos.X(), aOutPos.Y() + maToolBox.CalcWindowSizePixel().Height());
+ aOutSizeTmp = Size( aOutSize.Width(), aOutSize.Height() - maToolBox.CalcWindowSizePixel().Height());
+ aInRect = Rectangle( aOutPosTmp, aOutSizeTmp );
+ aGraphWinPos = Point( 0, 0 );
+ aGraphWinSize = Size( aOutSize.Width(), aOutSize.Height() - nTaskHeight);
+ }
+ }
+ if (( !maToolBox.IsFloatingMode() ) && ( maToolBox.GetAlign() == WINDOWALIGN_LEFT ))
+ {
+ // senkrechte ToolBar links
+ maToolBox.SetPosSizePixel( aOutPos, Size( maToolBox.CalcWindowSizePixel().Width(), aOutSize.Height()));
+ if( maToolBox.IsVisible())
+ {
+ Point aOutPosTmp;
+ Size aOutSizeTmp;
+ aOutPosTmp = Point( aOutPos.X() + maToolBox.CalcWindowSizePixel().Width(), aOutPos.Y());
+ aOutSizeTmp = Size( aOutSize.Width()- maToolBox.CalcWindowSizePixel().Width(), aOutSize.Height());
+ aInRect = Rectangle( aOutPosTmp, aOutSizeTmp );
+ aGraphWinPos = Point( nTaskWidth, 0 );
+ aGraphWinSize = Size( aOutSize.Width() - nTaskWidth, aOutSize.Height());
+ }
+ }
+ if (( !maToolBox.IsFloatingMode() ) && ( maToolBox.GetAlign() == WINDOWALIGN_RIGHT ))
+ {
+ // senkrechte ToolBar rechts
+ Point aTbPos = Point( aOutPos.X() + aOutSize.Width() - maToolBox.CalcWindowSizePixel().Width(), aOutPos.Y());
+ Size aTbSize= Size( maToolBox.CalcWindowSizePixel().Width(), aOutSize.Height());
+ maToolBox.SetPosSizePixel( aTbPos, aTbSize);
+ if( maToolBox.IsVisible())
+ {
+ Point aOutPosTmp;
+ Size aOutSizeTmp;
+ aOutPosTmp = Point( aOutPos.X() + maToolBox.CalcWindowSizePixel().Width(), aOutPos.Y());
+ aOutSizeTmp = Size( aOutSize.Width()- maToolBox.CalcWindowSizePixel().Width(), aOutSize.Height());
+ aInRect = Rectangle( aOutPosTmp, aOutSizeTmp );
+ aGraphWinPos = Point( 0, 0 );
+ aGraphWinSize = Size( aOutSize.Width() - nTaskWidth, aOutSize.Height());
+ }
+ }
+
+ Rectangle rout = Rectangle( Point( 0,0 ), aOutSize ); //OutputToScreenPixel( aOutPos )
+ Rectangle rin = Rectangle( Point( 0,0 ),//OutputToScreenPixel( Point( aOutPos.X() - 20, aInRect.Top())
+ Size( aOutSize.Width(), aOutSize.Height()));
+/*
+ Rectangle rout = mpProcessWin->OutputToScreenPixel( aOutPos );
+ Rectangle rin = Rectangle( Point( 0,0 ),//OutputToScreenPixel( Point( aOutPos.X() - 20, aInRect.Top())
+ Size( aOutSize.Width(), aOutSize.Height()));
+*/
+ maToolBox.SetDockingRects( rout, rin );
+
+ BOOL bFloating = maToolBox.IsFloatingMode();
+
+ if ( bFloating )
+ {
+ GetGraphWin()->SetPosSizePixel(Point(0,0),aOutSize);
+ //if (IsPrjView() && (mpPrjDep)) mpPrjDep->Resize();
+ if (maToolBox.IsVisible()) maToolBox.Show();
+ } else
+ {
+ GetGraphWin()->SetPosSizePixel( aGraphWinPos, aGraphWinSize );
+ }
+ if (maToolBox.IsVisible()) maToolBox.Show();
+}
+
+USHORT SolDep::AddConnectorPrjView( ObjectWin* pStartWin, ObjectWin* pEndWin )
+{
+// DBG_ASSERT( FALSE , "not yet" );
+ ByteString sEndName = pEndWin->GetBodyText();
+ ByteString sStartName = pStartWin->GetBodyText();
+ if ( sStartName != ByteString("null"))
+ {
+ CommandData* pEndData = mpPrj->GetDirectoryData( sEndName );
+ SByteStringList* pDeps = pEndData->GetDependencies();
+ if ( pDeps )
+ pDeps->PutString( &sStartName );
+ else
+ {
+ pDeps = new SByteStringList();
+ pEndData->SetDependencies( pDeps );
+ pDeps->PutString( &sStartName );
+ pEndData->GetDependencies();
+ }
+ }
+ return AddConnectorToObjects( pStartWin, pEndWin );
+}
+
+USHORT SolDep::RemoveConnectorPrjView( ObjectWin* pStartWin, ObjectWin* pEndWin )
+{
+ ByteString sEndName = pEndWin->GetBodyText();
+ ByteString sStartName = pStartWin->GetBodyText();
+ CommandData* pEndData = mpPrj->GetDirectoryData( sEndName );
+ SByteStringList* pDeps = pEndData->GetDependencies();
+ if ( pDeps )
+ {
+ ByteString* pString;
+ ULONG nDepsCount = pDeps->Count();
+ for ( ULONG j = nDepsCount; j > 0; j-- )
+ {
+ pString = pDeps->GetObject( j - 1 );
+ if ( pString->GetToken( 0, '.') == sStartName )
+ pDeps->Remove( pString );
+ }
+ }
+ return RemoveConnectorFromObjects( pStartWin, pEndWin );
+}
+
+USHORT SolDep::AutoArrange( SolIdMapper* pIdMapper, ObjectList* pObjLst, ULONG nTopId, ULONG nBottmId, ULONG aObjID )
+{
+ AutoArrangeDlgStart();
+ OptimizePos(pIdMapper, pObjLst, nTopId, nBottmId, aObjID );
+ AutoArrangeDlgStop();
+ return 0;
+}
+
+Point SolDep::CalcPos( USHORT nSet, USHORT nIndex )
+{
+ int nRowIndex = nIndex / DEPPER_MAX_WIDTH;
+ ULONG nPosX = mnXOffset + nRowIndex % 3 * GetDefSize().Width() / 3 + ( nIndex - ( DEPPER_MAX_WIDTH * nRowIndex )) * (GetDefSize().Width() + OBJWIN_X_SPACING );
+
+ ULONG nPosY = ( nSet + mnLevelOffset + nRowIndex ) * ( GetDefSize().Height() + OBJWIN_Y_SPACING ) + OBJWIN_Y_SPACING;
+ Point aPos( nPosX, nPosY );
+ return aPos;
+}
+
+ULONG SolDep::CalcXOffset( ULONG nObjectsToFit )
+{
+ long nDynXOffs;
+ long nXMiddle;
+ ULONG nTrigger;
+
+ nXMiddle = GetDepWin()->PixelToLogic( GetDepWin()->GetSizePixel()).Width() / 2;
+ if ( nObjectsToFit > DEPPER_MAX_WIDTH )
+ nObjectsToFit = DEPPER_MAX_WIDTH - 1 + DEPPER_MAX_WIDTH % 2;
+ nTrigger = ( nObjectsToFit - 1 ) / 2;
+ nDynXOffs = ( GetDefSize().Width() + OBJWIN_X_SPACING ) * nTrigger;
+ ULONG nXOffs = nXMiddle - nDynXOffs;
+
+ if ( ULONG(nXMiddle - nDynXOffs) < mnMinDynXOffs )
+ mnMinDynXOffs = nXMiddle - nDynXOffs;
+
+ return nXOffs;
+
+}
+
+double SolDep::CalcDistSum( ObjWinList* pObjList, DistType eDistType )
+{
+ ObjectWin* pWin;
+ Connector* pCon;
+ ULONG nObjCount = pObjList->Count();
+ double dRetVal = 0;
+ double dWinVal;
+ USHORT i, j;
+ BOOL bIsStart;
+
+ for ( i = 0; i < nObjCount; i++ )
+ {
+ pWin = pObjList->GetObject( i );
+
+ if ( pWin && pWin->IsVisible())
+ {
+ j = 0;
+ dWinVal = 0;
+ while ( (pCon = pWin->GetConnector( j )) )
+ {
+ if ( pCon->IsVisible()) {
+ bIsStart = pCon->IsStart( pWin );
+ if ( eDistType != BOTH )
+ if ( eDistType == TOPDOWN )
+ {
+ if ( bIsStart )
+ {
+ pCon->UpdatePosition( pWin, FALSE );
+ dWinVal += pCon->GetLen() * pWin->mnHeadDist;
+ }
+ }
+ else
+ {
+ if ( !bIsStart )
+ {
+ pCon->UpdatePosition( pWin, FALSE );
+ dWinVal += pCon->GetLen() * pWin->mnRootDist;
+ }
+
+ }
+ else
+ {
+ pCon->UpdatePosition( pWin, FALSE );
+ if ( !bIsStart )
+ dWinVal += pCon->GetLen() * ( pWin->mnHeadDist + 1 );
+ else
+ dWinVal += pCon->GetLen() * pWin->mnRootDist;
+ }
+ }
+ j++;
+ }
+// if ( j != 0 )
+// dWinVal /= j;
+ dRetVal += dWinVal;
+ }
+ }
+
+ return dRetVal;
+}
+
+USHORT SolDep::Impl_Traveller( ObjectWin* pWin, USHORT nDepth )
+{
+ USHORT i = 0;
+ ObjectWin* pNewWin;
+ Connector* pCon;
+
+ nDepth++;
+
+ USHORT nMaxDepth = nDepth;
+
+ pWin->mbVisited = TRUE;
+ pWin->mnRootDist = Max ( nDepth, pWin-> mnRootDist );
+ if ( nDepth > DEPPER_MAX_DEPTH )
+ {
+ DBG_ASSERT( nDepth != DEPPER_MAX_DEPTH + 1, "Ringabhngigkeit!" );
+ nDepth++;
+ return DEP_ENDLES_RECURSION_FOUND;
+ }
+
+ while ( (pCon = pWin->GetConnector( i )) )
+ {
+ if ( pCon->IsStart( pWin )&& pCon->IsVisible() ) //removed: don't show null_project
+ {
+ pNewWin = pCon->GetOtherWin( pWin );
+ nMaxDepth = Max( Impl_Traveller( pNewWin, nDepth ), nMaxDepth );
+ if( nMaxDepth == DEP_ENDLES_RECURSION_FOUND )
+ {
+ mpTravellerList->Insert( pWin, LIST_APPEND );
+ return DEP_ENDLES_RECURSION_FOUND;
+ }
+ }
+ i++;
+ }
+ pWin->mnHeadDist = MAX( pWin->mnHeadDist, nMaxDepth - nDepth );
+ return nMaxDepth;
+}
+
+
+double SolDep::Impl_PermuteMin( ObjWinList& rObjList, Point* pPosArray, ObjWinList& rResultList, double dMinDist, ULONG nStart, ULONG nSize, DistType eDistType )
+{
+
+ ULONG i, j, l;
+ ULONG nEnd = nStart + nSize;
+ ObjectWin* pSwapWin;
+ ULONG nLevelObjCount = rObjList.Count();
+
+//dont use full recusion for more than 6 objects
+ if ( nLevelObjCount > 6 )
+ {
+ srand(( unsigned ) time( NULL ));
+
+ ULONG nIdx1, nIdx2;
+ for ( i = 0; i < 101; i++ )
+ {
+ UpdateSubProgrssBar(i);
+ for ( j = 0; j < 100; j++ )
+ {
+ nIdx1 = (ULONG) ( double( rand() ) / RAND_MAX * nLevelObjCount );
+ while ( rObjList.GetObject( nIdx1 ) == NULL )
+ nIdx1 = (ULONG) ( double( rand() ) / RAND_MAX * nLevelObjCount );
+ nIdx2 = (ULONG) ( double( rand() ) / RAND_MAX * nLevelObjCount );
+ while ( nIdx1 == nIdx2 || nIdx2 == nLevelObjCount )
+ nIdx2 = (ULONG) ( double( rand() ) / RAND_MAX * nLevelObjCount );
+
+ pSwapWin = rObjList.GetObject( nIdx1 );
+ if ( pSwapWin )
+ pSwapWin->SetCalcPosPixel( pPosArray[ nIdx2 ] );
+ pSwapWin = rObjList.Replace( pSwapWin, nIdx2 );
+ if ( pSwapWin )
+ pSwapWin->SetCalcPosPixel( pPosArray[ nIdx1 ] );
+ rObjList.Replace( pSwapWin, nIdx1 );
+
+ double dCurDist = CalcDistSum( &rObjList, eDistType );
+
+ if ( dCurDist < dMinDist )
+ {
+ dMinDist = dCurDist;
+ rResultList.Clear();
+ for ( l = 0; l < nLevelObjCount; l++ )
+ {
+ pSwapWin = rObjList.GetObject( l );
+ rResultList.Insert( pSwapWin, LIST_APPEND);
+ }
+ }
+// if ( dCurDist > dMinDist * 1.5 )
+ if ( dCurDist > dMinDist * 15 )
+ {
+ pSwapWin = rObjList.GetObject( nIdx1 );
+ if ( pSwapWin )
+ pSwapWin->SetCalcPosPixel( pPosArray[ nIdx2 ] );
+ pSwapWin = rObjList.Replace( pSwapWin, nIdx2 );
+ if ( pSwapWin )
+ pSwapWin->SetCalcPosPixel( pPosArray[ nIdx1 ] );
+ rObjList.Replace( pSwapWin, nIdx1 );
+ }
+ }
+ }
+ }
+ else
+ {
+ for ( i = nStart ; i < nEnd; i++)
+ {
+ if ( nSize > 1 )
+ {
+ pSwapWin = rObjList.GetObject( i );
+ pSwapWin = rObjList.Replace( pSwapWin, nStart );
+ rObjList.Replace( pSwapWin, i );
+ double dPermuteDist = Impl_PermuteMin( rObjList, pPosArray, rResultList, dMinDist, nStart + 1, nSize - 1, eDistType );
+ dMinDist = MIN( dMinDist, dPermuteDist);
+ pSwapWin = rObjList.GetObject( i );
+ pSwapWin = rObjList.Replace( pSwapWin, nStart );
+ rObjList.Replace( pSwapWin, i );
+
+ }
+ else
+ {
+ for ( l = 0; l < nLevelObjCount; l++ )
+ {
+ pSwapWin = rObjList.GetObject( l );
+ if ( pSwapWin )
+ pSwapWin->SetCalcPosPixel( pPosArray[ l ] );
+ }
+
+ double dCurDist = CalcDistSum( &rObjList, eDistType );
+
+ if ( dCurDist < dMinDist )
+ {
+ dMinDist = dCurDist;
+ rResultList.Clear();
+ for ( l = 0; l < nLevelObjCount; l++ )
+ {
+ pSwapWin = rObjList.GetObject( l );
+ rResultList.Insert( pSwapWin, LIST_APPEND);
+ }
+ }
+
+ }
+ }
+ }
+
+ return dMinDist;
+}
+
+
+USHORT SolDep::OptimizePos(SolIdMapper* pIdMapper, ObjectList* pObjLst, ULONG nTopId, ULONG nBottmId, ULONG aObjID )
+{
+ ObjWinList aWorkList;
+ ObjectWin* pWin;
+ Connector* pCon;
+ USHORT nRootDist = (USHORT) -1;
+ USHORT i, j, k, l, nRetVal;
+ USHORT LevelUse[ DEPPER_MAX_DEPTH ];
+ USHORT LevelSecUse[ DEPPER_MAX_DEPTH ];
+ ObjWinList* LevelList[ DEPPER_MAX_DEPTH ];
+ ObjWinList* LevelSecList[ DEPPER_MAX_DEPTH ];
+ Point aPosArray[ DEPPER_MAX_LEVEL_WIDTH * DEPPER_MAX_WIDTH ];
+
+ mnMinDynXOffs = 0xffff;
+
+ for ( i = 0; i < DEPPER_MAX_DEPTH; i++ )
+ {
+ LevelUse[ i ] = 0;
+ LevelList[ i ] = NULL;
+ LevelSecUse[ i ] = 0;
+ LevelSecList[ i ] = NULL;
+ }
+
+ GetDepWin()->EnablePaint( FALSE );
+
+ ULONG nObjCount = pObjLst->Count();
+ for ( i = 0; i < nObjCount; i++ )
+ {
+ pWin = pObjLst->GetObject( i );
+ if ( pWin->IsVisible()) {
+ pWin->mbVisited = FALSE;
+ pWin->mnHeadDist = 0;
+ pWin->mnRootDist = 0;
+
+ // find initial objects which need to be connected with
+ // root object
+ j = 0;
+ USHORT nStartCount = 0;
+ USHORT nEndCount = 0;
+ while ( (pCon = pWin->GetConnector( j )) )
+ {
+ if ( pCon->IsVisible()) { //null_project
+ if( pCon->IsStart( pWin ))
+ nStartCount++;
+ else
+ {
+ nEndCount = 1;
+ break;
+ }
+ }
+ j++;
+ }
+
+ if ( nStartCount > 0 && nEndCount == 0 )
+ if ( nTopId != pWin->GetId())
+ AddConnectorToObjects( pObjLst, nTopId, pWin->GetId());
+
+ }
+ }
+
+ pWin = ObjIdToPtr( pObjLst, nTopId );
+
+ if ( mpTravellerList )
+ {
+ mpTravellerList->Clear();
+ delete mpTravellerList;
+ }
+ mpTravellerList = new ObjWinList();
+ // set root and top distance
+ nRetVal = Impl_Traveller( pWin, nRootDist );
+
+ DBG_ASSERT( nRetVal < DEPPER_MAX_DEPTH , "zu tief" );
+ if ( nRetVal == DEP_ENDLES_RECURSION_FOUND )
+ {
+ WriteToErrorFile();
+ return nRetVal;
+ }
+
+ ULONG nUnvisited = 0;
+ ULONG nUnvisYOffs = 0;
+
+ // seperate mainstream, secondary and unconnected
+ for ( i = 0; i < nObjCount; i++ )
+ {
+ pWin = pObjLst->GetObject( i );
+ if ( pWin->IsVisible()) {
+ if (( pWin->mnHeadDist + pWin->mnRootDist ) == nRetVal )
+ {
+ if ( !LevelList[ pWin->mnHeadDist ] )
+ LevelList[ pWin->mnHeadDist ] = new ObjWinList;
+ LevelList[ pWin->mnHeadDist ]->Insert( pWin );
+ LevelUse[ pWin->mnHeadDist ]++;
+ }
+ else
+ if ( pWin->mbVisited )
+ {
+ if ( !LevelSecList[ nRetVal - pWin->mnRootDist ] )
+ LevelSecList[ nRetVal - pWin->mnRootDist ] = new ObjWinList;
+ LevelSecList[ nRetVal - pWin->mnRootDist ]->Insert( pWin );
+ LevelSecUse[ nRetVal - pWin->mnRootDist ]++;
+ }
+ else
+ {
+ // need to be arranged more intelligent...
+ Point aPos( 5, nUnvisYOffs );
+ pWin->SetCalcPosPixel( aPos );
+
+ Point aTmpPos = pWin->GetCalcPosPixel();
+ pWin->SetPosPixel( mpBaseWin->LogicToPixel( aTmpPos ));
+
+ nUnvisYOffs += pWin->PixelToLogic( pWin->GetSizePixel()).Height();
+ nUnvisited++;
+ }
+ }
+ }
+
+ mnLevelOffset = 0;
+
+ USHORT nScaleVal;
+
+ if ( nRetVal == 0 )
+ nScaleVal = 1;
+ else
+ nScaleVal = nRetVal;
+
+ i = 0;
+
+ USHORT nStep = 0;
+
+ while ( LevelList[ i ] )
+ {
+ UpdateMainProgressBar(i, nScaleVal, nStep);
+ DBG_ASSERT( LevelUse[ i ] == LevelList[ i ]->Count() , "level index im a..." );
+ ObjectWin* pSwapWin;
+ ULONG nLevelObjCount = LevelList[ i ]->Count();
+
+ if ( nLevelObjCount % 2 == 0 )
+ {
+ LevelList[ i ]->Insert( NULL, LIST_APPEND );
+ nLevelObjCount++;
+// LevelUse bleibt orginal...
+// LevelUse[ i ]++;
+ }
+
+// catch too big lists
+ DBG_ASSERT( nLevelObjCount < DEPPER_MAX_LEVEL_WIDTH * DEPPER_MAX_WIDTH , "graph zu breit! dat geiht nich gut. breaking" );
+ if ( nLevelObjCount >= DEPPER_MAX_LEVEL_WIDTH * DEPPER_MAX_WIDTH )
+ {
+ WarningBox aWBox( mpBaseWin, WB_OK, String::CreateFromAscii("graph zu breit! dat geiht nich gut. breaking"));
+ aWBox.Execute();
+ break;
+ }
+ mnXOffset = CalcXOffset( nLevelObjCount );
+ aWorkList.Clear();
+
+ // initial positioning for mainstream
+ for ( j = 0; j < nLevelObjCount; j++ )
+ {
+ pSwapWin = LevelList[ i ]->GetObject( j );
+ aWorkList.Insert( pSwapWin, LIST_APPEND);
+ Point aPos = CalcPos( i, j );
+ aPosArray[ j ] = aPos;
+ if ( pSwapWin )
+ pSwapWin->SetCalcPosPixel( aPosArray[ j ] );
+ }
+
+ double dMinDist = CalcDistSum( LevelList[ i ] );
+
+ // optimize mainstream order and return best matching list in "aWorkList"
+ dMinDist = MIN( dMinDist, Impl_PermuteMin( *(LevelList[ i ]), aPosArray, aWorkList, dMinDist, 0, nLevelObjCount ));
+
+ // set optimized positions - may still be wrong from later tries
+ for ( j = 0; j < nLevelObjCount; j++ )
+ {
+ pSwapWin = aWorkList.GetObject( j );
+ if ( pSwapWin )
+ pSwapWin->SetCalcPosPixel( aPosArray[ j ] );
+ }
+
+ if ( LevelSecList[ i ] != NULL )
+ {
+ ULONG nLevelSecObjCount = LevelSecList[ i ]->Count();
+ // expand list for better positioning
+ while ( nLevelSecObjCount + LevelUse[ i ] < DEPPER_MAX_WIDTH - 1 )
+ {
+ LevelSecList[ i ]->Insert( NULL, LIST_APPEND );
+ nLevelSecObjCount++;
+ }
+ if ( ( nLevelSecObjCount + LevelUse[ i ])% 2 == 0 )
+ {
+ LevelSecList[ i ]->Insert( NULL, LIST_APPEND );
+ nLevelSecObjCount++;
+ }
+
+ DBG_ASSERT( nLevelSecObjCount < DEPPER_MAX_LEVEL_WIDTH * DEPPER_MAX_WIDTH , "graph zu breit! dat geiht nich gut. breaking" );
+ if ( nLevelObjCount >= DEPPER_MAX_LEVEL_WIDTH * DEPPER_MAX_WIDTH )
+ {
+ WarningBox aWBox( mpBaseWin, WB_OK, String::CreateFromAscii("graph zu breit! dat geiht nich gut. breaking"));
+ aWBox.Execute();
+ break;
+ }
+ mnXOffset = CalcXOffset( LevelUse[ i ] + nLevelSecObjCount );
+ aWorkList.Clear();
+
+ l = 0;
+ BOOL bUsedPos;
+
+ // find free positions for secondary objects
+ for ( j = 0; j < ( LevelUse[ i ] + nLevelSecObjCount ) ; j++ )
+ {
+ Point aPos = CalcPos( i, j );
+ bUsedPos = FALSE;
+ // is already occupied?
+ for ( k = 0; k < nLevelObjCount; k++ )
+ {
+ if ( LevelList[ i ]->GetObject( k ) )
+ if ( aPos == LevelList[ i ]->GetObject( k )->GetCalcPosPixel() )
+ bUsedPos = TRUE;
+ }
+ // if its free, add to pool
+ if ( !bUsedPos )
+ {
+ aPosArray[ l ] = aPos;
+ l++;
+ }
+ }
+
+ // initial positioning for secodaries
+ for ( j = 0 ; j < nLevelSecObjCount ; j++ )
+ {
+ pSwapWin = LevelSecList[ i ]->GetObject( j );
+ aWorkList.Insert( pSwapWin, LIST_APPEND);
+ if ( pSwapWin )
+ pSwapWin->SetCalcPosPixel( aPosArray[ j ] );
+ }
+ dMinDist = CalcDistSum( LevelSecList[ i ] );
+
+ dMinDist = MIN( dMinDist, Impl_PermuteMin( *(LevelSecList[ i ]), aPosArray, aWorkList, dMinDist, 0, nLevelSecObjCount ));
+
+ // set optimized positions - may still be wrong from later tries
+ for ( j = 0; j < nLevelSecObjCount; j++ )
+ {
+ pSwapWin = aWorkList.GetObject( j );
+ if ( pSwapWin )
+ pSwapWin->SetCalcPosPixel( aPosArray[ j ] );
+ }
+ if ( LevelUse[ i ] + LevelSecUse[ i ] > DEPPER_MAX_WIDTH )
+ mnLevelOffset++;
+ }
+ if ( LevelUse[ i ] + LevelSecUse[ i ] > DEPPER_MAX_WIDTH )
+ mnLevelOffset+= ( LevelUse[ i ] + LevelSecUse[ i ] ) / DEPPER_MAX_WIDTH ;
+ i++;
+ }
+
+ mnMinDynXOffs = 0xffff;
+
+// and back again...
+ // get better results form already preoptimized upper and lower rows
+
+ do
+ {
+ i--;
+ UpdateMainProgressBar(i, nScaleVal, nStep, TRUE); // TRUE ~ counting down
+ if ( LevelUse[ i ] + LevelSecUse[ i ] > DEPPER_MAX_WIDTH )
+ mnLevelOffset-= ( LevelUse[ i ] + LevelSecUse[ i ] ) / DEPPER_MAX_WIDTH ;
+ ObjectWin* pSwapWin;
+ ULONG nLevelObjCount = LevelList[ i ]->Count();
+ mnXOffset = CalcXOffset( nLevelObjCount );
+ aWorkList.Clear();
+
+ for ( j = 0; j < nLevelObjCount; j++ )
+ {
+ pSwapWin = LevelList[ i ]->GetObject( j );
+ aWorkList.Insert( pSwapWin, LIST_APPEND);
+ Point aPos = CalcPos( i, j );
+ aPosArray[ j ] = aPos;
+//no need to do this stuff....... ?????
+ if ( pSwapWin )
+ pSwapWin->SetCalcPosPixel( aPosArray[ j ] );
+ }
+
+ double dMinDist = CalcDistSum( LevelList[ i ], BOTH );
+
+ dMinDist = MIN( dMinDist, Impl_PermuteMin( *(LevelList[ i ]), aPosArray, aWorkList, dMinDist, 0, nLevelObjCount, BOTH ));
+// wrong position for remaping - keep old positions for comparing
+ for ( j = 0; j < nLevelObjCount; j++ )
+ {
+ pSwapWin = aWorkList.GetObject( j );
+ if ( pSwapWin )
+// pSwapWin->SetCalcPosPixel( mpBaseWin->LogicToPixel( aPosArray[ j ] ));
+ pSwapWin->SetCalcPosPixel( aPosArray[ j ] );
+ }
+
+ if ( LevelSecList[ i ] != NULL )
+ {
+ ULONG nLevelSecObjCount = LevelSecList[ i ]->Count();
+ mnXOffset = CalcXOffset( LevelUse[ i ] + nLevelSecObjCount );
+ aWorkList.Clear();
+
+ l = 0;
+ BOOL bUsedPos;
+
+ for ( j = 0; j < ( LevelUse[ i ] + nLevelSecObjCount ) ; j++ )
+ {
+ Point aPos = CalcPos( i, j );
+ bUsedPos = FALSE;
+// could be faster
+ for ( k = 0; k < nLevelObjCount; k++ )
+ {
+ if ( LevelList[ i ]->GetObject( k ) )
+ if ( aPos == LevelList[ i ]->GetObject( k )->GetCalcPosPixel() )
+ bUsedPos = TRUE;
+ }
+ if ( !bUsedPos )
+ {
+ aPosArray[ l ] = aPos;
+ l++;
+ }
+ }
+
+ for ( j = 0 ; j < nLevelSecObjCount ; j++ )
+ {
+ pSwapWin = LevelSecList[ i ]->GetObject( j );
+ aWorkList.Insert( pSwapWin, LIST_APPEND);
+ if ( pSwapWin )
+ pSwapWin->SetCalcPosPixel( aPosArray[ j ] );
+ }
+ dMinDist = CalcDistSum( LevelSecList[ i ], BOTH );
+
+ dMinDist = MIN( dMinDist, Impl_PermuteMin( *(LevelSecList[ i ]), aPosArray, aWorkList, dMinDist, 0, nLevelSecObjCount, BOTH ));
+// wrong position for remaping - keep old positions for comparing
+ for ( j = 0; j < nLevelSecObjCount; j++ )
+ {
+ pSwapWin = aWorkList.GetObject( j );
+ if ( pSwapWin )
+ pSwapWin->SetCalcPosPixel( aPosArray[ j ] );
+ }
+ }
+// i--;
+ } while ( i != 0 );
+ SetMainProgressBar( 100 );
+
+ ULONG nNewXSize = ( DEPPER_MAX_WIDTH + 1 ) * ( OBJWIN_X_SPACING + GetDefSize().Width() );
+
+ // ULONG aObjID = GetStart(pIdMapper, pObjLst) //hier mu man switchen GetStart/GetPrjStart oder so
+
+ ObjectWin* pObjWin = ObjIdToPtr( pObjLst, aObjID);
+
+ ULONG nNewYSize = pObjWin->GetCalcPosPixel().Y() + GetDefSize().Height() + 2 * OBJWIN_Y_SPACING;
+ if (( nUnvisYOffs + GetDefSize().Height()) > nNewYSize )
+ nNewYSize = nUnvisYOffs + GetDefSize().Height();
+
+ MapMode aMapMode = GetDepWin()->GetMapMode();
+ Size aTmpSize( (ULONG) (double(nNewXSize) * double( aMapMode.GetScaleX())), (ULONG) (double( nNewYSize) * double( aMapMode.GetScaleY())));
+
+ Size aNowSize( GetGraphWin()->GetSizePixel());
+
+ if ( GetDepWin()->LogicToPixel( aNowSize ).Width() > aTmpSize.Width() )
+ aTmpSize.Width() = GetDepWin()->LogicToPixel( aNowSize ).Width() ;
+
+ if ( GetDepWin()->LogicToPixel( aNowSize ).Height() > aTmpSize.Height() )
+ aTmpSize.Height() = GetDepWin()->LogicToPixel( aNowSize ).Height() ;
+
+// if ( nZoomed <= 0 )
+// {
+// mpBaseWin->SetSizePixel( aTmpSize );
+// mpGraphWin->SetTotalSize( aTmpSize );
+// mpGraphWin->EndScroll( 0, 0 );
+// }
+
+// now remap all objects
+ ULONG nAllObjCount = pObjLst->Count();
+ Point aTmpPos;
+ for ( j = 0; j < nAllObjCount; j++ )
+ {
+ pWin = pObjLst->GetObject( j );
+ if ( pWin->IsVisible()) {
+ aTmpPos = pWin->GetCalcPosPixel();
+ if ( pWin->mbVisited )
+ {
+// reserve space for unconnected
+ aTmpPos.X() -= mnMinDynXOffs;
+ aTmpPos.X() += GetDefSize().Width() + OBJWIN_X_SPACING;
+// center window
+ aTmpPos.X() += GetDefSize().Width() / 2;
+ aTmpPos.X() -= pWin->PixelToLogic( pWin->GetSizePixel()).Width() / 2 ;
+ }
+ pWin->SetPosPixel( GetDepWin()->LogicToPixel( aTmpPos ));
+ }
+ }
+ aWorkList.Clear();
+ GetDepWin()->EnablePaint( TRUE );
+ GetDepWin()->Invalidate();
+//LevelListen loeschen H? Welche Levellisten?
+
+//Update all Connectors
+// --> To be done: Don't call twice Object1-Connector-Object2
+ ObjectWin* pObject1;
+ for ( i = 0 ; i < nObjCount ; i++)
+ {
+ pObject1 = pObjLst->GetObject( i );
+ if ( pObject1->IsVisible())
+ pObject1->UpdateConnectors();
+ };
+ return 0;
+}
+
+void SolDep::WriteToErrorFile()
+{
+//Needs some improvement
+ ObjectWin* pWin;
+ WarningBox aWBox( mpBaseWin, WB_OK, String::CreateFromAscii("graph too deep! dat geiht nich gut.\nlook at depper.err in your Tmp-directory\nfor list of objects"));
+ aWBox.Execute();
+ char *tmpdir = getenv("TMP");
+ char *errfilebasename = "depper.err";
+ char *ErrFileName = (char*) malloc( strlen( tmpdir ) + strlen( errfilebasename) + 3 );
+ *ErrFileName = '\0';
+ strcat( ErrFileName, tmpdir );
+ strcat( ErrFileName, "\\" );
+ strcat( ErrFileName, errfilebasename );
+ FILE* pErrFile = fopen( "depper.err", "w+" );
+ if ( pErrFile )
+ {
+ for ( USHORT i = 0; i < mpTravellerList->Count(); i++ )
+ {
+ pWin = mpTravellerList->GetObject( i );
+ fprintf( pErrFile, " %s -> \n", (pWin->GetBodyText()).GetBuffer());
+ }
+ fclose( pErrFile );
+ }
+}
|