diff options
-rw-r--r-- | basctl/source/basicide/bastype3.cxx | 413 |
1 files changed, 157 insertions, 256 deletions
diff --git a/basctl/source/basicide/bastype3.cxx b/basctl/source/basicide/bastype3.cxx index 025e7b411aed..471976a1caa5 100644 --- a/basctl/source/basicide/bastype3.cxx +++ b/basctl/source/basicide/bastype3.cxx @@ -2,9 +2,9 @@ * * $RCSfile: bastype3.cxx,v $ * - * $Revision: 1.15 $ + * $Revision: 1.16 $ * - * last change: $Author: sb $ $Date: 2002-07-03 15:48:15 $ + * last change: $Author: kz $ $Date: 2004-07-23 12:04:12 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -91,27 +91,19 @@ SV_IMPL_VARARR( EntryArray, SvLBoxEntry*); void __EXPORT BasicTreeListBox::RequestingChilds( SvLBoxEntry* pEntry ) { - BasicEntry* pUser = (BasicEntry*)pEntry->GetUserData(); - if ( ( pUser->GetType() == OBJTYPE_SUBOBJ ) || - ( pUser->GetType() == OBJTYPE_OBJECT ) ) + BasicEntryDescriptor aDesc( GetEntryDescriptor( pEntry ) ); + SfxObjectShell* pShell( aDesc.GetShell() ); + LibraryLocation eLocation( aDesc.GetLocation() ); + BasicEntryType eType( aDesc.GetType() ); + + if ( eType == OBJ_TYPE_SHELL ) { - // don't expand dialogs and controls (sbx dialogs removed) - /* - SbxObject* pObj = FindObject( pEntry ); - DBG_ASSERT( pObj, "RequestingChilds: Kein gueltiges Objekt"); - if ( pObj ) - ScanSbxObject( pObj, pEntry ); - */ + ImpCreateLibEntries( pEntry, pShell, eLocation ); } - else if ( pUser->GetType() == OBJTYPE_LIB ) + else if ( eType == OBJ_TYPE_LIBRARY ) { - String aLibName = GetEntryText( pEntry ); + String aLibName( aDesc.GetLibName() ); ::rtl::OUString aOULibName( aLibName ); - SvLBoxEntry* pParent = GetParent( pEntry ); - pUser = (BasicEntry*)pParent->GetUserData(); - DBG_ASSERT( pUser->GetType() == OBJTYPE_BASICMANAGER, "BasicManager?" ); - BasicManager* pBasMgr = ((BasicManagerEntry*)pUser)->GetBasicManager(); - SfxObjectShell* pShell = BasicIDE::FindDocShell( pBasMgr ); // check password BOOL bOK = TRUE; @@ -161,7 +153,10 @@ void __EXPORT BasicTreeListBox::RequestingChilds( SvLBoxEntry* pEntry ) ImpCreateLibSubEntries( pEntry, pShell, aLibName ); // exchange image - setEntryBitmap(pEntry, IMGID_LIB); + bool bDlgMode = ( nMode & BROWSEMODE_DIALOGS ) && !( nMode & BROWSEMODE_MODULES ); + Image aImage( IDEResId( bDlgMode ? RID_IMG_DLGLIB : RID_IMG_MODLIB ) ); + Image aImageHC( IDEResId( bDlgMode ? RID_IMG_DLGLIB_HC : RID_IMG_MODLIB_HC ) ); + SetEntryBitmaps( pEntry, aImage, aImageHC ); } else { @@ -173,8 +168,6 @@ void __EXPORT BasicTreeListBox::RequestingChilds( SvLBoxEntry* pEntry ) DBG_ERROR( "BasicTreeListBox::RequestingChilds: Unknown Type!" ); } - - void __EXPORT BasicTreeListBox::ExpandedHdl() { SvLBoxEntry* pEntry = GetHdlEntry(); @@ -192,42 +185,21 @@ void __EXPORT BasicTreeListBox::ExpandedHdl() } } - - -void BasicTreeListBox::ScanAllBasics() +void BasicTreeListBox::ScanAllEntries() { - ScanBasic( SFX_APP()->GetBasicManager(), Application::GetAppName() ); + ScanEntry( 0, LIBRARY_LOCATION_USER ); + ScanEntry( 0, LIBRARY_LOCATION_SHARE ); SfxObjectShell* pDocShell = SfxObjectShell::GetFirst(); while ( pDocShell ) { - if ( !pDocShell->ISA(BasicDocShell) ) - { - // Nur, wenn es ein dazugehoeriges Fenster gibt, damit nicht die - // Gecachten Docs, die nicht sichtbar sind ( Remot-Dokumente ) - BasicManager* pBasMgr = pDocShell->GetBasicManager(); - if ( ( pBasMgr != SFX_APP()->GetBasicManager() ) && ( SfxViewFrame::GetFirst( pDocShell ) ) ) - ScanBasic( pBasMgr, pDocShell->GetTitle( SFX_TITLE_FILENAME ) ); - } + // only if there's a corresponding window (not for remote documents) + if ( SfxViewFrame::GetFirst( pDocShell ) && !pDocShell->ISA( BasicDocShell ) ) + ScanEntry( pDocShell, LIBRARY_LOCATION_DOCUMENT ); + pDocShell = SfxObjectShell::GetNext( *pDocShell ); } } -/* -void BasicTreeListBox::ExpandTree( BasicManager* pBasMgr ) -{ - ULONG nRootPos = 0; - SvLBoxEntry* pRootEntry = GetEntry( nRootPos ); - // Falsch: - while ( pRootEntry && (((BasicEntry*)pRootEntry->GetUserData())->GetType() != OBJTYPE_BASICMANAGER ) ) - pRootEntry = GetEntry( ++nRootPos ); - - if ( pRootEntry ) - ExpandTree( pRootEntry ); -} -*/ - - - void BasicTreeListBox::ExpandTree( SvLBoxEntry* pRootEntry ) { DBG_ASSERT( pRootEntry, "Keine Wurzel ?" ); @@ -239,26 +211,12 @@ void BasicTreeListBox::ExpandTree( SvLBoxEntry* pRootEntry ) { // Nur die mit Childs, sonst waere ChildsOnDemand ueberfluessig if ( !IsEntryProtected( pLibEntry ) && GetChildCount( pLibEntry ) ) - { Expand( pLibEntry ); - // Im ObjectDlg nicht alles expandieren... - if ( !( nMode & BROWSEMODE_PROPS ) ) - { - SvLBoxEntry* pModOrObjEntry = FirstChild( pLibEntry ); - while ( pModOrObjEntry ) - { - Expand( pModOrObjEntry ); - pModOrObjEntry = NextSibling( pModOrObjEntry ); - } - } - } pLibEntry = NextSibling( pLibEntry ); } } - - void BasicTreeListBox::ExpandAllTrees() { ULONG nRootPos = 0; @@ -270,84 +228,13 @@ void BasicTreeListBox::ExpandAllTrees() } } - - -BYTE BasicTreeListBox::GetSelectedType() -{ - SvLBoxEntry* pEntry = GetCurEntry(); - - if ( !pEntry ) - return 0; - - USHORT nDepth = GetModel()->GetDepth( pEntry ); - if ( nDepth == 0 ) - return OBJTYPE_BASICMANAGER; - else if ( nDepth == 1 ) - return OBJTYPE_LIB; - - return ((BasicEntry*)pEntry->GetUserData())->GetType(); -} - - - -BasicManager* BasicTreeListBox::GetSelectedSbx( String& rLib, String& rModOrObj, String& rSubOrPropOrSObj ) -{ - // Methode kann eigentlich weg, wenn nicht mehr in den Apps !!! - // Die sollten dann auch direkt mit FindMethod() arbeiten! - String aTmpStr; - return GetSelectedSbx( rLib, rModOrObj, rSubOrPropOrSObj, aTmpStr ); -} - - - - -BasicManager* BasicTreeListBox::GetSelectedSbx( String& rLib, String& rModOrObj, String& rSubOrPropOrSObj, String& rPropOrSubInSObj ) -{ - SvLBoxEntry* pCurEntry = GetCurEntry(); - return GetSbx( pCurEntry, rLib, rModOrObj, rSubOrPropOrSObj, rPropOrSubInSObj ); -} - - - -BasicManager* BasicTreeListBox::GetSbx( SvLBoxEntry* pEntry, String& rLib, String& rModOrObj, String& rSubOrPropOrSObj, String& rPropOrSubInSObj ) -{ - rLib.Erase(); - rModOrObj.Erase(); - rSubOrPropOrSObj.Erase(); - rPropOrSubInSObj.Erase(); - BasicManager* pBasMgr = 0; - - while ( pEntry ) - { - USHORT nDepth = GetModel()->GetDepth( pEntry ); - switch ( nDepth ) - { - case 4: rPropOrSubInSObj = GetEntryText( pEntry ); - break; - case 3: rSubOrPropOrSObj = GetEntryText( pEntry ); - break; - case 2: rModOrObj = GetEntryText( pEntry ); - break; - case 1: rLib = GetEntryText( pEntry ); - break; - case 0: pBasMgr = ((BasicManagerEntry*)pEntry->GetUserData())->GetBasicManager(); - break; - } - pEntry = GetParent( pEntry ); - } - return pBasMgr; -} - - - - SbxVariable* BasicTreeListBox::FindVariable( SvLBoxEntry* pEntry ) { if ( !pEntry ) return 0; String aLib, aModOrObj, aSubOrPropOrSObj, aPropOrSubInSObj; - BasicManager* pBasMgr = 0; + SfxObjectShell* pShell = 0; EntryArray aEntries; while ( pEntry ) @@ -358,19 +245,22 @@ SbxVariable* BasicTreeListBox::FindVariable( SvLBoxEntry* pEntry ) case 4: case 3: case 2: - case 1: { - aEntries.C40_INSERT( SvLBoxEntry, pEntry, 0 ); - break; - } - case 0: pBasMgr = ((BasicManagerEntry*)pEntry->GetUserData())->GetBasicManager(); - break; + case 1: + { + aEntries.C40_INSERT( SvLBoxEntry, pEntry, 0 ); + } + break; + case 0: + { + pShell = ((BasicShellEntry*)pEntry->GetUserData())->GetShell(); + } + break; } pEntry = GetParent( pEntry ); } - DBG_ASSERT( pBasMgr, "Fuer den Eintrag keinen BasicManager gefunden!" ); SbxVariable* pVar = 0; - if ( pBasMgr && aEntries.Count() ) + if ( aEntries.Count() ) { for ( USHORT n = 0; n < aEntries.Count(); n++ ) { @@ -382,45 +272,36 @@ SbxVariable* BasicTreeListBox::FindVariable( SvLBoxEntry* pEntry ) switch ( pBE->GetType() ) { - case OBJTYPE_LIB: + case OBJ_TYPE_LIBRARY: { - pVar = pBasMgr->GetLib( aName ); + BasicManager* pBasMgr = pShell ? pShell->GetBasicManager() : SFX_APP()->GetBasicManager(); + if ( pBasMgr ) + pVar = pBasMgr->GetLib( aName ); } break; - case OBJTYPE_MODULE: + case OBJ_TYPE_MODULE: { DBG_ASSERT( pVar && pVar->IsA( TYPE(StarBASIC) ), "FindVariable: Ungueltiges Basic" ); pVar = ((StarBASIC*)pVar)->FindModule( aName ); } break; - case OBJTYPE_METHOD: - //case OBJTYPE_METHODINOBJ: // sbx dialogs removed + case OBJ_TYPE_METHOD: { DBG_ASSERT( pVar && ( (pVar->IsA( TYPE(SbModule) )) || (pVar->IsA( TYPE(SbxObject) )) ), "FindVariable: Ungueltiges Modul/Objekt" ); pVar = ((SbxObject*)pVar)->GetMethods()->Find( aName, SbxCLASS_METHOD ); } break; - case OBJTYPE_OBJECT: - case OBJTYPE_SUBOBJ: + case OBJ_TYPE_DIALOG: { // sbx dialogs removed - /* - DBG_ASSERT( pVar && pVar->IsA( TYPE(SbxObject) ), "FindVariable: Ungueltiges Objekt" ); - pVar = ((SbxObject*)pVar)->GetObjects()->Find( aName, SbxCLASS_OBJECT ); - */ } break; - case OBJTYPE_PROPERTY: + default: { - // sbx dialogs removed - /* - DBG_ASSERT( pVar && pVar->IsA( TYPE(SbxObject) ), "FindVariable: Ungueltiges Objekt(Property)" ); - pVar = ((SbxObject*)pVar)->GetProperties()->Find( aName, SbxCLASS_PROPERTY ); - */ + DBG_ERROR( "FindVariable: Unbekannter Typ!" ); + pVar = 0; } break; - default: DBG_ERROR( "FindVariable: Unbekannter Typ!" ); - pVar = 0; } if ( !pVar ) break; @@ -430,18 +311,18 @@ SbxVariable* BasicTreeListBox::FindVariable( SvLBoxEntry* pEntry ) return pVar; } -SbxItem BasicTreeListBox::GetSbxItem( SvLBoxEntry* pEntry ) +BasicEntryDescriptor BasicTreeListBox::GetEntryDescriptor( SvLBoxEntry* pEntry ) { SfxObjectShell* pShell = 0; + LibraryLocation eLocation = LIBRARY_LOCATION_UNKNOWN; String aLibName; String aName; String aMethodName; - USHORT nType = BASICIDE_TYPE_UNKNOWN; + BasicEntryType eType = OBJ_TYPE_UNKNOWN; if ( !pEntry ) - return SbxItem( SID_BASICIDE_ARG_SBX, pShell, aLibName, aName, aMethodName, nType ); + return BasicEntryDescriptor( pShell, eLocation, aLibName, aName, aMethodName, eType ); - BasicManager* pBasMgr = 0; EntryArray aEntries; while ( pEntry ) @@ -452,25 +333,27 @@ SbxItem BasicTreeListBox::GetSbxItem( SvLBoxEntry* pEntry ) case 4: case 3: case 2: - case 1: { - aEntries.C40_INSERT( SvLBoxEntry, pEntry, 0 ); - break; - } - case 0: pBasMgr = ((BasicManagerEntry*)pEntry->GetUserData())->GetBasicManager(); - break; + case 1: + { + aEntries.C40_INSERT( SvLBoxEntry, pEntry, 0 ); + } + break; + case 0: + { + BasicShellEntry* pBasicShellEntry = (BasicShellEntry*)pEntry->GetUserData(); + if ( pBasicShellEntry ) + { + pShell = pBasicShellEntry->GetShell(); + eLocation = pBasicShellEntry->GetLocation(); + eType = OBJ_TYPE_SHELL; + } + } + break; } pEntry = GetParent( pEntry ); } - DBG_ASSERT( pBasMgr, "Fuer den Eintrag keinen BasicManager gefunden!" ); - - if ( pBasMgr ) - { - pShell = BasicIDE::FindDocShell( pBasMgr ); - nType = BASICIDE_TYPE_SHELL; - } - - if ( pBasMgr && aEntries.Count() ) + if ( aEntries.Count() ) { for ( USHORT n = 0; n < aEntries.Count(); n++ ) { @@ -481,63 +364,124 @@ SbxItem BasicTreeListBox::GetSbxItem( SvLBoxEntry* pEntry ) switch ( pBE->GetType() ) { - case OBJTYPE_LIB: + case OBJ_TYPE_LIBRARY: { aLibName = GetEntryText( pLE ); - nType = BASICIDE_TYPE_LIBRARY; + eType = pBE->GetType(); } break; - case OBJTYPE_MODULE: + case OBJ_TYPE_MODULE: { aName = GetEntryText( pLE ); - nType = BASICIDE_TYPE_MODULE; + eType = pBE->GetType(); } break; - case OBJTYPE_METHOD: + case OBJ_TYPE_METHOD: { aMethodName = GetEntryText( pLE ); - nType = BASICIDE_TYPE_METHOD; + eType = pBE->GetType(); } break; - case OBJTYPE_OBJECT: + case OBJ_TYPE_DIALOG: { aName = GetEntryText( pLE ); - nType = BASICIDE_TYPE_DIALOG; + eType = pBE->GetType(); + } + break; + default: + { + DBG_ERROR( "GetEntryDescriptor: Unbekannter Typ!" ); + eType = OBJ_TYPE_UNKNOWN; } break; - default: DBG_ERROR( "GetSbxItem: Unbekannter Typ!" ); - nType = BASICIDE_TYPE_UNKNOWN; } - if ( nType == BASICIDE_TYPE_UNKNOWN ) + if ( eType == OBJ_TYPE_UNKNOWN ) break; } } - return SbxItem( SID_BASICIDE_ARG_SBX, pShell, aLibName, aName, aMethodName, nType ); + return BasicEntryDescriptor( pShell, eLocation, aLibName, aName, aMethodName, eType ); } - - -SbxObject* BasicTreeListBox::FindObject( SvLBoxEntry* pEntry ) +USHORT BasicTreeListBox::ConvertType( BasicEntryType eType ) { - SbxVariable* pVar = FindVariable( pEntry ); - if ( pVar && pVar->IsA( TYPE(SbxObject) ) ) - return (SbxObject*)pVar; - return 0; -} + USHORT nType = OBJ_TYPE_UNKNOWN; + switch ( eType ) + { + case OBJ_TYPE_SHELL: + { + nType = BASICIDE_TYPE_SHELL; + } + break; + case OBJ_TYPE_LIBRARY: + { + nType = BASICIDE_TYPE_LIBRARY; + } + break; + case OBJ_TYPE_MODULE: + { + nType = BASICIDE_TYPE_MODULE; + } + break; + case OBJ_TYPE_DIALOG: + { + nType = BASICIDE_TYPE_DIALOG; + } + break; + case OBJ_TYPE_METHOD: + { + nType = BASICIDE_TYPE_METHOD; + } + break; + } + return nType; +} -SbMethod* BasicTreeListBox::FindMethod( SvLBoxEntry* pEntry ) +bool BasicTreeListBox::IsValidEntry( SvLBoxEntry* pEntry ) { - SbxVariable* pVar = FindVariable( pEntry ); - if ( pVar && pVar->IsA( TYPE(SbMethod) ) ) - return (SbMethod*)pVar; - return 0; -} + bool bIsValid = false; + BasicEntryDescriptor aDesc( GetEntryDescriptor( pEntry ) ); + SfxObjectShell* pShell( aDesc.GetShell() ); + String aLibName( aDesc.GetLibName() ); + String aName( aDesc.GetName() ); + String aMethodName( aDesc.GetMethodName() ); + BasicEntryType eType( aDesc.GetType() ); + switch ( eType ) + { + case OBJ_TYPE_SHELL: + { + bIsValid = BasicIDE::HasShell( pShell ); + } + break; + case OBJ_TYPE_LIBRARY: + { + bIsValid = BasicIDE::HasModuleLibrary( pShell, aLibName ) || BasicIDE::HasDialogLibrary( pShell, aLibName ); + } + break; + case OBJ_TYPE_MODULE: + { + bIsValid = BasicIDE::HasModule( pShell, aLibName, aName ); + } + break; + case OBJ_TYPE_DIALOG: + { + bIsValid = BasicIDE::HasDialog( pShell, aLibName, aName ); + } + break; + case OBJ_TYPE_METHOD: + { + bIsValid = BasicIDE::HasMethod( pShell, aLibName, aName, aMethodName ); + } + break; + } + + return bIsValid; +} SbModule* BasicTreeListBox::FindModule( SvLBoxEntry* pEntry ) { @@ -547,36 +491,21 @@ SbModule* BasicTreeListBox::FindModule( SvLBoxEntry* pEntry ) return 0; } - - -SvLBoxEntry* BasicTreeListBox::FindLibEntry( StarBASIC* pLib ) +SvLBoxEntry* BasicTreeListBox::FindRootEntry( SfxObjectShell* pShell, LibraryLocation eLocation ) { - if ( !pLib ) - return 0; - ULONG nRootPos = 0; SvLBoxEntry* pRootEntry = GetEntry( nRootPos ); while ( pRootEntry ) { - BasicManager* pBasMgr = ((BasicManagerEntry*)pRootEntry->GetUserData())->GetBasicManager(); - DBG_ASSERT( pBasMgr, "Kein BasicManager?" ); - SvLBoxEntry* pLibEntry = FirstChild( pRootEntry ); - while ( pLibEntry ) - { - DBG_ASSERT( (((BasicEntry*)pLibEntry->GetUserData())->GetType() == OBJTYPE_LIB ), "Kein Libeintrag?" ); - StarBASIC* pL = pBasMgr->GetLib( GetEntryText( pLibEntry ) ); - if ( pL == pLib ) - return pLibEntry; - - pLibEntry = NextSibling( pLibEntry ); - } + DBG_ASSERT( (((BasicEntry*)pRootEntry->GetUserData())->GetType() == OBJ_TYPE_SHELL ), "Kein Shelleintrag?" ); + BasicShellEntry* pBasicShellEntry = (BasicShellEntry*)pRootEntry->GetUserData(); + if ( pBasicShellEntry && pBasicShellEntry->GetShell() == pShell && pBasicShellEntry->GetLocation() == eLocation ) + return pRootEntry; pRootEntry = GetEntry( ++nRootPos ); } return 0; } - - String CreateMgrAndLibStr( const String& rMgrName, const String& rLibName ) { String aName( '[' ); @@ -585,31 +514,3 @@ String CreateMgrAndLibStr( const String& rMgrName, const String& rLibName ) aName += rLibName; return aName; } - - - -String GetMgrFromMgrAndLib( const String& rMgrAndLib ) -{ - // Format: [XXXXXX].Lib - DBG_ASSERT( rMgrAndLib.GetTokenCount( '.' ) >= 2, "BasMgrAndLib ungueltig! (.)" ); - DBG_ASSERT( rMgrAndLib.GetTokenCount( ']' ) >= 2, "BasMgrAndLib ungueltig! (])" ); - String aLib( rMgrAndLib.GetToken( - rMgrAndLib.GetTokenCount( '.' ) - 1, '.' ) ); - String aBasMgrAndLib( rMgrAndLib ); - aBasMgrAndLib.Erase( aBasMgrAndLib.Len() - ( aLib.Len() + 1 ) ); - DBG_ASSERT( ( aBasMgrAndLib.Len() > 2 ) && ( aBasMgrAndLib.GetChar( 0 ) == '[' ) && ( aBasMgrAndLib.GetChar( aBasMgrAndLib.Len() - 1 ) == ']' ), "BasMgrAndLib ungueltig! ([...])" ); - String aBasMgr( aBasMgrAndLib, 1, (USHORT)(aBasMgrAndLib.Len()-2) ); - return aBasMgr; -} - - - -String GetLibFromMgrAndLib( const String& rMgrAndLib ) -{ - // Format: [XXXXXX].Lib - DBG_ASSERT( rMgrAndLib.GetTokenCount( '.' ) >= 2, "BasMgrAndLib ungueltig! (.)" ); - DBG_ASSERT( rMgrAndLib.GetTokenCount( ']' ) >= 2, "BasMgrAndLib ungueltig! (])" ); - String aLib( rMgrAndLib.GetToken( - rMgrAndLib.GetTokenCount( '.' ) - 1, '.' ) ); - return aLib; -} |