LCOV - code coverage report
Current view: top level - basctl/source/basicide - basides1.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 0 658 0.0 %
Date: 2015-06-13 12:38:46 Functions: 0 17 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 "basidesh.hrc"
      21             : #include "helpid.hrc"
      22             : 
      23             : #include "baside2.hxx"
      24             : #include "baside3.hxx"
      25             : #include "docsignature.hxx"
      26             : #include "iderdll.hxx"
      27             : #include "iderdll2.hxx"
      28             : #include "localizationmgr.hxx"
      29             : #include "managelang.hxx"
      30             : 
      31             : #include <basic/basmgr.hxx>
      32             : #include <basic/sbmeth.hxx>
      33             : #include <com/sun/star/script/XLibraryContainerPassword.hpp>
      34             : #include <com/sun/star/frame/XLayoutManager.hpp>
      35             : #include <sfx2/childwin.hxx>
      36             : #include <sfx2/docfac.hxx>
      37             : #include <sfx2/dinfdlg.hxx>
      38             : #include <sfx2/dispatch.hxx>
      39             : #include <sfx2/minfitem.hxx>
      40             : #include <sfx2/printer.hxx>
      41             : #include <sfx2/request.hxx>
      42             : #include <svl/aeitem.hxx>
      43             : #include <svl/intitem.hxx>
      44             : #include <svl/srchitem.hxx>
      45             : #include <svl/visitem.hxx>
      46             : #include <svl/whiter.hxx>
      47             : #include <vcl/xtextedt.hxx>
      48             : #include <vcl/msgbox.hxx>
      49             : 
      50             : namespace basctl
      51             : {
      52             : 
      53             : using namespace ::com::sun::star;
      54             : using namespace ::com::sun::star::uno;
      55             : using namespace ::com::sun::star::frame;
      56             : 
      57           0 : void Shell::ExecuteCurrent( SfxRequest& rReq )
      58             : {
      59           0 :     if ( !pCurWin )
      60           0 :         return;
      61             : 
      62           0 :     switch ( rReq.GetSlot() )
      63             :     {
      64             :         case SID_BASICIDE_HIDECURPAGE:
      65             :         {
      66           0 :             pCurWin->StoreData();
      67           0 :             RemoveWindow( pCurWin, false );
      68             :         }
      69           0 :         break;
      70             :         case SID_BASICIDE_RENAMECURRENT:
      71             :         {
      72           0 :             pTabBar->StartEditMode( pTabBar->GetCurPageId() );
      73             :         }
      74           0 :         break;
      75             :         case FID_SEARCH_NOW:
      76             :         {
      77           0 :             if (!pCurWin->HasActiveEditor())
      78           0 :                 break;
      79             :             DBG_ASSERT( rReq.GetArgs(), "arguments expected" );
      80           0 :             SfxItemSet const& rArgs = *rReq.GetArgs();
      81             :             // unfortunately I don't know the ID:
      82           0 :             sal_uInt16 nWhich = rArgs.GetWhichByPos( 0 );
      83             :             DBG_ASSERT( nWhich, "Which for SearchItem?" );
      84           0 :             SfxPoolItem const& rItem = rArgs.Get(nWhich);
      85             :             DBG_ASSERT(dynamic_cast<SvxSearchItem const*>(&rItem), "no searchitem!");
      86           0 :             SvxSearchItem const& rSearchItem = static_cast<SvxSearchItem const&>(rItem);
      87             :             // memorize item because of the adjustments...
      88           0 :             GetExtraData()->SetSearchItem(rSearchItem);
      89           0 :             sal_Int32 nFound = 0;
      90           0 :             if (rSearchItem.GetCommand() == SvxSearchCmd::REPLACE_ALL)
      91             :             {
      92           0 :                 sal_uInt16 nActModWindows = 0;
      93           0 :                 for (WindowTableIt it = aWindowTable.begin(); it != aWindowTable.end(); ++it)
      94             :                 {
      95           0 :                     BaseWindow* pWin = it->second;
      96           0 :                     if (pWin->HasActiveEditor())
      97           0 :                         nActModWindows++;
      98             :                 }
      99             : 
     100           0 :                 if ( nActModWindows <= 1 || ( !rSearchItem.GetSelection() && ScopedVclPtr<QueryBox>::Create( pCurWin, WB_YES_NO|WB_DEF_YES, IDEResId(RID_STR_SEARCHALLMODULES).toString() )->Execute() == RET_YES ) )
     101             :                 {
     102           0 :                     for (WindowTableIt it = aWindowTable.begin(); it != aWindowTable.end(); ++it)
     103             :                     {
     104           0 :                         BaseWindow* pWin = it->second;
     105           0 :                         nFound += pWin->StartSearchAndReplace(rSearchItem);
     106             :                     }
     107             :                 }
     108             :                 else
     109           0 :                     nFound = pCurWin->StartSearchAndReplace(rSearchItem);
     110             : 
     111           0 :                 OUString aReplStr(IDE_RESSTR(RID_STR_SEARCHREPLACES));
     112           0 :                 aReplStr = aReplStr.replaceAll("XX", OUString::number(nFound));
     113           0 :                 ScopedVclPtr<InfoBox>::Create( pCurWin, aReplStr )->Execute();
     114             :             }
     115             :             else
     116             :             {
     117           0 :                 bool bCanceled = false;
     118           0 :                 nFound = pCurWin->StartSearchAndReplace(rSearchItem);
     119           0 :                 if ( !nFound && !rSearchItem.GetSelection() )
     120             :                 {
     121             :                     // search other modules...
     122           0 :                     bool bChangeCurWindow = false;
     123           0 :                     WindowTableIt it;
     124           0 :                     for (it = aWindowTable.begin(); it != aWindowTable.end(); ++it)
     125           0 :                         if (it->second == pCurWin)
     126           0 :                             break;
     127           0 :                     if (it != aWindowTable.end())
     128           0 :                         ++it;
     129           0 :                     BaseWindow* pWin = it != aWindowTable.end() ? it->second.get() : 0;
     130             : 
     131           0 :                     bool bSearchedFromStart = false;
     132           0 :                     while ( !nFound && !bCanceled && ( pWin || !bSearchedFromStart ) )
     133             :                     {
     134           0 :                         if ( !pWin )
     135             :                         {
     136           0 :                             SfxViewFrame* pViewFrame = GetViewFrame();
     137           0 :                             SfxChildWindow* pChildWin = pViewFrame ? pViewFrame->GetChildWindow( SID_SEARCH_DLG ) : NULL;
     138           0 :                             vcl::Window* pParent = pChildWin ? pChildWin->GetWindow() : NULL;
     139           0 :                             ScopedVclPtrInstance< QueryBox > aQuery(pParent, WB_YES_NO|WB_DEF_YES, IDE_RESSTR(RID_STR_SEARCHFROMSTART));
     140           0 :                             if ( aQuery->Execute() == RET_YES )
     141             :                             {
     142           0 :                                 it = aWindowTable.begin();
     143           0 :                                 if ( it != aWindowTable.end() )
     144           0 :                                     pWin = it->second;
     145           0 :                                 bSearchedFromStart = true;
     146             :                             }
     147             :                             else
     148           0 :                                 bCanceled = true;
     149             :                         }
     150             : 
     151           0 :                         if (pWin && pWin->HasActiveEditor())
     152             :                         {
     153           0 :                             if ( pWin != pCurWin )
     154             :                             {
     155           0 :                                 if ( pCurWin )
     156           0 :                                     pWin->SetSizePixel( pCurWin->GetSizePixel() );
     157           0 :                                 nFound = pWin->StartSearchAndReplace(rSearchItem, true);
     158             :                             }
     159           0 :                             if ( nFound )
     160             :                             {
     161           0 :                                 bChangeCurWindow = true;
     162           0 :                                 break;
     163             :                             }
     164             :                         }
     165           0 :                         if ( pWin && ( pWin != pCurWin ) )
     166             :                         {
     167           0 :                             if ( it != aWindowTable.end() )
     168           0 :                                 ++it;
     169           0 :                             pWin = it != aWindowTable.end() ? it->second.get() : 0;
     170             :                         }
     171             :                         else
     172           0 :                             pWin = 0;
     173             :                     }
     174           0 :                     if ( !nFound && bSearchedFromStart )
     175           0 :                         nFound = pCurWin->StartSearchAndReplace(rSearchItem, true);
     176           0 :                     if ( bChangeCurWindow )
     177           0 :                         SetCurWindow( pWin, true );
     178             :                 }
     179           0 :                 if ( !nFound && !bCanceled )
     180           0 :                     ScopedVclPtr<InfoBox>::Create( pCurWin, IDEResId(RID_STR_SEARCHNOTFOUND).toString() )->Execute();
     181             :             }
     182             : 
     183           0 :             rReq.Done();
     184             :         }
     185           0 :         break;
     186             :         case SID_UNDO:
     187             :         case SID_REDO:
     188           0 :             if ( GetUndoManager() && pCurWin->AllowUndo() )
     189           0 :                 GetViewFrame()->ExecuteSlot( rReq );
     190           0 :             break;
     191             :         default:
     192           0 :             pCurWin->ExecuteCommand( rReq );
     193             :     }
     194             : }
     195             : 
     196             : //  no matter who's at the top, influence on the shell:
     197           0 : void Shell::ExecuteGlobal( SfxRequest& rReq )
     198             : {
     199           0 :     sal_uInt16 nSlot = rReq.GetSlot();
     200           0 :     switch ( nSlot )
     201             :     {
     202             :         case SID_BASICSTOP:
     203             :         {
     204             :             // maybe do not simply stop if on breakpoint!
     205           0 :             if (ModulWindow* pMCurWin = dynamic_cast<ModulWindow*>(pCurWin.get()))
     206           0 :                 pMCurWin->BasicStop();
     207           0 :             StopBasic();
     208             :         }
     209           0 :         break;
     210             : 
     211             :         case SID_SAVEDOC:
     212             :         {
     213           0 :             if ( pCurWin )
     214             :             {
     215             :                 // rewrite date into the BASIC
     216           0 :                 StoreAllWindowData();
     217             : 
     218             :                 // document basic
     219           0 :                 ScriptDocument aDocument( pCurWin->GetDocument() );
     220           0 :                 if ( aDocument.isDocument() )
     221             :                 {
     222           0 :                     uno::Reference< task::XStatusIndicator > xStatusIndicator;
     223             : 
     224           0 :                     SFX_REQUEST_ARG( rReq, pStatusIndicatorItem, SfxUnoAnyItem,
     225             :                         SID_PROGRESS_STATUSBAR_CONTROL, false );
     226           0 :                     if ( pStatusIndicatorItem )
     227           0 :                         OSL_VERIFY( pStatusIndicatorItem->GetValue() >>= xStatusIndicator );
     228             :                     else
     229             :                     {
     230             :                         // get statusindicator
     231           0 :                         SfxViewFrame *pFrame_ = GetFrame();
     232           0 :                         if ( pFrame_ )
     233             :                         {
     234             :                             uno::Reference< task::XStatusIndicatorFactory > xStatFactory(
     235           0 :                                                                         pFrame_->GetFrame().GetFrameInterface(),
     236           0 :                                                                         uno::UNO_QUERY );
     237           0 :                             if( xStatFactory.is() )
     238           0 :                                 xStatusIndicator = xStatFactory->createStatusIndicator();
     239             :                         }
     240             : 
     241           0 :                         if ( xStatusIndicator.is() )
     242           0 :                             rReq.AppendItem( SfxUnoAnyItem( SID_PROGRESS_STATUSBAR_CONTROL, uno::makeAny( xStatusIndicator ) ) );
     243             :                     }
     244             : 
     245           0 :                     aDocument.saveDocument( xStatusIndicator );
     246             :                 }
     247             : 
     248           0 :                 if (SfxBindings* pBindings = GetBindingsPtr())
     249             :                 {
     250           0 :                     pBindings->Invalidate( SID_DOC_MODIFIED );
     251           0 :                     pBindings->Invalidate( SID_SAVEDOC );
     252           0 :                     pBindings->Invalidate( SID_SIGNATURE );
     253           0 :                 }
     254             :             }
     255             :         }
     256           0 :         break;
     257             :         case SID_BASICIDE_MODULEDLG:
     258             :         {
     259           0 :             if ( rReq.GetArgs() )
     260             :             {
     261           0 :                 const SfxUInt16Item &rTabId = static_cast<const SfxUInt16Item&>(rReq.GetArgs()->Get(SID_BASICIDE_ARG_TABID ));
     262           0 :                 Organize( rTabId.GetValue() );
     263             :             }
     264             :             else
     265           0 :                 Organize( 0 );
     266             :         }
     267           0 :         break;
     268             :         case SID_BASICIDE_CHOOSEMACRO:
     269             :         {
     270           0 :             ChooseMacro( NULL, false, OUString() );
     271             :         }
     272           0 :         break;
     273             :         case SID_BASICIDE_CREATEMACRO:
     274             :         case SID_BASICIDE_EDITMACRO:
     275             :         {
     276             :             DBG_ASSERT( rReq.GetArgs(), "arguments expected" );
     277           0 :             const SfxMacroInfoItem& rInfo = static_cast<const SfxMacroInfoItem&>(rReq.GetArgs()->Get(SID_BASICIDE_ARG_MACROINFO ));
     278           0 :             BasicManager* pBasMgr = const_cast<BasicManager*>(rInfo.GetBasicManager());
     279             :             DBG_ASSERT( pBasMgr, "Nichts selektiert im Basic-Baum ?" );
     280             : 
     281           0 :             ScriptDocument aDocument( ScriptDocument::getDocumentForBasicManager( pBasMgr ) );
     282             : 
     283           0 :             StartListening( *pBasMgr, true /* log on only once */ );
     284           0 :             OUString aLibName( rInfo.GetLib() );
     285           0 :             if ( aLibName.isEmpty() )
     286           0 :                 aLibName = "Standard" ;
     287           0 :             StarBASIC* pBasic = pBasMgr->GetLib( aLibName );
     288           0 :             if ( !pBasic )
     289             :             {
     290             :                 // load module and dialog library (if not loaded)
     291           0 :                 aDocument.loadLibraryIfExists( E_SCRIPTS, aLibName );
     292           0 :                 aDocument.loadLibraryIfExists( E_DIALOGS, aLibName );
     293             : 
     294             :                 // get Basic
     295           0 :                 pBasic = pBasMgr->GetLib( aLibName );
     296             :             }
     297             :             DBG_ASSERT( pBasic, "No Basic!" );
     298             : 
     299           0 :             SetCurLib( aDocument, aLibName );
     300             : 
     301           0 :             if ( pBasic && rReq.GetSlot() == SID_BASICIDE_CREATEMACRO )
     302             :             {
     303           0 :                 SbModule* pModule = pBasic->FindModule( rInfo.GetModule() );
     304           0 :                 if ( !pModule )
     305             :                 {
     306           0 :                     if ( !rInfo.GetModule().isEmpty() || !pBasic->GetModules()->Count() )
     307             :                     {
     308           0 :                         OUString aModName = rInfo.GetModule();
     309             : 
     310           0 :                         OUString sModuleCode;
     311           0 :                         if ( aDocument.createModule( aLibName, aModName, false, sModuleCode ) )
     312           0 :                             pModule = pBasic->FindModule( aModName );
     313             :                     }
     314             :                     else
     315           0 :                         pModule = static_cast<SbModule*>( pBasic->GetModules()->Get(0) );
     316             :                 }
     317             :                 DBG_ASSERT( pModule, "Kein Modul!" );
     318           0 :                 if ( pModule && !pModule->GetMethods()->Find( rInfo.GetMethod(), SbxCLASS_METHOD ) )
     319           0 :                     CreateMacro( pModule, rInfo.GetMethod() );
     320             :             }
     321           0 :             SfxViewFrame* pViewFrame = GetViewFrame();
     322           0 :             if ( pViewFrame )
     323           0 :                 pViewFrame->ToTop();
     324           0 :             ModulWindow* pWin = FindBasWin( aDocument, aLibName, rInfo.GetModule(), true );
     325             :             DBG_ASSERT( pWin, "Edit/Create Macro: Fenster wurde nicht erzeugt/gefunden!" );
     326           0 :             SetCurWindow( pWin, true );
     327           0 :             pWin->EditMacro( rInfo.GetMethod() );
     328             :         }
     329           0 :         break;
     330             : 
     331             :         case SID_BASICIDE_OBJCAT:
     332             :             // toggling object catalog
     333           0 :             aObjectCatalog->Show(!aObjectCatalog->IsVisible());
     334           0 :             if (pLayout)
     335           0 :                 pLayout->ArrangeWindows();
     336             :             // refresh the button state
     337           0 :             if (SfxBindings* pBindings = GetBindingsPtr())
     338           0 :                 pBindings->Invalidate(SID_BASICIDE_OBJCAT);
     339           0 :             break;
     340             : 
     341             :         case SID_BASICIDE_NAMECHANGEDONTAB:
     342             :         {
     343             :             DBG_ASSERT( rReq.GetArgs(), "arguments expected" );
     344           0 :             const SfxUInt16Item &rTabId = static_cast<const SfxUInt16Item&>(rReq.GetArgs()->Get(SID_BASICIDE_ARG_TABID ));
     345           0 :             const SfxStringItem &rModName = static_cast<const SfxStringItem&>(rReq.GetArgs()->Get(SID_BASICIDE_ARG_MODULENAME ));
     346           0 :             if ( aWindowTable.find( rTabId.GetValue() ) !=  aWindowTable.end() )
     347             :             {
     348           0 :                 BaseWindow* pWin = aWindowTable[ rTabId.GetValue() ];
     349           0 :                 OUString aNewName( rModName.GetValue() );
     350           0 :                 OUString aOldName( pWin->GetName() );
     351           0 :                 if ( aNewName != aOldName )
     352             :                 {
     353           0 :                     bool bRenameOk = false;
     354           0 :                     if (ModulWindow* pModWin = dynamic_cast<ModulWindow*>(pWin))
     355             :                     {
     356           0 :                         OUString aLibName = pModWin->GetLibName();
     357           0 :                         ScriptDocument aDocument( pWin->GetDocument() );
     358             : 
     359           0 :                         if (RenameModule(pModWin, aDocument, aLibName, aOldName, aNewName))
     360             :                         {
     361           0 :                             bRenameOk = true;
     362             :                             // Because we listen for container events for script
     363             :                             // modules, rename will delete the 'old' window
     364             :                             // pWin has been invalidated, restore now
     365           0 :                             pWin = FindBasWin( aDocument, aLibName, aNewName, true );
     366           0 :                         }
     367             : 
     368             :                     }
     369           0 :                     else if (DialogWindow* pDlgWin = dynamic_cast<DialogWindow*>(pWin))
     370             :                     {
     371           0 :                         bRenameOk = pDlgWin->RenameDialog( aNewName );
     372             :                     }
     373           0 :                     if ( bRenameOk )
     374             :                     {
     375           0 :                         MarkDocumentModified( pWin->GetDocument() );
     376             :                     }
     377             :                     else
     378             :                     {
     379             :                         // set old name in TabWriter
     380           0 :                         sal_uInt16 nId = GetWindowId( pWin );
     381             :                         DBG_ASSERT( nId, "No entry in Tabbar!" );
     382           0 :                         if ( nId )
     383           0 :                             pTabBar->SetPageText( nId, aOldName );
     384             :                     }
     385             :                 }
     386             : 
     387             :                 // set focus to current window
     388           0 :                 pWin->GrabFocus();
     389             :             }
     390             :         }
     391           0 :         break;
     392             :         case SID_BASICIDE_STOREMODULESOURCE:
     393             :         case SID_BASICIDE_UPDATEMODULESOURCE:
     394             :         {
     395             :             DBG_ASSERT( rReq.GetArgs(), "arguments expected" );
     396           0 :             const SfxMacroInfoItem& rInfo = static_cast<const SfxMacroInfoItem&>(rReq.GetArgs()->Get(SID_BASICIDE_ARG_MACROINFO ));
     397           0 :             BasicManager* pBasMgr = const_cast<BasicManager*>(rInfo.GetBasicManager());
     398             :             DBG_ASSERT( pBasMgr, "Store source: Kein BasMgr?" );
     399           0 :             ScriptDocument aDocument( ScriptDocument::getDocumentForBasicManager( pBasMgr ) );
     400           0 :             ModulWindow* pWin = FindBasWin( aDocument, rInfo.GetLib(), rInfo.GetModule(), false, true );
     401           0 :             if ( pWin )
     402             :             {
     403           0 :                 if ( rReq.GetSlot() == SID_BASICIDE_STOREMODULESOURCE )
     404           0 :                     pWin->StoreData();
     405             :                 else
     406           0 :                     pWin->UpdateData();
     407           0 :             }
     408             :         }
     409           0 :         break;
     410             :         case SID_BASICIDE_STOREALLMODULESOURCES:
     411             :         case SID_BASICIDE_UPDATEALLMODULESOURCES:
     412             :         {
     413           0 :             for (WindowTableIt it = aWindowTable.begin(); it != aWindowTable.end(); ++it)
     414             :             {
     415           0 :                 BaseWindow* pWin = it->second;
     416           0 :                 if (!pWin->IsSuspended() && dynamic_cast<ModulWindow*>(pWin))
     417             :                 {
     418           0 :                     if ( rReq.GetSlot() == SID_BASICIDE_STOREALLMODULESOURCES )
     419           0 :                         pWin->StoreData();
     420             :                     else
     421           0 :                         pWin->UpdateData();
     422             :                 }
     423             :             }
     424             :         }
     425           0 :         break;
     426             :         case SID_BASICIDE_LIBSELECTED:
     427             :         case SID_BASICIDE_LIBREMOVED:
     428             :         case SID_BASICIDE_LIBLOADED:
     429             :         {
     430             :             DBG_ASSERT( rReq.GetArgs(), "arguments expected" );
     431           0 :             const SfxUsrAnyItem& rShellItem = static_cast<const SfxUsrAnyItem&>(rReq.GetArgs()->Get( SID_BASICIDE_ARG_DOCUMENT_MODEL ));
     432           0 :             uno::Reference< frame::XModel > xModel( rShellItem.GetValue(), UNO_QUERY );
     433           0 :             ScriptDocument aDocument( xModel.is() ? ScriptDocument( xModel ) : ScriptDocument::getApplicationScriptDocument() );
     434           0 :             const SfxStringItem& rLibNameItem = static_cast<const SfxStringItem&>(rReq.GetArgs()->Get( SID_BASICIDE_ARG_LIBNAME ));
     435           0 :             OUString aLibName( rLibNameItem.GetValue() );
     436             : 
     437           0 :             if ( nSlot == SID_BASICIDE_LIBSELECTED )
     438             :             {
     439             :                 // load module and dialog library (if not loaded)
     440           0 :                 aDocument.loadLibraryIfExists( E_SCRIPTS, aLibName );
     441           0 :                 aDocument.loadLibraryIfExists( E_DIALOGS, aLibName );
     442             : 
     443             :                 // check password, if library is password protected and not verified
     444           0 :                 bool bOK = true;
     445           0 :                 Reference< script::XLibraryContainer > xModLibContainer( aDocument.getLibraryContainer( E_SCRIPTS ) );
     446           0 :                 if ( xModLibContainer.is() && xModLibContainer->hasByName( aLibName ) )
     447             :                 {
     448           0 :                     Reference< script::XLibraryContainerPassword > xPasswd( xModLibContainer, UNO_QUERY );
     449           0 :                     if ( xPasswd.is() && xPasswd->isLibraryPasswordProtected( aLibName ) && !xPasswd->isLibraryPasswordVerified( aLibName ) )
     450             :                     {
     451           0 :                         OUString aPassword;
     452           0 :                         bOK = QueryPassword( xModLibContainer, aLibName, aPassword );
     453           0 :                     }
     454             :                 }
     455             : 
     456           0 :                 if ( bOK )
     457             :                 {
     458           0 :                     SetCurLib( aDocument, aLibName, true, false );
     459             :                 }
     460             :                 else
     461             :                 {
     462             :                     // adjust old value...
     463           0 :                     if (SfxBindings* pBindings = GetBindingsPtr())
     464           0 :                         pBindings->Invalidate(SID_BASICIDE_LIBSELECTOR, true, false);
     465           0 :                 }
     466             :             }
     467           0 :             else if ( nSlot == SID_BASICIDE_LIBREMOVED )
     468             :             {
     469           0 :                 if ( m_aCurLibName.isEmpty() || ( aDocument == m_aCurDocument && aLibName == m_aCurLibName ) )
     470             :                 {
     471           0 :                     RemoveWindows( aDocument, aLibName, true );
     472           0 :                     if ( aDocument == m_aCurDocument && aLibName == m_aCurLibName )
     473             :                     {
     474           0 :                         m_aCurDocument = ScriptDocument::getApplicationScriptDocument();
     475           0 :                         m_aCurLibName.clear();
     476             :                         // no UpdateWindows!
     477           0 :                         if (SfxBindings* pBindings = GetBindingsPtr())
     478           0 :                             pBindings->Invalidate( SID_BASICIDE_LIBSELECTOR );
     479             :                     }
     480             :                 }
     481             :             }
     482             :             else    // Loaded...
     483           0 :                 UpdateWindows();
     484             :         }
     485           0 :         break;
     486             :         case SID_BASICIDE_NEWMODULE:
     487             :         {
     488           0 :             VclPtr<ModulWindow> pWin = CreateBasWin( m_aCurDocument, m_aCurLibName, OUString() );
     489             :             DBG_ASSERT( pWin, "New Module: Konnte Fenster nicht erzeugen!" );
     490           0 :             SetCurWindow( pWin, true );
     491             :         }
     492           0 :         break;
     493             :         case SID_BASICIDE_NEWDIALOG:
     494             :         {
     495           0 :             VclPtr<DialogWindow> pWin = CreateDlgWin( m_aCurDocument, m_aCurLibName, OUString() );
     496             :             DBG_ASSERT( pWin, "New Module: Konnte Fenster nicht erzeugen!" );
     497           0 :             SetCurWindow( pWin, true );
     498             :         }
     499           0 :         break;
     500             :         case SID_BASICIDE_SBXRENAMED:
     501             :         {
     502             :             DBG_ASSERT( rReq.GetArgs(), "arguments expected" );
     503             :         }
     504           0 :         break;
     505             :         case SID_BASICIDE_SBXINSERTED:
     506             :         {
     507             :             DBG_ASSERT( rReq.GetArgs(), "arguments expected" );
     508           0 :             const SbxItem& rSbxItem = static_cast<const SbxItem&>(rReq.GetArgs()->Get(SID_BASICIDE_ARG_SBX ));
     509           0 :             ScriptDocument aDocument( rSbxItem.GetDocument() );
     510           0 :             OUString aLibName( rSbxItem.GetLibName() );
     511           0 :             OUString aName( rSbxItem.GetName() );
     512           0 :             if ( m_aCurLibName.isEmpty() || ( aDocument == m_aCurDocument && aLibName == m_aCurLibName ) )
     513             :             {
     514           0 :                 if ( rSbxItem.GetType() == TYPE_MODULE )
     515           0 :                     FindBasWin( aDocument, aLibName, aName, true );
     516           0 :                 else if ( rSbxItem.GetType() == TYPE_DIALOG )
     517           0 :                     FindDlgWin( aDocument, aLibName, aName, true );
     518           0 :             }
     519             :         }
     520           0 :         break;
     521             :         case SID_BASICIDE_SBXDELETED:
     522             :         {
     523             :             DBG_ASSERT( rReq.GetArgs(), "arguments expected" );
     524           0 :             const SbxItem& rSbxItem = static_cast<const SbxItem&>(rReq.GetArgs()->Get(SID_BASICIDE_ARG_SBX ));
     525           0 :             ScriptDocument aDocument( rSbxItem.GetDocument() );
     526           0 :             BaseWindow* pWin = FindWindow( aDocument, rSbxItem.GetLibName(), rSbxItem.GetName(), rSbxItem.GetType(), true );
     527           0 :             if ( pWin )
     528           0 :                 RemoveWindow( pWin, true );
     529             :         }
     530           0 :         break;
     531             :         case SID_BASICIDE_SHOWSBX:
     532             :         {
     533             :             DBG_ASSERT( rReq.GetArgs(), "arguments expected" );
     534           0 :             const SbxItem& rSbxItem = static_cast<const SbxItem&>(rReq.GetArgs()->Get(SID_BASICIDE_ARG_SBX ));
     535           0 :             ScriptDocument aDocument( rSbxItem.GetDocument() );
     536           0 :             OUString aLibName( rSbxItem.GetLibName() );
     537           0 :             OUString aName( rSbxItem.GetName() );
     538           0 :             SetCurLib( aDocument, aLibName );
     539           0 :             BaseWindow* pWin = 0;
     540           0 :             if ( rSbxItem.GetType() == TYPE_DIALOG )
     541             :             {
     542           0 :                 pWin = FindDlgWin( aDocument, aLibName, aName, true );
     543             :             }
     544           0 :             else if ( rSbxItem.GetType() == TYPE_MODULE )
     545             :             {
     546           0 :                 pWin = FindBasWin( aDocument, aLibName, aName, true );
     547             :             }
     548           0 :             else if ( rSbxItem.GetType() == TYPE_METHOD )
     549             :             {
     550           0 :                 pWin = FindBasWin( aDocument, aLibName, aName, true );
     551           0 :                 static_cast<ModulWindow*>(pWin)->EditMacro( rSbxItem.GetMethodName() );
     552             :             }
     553             :             DBG_ASSERT( pWin, "Fenster wurde nicht erzeugt!" );
     554           0 :             SetCurWindow( pWin, true );
     555           0 :             pTabBar->MakeVisible( pTabBar->GetCurPageId() );
     556             :         }
     557           0 :         break;
     558             :         case SID_BASICIDE_SHOWWINDOW:
     559             :         {
     560           0 :             boost::scoped_ptr< ScriptDocument > pDocument;
     561             : 
     562           0 :             SFX_REQUEST_ARG( rReq, pDocumentItem, SfxStringItem, SID_BASICIDE_ARG_DOCUMENT, false );
     563           0 :             if ( pDocumentItem )
     564             :             {
     565           0 :                 OUString sDocumentCaption = pDocumentItem->GetValue();
     566           0 :                 if ( !sDocumentCaption.isEmpty() )
     567           0 :                     pDocument.reset( new ScriptDocument( ScriptDocument::getDocumentWithURLOrCaption( sDocumentCaption ) ) );
     568             :             }
     569             : 
     570           0 :             SFX_REQUEST_ARG( rReq, pDocModelItem, SfxUsrAnyItem, SID_BASICIDE_ARG_DOCUMENT_MODEL, false );
     571           0 :             if ( !pDocument.get() && pDocModelItem )
     572             :             {
     573           0 :                 uno::Reference< frame::XModel > xModel( pDocModelItem->GetValue(), UNO_QUERY );
     574           0 :                 if ( xModel.is() )
     575           0 :                     pDocument.reset( new ScriptDocument( xModel ) );
     576             :             }
     577             : 
     578           0 :             if ( !pDocument.get() )
     579           0 :                 break;
     580             : 
     581           0 :             SFX_REQUEST_ARG( rReq, pLibNameItem, SfxStringItem, SID_BASICIDE_ARG_LIBNAME, false );
     582           0 :             if ( !pLibNameItem )
     583           0 :                 break;
     584             : 
     585           0 :             OUString aLibName( pLibNameItem->GetValue() );
     586           0 :             pDocument->loadLibraryIfExists( E_SCRIPTS, aLibName );
     587           0 :             SetCurLib( *pDocument, aLibName );
     588           0 :             SFX_REQUEST_ARG( rReq, pNameItem, SfxStringItem, SID_BASICIDE_ARG_NAME, false );
     589           0 :             if ( pNameItem )
     590             :             {
     591           0 :                 OUString aName( pNameItem->GetValue() );
     592           0 :                 OUString aModType( "Module" );
     593           0 :                 OUString aDlgType( "Dialog" );
     594           0 :                 OUString aType( aModType );
     595           0 :                 SFX_REQUEST_ARG( rReq, pTypeItem, SfxStringItem, SID_BASICIDE_ARG_TYPE, false );
     596           0 :                 if ( pTypeItem )
     597           0 :                     aType = pTypeItem->GetValue();
     598             : 
     599           0 :                 BaseWindow* pWin = 0;
     600           0 :                 if ( aType == aModType )
     601           0 :                     pWin = FindBasWin( *pDocument, aLibName, aName, false );
     602           0 :                 else if ( aType == aDlgType )
     603           0 :                     pWin = FindDlgWin( *pDocument, aLibName, aName, false );
     604             : 
     605           0 :                 if ( pWin )
     606             :                 {
     607           0 :                     SetCurWindow( pWin, true );
     608           0 :                     if ( pTabBar )
     609           0 :                         pTabBar->MakeVisible( pTabBar->GetCurPageId() );
     610             : 
     611           0 :                     if (ModulWindow* pModWin = dynamic_cast<ModulWindow*>(pWin))
     612             :                     {
     613           0 :                         SFX_REQUEST_ARG( rReq, pLineItem, SfxUInt32Item, SID_BASICIDE_ARG_LINE, false );
     614           0 :                         if ( pLineItem )
     615             :                         {
     616           0 :                             pModWin->AssertValidEditEngine();
     617           0 :                             TextView* pTextView = pModWin->GetEditView();
     618           0 :                             if ( pTextView )
     619             :                             {
     620           0 :                                 TextEngine* pTextEngine = pTextView->GetTextEngine();
     621           0 :                                 if ( pTextEngine )
     622             :                                 {
     623           0 :                                     sal_uInt32 nLine = pLineItem->GetValue();
     624           0 :                                     sal_uInt32 nLineCount = 0;
     625           0 :                                     for ( sal_uInt32 i = 0, nCount = pTextEngine->GetParagraphCount(); i < nCount; ++i )
     626           0 :                                         nLineCount += pTextEngine->GetLineCount( i );
     627           0 :                                     if ( nLine > nLineCount )
     628           0 :                                         nLine = nLineCount;
     629           0 :                                     if ( nLine > 0 )
     630           0 :                                         --nLine;
     631             : 
     632             :                                     // scroll window and set selection
     633           0 :                                     long nVisHeight = pModWin->GetOutputSizePixel().Height();
     634           0 :                                     long nTextHeight = pTextEngine->GetTextHeight();
     635           0 :                                     if ( nTextHeight > nVisHeight )
     636             :                                     {
     637           0 :                                         long nMaxY = nTextHeight - nVisHeight;
     638           0 :                                         long nOldY = pTextView->GetStartDocPos().Y();
     639           0 :                                         long nNewY = nLine * pTextEngine->GetCharHeight() - nVisHeight / 2;
     640           0 :                                         nNewY = ::std::min( nNewY, nMaxY );
     641           0 :                                         pTextView->Scroll( 0, -( nNewY - nOldY ) );
     642           0 :                                         pTextView->ShowCursor( false, true );
     643           0 :                                         pModWin->GetEditVScrollBar().SetThumbPos( pTextView->GetStartDocPos().Y() );
     644             :                                     }
     645           0 :                                     sal_uInt16 nCol1 = 0, nCol2 = 0;
     646           0 :                                     SFX_REQUEST_ARG( rReq, pCol1Item, SfxUInt16Item, SID_BASICIDE_ARG_COLUMN1, false );
     647           0 :                                     if ( pCol1Item )
     648             :                                     {
     649           0 :                                         nCol1 = pCol1Item->GetValue();
     650           0 :                                         if ( nCol1 > 0 )
     651           0 :                                             --nCol1;
     652           0 :                                         nCol2 = nCol1;
     653             :                                     }
     654           0 :                                     SFX_REQUEST_ARG( rReq, pCol2Item, SfxUInt16Item, SID_BASICIDE_ARG_COLUMN2, false );
     655           0 :                                     if ( pCol2Item )
     656             :                                     {
     657           0 :                                         nCol2 = pCol2Item->GetValue();
     658           0 :                                         if ( nCol2 > 0 )
     659           0 :                                             --nCol2;
     660             :                                     }
     661           0 :                                     TextSelection aSel( TextPaM( nLine, nCol1 ), TextPaM( nLine, nCol2 ) );
     662           0 :                                     pTextView->SetSelection( aSel );
     663           0 :                                     pTextView->ShowCursor();
     664           0 :                                     vcl::Window* pWindow_ = pTextView->GetWindow();
     665           0 :                                     if ( pWindow_ )
     666           0 :                                         pWindow_->GrabFocus();
     667             :                                 }
     668             :                             }
     669             :                         }
     670             :                     }
     671           0 :                 }
     672             :             }
     673           0 :             rReq.Done();
     674             :         }
     675           0 :         break;
     676             : 
     677             :         case SID_BASICIDE_MANAGE_LANG:
     678             :         {
     679           0 :             ScopedVclPtrInstance< ManageLanguageDialog > aDlg(pCurWin, m_pCurLocalizationMgr);
     680           0 :             aDlg->Execute();
     681           0 :             rReq.Done();
     682             :         }
     683           0 :         break;
     684             : 
     685             :         default:
     686           0 :             if (pLayout)
     687           0 :                 pLayout->ExecuteGlobal(rReq);
     688           0 :             if (pCurWin)
     689           0 :                 pCurWin->ExecuteGlobal(rReq);
     690           0 :             break;
     691             :     }
     692           0 : }
     693             : 
     694           0 : void Shell::GetState(SfxItemSet &rSet)
     695             : {
     696           0 :     SfxWhichIter aIter(rSet);
     697           0 :     for ( sal_uInt16 nWh = aIter.FirstWhich(); 0 != nWh; nWh = aIter.NextWhich() )
     698             :     {
     699           0 :         switch ( nWh )
     700             :         {
     701             :             case SID_DOCINFO:
     702             :             {
     703           0 :                 rSet.DisableItem( nWh );
     704             :             }
     705           0 :             break;
     706             :             case SID_SAVEDOC:
     707             :             {
     708           0 :                 bool bDisable = false;
     709             : 
     710           0 :                 if ( pCurWin )
     711             :                 {
     712           0 :                     if ( !pCurWin->IsModified() )
     713             :                     {
     714           0 :                         ScriptDocument aDocument( pCurWin->GetDocument() );
     715           0 :                         bDisable =  ( !aDocument.isAlive() )
     716           0 :                                 ||  ( aDocument.isDocument() ? !aDocument.isDocumentModified() : !IsAppBasicModified() );
     717             :                     }
     718             :                 }
     719             :                 else
     720             :                 {
     721           0 :                     bDisable = true;
     722             :                 }
     723             : 
     724           0 :                 if ( bDisable )
     725           0 :                     rSet.DisableItem( nWh );
     726             :             }
     727           0 :             break;
     728             :             case SID_NEWWINDOW:
     729             :             case SID_SAVEASDOC:
     730             :             {
     731           0 :                 rSet.DisableItem( nWh );
     732             :             }
     733           0 :             break;
     734             :             case SID_SIGNATURE:
     735             :             {
     736           0 :                 SignatureState nState = SignatureState::NOSIGNATURES;
     737           0 :                 if ( pCurWin )
     738             :                 {
     739           0 :                     DocumentSignature aSignature( pCurWin->GetDocument() );
     740           0 :                     nState = aSignature.getScriptingSignatureState();
     741             :                 }
     742           0 :                 rSet.Put( SfxUInt16Item( SID_SIGNATURE, static_cast<sal_uInt16>(nState) ) );
     743             :             }
     744           0 :             break;
     745             :             case SID_BASICIDE_MODULEDLG:
     746             :             {
     747           0 :                 if ( StarBASIC::IsRunning() )
     748           0 :                     rSet.DisableItem( nWh );
     749             :             }
     750           0 :             break;
     751             :             case SID_BASICIDE_OBJCAT:
     752           0 :                 if (pLayout)
     753           0 :                     rSet.Put(SfxBoolItem(nWh, aObjectCatalog->IsVisible()));
     754             :                 else
     755           0 :                     rSet.Put(SfxVisibilityItem(nWh, false));
     756           0 :                 break;
     757             :             case SID_BASICIDE_SHOWSBX:
     758             :             case SID_BASICIDE_CREATEMACRO:
     759             :             case SID_BASICIDE_EDITMACRO:
     760             :             case SID_BASICIDE_NAMECHANGEDONTAB:
     761             :             {
     762             :                 ;
     763             :             }
     764           0 :             break;
     765             : 
     766             :             case SID_BASICIDE_ADDWATCH:
     767             :             case SID_BASICIDE_REMOVEWATCH:
     768             :             case SID_BASICLOAD:
     769             :             case SID_BASICSAVEAS:
     770             :             case SID_BASICIDE_MATCHGROUP:
     771             :             {
     772           0 :                 if (!dynamic_cast<ModulWindow*>(pCurWin.get()))
     773           0 :                     rSet.DisableItem( nWh );
     774           0 :                 else if ( ( nWh == SID_BASICLOAD ) && ( StarBASIC::IsRunning() || ( pCurWin && pCurWin->IsReadOnly() ) ) )
     775           0 :                     rSet.DisableItem( nWh );
     776             :             }
     777           0 :             break;
     778             :             case SID_BASICRUN:
     779             :             case SID_BASICSTEPINTO:
     780             :             case SID_BASICSTEPOVER:
     781             :             case SID_BASICSTEPOUT:
     782             :             case SID_BASICIDE_TOGGLEBRKPNT:
     783             :             case SID_BASICIDE_MANAGEBRKPNTS:
     784             :             {
     785           0 :                 if (ModulWindow* pMCurWin = dynamic_cast<ModulWindow*>(pCurWin.get()))
     786             :                 {
     787           0 :                     if (StarBASIC::IsRunning() && !pMCurWin->GetBasicStatus().bIsInReschedule)
     788           0 :                         rSet.DisableItem(nWh);
     789             :                 }
     790             :                 else
     791           0 :                     rSet.DisableItem( nWh );
     792             :             }
     793           0 :             break;
     794             :             case SID_BASICCOMPILE:
     795             :             {
     796           0 :                 if (StarBASIC::IsRunning() || !dynamic_cast<ModulWindow*>(pCurWin.get()))
     797           0 :                     rSet.DisableItem( nWh );
     798             :             }
     799           0 :             break;
     800             :             case SID_BASICSTOP:
     801             :             {
     802             :                 // stop is always possible when some Basic is running...
     803           0 :                 if (!StarBASIC::IsRunning())
     804           0 :                     rSet.DisableItem( nWh );
     805             :             }
     806           0 :             break;
     807             :             case SID_CHOOSE_CONTROLS:
     808             :             case SID_DIALOG_TESTMODE:
     809             :             case SID_INSERT_FORM_RADIO:
     810             :             case SID_INSERT_FORM_CHECK:
     811             :             case SID_INSERT_FORM_LIST:
     812             :             case SID_INSERT_FORM_COMBO:
     813             :             case SID_INSERT_FORM_VSCROLL:
     814             :             case SID_INSERT_FORM_HSCROLL:
     815             :             case SID_INSERT_FORM_SPIN:
     816             :             {
     817           0 :                 if (!dynamic_cast<DialogWindow*>(pCurWin.get()))
     818           0 :                     rSet.DisableItem( nWh );
     819             :             }
     820           0 :             break;
     821             :             case SID_SHOW_FORMS:
     822             :             case SID_SHOW_HIDDEN:
     823             :             {
     824           0 :                 rSet.DisableItem( nWh );
     825             :             }
     826           0 :             break;
     827             :             case SID_SEARCH_OPTIONS:
     828             :             {
     829           0 :                 SearchOptionFlags nOptions = SearchOptionFlags::NONE;
     830           0 :                 if( pCurWin )
     831           0 :                     nOptions = pCurWin->GetSearchOptions();
     832           0 :                 rSet.Put( SfxUInt16Item( SID_SEARCH_OPTIONS, static_cast<sal_uInt16>(nOptions) ) );
     833             :             }
     834           0 :             break;
     835             :             case SID_BASICIDE_LIBSELECTOR:
     836             :             {
     837           0 :                 OUString aName;
     838           0 :                 if ( !m_aCurLibName.isEmpty() )
     839             :                 {
     840           0 :                     LibraryLocation eLocation = m_aCurDocument.getLibraryLocation( m_aCurLibName );
     841           0 :                     aName = CreateMgrAndLibStr( m_aCurDocument.getTitle( eLocation ), m_aCurLibName );
     842             :                 }
     843           0 :                 SfxStringItem aItem( SID_BASICIDE_LIBSELECTOR, aName );
     844           0 :                 rSet.Put( aItem );
     845             :             }
     846           0 :             break;
     847             :             case SID_SEARCH_ITEM:
     848             :             {
     849           0 :                 OUString aSelected = GetSelectionText(true);
     850           0 :                 SvxSearchItem& rItem = GetExtraData()->GetSearchItem();
     851           0 :                 rItem.SetSearchString( aSelected );
     852           0 :                 rSet.Put( rItem );
     853             :             }
     854           0 :             break;
     855             :             case SID_BASICIDE_STAT_DATE:
     856             :             {
     857           0 :                 OUString aDate( "Datum?!" );
     858           0 :                 SfxStringItem aItem( SID_BASICIDE_STAT_DATE, aDate );
     859           0 :                 rSet.Put( aItem );
     860             :             }
     861           0 :             break;
     862             :             case SID_DOC_MODIFIED:
     863             :             {
     864           0 :                 bool bModified = false;
     865             : 
     866           0 :                 if ( pCurWin )
     867             :                 {
     868           0 :                     if ( pCurWin->IsModified() )
     869           0 :                         bModified = true;
     870             :                     else
     871             :                     {
     872           0 :                         ScriptDocument aDocument( pCurWin->GetDocument() );
     873           0 :                         bModified = aDocument.isDocument() ? aDocument.isDocumentModified() : IsAppBasicModified();
     874             :                     }
     875             :                 }
     876             : 
     877           0 :                 SfxBoolItem aItem(SID_DOC_MODIFIED, bModified);
     878           0 :                 rSet.Put( aItem );
     879             :             }
     880           0 :             break;
     881             :             case SID_BASICIDE_STAT_TITLE:
     882             :             {
     883           0 :                 if ( pCurWin )
     884             :                 {
     885           0 :                     OUString aTitle = pCurWin->CreateQualifiedName();
     886           0 :                     SfxStringItem aItem( SID_BASICIDE_STAT_TITLE, aTitle );
     887           0 :                     rSet.Put( aItem );
     888             :                 }
     889             :             }
     890           0 :             break;
     891             :             // are interpreted by the controller:
     892             :             case SID_ATTR_SIZE:
     893             :             case SID_ATTR_INSERT:
     894           0 :             break;
     895             :             case SID_UNDO:
     896             :             case SID_REDO:
     897             :             {
     898           0 :                 if( GetUndoManager() )  // recursive GetState else
     899           0 :                     GetViewFrame()->GetSlotState( nWh, NULL, &rSet );
     900             :             }
     901           0 :             break;
     902             :             case SID_BASICIDE_CURRENT_LANG:
     903             :             {
     904           0 :                 if( (pCurWin && pCurWin->IsReadOnly()) || GetCurLibName().isEmpty() )
     905           0 :                     rSet.DisableItem( nWh );
     906             :                 else
     907             :                 {
     908           0 :                     OUString aItemStr;
     909           0 :                     boost::shared_ptr<LocalizationMgr> pCurMgr(GetCurLocalizationMgr());
     910           0 :                     if ( pCurMgr->isLibraryLocalized() )
     911             :                     {
     912           0 :                         Sequence< lang::Locale > aLocaleSeq = pCurMgr->getStringResourceManager()->getLocales();
     913           0 :                         const lang::Locale* pLocale = aLocaleSeq.getConstArray();
     914           0 :                         sal_Int32 i, nCount = aLocaleSeq.getLength();
     915             : 
     916             :                         // Force different results for any combination of locales and default locale
     917           0 :                         OUString aLangStr;
     918           0 :                         for ( i = 0;  i <= nCount;  ++i )
     919             :                         {
     920           0 :                             lang::Locale aLocale;
     921           0 :                             if( i < nCount )
     922           0 :                                 aLocale = pLocale[i];
     923             :                             else
     924           0 :                                 aLocale = pCurMgr->getStringResourceManager()->getDefaultLocale();
     925             : 
     926           0 :                             aLangStr += aLocale.Language;
     927           0 :                             aLangStr += aLocale.Country;
     928           0 :                             aLangStr += aLocale.Variant;
     929           0 :                         }
     930           0 :                         aItemStr = aLangStr;
     931             :                     }
     932           0 :                     rSet.Put( SfxStringItem( nWh, aItemStr ) );
     933             :                 }
     934             :             }
     935           0 :             break;
     936             : 
     937             :             case SID_BASICIDE_MANAGE_LANG:
     938             :             {
     939           0 :                 if( (pCurWin && pCurWin->IsReadOnly()) || GetCurLibName().isEmpty() )
     940           0 :                     rSet.DisableItem( nWh );
     941             :             }
     942           0 :             break;
     943             :             case SID_GOTOLINE:
     944             :             {
     945             :                 // if this is not a module window hide the
     946             :                 // setting, doesn't make sense for example if the
     947             :                 // dialog editor is open
     948           0 :                 if (pCurWin && !dynamic_cast<ModulWindow*>(pCurWin.get()))
     949             :                 {
     950           0 :                     rSet.DisableItem( nWh );
     951           0 :                     rSet.Put(SfxVisibilityItem(nWh, false));
     952             :                 }
     953           0 :                 break;
     954             :             }
     955             :             default:
     956           0 :                 if (pLayout)
     957           0 :                     pLayout->GetState(rSet, nWh);
     958             :         }
     959             :     }
     960           0 :     if ( pCurWin )
     961           0 :         pCurWin->GetState( rSet );
     962           0 : }
     963             : 
     964           0 : bool Shell::HasUIFeature( sal_uInt32 nFeature )
     965             : {
     966           0 :     bool bResult = false;
     967             : 
     968           0 :     if ( (nFeature & BASICIDE_UI_FEATURE_SHOW_BROWSER) == BASICIDE_UI_FEATURE_SHOW_BROWSER )
     969             :     {
     970             :         // fade out (in) property browser in module (dialog) windows
     971           0 :         if (dynamic_cast<DialogWindow*>(pCurWin.get()) && !pCurWin->IsReadOnly())
     972           0 :             bResult = true;
     973             :     }
     974             : 
     975           0 :     return bResult;
     976             : }
     977             : 
     978           0 : void Shell::SetCurWindow( BaseWindow* pNewWin, bool bUpdateTabBar, bool bRememberAsCurrent )
     979             : {
     980           0 :     if ( pNewWin != pCurWin )
     981             :     {
     982           0 :         pCurWin = pNewWin;
     983           0 :         if (pLayout)
     984           0 :             pLayout->Deactivating();
     985           0 :         if (pCurWin)
     986             :         {
     987           0 :             if (pCurWin->GetType() == TYPE_MODULE)
     988           0 :                 pLayout = pModulLayout.get();
     989             :             else
     990           0 :                 pLayout = pDialogLayout.get();
     991           0 :             AdjustPosSizePixel(Point(0, 0), GetViewFrame()->GetWindow().GetOutputSizePixel());
     992           0 :             pLayout->Activating(*pCurWin);
     993           0 :             GetViewFrame()->GetWindow().SetHelpId(pCurWin->GetHid());
     994           0 :             if (bRememberAsCurrent)
     995           0 :                 pCurWin->InsertLibInfo();
     996           0 :             if (GetViewFrame()->GetWindow().IsVisible()) // SFX will do it later otherwise
     997           0 :                 pCurWin->Show();
     998           0 :             pCurWin->Init();
     999           0 :             if (!GetExtraData()->ShellInCriticalSection())
    1000             :             {
    1001           0 :                 vcl::Window* pFrameWindow = &GetViewFrame()->GetWindow();
    1002           0 :                 vcl::Window* pFocusWindow = Application::GetFocusWindow();
    1003           0 :                 while ( pFocusWindow && ( pFocusWindow != pFrameWindow ) )
    1004           0 :                     pFocusWindow = pFocusWindow->GetParent();
    1005           0 :                 if ( pFocusWindow ) // Focus in BasicIDE
    1006           0 :                     pCurWin->GrabFocus();
    1007             :             }
    1008             :         }
    1009             :         else
    1010             :         {
    1011           0 :             SetWindow(pLayout);
    1012           0 :             pLayout = 0;
    1013             :         }
    1014           0 :         if ( bUpdateTabBar )
    1015             :         {
    1016           0 :             sal_uLong nKey = GetWindowId( pCurWin );
    1017           0 :             if ( pCurWin && ( pTabBar->GetPagePos( (sal_uInt16)nKey ) == TAB_PAGE_NOTFOUND ) )
    1018           0 :                 pTabBar->InsertPage( (sal_uInt16)nKey, pCurWin->GetTitle() );   // has just been faded in
    1019           0 :             pTabBar->SetCurPageId( (sal_uInt16)nKey );
    1020             :         }
    1021           0 :         if ( pCurWin && pCurWin->IsSuspended() )    // if the window is shown in the case of an error...
    1022           0 :             pCurWin->SetStatus( pCurWin->GetStatus() & ~BASWIN_SUSPENDED );
    1023           0 :         if ( pCurWin )
    1024             :         {
    1025           0 :             SetWindow( pCurWin );
    1026           0 :             if ( pCurWin->GetDocument().isDocument() )
    1027           0 :                 SfxObjectShell::SetCurrentComponent( pCurWin->GetDocument().getDocument() );
    1028             :         }
    1029           0 :         else if (pLayout)
    1030             :         {
    1031           0 :             SetWindow(pLayout);
    1032           0 :             GetViewFrame()->GetWindow().SetHelpId( HID_BASICIDE_MODULWINDOW );
    1033           0 :             SfxObjectShell::SetCurrentComponent(0);
    1034             :         }
    1035           0 :         aObjectCatalog->SetCurrentEntry(pCurWin);
    1036           0 :         SetUndoManager( pCurWin ? pCurWin->GetUndoManager() : 0 );
    1037           0 :         InvalidateBasicIDESlots();
    1038           0 :         EnableScrollbars(pCurWin != nullptr);
    1039             : 
    1040           0 :         if ( m_pCurLocalizationMgr )
    1041           0 :             m_pCurLocalizationMgr->handleTranslationbar();
    1042             : 
    1043           0 :         ManageToolbars();
    1044             : 
    1045             :         // fade out (in) property browser in module (dialog) windows
    1046           0 :         UIFeatureChanged();
    1047             :     }
    1048           0 : }
    1049             : 
    1050           0 : void Shell::ManageToolbars()
    1051             : {
    1052             :     static const char aMacroBarResName[] = "private:resource/toolbar/macrobar";
    1053             :     static const char aDialogBarResName[] = "private:resource/toolbar/dialogbar";
    1054             :     static const char aInsertControlsBarResName[] = "private:resource/toolbar/insertcontrolsbar";
    1055             :     static const char aFormControlsBarResName[] = "private:resource/toolbar/formcontrolsbar";
    1056             : 
    1057           0 :     if( !pCurWin )
    1058           0 :         return;
    1059             : 
    1060             :     Reference< beans::XPropertySet > xFrameProps
    1061           0 :         ( GetViewFrame()->GetFrame().GetFrameInterface(), uno::UNO_QUERY );
    1062           0 :     if ( xFrameProps.is() )
    1063             :     {
    1064           0 :         Reference< ::com::sun::star::frame::XLayoutManager > xLayoutManager;
    1065           0 :         uno::Any a = xFrameProps->getPropertyValue( "LayoutManager" );
    1066           0 :         a >>= xLayoutManager;
    1067           0 :         if ( xLayoutManager.is() )
    1068             :         {
    1069           0 :             xLayoutManager->lock();
    1070           0 :             if (dynamic_cast<DialogWindow*>(pCurWin.get()))
    1071             :             {
    1072           0 :                 xLayoutManager->destroyElement( aMacroBarResName );
    1073             : 
    1074           0 :                 xLayoutManager->requestElement( aDialogBarResName );
    1075           0 :                 xLayoutManager->requestElement( aInsertControlsBarResName );
    1076           0 :                 xLayoutManager->requestElement( aFormControlsBarResName );
    1077             :             }
    1078             :             else
    1079             :             {
    1080           0 :                 xLayoutManager->destroyElement( aDialogBarResName );
    1081           0 :                 xLayoutManager->destroyElement( aInsertControlsBarResName );
    1082           0 :                 xLayoutManager->destroyElement( aFormControlsBarResName );
    1083             : 
    1084           0 :                 xLayoutManager->requestElement( aMacroBarResName );
    1085             :             }
    1086           0 :             xLayoutManager->unlock();
    1087           0 :         }
    1088           0 :     }
    1089             : }
    1090             : 
    1091           0 : VclPtr<BaseWindow> Shell::FindApplicationWindow()
    1092             : {
    1093           0 :     return FindWindow( ScriptDocument::getApplicationScriptDocument() );
    1094             : }
    1095             : 
    1096           0 : VclPtr<BaseWindow> Shell::FindWindow(
    1097             :     ScriptDocument const& rDocument,
    1098             :     OUString const& rLibName, OUString const& rName,
    1099             :     ItemType eType, bool bFindSuspended
    1100             : )
    1101             : {
    1102           0 :     for (WindowTableIt it = aWindowTable.begin(); it != aWindowTable.end(); ++it)
    1103             :     {
    1104           0 :         BaseWindow* const pWin = it->second;
    1105           0 :         if (pWin->Is(rDocument, rLibName, rName, eType, bFindSuspended))
    1106           0 :             return pWin;
    1107             :     }
    1108           0 :     return 0;
    1109             : }
    1110             : 
    1111           0 : bool Shell::CallBasicErrorHdl( StarBASIC* pBasic )
    1112             : {
    1113           0 :     bool nRet = false;
    1114           0 :     ModulWindow* pModWin = ShowActiveModuleWindow( pBasic );
    1115           0 :     if ( pModWin )
    1116           0 :         nRet = pModWin->BasicErrorHdl( pBasic );
    1117           0 :     return nRet;
    1118             : }
    1119             : 
    1120           0 : long Shell::CallBasicBreakHdl( StarBASIC* pBasic )
    1121             : {
    1122           0 :     long nRet = 0;
    1123           0 :     ModulWindow* pModWin = ShowActiveModuleWindow( pBasic );
    1124           0 :     if ( pModWin )
    1125             :     {
    1126             :         bool bAppWindowDisabled, bDispatcherLocked;
    1127             :         sal_uInt16 nWaitCount;
    1128             :         SfxUInt16Item *pSWActionCount, *pSWLockViewCount;
    1129             :         BasicStopped( &bAppWindowDisabled, &bDispatcherLocked,
    1130           0 :                                 &nWaitCount, &pSWActionCount, &pSWLockViewCount );
    1131             : 
    1132           0 :         nRet = pModWin->BasicBreakHdl( pBasic );
    1133             : 
    1134           0 :         if ( StarBASIC::IsRunning() )   // if cancelled...
    1135             :         {
    1136           0 :             if ( bAppWindowDisabled )
    1137           0 :                 Application::GetDefDialogParent()->Enable(false);
    1138             : 
    1139           0 :             if ( nWaitCount )
    1140             :             {
    1141           0 :                 Shell* pShell = GetShell();
    1142           0 :                 for ( sal_uInt16 n = 0; n < nWaitCount; n++ )
    1143           0 :                     pShell->GetViewFrame()->GetWindow().EnterWait();
    1144             :             }
    1145             :         }
    1146             :     }
    1147           0 :     return nRet;
    1148             : }
    1149             : 
    1150           0 : VclPtr<ModulWindow> Shell::ShowActiveModuleWindow( StarBASIC* pBasic )
    1151             : {
    1152           0 :     SetCurLib( ScriptDocument::getApplicationScriptDocument(), OUString(), false );
    1153             : 
    1154           0 :     SbModule* pActiveModule = StarBASIC::GetActiveModule();
    1155           0 :     if (SbClassModuleObject* pCMO = dynamic_cast<SbClassModuleObject*>(pActiveModule))
    1156           0 :         pActiveModule = pCMO->getClassModule();
    1157             : 
    1158             :     DBG_ASSERT( pActiveModule, "Kein aktives Modul im ErrorHdl?!" );
    1159           0 :     if ( pActiveModule )
    1160             :     {
    1161           0 :         VclPtr<ModulWindow> pWin;
    1162           0 :         SbxObject* pParent = pActiveModule->GetParent();
    1163           0 :         if (StarBASIC* pLib = dynamic_cast<StarBASIC*>(pParent))
    1164             :         {
    1165           0 :             if (BasicManager* pBasMgr = FindBasicManager(pLib))
    1166             :             {
    1167           0 :                 ScriptDocument aDocument( ScriptDocument::getDocumentForBasicManager( pBasMgr ) );
    1168           0 :                 OUString aLibName = pLib->GetName();
    1169           0 :                 pWin = FindBasWin( aDocument, aLibName, pActiveModule->GetName(), true );
    1170             :                 DBG_ASSERT( pWin, "Error/Step-Hdl: Fenster wurde nicht erzeugt/gefunden!" );
    1171           0 :                 SetCurLib( aDocument, aLibName );
    1172           0 :                 SetCurWindow( pWin, true );
    1173             :             }
    1174             :         }
    1175             :         else
    1176             :             DBG_ASSERT(false, "No BASIC!");
    1177           0 :         if (BasicManager* pBasicMgr = FindBasicManager(pBasic))
    1178           0 :             StartListening( *pBasicMgr, true /* log on only once */ );
    1179           0 :         return pWin;
    1180             :     }
    1181           0 :     return 0;
    1182             : }
    1183             : 
    1184           0 : void Shell::AdjustPosSizePixel( const Point &rPos, const Size &rSize )
    1185             : {
    1186             :     // not if iconified because the whole text would be displaced then at restore
    1187           0 :     if ( GetViewFrame()->GetWindow().GetOutputSizePixel().Height() == 0 )
    1188           0 :         return;
    1189             : 
    1190           0 :     Size aSz( rSize );
    1191           0 :     Size aScrollBarBoxSz( aScrollBarBox->GetSizePixel() );
    1192           0 :     aSz.Height() -= aScrollBarBoxSz.Height();
    1193             : 
    1194           0 :     Size aOutSz( aSz );
    1195           0 :     aSz.Width() -= aScrollBarBoxSz.Width();
    1196           0 :     aScrollBarBox->SetPosPixel( Point( rSize.Width() - aScrollBarBoxSz.Width(), rSize.Height() - aScrollBarBoxSz.Height() ) );
    1197           0 :     aVScrollBar->SetPosSizePixel( Point( rPos.X()+aSz.Width(), rPos.Y() ), Size( aScrollBarBoxSz.Width(), aSz.Height() ) );
    1198           0 :     if ( bTabBarSplitted )
    1199             :     {
    1200             :         // SplitSize is 0 at a resize!
    1201           0 :         long nSplitPos = pTabBar->GetSizePixel().Width();
    1202           0 :         if ( nSplitPos > aSz.Width() )
    1203           0 :             nSplitPos = aSz.Width();
    1204           0 :         pTabBar->SetPosSizePixel( Point( rPos.X(), rPos.Y()+aSz.Height() ), Size( nSplitPos, aScrollBarBoxSz.Height() ) );
    1205           0 :         long nScrlStart = rPos.X() + nSplitPos;
    1206           0 :         aHScrollBar->SetPosSizePixel( Point( nScrlStart, rPos.Y()+aSz.Height() ), Size( aSz.Width() - nScrlStart + 1, aScrollBarBoxSz.Height() ) );
    1207           0 :         aHScrollBar->Update();
    1208             :     }
    1209             :     else
    1210             :     {
    1211           0 :         aHScrollBar->SetPosSizePixel( Point( rPos.X()+ aSz.Width()/2 - 1, rPos.Y()+aSz.Height() ), Size( aSz.Width()/2 + 2, aScrollBarBoxSz.Height() ) );
    1212           0 :         pTabBar->SetPosSizePixel( Point( rPos.X(), rPos.Y()+aSz.Height() ), Size( aSz.Width()/2, aScrollBarBoxSz.Height() ) );
    1213             :     }
    1214             : 
    1215           0 :     if (pLayout)
    1216           0 :         pLayout->SetPosSizePixel(rPos, dynamic_cast<DialogWindow*>(pCurWin.get()) ? aSz : aOutSz);
    1217             : }
    1218             : 
    1219           0 : Reference< XModel > Shell::GetCurrentDocument() const
    1220             : {
    1221           0 :     Reference< XModel > xDocument;
    1222           0 :     if ( pCurWin && pCurWin->GetDocument().isDocument() )
    1223           0 :         xDocument = pCurWin->GetDocument().getDocument();
    1224           0 :     return xDocument;
    1225             : }
    1226             : 
    1227           0 : void Shell::Activate( bool bMDI )
    1228             : {
    1229           0 :     SfxViewShell::Activate( bMDI );
    1230             : 
    1231           0 :     if ( bMDI )
    1232             :     {
    1233           0 :         if (DialogWindow* pDCurWin = dynamic_cast<DialogWindow*>(pCurWin.get()))
    1234           0 :             pDCurWin->UpdateBrowser();
    1235             :     }
    1236           0 : }
    1237             : 
    1238           0 : void Shell::Deactivate( bool bMDI )
    1239             : {
    1240             :     // bMDI == true means that another MDI has been activated; in case of a
    1241             :     // deactivate due to a MessageBox bMDI is false
    1242           0 :     if ( bMDI )
    1243             :     {
    1244           0 :         if (DialogWindow* pXDlgWin = dynamic_cast<DialogWindow*>(pCurWin.get()))
    1245             :         {
    1246           0 :             pXDlgWin->DisableBrowser();
    1247           0 :             if( pXDlgWin->IsModified() )
    1248           0 :                 MarkDocumentModified( pXDlgWin->GetDocument() );
    1249             :         }
    1250             : 
    1251             :         // test CanClose to also test during deactivating the BasicIDE whether
    1252             :         // the sourcecode is too large in one of the modules...
    1253           0 :         for (WindowTableIt it = aWindowTable.begin(); it != aWindowTable.end(); ++it)
    1254             :         {
    1255           0 :             BaseWindow* pWin = it->second;
    1256           0 :             if ( /* !pWin->IsSuspended() && */ !pWin->CanClose() )
    1257             :             {
    1258           0 :                 if ( !m_aCurLibName.isEmpty() && ( pWin->IsDocument( m_aCurDocument ) || pWin->GetLibName() != m_aCurLibName ) )
    1259           0 :                     SetCurLib( ScriptDocument::getApplicationScriptDocument(), OUString(), false );
    1260           0 :                 SetCurWindow( pWin, true );
    1261           0 :                 break;
    1262             :             }
    1263             :         }
    1264             :     }
    1265           0 : }
    1266             : 
    1267           0 : } // namespace basctl
    1268             : 
    1269             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11