LCOV - code coverage report
Current view: top level - basctl/source/basicide - moduldlg.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 0 566 0.0 %
Date: 2015-06-13 12:38:46 Functions: 0 42 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : 
      21             : 
      22             : #include "basidesh.hrc"
      23             : 
      24             : #include "moduldlg.hxx"
      25             : #include "localizationmgr.hxx"
      26             : #include "basidesh.hxx"
      27             : 
      28             : #include <basic/basmgr.hxx>
      29             : #include <com/sun/star/script/XLibraryContainerPassword.hpp>
      30             : #include <comphelper/processfactory.hxx>
      31             : #include <sfx2/app.hxx>
      32             : #include <sfx2/dispatch.hxx>
      33             : #include <sfx2/request.hxx>
      34             : #include <svl/stritem.hxx>
      35             : #include <vcl/builderfactory.hxx>
      36             : #include <tools/diagnose_ex.h>
      37             : #include <xmlscript/xmldlg_imexp.hxx>
      38             : #include <svtools/treelistentry.hxx>
      39             : 
      40             : namespace basctl
      41             : {
      42             : 
      43             : using namespace ::com::sun::star;
      44             : using namespace ::com::sun::star::uno;
      45             : using namespace ::com::sun::star::resource;
      46             : 
      47             : 
      48             : // ExtTreeListBox
      49             : 
      50           0 : ExtTreeListBox::ExtTreeListBox(vcl::Window* pParent, WinBits nStyle)
      51           0 :     : TreeListBox(pParent, nStyle)
      52             : {
      53           0 : }
      54             : 
      55           0 : VCL_BUILDER_DECL_FACTORY(ExtTreeListBox)
      56             : {
      57           0 :     WinBits nWinBits = WB_TABSTOP;
      58           0 :     OString sBorder = VclBuilder::extractCustomProperty(rMap);
      59           0 :     if (!sBorder.isEmpty())
      60           0 :        nWinBits |= WB_BORDER;
      61           0 :     rRet = VclPtr<ExtTreeListBox>::Create(pParent, nWinBits);
      62           0 : }
      63             : 
      64           0 : bool ExtTreeListBox::EditingEntry( SvTreeListEntry* pEntry, Selection& )
      65             : {
      66           0 :     bool bRet = false;
      67             : 
      68           0 :     if ( pEntry )
      69             :     {
      70           0 :         sal_uInt16 nDepth = GetModel()->GetDepth( pEntry );
      71           0 :         if ( nDepth >= 2 )
      72             :         {
      73           0 :             EntryDescriptor aDesc = GetEntryDescriptor(pEntry);
      74           0 :             ScriptDocument aDocument( aDesc.GetDocument() );
      75           0 :             OUString aLibName( aDesc.GetLibName() );
      76           0 :             Reference< script::XLibraryContainer2 > xModLibContainer( aDocument.getLibraryContainer( E_SCRIPTS ), UNO_QUERY );
      77           0 :             Reference< script::XLibraryContainer2 > xDlgLibContainer( aDocument.getLibraryContainer( E_DIALOGS ), UNO_QUERY );
      78           0 :             if ( !( ( xModLibContainer.is() && xModLibContainer->hasByName( aLibName ) && xModLibContainer->isLibraryReadOnly( aLibName ) ) ||
      79           0 :                     ( xDlgLibContainer.is() && xDlgLibContainer->hasByName( aLibName ) && xDlgLibContainer->isLibraryReadOnly( aLibName ) ) ) )
      80             :             {
      81             :                 // allow editing only for libraries, which are not readonly
      82           0 :                 bRet = true;
      83           0 :             }
      84             :         }
      85             :     }
      86             : 
      87           0 :     return bRet;
      88             : }
      89             : 
      90           0 : bool ExtTreeListBox::EditedEntry( SvTreeListEntry* pEntry, const OUString& rNewText )
      91             : {
      92           0 :     if ( !IsValidSbxName(rNewText) )
      93             :     {
      94           0 :         ScopedVclPtrInstance<MessageDialog>::Create(this, IDE_RESSTR(RID_STR_BADSBXNAME))->Execute();
      95           0 :         return false;
      96             :     }
      97             : 
      98           0 :     OUString aCurText( GetEntryText( pEntry ) );
      99           0 :     if ( aCurText == rNewText )
     100             :         // nothing to do
     101           0 :         return true;
     102             : 
     103           0 :     EntryDescriptor aDesc = GetEntryDescriptor(pEntry);
     104           0 :     ScriptDocument aDocument( aDesc.GetDocument() );
     105             :     DBG_ASSERT( aDocument.isValid(), "ExtTreeListBox::EditedEntry: no document!" );
     106           0 :     if ( !aDocument.isValid() )
     107           0 :         return false;
     108           0 :     OUString aLibName( aDesc.GetLibName() );
     109           0 :     EntryType eType = aDesc.GetType();
     110             : 
     111             :     bool bSuccess = eType == OBJ_TYPE_MODULE ?
     112           0 :         RenameModule(this, aDocument, aLibName, aCurText, rNewText) :
     113           0 :         RenameDialog(this, aDocument, aLibName, aCurText, rNewText);
     114             : 
     115           0 :     if ( !bSuccess )
     116           0 :         return false;
     117             : 
     118           0 :     MarkDocumentModified( aDocument );
     119             : 
     120           0 :     if (SfxDispatcher* pDispatcher = GetDispatcher())
     121             :     {
     122           0 :         SbxItem aSbxItem( SID_BASICIDE_ARG_SBX, aDocument, aLibName, rNewText, ConvertType( eType ) );
     123             :         pDispatcher->Execute( SID_BASICIDE_SBXRENAMED,
     124           0 :                                 SfxCallMode::SYNCHRON, &aSbxItem, 0L );
     125             :     }
     126             : 
     127             :     // OV-Bug?!
     128           0 :     SetEntryText( pEntry, rNewText );
     129           0 :     SetCurEntry( pEntry );
     130           0 :     SetCurEntry( pEntry );
     131           0 :     Select( pEntry, false );
     132           0 :     Select( pEntry );       // so that handler is called => update edit
     133             : 
     134           0 :     return true;
     135             : }
     136             : 
     137             : 
     138           0 : DragDropMode ExtTreeListBox::NotifyStartDrag( TransferDataContainer&, SvTreeListEntry* pEntry )
     139             : {
     140           0 :     DragDropMode nMode_ = DragDropMode::NONE;
     141             : 
     142           0 :     if ( pEntry )
     143             :     {
     144           0 :         sal_uInt16 nDepth = GetModel()->GetDepth( pEntry );
     145           0 :         if ( nDepth >= 2 )
     146             :         {
     147           0 :             nMode_ = DragDropMode::CTRL_COPY;
     148           0 :             EntryDescriptor aDesc = GetEntryDescriptor(pEntry);
     149           0 :             ScriptDocument aDocument( aDesc.GetDocument() );
     150           0 :             OUString aLibName( aDesc.GetLibName() );
     151             :             // allow MOVE mode only for libraries, which are not readonly
     152           0 :             Reference< script::XLibraryContainer2 > xModLibContainer( aDocument.getLibraryContainer( E_SCRIPTS ), UNO_QUERY );
     153           0 :             Reference< script::XLibraryContainer2 > xDlgLibContainer( aDocument.getLibraryContainer( E_DIALOGS ), UNO_QUERY );
     154           0 :             if ( !( ( xModLibContainer.is() && xModLibContainer->hasByName( aLibName ) && xModLibContainer->isLibraryReadOnly( aLibName ) ) ||
     155           0 :                     ( xDlgLibContainer.is() && xDlgLibContainer->hasByName( aLibName ) && xDlgLibContainer->isLibraryReadOnly( aLibName ) ) ) )
     156             :             {
     157             :                 // Only allow copy for localized libraries
     158           0 :                 bool bAllowMove = true;
     159           0 :                 if ( xDlgLibContainer.is() && xDlgLibContainer->hasByName( aLibName ) )
     160             :                 {
     161             :                     // Get StringResourceManager
     162           0 :                     Reference< container::XNameContainer > xDialogLib( aDocument.getLibrary( E_DIALOGS, aLibName, true ) );
     163             :                     Reference< XStringResourceManager > xSourceMgr =
     164           0 :                         LocalizationMgr::getStringResourceFromDialogLibrary( xDialogLib );
     165           0 :                     if( xSourceMgr.is() )
     166           0 :                         bAllowMove = ( xSourceMgr->getLocales().getLength() == 0 );
     167             :                 }
     168           0 :                 if( bAllowMove )
     169           0 :                     nMode_ |= DragDropMode::CTRL_MOVE;
     170           0 :             }
     171             :         }
     172             :     }
     173             : 
     174           0 :     return nMode_;
     175             : }
     176             : 
     177             : 
     178           0 : bool ExtTreeListBox::NotifyAcceptDrop( SvTreeListEntry* pEntry )
     179             : {
     180             :     // don't drop on a BasicManager (nDepth == 0)
     181           0 :     sal_uInt16 nDepth = pEntry ? GetModel()->GetDepth( pEntry ) : 0;
     182           0 :     bool bValid = nDepth != 0;
     183             : 
     184             :     // don't drop in the same library
     185           0 :     SvTreeListEntry* pSelected = FirstSelected();
     186           0 :     if ( ( nDepth == 1 ) && ( pEntry == GetParent( pSelected ) ) )
     187           0 :         bValid = false;
     188           0 :     else if ( ( nDepth == 2 ) && ( GetParent( pEntry ) == GetParent( pSelected ) ) )
     189           0 :         bValid = false;
     190             : 
     191             :     // don't drop on a library, which is not loaded, readonly or password protected
     192             :     // or which already has a module/dialog with this name
     193           0 :     if ( bValid && ( nDepth > 0 ) )
     194             :     {
     195             :         // get source module/dialog name
     196           0 :         EntryDescriptor aSourceDesc = GetEntryDescriptor(pSelected);
     197           0 :         OUString aSourceName = aSourceDesc.GetName();
     198           0 :         EntryType eSourceType = aSourceDesc.GetType();
     199             : 
     200             :         // get target shell and target library name
     201           0 :         EntryDescriptor aDestDesc = GetEntryDescriptor(pEntry);
     202           0 :         ScriptDocument const& rDestDoc = aDestDesc.GetDocument();
     203           0 :         OUString aDestLibName = aDestDesc.GetLibName();
     204             : 
     205             :         // check if module library is not loaded, readonly or password protected
     206           0 :         Reference< script::XLibraryContainer2 > xModLibContainer( rDestDoc.getLibraryContainer( E_SCRIPTS ), UNO_QUERY );
     207           0 :         if ( xModLibContainer.is() && xModLibContainer->hasByName( aDestLibName ) )
     208             :         {
     209           0 :             if ( !xModLibContainer->isLibraryLoaded( aDestLibName ) )
     210           0 :                 bValid = false;
     211             : 
     212           0 :             if ( xModLibContainer->isLibraryReadOnly( aDestLibName ) )
     213           0 :                 bValid = false;
     214             : 
     215           0 :             Reference< script::XLibraryContainerPassword > xPasswd( xModLibContainer, UNO_QUERY );
     216           0 :             if ( xPasswd.is() && xPasswd->isLibraryPasswordProtected( aDestLibName ) && !xPasswd->isLibraryPasswordVerified( aDestLibName ) )
     217           0 :                 bValid = false;
     218             :         }
     219             : 
     220             :         // check if dialog library is not loaded or readonly
     221           0 :         Reference< script::XLibraryContainer2 > xDlgLibContainer( rDestDoc.getLibraryContainer( E_DIALOGS ), UNO_QUERY );
     222           0 :         if ( xDlgLibContainer.is() && xDlgLibContainer->hasByName( aDestLibName ) )
     223             :         {
     224           0 :             if ( !xDlgLibContainer->isLibraryLoaded( aDestLibName ) )
     225           0 :                 bValid = false;
     226             : 
     227           0 :             if ( xDlgLibContainer->isLibraryReadOnly( aDestLibName ) )
     228           0 :                 bValid = false;
     229             :         }
     230             : 
     231             :         // check, if module/dialog with this name is already existing in target library
     232           0 :         if ( ( eSourceType == OBJ_TYPE_MODULE && rDestDoc.hasModule( aDestLibName, aSourceName ) ) ||
     233           0 :             ( eSourceType == OBJ_TYPE_DIALOG && rDestDoc.hasDialog( aDestLibName, aSourceName ) ) )
     234             :         {
     235           0 :             bValid = false;
     236           0 :         }
     237             :     }
     238             : 
     239           0 :     return bValid;
     240             : }
     241             : 
     242           0 : TriState ExtTreeListBox::NotifyMoving( SvTreeListEntry* pTarget, SvTreeListEntry* pEntry,
     243             :                         SvTreeListEntry*& rpNewParent, sal_uLong& rNewChildPos )
     244             : {
     245             :     return NotifyCopyingMoving( pTarget, pEntry,
     246           0 :                                     rpNewParent, rNewChildPos, true );
     247             : }
     248             : 
     249           0 : TriState ExtTreeListBox::NotifyCopying( SvTreeListEntry* pTarget, SvTreeListEntry* pEntry,
     250             :                         SvTreeListEntry*& rpNewParent, sal_uLong& rNewChildPos )
     251             : {
     252             :     return NotifyCopyingMoving( pTarget, pEntry,
     253           0 :                                     rpNewParent, rNewChildPos, false );
     254             : }
     255             : 
     256           0 : void Shell::CopyDialogResources(
     257             :     Reference< io::XInputStreamProvider >& io_xISP,
     258             :     ScriptDocument const& rSourceDoc,
     259             :     OUString const& rSourceLibName,
     260             :     ScriptDocument const& rDestDoc,
     261             :     OUString const& rDestLibName,
     262             :     OUString const& rDlgName
     263             : )
     264             : {
     265           0 :     if ( !io_xISP.is() )
     266           0 :         return;
     267             : 
     268             :     // Get StringResourceManager
     269           0 :     Reference< container::XNameContainer > xSourceDialogLib( rSourceDoc.getLibrary( E_DIALOGS, rSourceLibName, true ) );
     270             :     Reference< XStringResourceManager > xSourceMgr =
     271           0 :         LocalizationMgr::getStringResourceFromDialogLibrary( xSourceDialogLib );
     272           0 :     if( !xSourceMgr.is() )
     273           0 :         return;
     274           0 :     bool bSourceLocalized = ( xSourceMgr->getLocales().getLength() > 0 );
     275             : 
     276           0 :     Reference< container::XNameContainer > xDestDialogLib( rDestDoc.getLibrary( E_DIALOGS, rDestLibName, true ) );
     277             :     Reference< XStringResourceManager > xDestMgr =
     278           0 :         LocalizationMgr::getStringResourceFromDialogLibrary( xDestDialogLib );
     279           0 :     if( !xDestMgr.is() )
     280           0 :         return;
     281           0 :     bool bDestLocalized = ( xDestMgr->getLocales().getLength() > 0 );
     282             : 
     283           0 :     if( !bSourceLocalized && !bDestLocalized )
     284           0 :         return;
     285             : 
     286             :     // create dialog model
     287           0 :     Reference< XComponentContext > xContext = comphelper::getProcessComponentContext();
     288           0 :     Reference< container::XNameContainer > xDialogModel = Reference< container::XNameContainer >( xContext->getServiceManager()->createInstanceWithContext
     289           0 :         ( "com.sun.star.awt.UnoControlDialogModel", xContext ), UNO_QUERY );
     290           0 :     Reference< io::XInputStream > xInput( io_xISP->createInputStream() );
     291           0 :     ::xmlscript::importDialogModel( xInput, xDialogModel, xContext, rSourceDoc.isDocument() ? rSourceDoc.getDocument() : Reference< frame::XModel >() );
     292             : 
     293           0 :     if( xDialogModel.is() )
     294             :     {
     295           0 :         if( bSourceLocalized && bDestLocalized )
     296             :         {
     297           0 :             Reference< resource::XStringResourceResolver > xSourceStringResolver( xSourceMgr, UNO_QUERY );
     298           0 :             LocalizationMgr::copyResourceForDroppedDialog( xDialogModel, rDlgName, xDestMgr, xSourceStringResolver );
     299             :         }
     300           0 :         else if( bSourceLocalized )
     301             :         {
     302           0 :             LocalizationMgr::resetResourceForDialog( xDialogModel, xSourceMgr );
     303             :         }
     304           0 :         else if( bDestLocalized )
     305             :         {
     306           0 :             LocalizationMgr::setResourceIDsForDialog( xDialogModel, xDestMgr );
     307             :         }
     308           0 :         io_xISP = ::xmlscript::exportDialogModel( xDialogModel, xContext, rDestDoc.isDocument() ? rDestDoc.getDocument() : Reference< frame::XModel >() );
     309           0 :     }
     310             : }
     311             : 
     312           0 : TriState ExtTreeListBox::NotifyCopyingMoving( SvTreeListEntry* pTarget, SvTreeListEntry* pEntry,
     313             :                         SvTreeListEntry*& rpNewParent, sal_uLong& rNewChildPos, bool bMove )
     314             : {
     315             :     (void)pEntry;
     316             :     DBG_ASSERT( pEntry, "Kein Eintrag?" );  // ASS is ok here, should not be reached
     317             :     DBG_ASSERT( pTarget, "Kein Ziel?" );    // with NULL (right at the beginning)
     318           0 :     sal_uInt16 nDepth = GetModel()->GetDepth( pTarget );
     319             :     DBG_ASSERT( nDepth, "Tiefe?" );
     320           0 :     if ( nDepth == 1 )
     321             :     {
     322             :         // Target = Basic => put module/dialog under the Basic
     323           0 :         rpNewParent = pTarget;
     324           0 :         rNewChildPos = 0;
     325             :     }
     326           0 :     else if ( nDepth >= 2 )
     327             :     {
     328             :         // Target = module/dialog => put module/dialog under the superordinate Basic
     329           0 :         rpNewParent = GetParent( pTarget );
     330           0 :         rNewChildPos = SvTreeList::GetRelPos( pTarget ) + 1;
     331             :     }
     332             : 
     333             :     // get target shell and target library name
     334           0 :     EntryDescriptor aDestDesc = GetEntryDescriptor(rpNewParent);
     335           0 :     const ScriptDocument& rDestDoc( aDestDesc.GetDocument() );
     336           0 :     OUString aDestLibName( aDestDesc.GetLibName() );
     337             : 
     338             :     // get source shell, library name and module/dialog name
     339           0 :     EntryDescriptor aSourceDesc = GetEntryDescriptor(FirstSelected());
     340           0 :     const ScriptDocument rSourceDoc( aSourceDesc.GetDocument() );
     341           0 :     OUString aSourceLibName( aSourceDesc.GetLibName() );
     342           0 :     OUString aSourceName( aSourceDesc.GetName() );
     343           0 :     EntryType eType = aSourceDesc.GetType();
     344             : 
     345             :     // get dispatcher
     346           0 :     SfxDispatcher* pDispatcher = GetDispatcher();
     347             : 
     348           0 :     if ( bMove )    // move
     349             :     {
     350             :         // remove source module/dialog window
     351           0 :         if ( rSourceDoc != rDestDoc || aSourceLibName != aDestLibName )
     352             :         {
     353           0 :             if( pDispatcher )
     354             :             {
     355           0 :                 SbxItem aSbxItem( SID_BASICIDE_ARG_SBX, rSourceDoc, aSourceLibName, aSourceName, ConvertType( eType ) );
     356             :                 pDispatcher->Execute( SID_BASICIDE_SBXDELETED,
     357           0 :                                       SfxCallMode::SYNCHRON, &aSbxItem, 0L );
     358             :             }
     359             :         }
     360             : 
     361             :         try
     362             :         {
     363           0 :             if ( eType == OBJ_TYPE_MODULE ) // module
     364             :             {
     365             :                 // get module
     366           0 :                 OUString aModule;
     367           0 :                 if ( rSourceDoc.getModule( aSourceLibName, aSourceName, aModule ) )
     368             :                 {
     369             :                     // remove module from source library
     370           0 :                     if ( rSourceDoc.removeModule( aSourceLibName, aSourceName ) )
     371             :                     {
     372           0 :                         MarkDocumentModified( rSourceDoc );
     373             : 
     374             :                         // insert module into target library
     375           0 :                         if ( rDestDoc.insertModule( aDestLibName, aSourceName, aModule ) )
     376           0 :                             MarkDocumentModified( rDestDoc );
     377             :                     }
     378           0 :                 }
     379             :             }
     380           0 :             else if ( eType == OBJ_TYPE_DIALOG )    // dialog
     381             :             {
     382             :                 // get dialog
     383           0 :                 Reference< io::XInputStreamProvider > xISP;
     384           0 :                 if ( rSourceDoc.getDialog( aSourceLibName, aSourceName, xISP ) )
     385             :                 {
     386             :                     Shell::CopyDialogResources( xISP, rSourceDoc,
     387           0 :                         aSourceLibName, rDestDoc, aDestLibName, aSourceName );
     388             : 
     389             :                     // remove dialog from source library
     390           0 :                     if (RemoveDialog(rSourceDoc, aSourceLibName, aSourceName))
     391             :                     {
     392           0 :                         MarkDocumentModified(rSourceDoc);
     393             : 
     394             :                         // insert dialog into target library
     395           0 :                         if ( rDestDoc.insertDialog( aDestLibName, aSourceName, xISP ) )
     396           0 :                             MarkDocumentModified(rDestDoc);
     397             :                     }
     398           0 :                 }
     399             :             }
     400             :         }
     401           0 :         catch (const uno::Exception& )
     402             :         {
     403             :             DBG_UNHANDLED_EXCEPTION();
     404             :         }
     405             :     }
     406             :     else    // copy
     407             :     {
     408             :         try
     409             :         {
     410           0 :             if ( eType == OBJ_TYPE_MODULE ) // module
     411             :             {
     412             :                 // get module
     413           0 :                 OUString aModule;
     414           0 :                 if ( rSourceDoc.getModule( aSourceLibName, aSourceName, aModule ) )
     415             :                 {
     416             :                     // insert module into target library
     417           0 :                     if ( rDestDoc.insertModule( aDestLibName, aSourceName, aModule ) )
     418           0 :                         MarkDocumentModified( rDestDoc );
     419           0 :                 }
     420             :             }
     421           0 :             else if ( eType == OBJ_TYPE_DIALOG )    // dialog
     422             :             {
     423             :                 // get dialog
     424           0 :                 Reference< io::XInputStreamProvider > xISP;
     425           0 :                 if ( rSourceDoc.getDialog( aSourceLibName, aSourceName, xISP ) )
     426             :                 {
     427             :                     Shell::CopyDialogResources( xISP, rSourceDoc,
     428           0 :                         aSourceLibName, rDestDoc, aDestLibName, aSourceName );
     429             : 
     430             :                     // insert dialog into target library
     431           0 :                     if ( rDestDoc.insertDialog( aDestLibName, aSourceName, xISP ) )
     432           0 :                         MarkDocumentModified( rDestDoc );
     433           0 :                 }
     434             :             }
     435             :         }
     436           0 :         catch ( const Exception& )
     437             :         {
     438             :             DBG_UNHANDLED_EXCEPTION();
     439             :         }
     440             :     }
     441             : 
     442             :     // create target module/dialog window
     443           0 :     if ( rSourceDoc != rDestDoc || aSourceLibName != aDestLibName )
     444             :     {
     445           0 :         if( pDispatcher )
     446             :         {
     447           0 :             SbxItem aSbxItem( SID_BASICIDE_ARG_SBX, rDestDoc, aDestLibName, aSourceName, ConvertType( eType ) );
     448             :             pDispatcher->Execute( SID_BASICIDE_SBXINSERTED,
     449           0 :                                   SfxCallMode::SYNCHRON, &aSbxItem, 0L );
     450             :         }
     451             :     }
     452             : 
     453           0 :     return TRISTATE_INDET;   // open...
     454             : }
     455             : 
     456             : // OrganizeDialog
     457           0 : OrganizeDialog::OrganizeDialog(vcl::Window* pParent, sal_Int16 tabId,
     458             :     EntryDescriptor& rDesc )
     459             :     : TabDialog( pParent, "OrganizeDialog",
     460             :         "modules/BasicIDE/ui/organizedialog.ui" )
     461           0 :     , m_aCurEntry( rDesc )
     462             : {
     463           0 :     get(m_pTabCtrl, "tabcontrol");
     464             : 
     465           0 :     m_pTabCtrl->SetActivatePageHdl(LINK(this, OrganizeDialog, ActivatePageHdl));
     466             : 
     467           0 :     if( tabId == 0 )
     468             :     {
     469           0 :         m_pTabCtrl->SetCurPageId(m_pTabCtrl->GetPageId("modules"));
     470             :     }
     471           0 :     else if ( tabId == 1 )
     472             :     {
     473           0 :         m_pTabCtrl->SetCurPageId(m_pTabCtrl->GetPageId("dialogs"));
     474             :     }
     475             :     else
     476             :     {
     477           0 :         m_pTabCtrl->SetCurPageId(m_pTabCtrl->GetPageId("libraries"));
     478             :     }
     479             : 
     480           0 :     ActivatePageHdl(m_pTabCtrl);
     481             : 
     482           0 :     if (SfxDispatcher* pDispatcher = GetDispatcher())
     483           0 :         pDispatcher->Execute( SID_BASICIDE_STOREALLMODULESOURCES );
     484           0 : }
     485             : 
     486           0 : OrganizeDialog::~OrganizeDialog()
     487             : {
     488           0 :     disposeOnce();
     489           0 : }
     490             : 
     491           0 : void OrganizeDialog::dispose()
     492             : {
     493           0 :     if (m_pTabCtrl)
     494             :     {
     495           0 :         for ( sal_uInt16 i = 0; i < m_pTabCtrl->GetPageCount(); i++ )
     496           0 :             VclPtr<vcl::Window>(m_pTabCtrl->GetTabPage( m_pTabCtrl->GetPageId( i ) )).disposeAndClear();
     497             :     }
     498           0 :     m_pTabCtrl.clear();
     499             : 
     500           0 :     TabDialog::dispose();
     501           0 : };
     502             : 
     503           0 : short OrganizeDialog::Execute()
     504             : {
     505           0 :     vcl::Window* pPrevDlgParent = Application::GetDefDialogParent();
     506           0 :     Application::SetDefDialogParent( this );
     507           0 :     short nRet = TabDialog::Execute();
     508           0 :     Application::SetDefDialogParent( pPrevDlgParent );
     509           0 :     return nRet;
     510             : }
     511             : 
     512             : 
     513           0 : IMPL_LINK( OrganizeDialog, ActivatePageHdl, TabControl *, pTabCtrl )
     514             : {
     515           0 :     sal_uInt16 nId = pTabCtrl->GetCurPageId();
     516             : 
     517           0 :     if ( !pTabCtrl->GetTabPage( nId ) )
     518             :     {
     519           0 :         OString sPageName(pTabCtrl->GetPageName(nId));
     520           0 :         VclPtr<TabPage> pNewTabPage;
     521           0 :         if (sPageName == "modules")
     522             :         {
     523           0 :             VclPtrInstance<ObjectPage> pObjectPage(pTabCtrl, "ModulePage", BROWSEMODE_MODULES);
     524           0 :             pNewTabPage.reset(pObjectPage);
     525           0 :             pObjectPage->SetTabDlg(this);
     526           0 :             pObjectPage->SetCurrentEntry(m_aCurEntry);
     527             :         }
     528           0 :         else if (sPageName == "dialogs")
     529             :         {
     530           0 :             VclPtrInstance<ObjectPage> pObjectPage( pTabCtrl, "DialogPage", BROWSEMODE_DIALOGS );
     531           0 :             pNewTabPage.reset(pObjectPage);
     532           0 :             pObjectPage->SetTabDlg(this);
     533           0 :             pObjectPage->SetCurrentEntry(m_aCurEntry);
     534             :         }
     535           0 :         else if (sPageName == "libraries")
     536             :         {
     537           0 :             VclPtrInstance<LibPage> pLibPage( pTabCtrl );
     538           0 :             pNewTabPage.reset(pLibPage);
     539           0 :             pLibPage->SetTabDlg( this );
     540             :         }
     541             :         else
     542             :         {
     543             :             OSL_FAIL( "PageHdl: Unbekannte ID!" );
     544             :         }
     545             :         DBG_ASSERT( pNewTabPage, "Keine Page!" );
     546           0 :         pTabCtrl->SetTabPage( nId, pNewTabPage );
     547             :     }
     548           0 :     return 0;
     549             : }
     550             : 
     551             : 
     552             : // ObjectPage
     553             : 
     554             : 
     555             : 
     556           0 : ObjectPage::ObjectPage(vcl::Window *pParent, const OString &rName, sal_uInt16 nMode)
     557           0 :     : TabPage(pParent, rName, "modules/BasicIDE/ui/" +
     558           0 :         OStringToOUString(rName, RTL_TEXTENCODING_UTF8).toAsciiLowerCase() +
     559           0 :         ".ui")
     560             : {
     561           0 :     get(m_pBasicBox, "library");
     562           0 :     Size aSize(m_pBasicBox->LogicToPixel(Size(130, 117), MAP_APPFONT));
     563           0 :     m_pBasicBox->set_height_request(aSize.Height());
     564           0 :     m_pBasicBox->set_width_request(aSize.Width());
     565           0 :     get(m_pEditButton, "edit");
     566           0 :     get(m_pNewModButton, "newmodule");
     567           0 :     get(m_pNewDlgButton, "newdialog");
     568           0 :     get(m_pDelButton, "delete");
     569             : 
     570           0 :     pTabDlg = 0;
     571             : 
     572           0 :     m_pEditButton->SetClickHdl( LINK( this, ObjectPage, ButtonHdl ) );
     573           0 :     m_pDelButton->SetClickHdl( LINK( this, ObjectPage, ButtonHdl ) );
     574           0 :     m_pBasicBox->SetSelectHdl( LINK( this, ObjectPage, BasicBoxHighlightHdl ) );
     575             : 
     576           0 :     if( nMode & BROWSEMODE_MODULES )
     577             :     {
     578           0 :         m_pNewModButton->SetClickHdl( LINK( this, ObjectPage, ButtonHdl ) );
     579           0 :         m_pNewDlgButton->Hide();
     580             :     }
     581           0 :     else if ( nMode & BROWSEMODE_DIALOGS )
     582             :     {
     583           0 :         m_pNewDlgButton->SetClickHdl( LINK( this, ObjectPage, ButtonHdl ) );
     584           0 :         m_pNewModButton->Hide();
     585             :     }
     586             : 
     587           0 :     m_pBasicBox->SetDragDropMode( DragDropMode::CTRL_MOVE | DragDropMode::CTRL_COPY );
     588           0 :     m_pBasicBox->EnableInplaceEditing(true);
     589           0 :     m_pBasicBox->SetMode( nMode );
     590           0 :     m_pBasicBox->SetStyle( WB_BORDER | WB_TABSTOP |
     591             :                         WB_HASLINES | WB_HASLINESATROOT |
     592             :                         WB_HASBUTTONS | WB_HASBUTTONSATROOT |
     593           0 :                         WB_HSCROLL );
     594           0 :     m_pBasicBox->ScanAllEntries();
     595             : 
     596           0 :     m_pEditButton->GrabFocus();
     597           0 :     CheckButtons();
     598           0 : }
     599             : 
     600           0 : ObjectPage::~ObjectPage()
     601             : {
     602           0 :     disposeOnce();
     603           0 : }
     604             : 
     605           0 : void ObjectPage::dispose()
     606             : {
     607           0 :     m_pBasicBox.clear();
     608           0 :     m_pEditButton.clear();
     609           0 :     m_pNewModButton.clear();
     610           0 :     m_pNewDlgButton.clear();
     611           0 :     m_pDelButton.clear();
     612           0 :     pTabDlg.clear();
     613           0 :     TabPage::dispose();
     614           0 : }
     615             : 
     616           0 : void ObjectPage::SetCurrentEntry (EntryDescriptor& rDesc)
     617             : {
     618           0 :     m_pBasicBox->SetCurrentEntry( rDesc );
     619           0 : }
     620             : 
     621           0 : void ObjectPage::ActivatePage()
     622             : {
     623           0 :     m_pBasicBox->UpdateEntries();
     624           0 : }
     625             : 
     626           0 : void ObjectPage::DeactivatePage()
     627             : {
     628           0 : }
     629             : 
     630           0 : void ObjectPage::CheckButtons()
     631             : {
     632             :     // enable/disable edit button
     633           0 :     SvTreeListEntry* pCurEntry = m_pBasicBox->GetCurEntry();
     634           0 :     EntryDescriptor aDesc = m_pBasicBox->GetEntryDescriptor(pCurEntry);
     635           0 :     ScriptDocument aDocument( aDesc.GetDocument() );
     636           0 :     OUString aLibName( aDesc.GetLibName() );
     637           0 :     OUString aLibSubName( aDesc.GetLibSubName() );
     638           0 :     bool bVBAEnabled = aDocument.isInVBAMode();
     639           0 :     sal_uInt16 nMode = m_pBasicBox->GetMode();
     640             : 
     641           0 :     sal_uInt16 nDepth = pCurEntry ? m_pBasicBox->GetModel()->GetDepth( pCurEntry ) : 0;
     642           0 :     if ( nDepth >= 2 )
     643             :     {
     644           0 :         if( bVBAEnabled && ( nMode & BROWSEMODE_MODULES ) && ( nDepth == 2 ) )
     645           0 :             m_pEditButton->Disable();
     646             :         else
     647           0 :         m_pEditButton->Enable();
     648             :     }
     649             :     else
     650           0 :         m_pEditButton->Disable();
     651             : 
     652             :     // enable/disable new module/dialog buttons
     653           0 :     LibraryLocation eLocation( aDesc.GetLocation() );
     654           0 :     bool bReadOnly = false;
     655           0 :     if ( nDepth > 0 )
     656             :     {
     657           0 :         Reference< script::XLibraryContainer2 > xModLibContainer( aDocument.getLibraryContainer( E_SCRIPTS ), UNO_QUERY );
     658           0 :         Reference< script::XLibraryContainer2 > xDlgLibContainer( aDocument.getLibraryContainer( E_DIALOGS ), UNO_QUERY );
     659           0 :         if ( ( xModLibContainer.is() && xModLibContainer->hasByName( aLibName ) && xModLibContainer->isLibraryReadOnly( aLibName ) ) ||
     660           0 :              ( xDlgLibContainer.is() && xDlgLibContainer->hasByName( aLibName ) && xDlgLibContainer->isLibraryReadOnly( aLibName ) ) )
     661             :         {
     662           0 :             bReadOnly = true;
     663           0 :         }
     664             :     }
     665           0 :     if ( bReadOnly || eLocation == LIBRARY_LOCATION_SHARE )
     666             :     {
     667           0 :         m_pNewModButton->Disable();
     668           0 :         m_pNewDlgButton->Disable();
     669             :     }
     670             :     else
     671             :     {
     672           0 :         m_pNewModButton->Enable();
     673           0 :         m_pNewDlgButton->Enable();
     674             :     }
     675             : 
     676             :     // enable/disable delete button
     677           0 :     if ( nDepth >= 2 && !bReadOnly && eLocation != LIBRARY_LOCATION_SHARE )
     678             :     {
     679           0 :         if( bVBAEnabled && ( nMode & BROWSEMODE_MODULES ) && ( ( nDepth == 2 ) || aLibSubName == IDE_RESSTR(RID_STR_DOCUMENT_OBJECTS) ) )
     680           0 :             m_pDelButton->Disable();
     681             :         else
     682           0 :         m_pDelButton->Enable();
     683             :     }
     684             :     else
     685           0 :         m_pDelButton->Disable();
     686           0 : }
     687             : 
     688           0 : IMPL_LINK( ObjectPage, BasicBoxHighlightHdl, TreeListBox *, pBox )
     689             : {
     690           0 :     if ( !pBox->IsSelected( pBox->GetHdlEntry() ) )
     691           0 :         return 0;
     692             : 
     693           0 :     CheckButtons();
     694           0 :     return 0;
     695             : }
     696             : 
     697           0 : IMPL_LINK( ObjectPage, ButtonHdl, Button *, pButton )
     698             : {
     699           0 :     if (pButton == m_pEditButton)
     700             :     {
     701           0 :         SfxAllItemSet aArgs( SfxGetpApp()->GetPool() );
     702           0 :         SfxRequest aRequest( SID_BASICIDE_APPEAR, SfxCallMode::SYNCHRON, aArgs );
     703           0 :         SfxGetpApp()->ExecuteSlot( aRequest );
     704             : 
     705           0 :         SfxDispatcher* pDispatcher = GetDispatcher();
     706           0 :         SvTreeListEntry* pCurEntry = m_pBasicBox->GetCurEntry();
     707             :         DBG_ASSERT( pCurEntry, "Entry?!" );
     708           0 :         if ( m_pBasicBox->GetModel()->GetDepth( pCurEntry ) >= 2 )
     709             :         {
     710           0 :             EntryDescriptor aDesc = m_pBasicBox->GetEntryDescriptor(pCurEntry);
     711           0 :             if ( pDispatcher )
     712             :             {
     713           0 :                 OUString aModName( aDesc.GetName() );
     714             :                 // extract the module name from the string like "Sheet1 (Example1)"
     715           0 :                 if( aDesc.GetLibSubName() == IDE_RESSTR(RID_STR_DOCUMENT_OBJECTS) )
     716             :                 {
     717           0 :                     sal_Int32 nIndex = 0;
     718           0 :                     aModName = aModName.getToken( 0, ' ', nIndex );
     719             :                 }
     720           0 :                 SbxItem aSbxItem( SID_BASICIDE_ARG_SBX, aDesc.GetDocument(), aDesc.GetLibName(),
     721           0 :                                   aModName, TreeListBox::ConvertType( aDesc.GetType() ) );
     722           0 :                 pDispatcher->Execute( SID_BASICIDE_SHOWSBX, SfxCallMode::SYNCHRON, &aSbxItem, 0L );
     723           0 :             }
     724             :         }
     725             :         else    // Nur Lib selektiert
     726             :         {
     727             :             DBG_ASSERT( m_pBasicBox->GetModel()->GetDepth( pCurEntry ) == 1, "Kein LibEntry?!" );
     728           0 :             ScriptDocument aDocument( ScriptDocument::getApplicationScriptDocument() );
     729           0 :             SvTreeListEntry* pParentEntry = m_pBasicBox->GetParent( pCurEntry );
     730           0 :             if ( pParentEntry )
     731             :             {
     732           0 :                 DocumentEntry* pDocumentEntry = static_cast<DocumentEntry*>(pParentEntry->GetUserData());
     733           0 :                 if (pDocumentEntry)
     734           0 :                     aDocument = pDocumentEntry->GetDocument();
     735             :             }
     736           0 :             SfxUsrAnyItem aDocItem( SID_BASICIDE_ARG_DOCUMENT_MODEL, makeAny( aDocument.getDocumentOrNull() ) );
     737           0 :             OUString aLibName( m_pBasicBox->GetEntryText( pCurEntry ) );
     738           0 :             SfxStringItem aLibNameItem( SID_BASICIDE_ARG_LIBNAME, aLibName );
     739           0 :             if ( pDispatcher )
     740             :             {
     741           0 :                 pDispatcher->Execute( SID_BASICIDE_LIBSELECTED, SfxCallMode::ASYNCHRON, &aDocItem, &aLibNameItem, 0L );
     742           0 :             }
     743             :         }
     744           0 :         EndTabDialog( 1 );
     745             :     }
     746           0 :     else if (pButton == m_pNewModButton)
     747           0 :         NewModule();
     748           0 :     else if (pButton == m_pNewDlgButton)
     749           0 :         NewDialog();
     750           0 :     else if (pButton == m_pDelButton)
     751           0 :         DeleteCurrent();
     752             : 
     753           0 :     return 0;
     754             : }
     755             : 
     756           0 : bool ObjectPage::GetSelection( ScriptDocument& rDocument, OUString& rLibName )
     757             : {
     758           0 :     bool bRet = false;
     759             : 
     760           0 :     SvTreeListEntry* pCurEntry = m_pBasicBox->GetCurEntry();
     761           0 :     EntryDescriptor aDesc = m_pBasicBox->GetEntryDescriptor(pCurEntry);
     762           0 :     rDocument = aDesc.GetDocument();
     763           0 :     rLibName = aDesc.GetLibName();
     764           0 :     if ( rLibName.isEmpty() )
     765           0 :         rLibName = "Standard" ;
     766             : 
     767             :     DBG_ASSERT( rDocument.isAlive(), "ObjectPage::GetSelection: no or dead ScriptDocument in the selection!" );
     768           0 :     if ( !rDocument.isAlive() )
     769           0 :         return false;
     770             : 
     771             :     // check if the module library is loaded
     772           0 :     bool bOK = true;
     773           0 :     OUString aLibName( rLibName );
     774           0 :     Reference< script::XLibraryContainer > xModLibContainer( rDocument.getLibraryContainer( E_SCRIPTS  ) );
     775           0 :     if ( xModLibContainer.is() && xModLibContainer->hasByName( aLibName ) && !xModLibContainer->isLibraryLoaded( aLibName ) )
     776             :     {
     777             :         // check password
     778           0 :         Reference< script::XLibraryContainerPassword > xPasswd( xModLibContainer, UNO_QUERY );
     779           0 :         if ( xPasswd.is() && xPasswd->isLibraryPasswordProtected( aLibName ) && !xPasswd->isLibraryPasswordVerified( aLibName ) )
     780             :         {
     781           0 :             OUString aPassword;
     782           0 :             bOK = QueryPassword( xModLibContainer, rLibName, aPassword );
     783             :         }
     784             : 
     785             :         // load library
     786           0 :         if ( bOK )
     787           0 :             xModLibContainer->loadLibrary( aLibName );
     788             :     }
     789             : 
     790             :     // check if the dialog library is loaded
     791           0 :     Reference< script::XLibraryContainer > xDlgLibContainer( rDocument.getLibraryContainer( E_DIALOGS ) );
     792           0 :     if ( xDlgLibContainer.is() && xDlgLibContainer->hasByName( aLibName ) && !xDlgLibContainer->isLibraryLoaded( aLibName ) )
     793             :     {
     794             :         // load library
     795           0 :         if ( bOK )
     796           0 :             xDlgLibContainer->loadLibrary( aLibName );
     797             :     }
     798             : 
     799           0 :     if ( bOK )
     800           0 :         bRet = true;
     801             : 
     802           0 :     return bRet;
     803             : }
     804             : 
     805           0 : void ObjectPage::NewModule()
     806             : {
     807           0 :     ScriptDocument aDocument( ScriptDocument::getApplicationScriptDocument() );
     808           0 :     OUString aLibName;
     809             : 
     810           0 :     if ( GetSelection( aDocument, aLibName ) )
     811             :     {
     812           0 :         OUString aModName;
     813             :         createModImpl( static_cast<vcl::Window*>( this ), aDocument,
     814           0 :                     *m_pBasicBox, aLibName, aModName, true );
     815           0 :     }
     816           0 : }
     817             : 
     818           0 : void ObjectPage::NewDialog()
     819             : {
     820           0 :     ScriptDocument aDocument( ScriptDocument::getApplicationScriptDocument() );
     821           0 :     OUString aLibName;
     822             : 
     823           0 :     if ( GetSelection( aDocument, aLibName ) )
     824             :     {
     825           0 :         aDocument.getOrCreateLibrary( E_DIALOGS, aLibName );
     826             : 
     827           0 :         ScopedVclPtrInstance< NewObjectDialog > aNewDlg(this, ObjectMode::Dialog, true);
     828           0 :         aNewDlg->SetObjectName( aDocument.createObjectName( E_DIALOGS, aLibName ) );
     829             : 
     830           0 :         if (aNewDlg->Execute() != 0)
     831             :         {
     832           0 :             OUString aDlgName = aNewDlg->GetObjectName();
     833           0 :             if (aDlgName.isEmpty())
     834           0 :                 aDlgName = aDocument.createObjectName( E_DIALOGS, aLibName);
     835             : 
     836           0 :             if ( aDocument.hasDialog( aLibName, aDlgName ) )
     837             :             {
     838           0 :                 ScopedVclPtrInstance<MessageDialog>::Create(this, IDE_RESSTR(RID_STR_SBXNAMEALLREADYUSED2))->Execute();
     839             :             }
     840             :             else
     841             :             {
     842           0 :                 Reference< io::XInputStreamProvider > xISP;
     843           0 :                 if ( !aDocument.createDialog( aLibName, aDlgName, xISP ) )
     844           0 :                     return;
     845             : 
     846           0 :                 SbxItem aSbxItem( SID_BASICIDE_ARG_SBX, aDocument, aLibName, aDlgName, TYPE_DIALOG );
     847           0 :                 if (SfxDispatcher* pDispatcher = GetDispatcher())
     848             :                     pDispatcher->Execute( SID_BASICIDE_SBXINSERTED,
     849           0 :                                             SfxCallMode::SYNCHRON, &aSbxItem, 0L );
     850           0 :                 LibraryLocation eLocation = aDocument.getLibraryLocation( aLibName );
     851           0 :                 SvTreeListEntry* pRootEntry = m_pBasicBox->FindRootEntry( aDocument, eLocation );
     852           0 :                 if ( pRootEntry )
     853             :                 {
     854           0 :                     if ( !m_pBasicBox->IsExpanded( pRootEntry ) )
     855           0 :                         m_pBasicBox->Expand( pRootEntry );
     856           0 :                     SvTreeListEntry* pLibEntry = m_pBasicBox->FindEntry( pRootEntry, aLibName, OBJ_TYPE_LIBRARY );
     857             :                     DBG_ASSERT( pLibEntry, "Libeintrag nicht gefunden!" );
     858           0 :                     if ( pLibEntry )
     859             :                     {
     860           0 :                         if ( !m_pBasicBox->IsExpanded( pLibEntry ) )
     861           0 :                             m_pBasicBox->Expand( pLibEntry );
     862           0 :                         SvTreeListEntry* pEntry = m_pBasicBox->FindEntry( pLibEntry, aDlgName, OBJ_TYPE_DIALOG );
     863           0 :                         if ( !pEntry )
     864             :                         {
     865           0 :                             std::unique_ptr<Entry> e(new Entry(OBJ_TYPE_DIALOG));
     866           0 :                             pEntry = m_pBasicBox->AddEntry(
     867             :                                 aDlgName,
     868             :                                 Image( IDEResId( RID_IMG_DIALOG ) ),
     869           0 :                                 pLibEntry, false, &e);
     870           0 :                             DBG_ASSERT( pEntry, "InsertEntry fehlgeschlagen!" );
     871             :                         }
     872           0 :                         m_pBasicBox->SetCurEntry( pEntry );
     873           0 :                         m_pBasicBox->Select( m_pBasicBox->GetCurEntry() );        // OV-Bug?!
     874             :                     }
     875           0 :                 }
     876           0 :             }
     877           0 :         }
     878           0 :     }
     879             : }
     880             : 
     881           0 : void ObjectPage::DeleteCurrent()
     882             : {
     883           0 :     SvTreeListEntry* pCurEntry = m_pBasicBox->GetCurEntry();
     884             :     DBG_ASSERT( pCurEntry, "Kein aktueller Eintrag!" );
     885           0 :     EntryDescriptor aDesc( m_pBasicBox->GetEntryDescriptor( pCurEntry ) );
     886           0 :     ScriptDocument aDocument( aDesc.GetDocument() );
     887             :     DBG_ASSERT( aDocument.isAlive(), "ObjectPage::DeleteCurrent: no document!" );
     888           0 :     if ( !aDocument.isAlive() )
     889           0 :         return;
     890           0 :     OUString aLibName( aDesc.GetLibName() );
     891           0 :     OUString aName( aDesc.GetName() );
     892           0 :     EntryType eType = aDesc.GetType();
     893             : 
     894           0 :     if ( ( eType == OBJ_TYPE_MODULE && QueryDelModule( aName, this ) ) ||
     895           0 :          ( eType == OBJ_TYPE_DIALOG && QueryDelDialog( aName, this ) ) )
     896             :     {
     897           0 :         m_pBasicBox->GetModel()->Remove( pCurEntry );
     898           0 :         if ( m_pBasicBox->GetCurEntry() )  // OV-Bug ?
     899           0 :             m_pBasicBox->Select( m_pBasicBox->GetCurEntry() );
     900           0 :         if (SfxDispatcher* pDispatcher = GetDispatcher())
     901             :         {
     902           0 :             SbxItem aSbxItem( SID_BASICIDE_ARG_SBX, aDocument, aLibName, aName, TreeListBox::ConvertType( eType ) );
     903             :             pDispatcher->Execute( SID_BASICIDE_SBXDELETED,
     904           0 :                                   SfxCallMode::SYNCHRON, &aSbxItem, 0L );
     905             :         }
     906             : 
     907             :         try
     908             :         {
     909           0 :             bool bSuccess = false;
     910           0 :             if ( eType == OBJ_TYPE_MODULE )
     911           0 :                 bSuccess = aDocument.removeModule( aLibName, aName );
     912           0 :             else if ( eType == OBJ_TYPE_DIALOG )
     913           0 :                 bSuccess = RemoveDialog( aDocument, aLibName, aName );
     914             : 
     915           0 :             if ( bSuccess )
     916           0 :                 MarkDocumentModified( aDocument );
     917             :         }
     918           0 :         catch (const container::NoSuchElementException& )
     919             :         {
     920             :             DBG_UNHANDLED_EXCEPTION();
     921             :         }
     922           0 :     }
     923             : }
     924             : 
     925             : 
     926             : 
     927           0 : void ObjectPage::EndTabDialog( sal_uInt16 nRet )
     928             : {
     929             :     DBG_ASSERT( pTabDlg, "TabDlg nicht gesetzt!" );
     930           0 :     if ( pTabDlg )
     931           0 :         pTabDlg->EndDialog( nRet );
     932           0 : }
     933             : 
     934           0 : LibDialog::LibDialog( vcl::Window* pParent )
     935           0 :     : ModalDialog(pParent, "ImportLibDialog", "modules/BasicIDE/ui/importlibdialog.ui")
     936             : {
     937           0 :     get(m_pStorageFrame, "storageframe");
     938           0 :     get(m_pReferenceBox, "ref");
     939           0 :     get(m_pReplaceBox, "replace");
     940           0 :     get(m_pLibBox, "entries");
     941           0 :     m_pLibBox->set_height_request(m_pLibBox->GetTextHeight() * 8);
     942           0 :     m_pLibBox->set_width_request(m_pLibBox->approximate_char_width() * 32);
     943           0 : }
     944             : 
     945           0 : LibDialog::~LibDialog()
     946             : {
     947           0 :     disposeOnce();
     948           0 : }
     949             : 
     950           0 : void LibDialog::dispose()
     951             : {
     952           0 :     m_pStorageFrame.clear();
     953           0 :     m_pLibBox.clear();
     954           0 :     m_pReferenceBox.clear();
     955           0 :     m_pReplaceBox.clear();
     956           0 :     ModalDialog::dispose();
     957           0 : }
     958             : 
     959             : 
     960           0 : void LibDialog::SetStorageName( const OUString& rName )
     961             : {
     962           0 :     OUString aName( IDE_RESSTR(RID_STR_FILENAME) );
     963           0 :     aName += rName;
     964           0 :     m_pStorageFrame->set_label(aName);
     965           0 : }
     966             : 
     967             : // Helper function
     968           0 : SbModule* createModImpl( vcl::Window* pWin, const ScriptDocument& rDocument,
     969             :     TreeListBox& rBasicBox, const OUString& rLibName, const OUString& _aModName, bool bMain )
     970             : {
     971             :     OSL_ENSURE( rDocument.isAlive(), "createModImpl: invalid document!" );
     972           0 :     if ( !rDocument.isAlive() )
     973           0 :         return NULL;
     974             : 
     975           0 :     SbModule* pModule = NULL;
     976             : 
     977           0 :     OUString aLibName( rLibName );
     978           0 :     if ( aLibName.isEmpty() )
     979           0 :         aLibName = "Standard" ;
     980           0 :     rDocument.getOrCreateLibrary( E_SCRIPTS, aLibName );
     981           0 :     OUString aModName = _aModName;
     982           0 :     if ( aModName.isEmpty() )
     983           0 :         aModName = rDocument.createObjectName( E_SCRIPTS, aLibName );
     984             : 
     985           0 :     ScopedVclPtrInstance< NewObjectDialog > aNewDlg(pWin, ObjectMode::Module, true);
     986           0 :     aNewDlg->SetObjectName( aModName );
     987             : 
     988           0 :     if (aNewDlg->Execute() != 0)
     989             :     {
     990           0 :         if (!aNewDlg->GetObjectName().isEmpty() )
     991           0 :             aModName = aNewDlg->GetObjectName();
     992             : 
     993             :         try
     994             :         {
     995           0 :             OUString sModuleCode;
     996             :             // the module has existed
     997           0 :             if( rDocument.hasModule( aLibName, aModName ) )
     998           0 :                 return NULL;
     999           0 :             rDocument.createModule( aLibName, aModName, bMain, sModuleCode );
    1000           0 :             BasicManager* pBasMgr = rDocument.getBasicManager();
    1001           0 :             StarBASIC* pBasic = pBasMgr? pBasMgr->GetLib( aLibName ) : 0;
    1002           0 :                 if ( pBasic )
    1003           0 :                     pModule = pBasic->FindModule( aModName );
    1004           0 :                 SbxItem aSbxItem( SID_BASICIDE_ARG_SBX, rDocument, aLibName, aModName, TYPE_MODULE );
    1005           0 :             if (SfxDispatcher* pDispatcher = GetDispatcher())
    1006             :                 pDispatcher->Execute( SID_BASICIDE_SBXINSERTED,
    1007           0 :                                       SfxCallMode::SYNCHRON, &aSbxItem, 0L );
    1008           0 :             LibraryLocation eLocation = rDocument.getLibraryLocation( aLibName );
    1009           0 :             SvTreeListEntry* pRootEntry = rBasicBox.FindRootEntry( rDocument, eLocation );
    1010           0 :             if ( pRootEntry )
    1011             :             {
    1012           0 :                 if ( !rBasicBox.IsExpanded( pRootEntry ) )
    1013           0 :                     rBasicBox.Expand( pRootEntry );
    1014           0 :                 SvTreeListEntry* pLibEntry = rBasicBox.FindEntry( pRootEntry, aLibName, OBJ_TYPE_LIBRARY );
    1015             :                 DBG_ASSERT( pLibEntry, "Libeintrag nicht gefunden!" );
    1016           0 :                 if ( pLibEntry )
    1017             :                 {
    1018           0 :                     if ( !rBasicBox.IsExpanded( pLibEntry ) )
    1019           0 :                         rBasicBox.Expand( pLibEntry );
    1020           0 :                     SvTreeListEntry* pSubRootEntry = pLibEntry;
    1021           0 :                     if( pBasic && rDocument.isInVBAMode() )
    1022             :                     {
    1023             :                         // add the new module in the "Modules" entry
    1024           0 :                         SvTreeListEntry* pLibSubEntry = rBasicBox.FindEntry( pLibEntry, IDE_RESSTR(RID_STR_NORMAL_MODULES) , OBJ_TYPE_NORMAL_MODULES );
    1025           0 :                         if( pLibSubEntry )
    1026             :                         {
    1027           0 :                             if( !rBasicBox.IsExpanded( pLibSubEntry ) )
    1028           0 :                                 rBasicBox.Expand( pLibSubEntry );
    1029           0 :                             pSubRootEntry = pLibSubEntry;
    1030             :                         }
    1031             :                     }
    1032             : 
    1033           0 :                     SvTreeListEntry* pEntry = rBasicBox.FindEntry( pSubRootEntry, aModName, OBJ_TYPE_MODULE );
    1034           0 :                     if ( !pEntry )
    1035             :                     {
    1036           0 :                         std::unique_ptr<Entry> e(new Entry(OBJ_TYPE_MODULE));
    1037             :                         pEntry = rBasicBox.AddEntry(
    1038             :                             aModName,
    1039             :                             Image( IDEResId( RID_IMG_MODULE ) ),
    1040           0 :                             pSubRootEntry, false, &e);
    1041           0 :                         DBG_ASSERT( pEntry, "InsertEntry fehlgeschlagen!" );
    1042             :                     }
    1043           0 :                     rBasicBox.SetCurEntry( pEntry );
    1044           0 :                     rBasicBox.Select( rBasicBox.GetCurEntry() );        // OV-Bug?!
    1045             :                 }
    1046           0 :             }
    1047             :         }
    1048           0 :         catch (const container::ElementExistException& )
    1049             :         {
    1050           0 :             ScopedVclPtrInstance<MessageDialog>::Create(pWin, IDE_RESSTR(RID_STR_SBXNAMEALLREADYUSED2))->Execute();
    1051             :         }
    1052           0 :         catch (const container::NoSuchElementException& )
    1053             :         {
    1054             :             DBG_UNHANDLED_EXCEPTION();
    1055             :         }
    1056             :     }
    1057           0 :     return pModule;
    1058             : }
    1059             : 
    1060             : 
    1061           0 : } // namespace basctl
    1062             : 
    1063             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11