diff options
Diffstat (limited to 'soldep/source/objwin.cxx')
-rw-r--r-- | soldep/source/objwin.cxx | 1643 |
1 files changed, 820 insertions, 823 deletions
diff --git a/soldep/source/objwin.cxx b/soldep/source/objwin.cxx index baa24d41fce0..07eab4dd4cb7 100644 --- a/soldep/source/objwin.cxx +++ b/soldep/source/objwin.cxx @@ -1,824 +1,821 @@ -/*************************************************************************
- *
- * 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[] = {
- 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
-}
-
-void ObjectWin::DrawOutput( OutputDevice* pDevice, const Point& rOffset )
-/*****************************************************************************/
-{
- Size aWinSize = PixelToLogic( GetSizePixel() );
- Size aTextSize;
- ByteString sbt = msBodyText;
- aTextSize.Width() = GetTextWidth( String( msBodyText, RTL_TEXTENCODING_UTF8 ));
- aTextSize.Height() = GetTextHeight();
- Point aPos = GetPosPixel();
- Point aTextPos( aWinSize.Width() / 2 - aTextSize.Width() / 2,
- aWinSize.Height() / 2 - aTextSize.Height() / 2 );
- aTextPos += aPos;
- aPos = pDevice->PixelToLogic( aPos ) - rOffset;
- aTextPos = pDevice->PixelToLogic( aTextPos ) - rOffset;
- if ( msBodyText !="null" )
- {
- pDevice->SetFillColor( GetBackground().GetColor() );
- pDevice->DrawRect( Rectangle( aPos, pDevice->PixelToLogic( GetSizePixel() ) ) );
- Font aFont( GetFont() );
- Size aSize = aFont.GetSize();
- aSize = pDevice->PixelToLogic( aSize );
- aFont.SetSize( aSize );
- pDevice->SetFont( aFont );
- 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;
-}
-
-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;
+/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#include <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[] = { + 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 +} + +void ObjectWin::DrawOutput( OutputDevice* pDevice, const Point& rOffset ) +/*****************************************************************************/ +{ + Size aWinSize = PixelToLogic( GetSizePixel() ); + Size aTextSize; + ByteString sbt = msBodyText; + aTextSize.Width() = GetTextWidth( String( msBodyText, RTL_TEXTENCODING_UTF8 )); + aTextSize.Height() = GetTextHeight(); + Point aPos = GetPosPixel(); + Point aTextPos( aWinSize.Width() / 2 - aTextSize.Width() / 2, + aWinSize.Height() / 2 - aTextSize.Height() / 2 ); + aTextPos += aPos; + aPos = pDevice->PixelToLogic( aPos ) - rOffset; + aTextPos = pDevice->PixelToLogic( aTextPos ) - rOffset; + if ( msBodyText !="null" ) + { + pDevice->SetFillColor( GetBackground().GetColor() ); + pDevice->DrawRect( Rectangle( aPos, pDevice->PixelToLogic( GetSizePixel() ) ) ); + Font aFont( GetFont() ); + Size aSize = aFont.GetSize(); + aSize = pDevice->PixelToLogic( aSize ); + aFont.SetSize( aSize ); + pDevice->SetFont( aFont ); + 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; +} + +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 |