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

Generated by: LCOV version 1.10