LCOV - code coverage report
Current view: top level - libreoffice/basctl/source/basicide - bastypes.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 0 407 0.0 %
Date: 2012-12-27 Functions: 0 94 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 "baside2.hrc"
      21             : #include "basidesh.hrc"
      22             : #include "helpid.hrc"
      23             : 
      24             : #include "baside2.hxx" // unfortunately pModulWindow is needed partly...
      25             : #include "baside3.hxx"
      26             : #include "basobj.hxx"
      27             : #include "iderdll.hxx"
      28             : #include "iderdll2.hxx"
      29             : 
      30             : #include <basic/basmgr.hxx>
      31             : #include <com/sun/star/script/ModuleType.hpp>
      32             : #include <com/sun/star/script/XLibraryContainerPassword.hpp>
      33             : #include <sfx2/dispatch.hxx>
      34             : #include <sfx2/passwd.hxx>
      35             : #include <sfx2/viewfrm.hxx>
      36             : #include <svl/intitem.hxx>
      37             : #include <svl/stritem.hxx>
      38             : #include <vcl/msgbox.hxx>
      39             : 
      40             : namespace basctl
      41             : {
      42             : 
      43             : using namespace ::com::sun::star::uno;
      44             : using namespace ::com::sun::star;
      45             : 
      46             : 
      47             : //
      48             : // BaseWindow
      49             : // ==========
      50             : //
      51             : 
      52             : DBG_NAME( BaseWindow )
      53             : 
      54           0 : TYPEINIT0( BaseWindow )
      55           0 : TYPEINIT1( SbxItem, SfxPoolItem );
      56             : 
      57           0 : BaseWindow::BaseWindow( Window* pParent, const ScriptDocument& rDocument, OUString aLibName, OUString aName )
      58             :     :Window( pParent, WinBits( WB_3DLOOK ) )
      59             :     ,m_aDocument( rDocument )
      60             :     ,m_aLibName( aLibName )
      61           0 :     ,m_aName( aName )
      62             : {
      63             :     DBG_CTOR( BaseWindow, 0 );
      64           0 :     pShellHScrollBar = 0;
      65           0 :     pShellVScrollBar = 0;
      66           0 :     nStatus = 0;
      67           0 : }
      68             : 
      69           0 : BaseWindow::~BaseWindow()
      70             : {
      71             :     DBG_DTOR( BaseWindow, 0 );
      72           0 :     if ( pShellVScrollBar )
      73           0 :         pShellVScrollBar->SetScrollHdl( Link() );
      74           0 :     if ( pShellHScrollBar )
      75           0 :         pShellHScrollBar->SetScrollHdl( Link() );
      76           0 : }
      77             : 
      78             : 
      79             : 
      80           0 : void BaseWindow::Init()
      81             : {
      82             :     DBG_CHKTHIS( BaseWindow, 0 );
      83           0 :     if ( pShellVScrollBar )
      84           0 :         pShellVScrollBar->SetScrollHdl( LINK( this, BaseWindow, ScrollHdl ) );
      85           0 :     if ( pShellHScrollBar )
      86           0 :         pShellHScrollBar->SetScrollHdl( LINK( this, BaseWindow, ScrollHdl ) );
      87           0 :     DoInit();   // virtual...
      88           0 : }
      89             : 
      90             : 
      91             : 
      92           0 : void BaseWindow::DoInit()
      93           0 : { }
      94             : 
      95             : 
      96             : 
      97           0 : void BaseWindow::GrabScrollBars( ScrollBar* pHScroll, ScrollBar* pVScroll )
      98             : {
      99             :     DBG_CHKTHIS( BaseWindow, 0 );
     100           0 :     pShellHScrollBar = pHScroll;
     101           0 :     pShellVScrollBar = pVScroll;
     102             : //  Init(); // does not make sense, leads to flickering and errors...
     103           0 : }
     104             : 
     105             : 
     106             : 
     107           0 : IMPL_LINK_INLINE_START( BaseWindow, ScrollHdl, ScrollBar *, pCurScrollBar )
     108             : {
     109             :     DBG_CHKTHIS( BaseWindow, 0 );
     110           0 :     DoScroll( pCurScrollBar );
     111           0 :     return 0;
     112             : }
     113           0 : IMPL_LINK_INLINE_END( BaseWindow, ScrollHdl, ScrollBar *, pCurScrollBar )
     114             : 
     115             : 
     116           0 : void BaseWindow::ExecuteCommand (SfxRequest&)
     117           0 : { }
     118             : 
     119           0 : void BaseWindow::ExecuteGlobal (SfxRequest&)
     120           0 : { }
     121             : 
     122             : 
     123           0 : long BaseWindow::Notify( NotifyEvent& rNEvt )
     124             : {
     125           0 :     long nDone = 0;
     126             : 
     127           0 :     if ( rNEvt.GetType() == EVENT_KEYINPUT )
     128             :     {
     129           0 :         KeyEvent aKEvt = *rNEvt.GetKeyEvent();
     130           0 :         KeyCode aCode = aKEvt.GetKeyCode();
     131           0 :         sal_uInt16 nCode = aCode.GetCode();
     132             : 
     133           0 :         switch ( nCode )
     134             :         {
     135             :             case KEY_PAGEUP:
     136             :             case KEY_PAGEDOWN:
     137             :             {
     138           0 :                 if ( aCode.IsMod1() )
     139             :                 {
     140           0 :                     if (Shell* pShell = GetShell())
     141           0 :                         pShell->NextPage( nCode == KEY_PAGEUP );
     142           0 :                     nDone = 1;
     143             :                 }
     144             :             }
     145           0 :             break;
     146             :         }
     147             :     }
     148             : 
     149           0 :     return nDone ? nDone : Window::Notify( rNEvt );
     150             : }
     151             : 
     152             : 
     153           0 : void BaseWindow::DoScroll( ScrollBar* )
     154             : {
     155             :     DBG_CHKTHIS( BaseWindow, 0 );
     156           0 : }
     157             : 
     158             : 
     159           0 : void BaseWindow::StoreData()
     160             : {
     161           0 : }
     162             : 
     163           0 : bool BaseWindow::CanClose()
     164             : {
     165           0 :     return true;
     166             : }
     167             : 
     168           0 : bool BaseWindow::AllowUndo()
     169             : {
     170           0 :     return true;
     171             : }
     172             : 
     173             : 
     174             : 
     175           0 : void BaseWindow::UpdateData()
     176             : {
     177           0 : }
     178             : 
     179           0 : OUString BaseWindow::GetTitle()
     180             : {
     181           0 :     return OUString();
     182             : }
     183             : 
     184           0 : OUString BaseWindow::CreateQualifiedName()
     185             : {
     186           0 :     OUString aName;
     187           0 :     if ( !m_aLibName.isEmpty() )
     188             :     {
     189           0 :         LibraryLocation eLocation = m_aDocument.getLibraryLocation( m_aLibName );
     190           0 :         aName = m_aDocument.getTitle(eLocation) + "." + m_aLibName + "." +
     191           0 :                 GetTitle();
     192             :     }
     193           0 :     return aName;
     194             : }
     195             : 
     196           0 : void BaseWindow::SetReadOnly (bool)
     197             : {
     198           0 : }
     199             : 
     200           0 : bool BaseWindow::IsReadOnly ()
     201             : {
     202           0 :     return false;
     203             : }
     204             : 
     205           0 : void BaseWindow::BasicStarted()
     206             : {
     207           0 : }
     208             : 
     209           0 : void BaseWindow::BasicStopped()
     210             : {
     211           0 : }
     212             : 
     213           0 : bool BaseWindow::IsModified ()
     214             : {
     215           0 :     return true;
     216             : }
     217             : 
     218           0 : bool BaseWindow::IsPasteAllowed ()
     219             : {
     220           0 :     return false;
     221             : }
     222             : 
     223           0 : ::svl::IUndoManager* BaseWindow::GetUndoManager()
     224             : {
     225           0 :     return NULL;
     226             : }
     227             : 
     228           0 : sal_uInt16 BaseWindow::GetSearchOptions()
     229             : {
     230           0 :     return 0;
     231             : }
     232             : 
     233           0 : sal_uInt16 BaseWindow::StartSearchAndReplace (SvxSearchItem const&, bool bFromStart)
     234             : {
     235             :     static_cast<void>(bFromStart);
     236           0 :     return 0;
     237             : }
     238             : 
     239           0 : void BaseWindow::OnNewDocument ()
     240           0 : { }
     241             : 
     242           0 : void BaseWindow::InsertLibInfo () const
     243             : {
     244           0 :     if (ExtraData* pData = GetExtraData())
     245           0 :         pData->GetLibInfos().InsertInfo(m_aDocument, m_aLibName, m_aName, GetType());
     246           0 : }
     247             : 
     248           0 : bool BaseWindow::Is (
     249             :     ScriptDocument const& rDocument,
     250             :     OUString const& rLibName, OUString const& rName,
     251             :     ItemType eType, bool bFindSuspended
     252             : )
     253             : {
     254           0 :     if (bFindSuspended || !IsSuspended())
     255             :     {
     256             :         // any non-suspended window is ok
     257           0 :         if (rLibName.isEmpty() || rName.isEmpty() || eType == TYPE_UNKNOWN)
     258           0 :             return true;
     259             :         // ok if the parameters match
     260           0 :         if (m_aDocument == rDocument && m_aLibName == rLibName && m_aName == rName && GetType() == eType)
     261           0 :             return true;
     262             :     }
     263           0 :     return false;
     264             : }
     265             : 
     266           0 : bool BaseWindow::HasActiveEditor () const
     267             : {
     268           0 :     return false;
     269             : }
     270             : 
     271             : 
     272             : //
     273             : // DockingWindow
     274             : // =============
     275             : //
     276             : 
     277             : // style bits for DockingWindow
     278             : WinBits const DockingWindow::StyleBits =
     279             :     WB_BORDER | WB_3DLOOK | WB_CLIPCHILDREN |
     280             :     WB_MOVEABLE | WB_SIZEABLE | WB_ROLLABLE | WB_DOCKABLE;
     281             : 
     282           0 : DockingWindow::DockingWindow (Window* pParent) :
     283             :     ::DockingWindow(pParent, StyleBits),
     284             :     pLayout(0),
     285           0 :     nShowCount(0)
     286           0 : { }
     287             : 
     288           0 : DockingWindow::DockingWindow (Layout* pParent) :
     289             :     ::DockingWindow(pParent, StyleBits),
     290             :     pLayout(pParent),
     291           0 :     nShowCount(0)
     292           0 : { }
     293             : 
     294             : // Sets the position and the size of the docking window. This property is saved
     295             : // when the window is floating. Called by Layout.
     296           0 : void DockingWindow::ResizeIfDocking (Point const& rPos, Size const& rSize)
     297             : {
     298           0 :     Rectangle const rRect(rPos, rSize);
     299           0 :     if (rRect != aDockingRect)
     300             :     {
     301             :         // saving the position and the size
     302           0 :         aDockingRect = rRect;
     303             :         // resizing if actually docking
     304           0 :         if (!IsFloatingMode())
     305           0 :             SetPosSizePixel(rPos, rSize);
     306             :     }
     307           0 : }
     308           0 : void DockingWindow::ResizeIfDocking (Size const& rSize)
     309             : {
     310           0 :     ResizeIfDocking(aDockingRect.TopLeft(), rSize);
     311           0 : }
     312             : 
     313             : // Sets the parent Layout window.
     314             : // The physical parent is set only when the window is docking.
     315           0 : void DockingWindow::SetLayoutWindow (Layout* pLayout_)
     316             : {
     317           0 :     pLayout = pLayout_;
     318           0 :     if (!IsFloatingMode())
     319           0 :         SetParent(pLayout);
     320             : 
     321           0 : }
     322             : 
     323             : // Increases the "show" reference count.
     324             : // The window is shown when the reference count is positive.
     325           0 : void DockingWindow::Show (bool bShow) // = true
     326             : {
     327           0 :     if (bShow)
     328             :     {
     329           0 :         if (++nShowCount == 1)
     330           0 :             ::DockingWindow::Show();
     331             :     }
     332             :     else
     333             :     {
     334           0 :         if (--nShowCount == 0)
     335           0 :             ::DockingWindow::Hide();
     336             :     }
     337           0 : }
     338             : 
     339             : // Decreases the "show" reference count.
     340             : // The window is hidden when the reference count reaches zero.
     341           0 : void DockingWindow::Hide ()
     342             : {
     343           0 :     Show(false);
     344           0 : }
     345             : 
     346           0 : sal_Bool DockingWindow::Docking( const Point& rPos, Rectangle& rRect )
     347             : {
     348           0 :     if (!IsDockingPrevented() && aDockingRect.IsInside(rPos))
     349             :     {
     350           0 :         rRect.SetSize(aDockingRect.GetSize());
     351           0 :         return false; // dock
     352             :     }
     353             :     else // adjust old size
     354             :     {
     355           0 :         if (!aFloatingRect.IsEmpty())
     356           0 :             rRect.SetSize(aFloatingRect.GetSize());
     357           0 :         return true; // float
     358             :     }
     359             : }
     360             : 
     361           0 : void DockingWindow::EndDocking( const Rectangle& rRect, sal_Bool bFloatMode )
     362             : {
     363           0 :     if ( bFloatMode )
     364           0 :         ::DockingWindow::EndDocking( rRect, bFloatMode );
     365             :     else
     366             :     {
     367           0 :         SetFloatingMode(false);
     368           0 :         DockThis();
     369             :     }
     370           0 : }
     371             : 
     372           0 : void DockingWindow::ToggleFloatingMode()
     373             : {
     374           0 :     if (IsFloatingMode())
     375             :     {
     376           0 :         if (!aFloatingRect.IsEmpty())
     377             :             SetPosSizePixel(
     378           0 :                 GetParent()->ScreenToOutputPixel(aFloatingRect.TopLeft()),
     379           0 :                 aFloatingRect.GetSize()
     380           0 :             );
     381             :     }
     382           0 :     DockThis();
     383           0 : }
     384             : 
     385           0 : sal_Bool DockingWindow::PrepareToggleFloatingMode()
     386             : {
     387           0 :     if (IsFloatingMode())
     388             :     {
     389             :         // memorize position and size on the desktop...
     390             :         aFloatingRect = Rectangle(
     391           0 :             GetParent()->OutputToScreenPixel(GetPosPixel()),
     392           0 :             GetSizePixel()
     393           0 :         );
     394             :     }
     395           0 :     return true;
     396             : }
     397             : 
     398           0 : void DockingWindow::StartDocking()
     399             : {
     400           0 :     if (IsFloatingMode())
     401             :     {
     402             :         aFloatingRect = Rectangle(
     403           0 :             GetParent()->OutputToScreenPixel(GetPosPixel()),
     404           0 :             GetSizePixel()
     405           0 :         );
     406             :     }
     407           0 : }
     408             : 
     409           0 : void DockingWindow::DockThis ()
     410             : {
     411             :     // resizing when floating -> docking
     412           0 :     if (!IsFloatingMode())
     413             :     {
     414           0 :         Point const aPos = aDockingRect.TopLeft();
     415           0 :         Size const aSize = aDockingRect.GetSize();
     416           0 :         if (aSize != GetSizePixel() || aPos != GetPosPixel())
     417           0 :             SetPosSizePixel(aPos, aSize);
     418             :     }
     419             : 
     420           0 :     if (pLayout)
     421             :     {
     422           0 :         if (!IsFloatingMode() && GetParent() != pLayout)
     423           0 :             SetParent(pLayout);
     424           0 :         pLayout->DockaWindow(this);
     425             :     }
     426           0 : }
     427             : 
     428             : 
     429             : //
     430             : // ExtendedEdit
     431             : // ============
     432             : //
     433             : 
     434           0 : ExtendedEdit::ExtendedEdit( Window* pParent, IDEResId nRes ) :
     435           0 :     Edit( pParent, nRes )
     436             : {
     437           0 :     aAcc.SetSelectHdl( LINK( this, ExtendedEdit, EditAccHdl ) );
     438           0 :     Control::SetGetFocusHdl( LINK( this, ExtendedEdit, ImplGetFocusHdl ) );
     439           0 :     Control::SetLoseFocusHdl( LINK( this, ExtendedEdit, ImplLoseFocusHdl ) );
     440           0 : }
     441             : 
     442           0 : IMPL_LINK_NOARG(ExtendedEdit, ImplGetFocusHdl)
     443             : {
     444           0 :     Application::InsertAccel( &aAcc );
     445           0 :     aLoseFocusHdl.Call( this );
     446           0 :     return 0;
     447             : }
     448             : 
     449             : 
     450           0 : IMPL_LINK_NOARG(ExtendedEdit, ImplLoseFocusHdl)
     451             : {
     452           0 :     Application::RemoveAccel( &aAcc );
     453           0 :     return 0;
     454             : }
     455             : 
     456             : 
     457           0 : IMPL_LINK_INLINE_START( ExtendedEdit, EditAccHdl, Accelerator *, pAcc )
     458             : {
     459           0 :     aAccHdl.Call( pAcc );
     460           0 :     return 0;
     461             : }
     462           0 : IMPL_LINK_INLINE_END( ExtendedEdit, EditAccHdl, Accelerator *, pAcc )
     463             : 
     464             : 
     465             : //
     466             : //  TabBar
     467             : // ========
     468             : //
     469             : 
     470           0 : TabBar::TabBar( Window* pParent ) :
     471           0 :     ::TabBar( pParent, WinBits( WB_3DLOOK | WB_SCROLL | WB_BORDER | WB_SIZEABLE | WB_DRAG ) )
     472             : {
     473           0 :     EnableEditMode(true);
     474             : 
     475           0 :     SetHelpId( HID_BASICIDE_TABBAR );
     476           0 : }
     477             : 
     478           0 : void TabBar::MouseButtonDown( const MouseEvent& rMEvt )
     479             : {
     480           0 :     if ( rMEvt.IsLeft() && ( rMEvt.GetClicks() == 2 ) && !IsInEditMode() )
     481             :     {
     482           0 :         if (SfxDispatcher* pDispatcher = GetDispatcher())
     483           0 :             pDispatcher->Execute( SID_BASICIDE_MODULEDLG );
     484             :     }
     485             :     else
     486             :     {
     487           0 :         ::TabBar::MouseButtonDown( rMEvt ); // base class version
     488             :     }
     489           0 : }
     490             : 
     491           0 : void TabBar::Command( const CommandEvent& rCEvt )
     492             : {
     493           0 :     if ( ( rCEvt.GetCommand() == COMMAND_CONTEXTMENU ) && !IsInEditMode() )
     494             :     {
     495           0 :         Point aPos( rCEvt.IsMouseEvent() ? rCEvt.GetMousePosPixel() : Point(1,1) );
     496           0 :         if ( rCEvt.IsMouseEvent() )     // select right tab
     497             :         {
     498           0 :             Point aP = PixelToLogic( aPos );
     499           0 :             MouseEvent aMouseEvent( aP, 1, MOUSE_SIMPLECLICK, MOUSE_LEFT );
     500           0 :             ::TabBar::MouseButtonDown( aMouseEvent ); // base class
     501             :         }
     502             : 
     503           0 :         PopupMenu aPopup( IDEResId( RID_POPUP_TABBAR ) );
     504           0 :         if ( GetPageCount() == 0 )
     505             :         {
     506           0 :             aPopup.EnableItem(SID_BASICIDE_DELETECURRENT, false);
     507           0 :             aPopup.EnableItem(SID_BASICIDE_RENAMECURRENT, false);
     508           0 :             aPopup.EnableItem(SID_BASICIDE_HIDECURPAGE, false);
     509             :         }
     510             : 
     511           0 :         if ( StarBASIC::IsRunning() )
     512             :         {
     513           0 :             aPopup.EnableItem(SID_BASICIDE_DELETECURRENT, false);
     514           0 :             aPopup.EnableItem(SID_BASICIDE_RENAMECURRENT, false);
     515           0 :             aPopup.EnableItem(SID_BASICIDE_MODULEDLG, false);
     516             :         }
     517             : 
     518           0 :         if (Shell* pShell = GetShell())
     519             :         {
     520           0 :             ScriptDocument aDocument( pShell->GetCurDocument() );
     521           0 :             OUString       aOULibName( pShell->GetCurLibName() );
     522           0 :             Reference< script::XLibraryContainer2 > xModLibContainer( aDocument.getLibraryContainer( E_SCRIPTS ), UNO_QUERY );
     523           0 :             Reference< script::XLibraryContainer2 > xDlgLibContainer( aDocument.getLibraryContainer( E_DIALOGS ), UNO_QUERY );
     524           0 :             if ( ( xModLibContainer.is() && xModLibContainer->hasByName( aOULibName ) && xModLibContainer->isLibraryReadOnly( aOULibName ) ) ||
     525           0 :                  ( xDlgLibContainer.is() && xDlgLibContainer->hasByName( aOULibName ) && xDlgLibContainer->isLibraryReadOnly( aOULibName ) ) )
     526             :             {
     527           0 :                 aPopup.EnableItem(aPopup.GetItemId( 0 ), false);
     528           0 :                 aPopup.EnableItem(SID_BASICIDE_DELETECURRENT, false);
     529           0 :                 aPopup.EnableItem(SID_BASICIDE_RENAMECURRENT, false);
     530           0 :                 aPopup.RemoveDisabledEntries();
     531             :             }
     532           0 :              if ( aDocument.isInVBAMode() )
     533             :             {
     534             :                 // disable to delete or remove object modules in IDE
     535           0 :                 if (BasicManager* pBasMgr = aDocument.getBasicManager())
     536             :                 {
     537           0 :                     if (StarBASIC* pBasic = pBasMgr->GetLib(aOULibName))
     538             :                     {
     539           0 :                         Shell::WindowTable& aWindowTable = pShell->GetWindowTable();
     540           0 :                         Shell::WindowTableIt it = aWindowTable.find( GetCurPageId() );
     541           0 :                         if (it != aWindowTable.end() && dynamic_cast<ModulWindow*>(it->second))
     542             :                         {
     543           0 :                             SbModule* pActiveModule = (SbModule*)pBasic->FindModule( it->second->GetName() );
     544           0 :                             if( pActiveModule && ( pActiveModule->GetModuleType() == script::ModuleType::DOCUMENT ) )
     545             :                             {
     546           0 :                                 aPopup.EnableItem(SID_BASICIDE_DELETECURRENT, false);
     547           0 :                                 aPopup.EnableItem(SID_BASICIDE_RENAMECURRENT, false);
     548             :                             }
     549             :                         }
     550             :                     }
     551             :                 }
     552           0 :             }
     553             :         }
     554           0 :         if (SfxDispatcher* pDispatcher = GetDispatcher())
     555           0 :             pDispatcher->Execute(aPopup.Execute(this, aPos));
     556             :     }
     557           0 : }
     558             : 
     559           0 : long TabBar::AllowRenaming()
     560             : {
     561           0 :     bool const bValid = IsValidSbxName(GetEditText());
     562             : 
     563           0 :     if ( !bValid )
     564           0 :         ErrorBox( this, WB_OK | WB_DEF_OK, String( IDEResId( RID_STR_BADSBXNAME ) ) ).Execute();
     565             : 
     566           0 :     return bValid ? TABBAR_RENAMING_YES : TABBAR_RENAMING_NO;
     567             : }
     568             : 
     569             : 
     570           0 : void TabBar::EndRenaming()
     571             : {
     572           0 :     if ( !IsEditModeCanceled() )
     573             :     {
     574           0 :         SfxUInt16Item aID( SID_BASICIDE_ARG_TABID, GetEditPageId() );
     575           0 :         SfxStringItem aNewName( SID_BASICIDE_ARG_MODULENAME, GetEditText() );
     576           0 :         if (SfxDispatcher* pDispatcher = GetDispatcher())
     577             :             pDispatcher->Execute( SID_BASICIDE_NAMECHANGEDONTAB,
     578           0 :                                   SFX_CALLMODE_SYNCHRON, &aID, &aNewName, 0L );
     579             :     }
     580           0 : }
     581             : 
     582             : 
     583             : namespace
     584             : {
     585             : 
     586             : // helper class for sorting TabBar
     587           0 : struct TabBarSortHelper
     588             : {
     589             :     sal_uInt16      nPageId;
     590             :     String          aPageText;
     591             : 
     592           0 :     bool operator < (TabBarSortHelper const& rComp) const
     593             :     {
     594           0 :         return aPageText.CompareIgnoreCaseToAscii(rComp.aPageText) == COMPARE_LESS;
     595             :     }
     596             : };
     597             : 
     598             : } // namespace
     599             : 
     600           0 : void TabBar::Sort()
     601             : {
     602           0 :     if (Shell* pShell = GetShell())
     603             :     {
     604           0 :         Shell::WindowTable& aWindowTable = pShell->GetWindowTable();
     605           0 :         TabBarSortHelper aTabBarSortHelper;
     606           0 :         std::vector<TabBarSortHelper> aModuleList;
     607           0 :         std::vector<TabBarSortHelper> aDialogList;
     608           0 :         sal_uInt16 nPageCount = GetPageCount();
     609             :         sal_uInt16 i;
     610             : 
     611             :         // create module and dialog lists for sorting
     612           0 :         for ( i = 0; i < nPageCount; i++)
     613             :         {
     614           0 :             sal_uInt16 nId = GetPageId( i );
     615           0 :             aTabBarSortHelper.nPageId = nId;
     616           0 :             aTabBarSortHelper.aPageText = GetPageText( nId );
     617           0 :             BaseWindow* pWin = aWindowTable[ nId ];
     618             : 
     619           0 :             if (dynamic_cast<ModulWindow*>(pWin))
     620             :             {
     621           0 :                 aModuleList.push_back( aTabBarSortHelper );
     622             :             }
     623           0 :             else if (dynamic_cast<DialogWindow*>(pWin))
     624             :             {
     625           0 :                 aDialogList.push_back( aTabBarSortHelper );
     626             :             }
     627             :         }
     628             : 
     629             :         // sort module and dialog lists by page text
     630           0 :         ::std::sort( aModuleList.begin() , aModuleList.end() );
     631           0 :         ::std::sort( aDialogList.begin() , aDialogList.end() );
     632             : 
     633             : 
     634           0 :         sal_uInt16 nModules = sal::static_int_cast<sal_uInt16>( aModuleList.size() );
     635           0 :         sal_uInt16 nDialogs = sal::static_int_cast<sal_uInt16>( aDialogList.size() );
     636             : 
     637             :         // move module pages to new positions
     638           0 :         for (i = 0; i < nModules; i++)
     639             :         {
     640           0 :             MovePage( aModuleList[i].nPageId , i );
     641             :         }
     642             : 
     643             :         // move dialog pages to new positions
     644           0 :         for (i = 0; i < nDialogs; i++)
     645             :         {
     646           0 :             MovePage( aDialogList[i].nPageId , nModules + i );
     647           0 :         }
     648             :     }
     649           0 : }
     650             : 
     651           0 : void CutLines( OUString& rStr, sal_Int32 nStartLine, sal_Int32 nLines, bool bEraseTrailingEmptyLines )
     652             : {
     653           0 :     sal_Int32 nStartPos = 0;
     654           0 :     sal_Int32 nLine = 0;
     655           0 :     while ( nLine < nStartLine )
     656             :     {
     657           0 :         nStartPos = searchEOL( rStr, nStartPos );
     658           0 :         if( nStartPos == -1 )
     659           0 :             break;
     660           0 :         nStartPos++;    // not the \n.
     661           0 :         nLine++;
     662             :     }
     663             : 
     664             :     DBG_ASSERTWARNING( nStartPos != -1, "CutLines: Startzeile nicht gefunden!" );
     665             : 
     666           0 :     if ( nStartPos != -1 )
     667             :     {
     668           0 :         sal_Int32 nEndPos = nStartPos;
     669             : 
     670           0 :         for ( sal_Int32 i = 0; i < nLines; i++ )
     671           0 :             nEndPos = searchEOL( rStr, nEndPos+1 );
     672             : 
     673           0 :         if ( nEndPos == -1 ) // might happen at the last line
     674           0 :             nEndPos = rStr.getLength();
     675             :         else
     676           0 :             nEndPos++;
     677             : 
     678           0 :         OUString aEndStr = rStr.copy( nEndPos );
     679           0 :         rStr = rStr.copy( 0, nStartPos );
     680           0 :         rStr += aEndStr;
     681             :     }
     682           0 :     if ( bEraseTrailingEmptyLines )
     683             :     {
     684           0 :         sal_Int32 n = nStartPos;
     685           0 :         sal_Int32 nLen = rStr.getLength();
     686           0 :         while ( ( n < nLen ) && ( rStr.getStr()[ n ] == LINE_SEP ||
     687           0 :                                   rStr.getStr()[ n ] == LINE_SEP_CR ) )
     688             :         {
     689           0 :             n++;
     690             :         }
     691             : 
     692           0 :         if ( n > nStartPos )
     693             :         {
     694           0 :             OUString aEndStr = rStr.copy( n );
     695           0 :             rStr = rStr.copy( 0, nStartPos );
     696           0 :             rStr += aEndStr;
     697             :         }
     698             :     }
     699           0 : }
     700             : 
     701           0 : sal_uLong CalcLineCount( SvStream& rStream )
     702             : {
     703           0 :     sal_uLong nLFs = 0;
     704           0 :     sal_uLong nCRs = 0;
     705             :     char c;
     706             : 
     707           0 :     rStream.Seek( 0 );
     708           0 :     rStream >> c;
     709           0 :     while ( !rStream.IsEof() )
     710             :     {
     711           0 :         if ( c == '\n' )
     712           0 :             nLFs++;
     713           0 :         else if ( c == '\r' )
     714           0 :             nCRs++;
     715           0 :         rStream >> c;
     716             :     }
     717             : 
     718           0 :     rStream.Seek( 0 );
     719           0 :     if ( nLFs > nCRs )
     720           0 :         return nLFs;
     721           0 :     return nCRs;
     722             : }
     723             : 
     724             : //
     725             : // LibInfos
     726             : // ========
     727             : //
     728             : 
     729           0 : LibInfos::LibInfos ()
     730           0 : { }
     731             : 
     732           0 : LibInfos::~LibInfos ()
     733           0 : { }
     734             : 
     735           0 : void LibInfos::InsertInfo (
     736             :     ScriptDocument const& rDocument,
     737             :     OUString const& rLibName,
     738             :     OUString const& rCurrentName,
     739             :     ItemType eCurrentType
     740             : )
     741             : {
     742           0 :     Key aKey(rDocument, rLibName);
     743           0 :     m_aMap.erase(aKey);
     744           0 :     m_aMap.insert(Map::value_type(aKey, Item(rDocument, rLibName, rCurrentName, eCurrentType)));
     745           0 : }
     746             : 
     747           0 : void LibInfos::RemoveInfoFor (ScriptDocument const& rDocument)
     748             : {
     749           0 :     Map::iterator it;
     750           0 :     for (it = m_aMap.begin(); it != m_aMap.end(); ++it)
     751           0 :         if (it->first.GetDocument() == rDocument)
     752           0 :             break;
     753           0 :     if (it != m_aMap.end())
     754           0 :         m_aMap.erase(it);
     755           0 : }
     756             : 
     757           0 : LibInfos::Item const* LibInfos::GetInfo (
     758             :     ScriptDocument const& rDocument, OUString const& rLibName
     759             : )
     760             : {
     761           0 :     Map::iterator it = m_aMap.find(Key(rDocument, rLibName));
     762           0 :     return it != m_aMap.end() ? &it->second : 0;
     763             : }
     764             : 
     765           0 : LibInfos::Key::Key (ScriptDocument const& rDocument, OUString const& rLibName) :
     766           0 :     m_aDocument(rDocument), m_aLibName(rLibName)
     767           0 : { }
     768             : 
     769           0 : LibInfos::Key::~Key ()
     770           0 : { }
     771             : 
     772           0 : bool LibInfos::Key::operator == (Key const& rKey) const
     773             : {
     774           0 :     return m_aDocument == rKey.m_aDocument && m_aLibName == rKey.m_aLibName;
     775             : }
     776             : 
     777           0 : size_t LibInfos::Key::Hash::operator () (Key const& rKey) const
     778             : {
     779           0 :     return rKey.m_aDocument.hashCode() + rKey.m_aLibName.hashCode();
     780             : }
     781             : 
     782           0 : LibInfos::Item::Item (
     783             :     ScriptDocument const& rDocument,
     784             :     OUString const& rLibName,
     785             :     OUString const& rCurrentName,
     786             :     ItemType eCurrentType
     787             : ) :
     788             :     m_aDocument(rDocument),
     789             :     m_aLibName(rLibName),
     790             :     m_aCurrentName(rCurrentName),
     791           0 :     m_eCurrentType(eCurrentType)
     792           0 : { }
     793             : 
     794           0 : LibInfos::Item::~Item ()
     795           0 : { }
     796             : 
     797           0 : bool QueryDel( const OUString& rName, const ResId& rId, Window* pParent )
     798             : {
     799           0 :     OUString aQuery(rId.toString());
     800           0 :     OUStringBuffer aNameBuf( rName );
     801           0 :     aNameBuf.append('\'');
     802           0 :     aNameBuf.insert(sal_Int32(0), sal_Unicode('\''));
     803           0 :     aQuery = aQuery.replaceAll("XX", aNameBuf.makeStringAndClear());
     804           0 :     QueryBox aQueryBox( pParent, WB_YES_NO | WB_DEF_YES, aQuery );
     805           0 :     return ( aQueryBox.Execute() == RET_YES );
     806             : }
     807             : 
     808           0 : bool QueryDelMacro( const OUString& rName, Window* pParent )
     809             : {
     810           0 :     return QueryDel( rName, IDEResId( RID_STR_QUERYDELMACRO ), pParent );
     811             : }
     812             : 
     813           0 : bool QueryReplaceMacro( const OUString& rName, Window* pParent )
     814             : {
     815           0 :     return QueryDel( rName, IDEResId( RID_STR_QUERYREPLACEMACRO ), pParent );
     816             : }
     817             : 
     818           0 : bool QueryDelDialog( const OUString& rName, Window* pParent )
     819             : {
     820           0 :     return QueryDel( rName, IDEResId( RID_STR_QUERYDELDIALOG ), pParent );
     821             : }
     822             : 
     823           0 : bool QueryDelLib( const OUString& rName, bool bRef, Window* pParent )
     824             : {
     825           0 :     return QueryDel( rName, IDEResId( bRef ? RID_STR_QUERYDELLIBREF : RID_STR_QUERYDELLIB ), pParent );
     826             : }
     827             : 
     828           0 : bool QueryDelModule( const OUString& rName, Window* pParent )
     829             : {
     830           0 :     return QueryDel( rName, IDEResId( RID_STR_QUERYDELMODULE ), pParent );
     831             : }
     832             : 
     833           0 : bool QueryPassword( const Reference< script::XLibraryContainer >& xLibContainer, const OUString& rLibName, OUString& rPassword, bool bRepeat, bool bNewTitle )
     834             : {
     835           0 :     bool bOK = false;
     836           0 :     sal_uInt16 nRet = 0;
     837             : 
     838           0 :     do
     839             :     {
     840             :         // password dialog
     841           0 :         SfxPasswordDialog aDlg(Application::GetDefDialogParent());
     842           0 :         aDlg.SetMinLen( 1 );
     843             : 
     844             :         // set new title
     845           0 :         if ( bNewTitle )
     846             :         {
     847           0 :             OUString aTitle(IDE_RESSTR(RID_STR_ENTERPASSWORD));
     848           0 :             aTitle = aTitle.replaceAll("XX", rLibName);
     849           0 :             aDlg.SetText( aTitle );
     850             :         }
     851             : 
     852             :         // execute dialog
     853           0 :         nRet = aDlg.Execute();
     854             : 
     855             :         // verify password
     856           0 :         if ( nRet == RET_OK )
     857             :         {
     858           0 :             if ( xLibContainer.is() && xLibContainer->hasByName( rLibName ) )
     859             :             {
     860           0 :                 Reference< script::XLibraryContainerPassword > xPasswd( xLibContainer, UNO_QUERY );
     861           0 :                 if ( xPasswd.is() && xPasswd->isLibraryPasswordProtected( rLibName ) && !xPasswd->isLibraryPasswordVerified( rLibName ) )
     862             :                 {
     863           0 :                     rPassword = aDlg.GetPassword();
     864             :                     //                    OUString aOUPassword( rPassword );
     865           0 :                     bOK = xPasswd->verifyLibraryPassword( rLibName, rPassword );
     866             : 
     867           0 :                     if ( !bOK )
     868             :                     {
     869           0 :                         ErrorBox aErrorBox( Application::GetDefDialogParent(), WB_OK, IDE_RESSTR(RID_STR_WRONGPASSWORD) );
     870           0 :                         aErrorBox.Execute();
     871             :                     }
     872           0 :                 }
     873             :             }
     874           0 :         }
     875             :     }
     876           0 :     while ( bRepeat && !bOK && nRet == RET_OK );
     877             : 
     878           0 :     return bOK;
     879             : }
     880             : 
     881             : 
     882           0 : } // namespace basctl
     883             : 
     884             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10