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

Generated by: LCOV version 1.10