LCOV - code coverage report
Current view: top level - basctl/source/basicide - basicbox.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 0 261 0.0 %
Date: 2015-06-13 12:38:46 Functions: 0 47 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 <basidesh.hxx>
      22             : 
      23             : #include <basicbox.hxx>
      24             : #include <iderdll.hxx>
      25             : 
      26             : #include "localizationmgr.hxx"
      27             : #include "managelang.hxx"
      28             : #include "dlgresid.hrc"
      29             : 
      30             : #include <sfx2/dispatch.hxx>
      31             : #include <svtools/langtab.hxx>
      32             : 
      33             : namespace basctl
      34             : {
      35             : 
      36             : using namespace ::com::sun::star;
      37             : using namespace ::com::sun::star::lang;
      38             : using namespace ::com::sun::star::uno;
      39             : 
      40           0 : SFX_IMPL_TOOLBOX_CONTROL( LibBoxControl, SfxStringItem );
      41             : 
      42           0 : LibBoxControl::LibBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx )
      43           0 :     : SfxToolBoxControl( nSlotId, nId, rTbx )
      44             : {
      45           0 : }
      46             : 
      47             : 
      48             : 
      49           0 : void LibBoxControl::StateChanged( sal_uInt16, SfxItemState eState, const SfxPoolItem* pState )
      50             : {
      51           0 :     LibBox* pBox = static_cast<LibBox*>(GetToolBox().GetItemWindow(GetId()));
      52             : 
      53             :     DBG_ASSERT( pBox, "Box not found" );
      54           0 :     if ( !pBox )
      55           0 :         return;
      56             : 
      57           0 :     if ( eState != SfxItemState::DEFAULT )
      58           0 :         pBox->Disable();
      59             :     else
      60             :     {
      61           0 :         pBox->Enable();
      62           0 :         pBox->Update(dynamic_cast<SfxStringItem const*>(pState));
      63             :     }
      64             : }
      65             : 
      66             : 
      67             : 
      68           0 : VclPtr<vcl::Window> LibBoxControl::CreateItemWindow( vcl::Window *pParent )
      69             : {
      70           0 :     return VclPtr<LibBox>::Create( pParent, m_xFrame );
      71             : }
      72             : 
      73             : 
      74           0 : DocListenerBox::DocListenerBox( vcl::Window* pParent )
      75             :     :ListBox( pParent, WinBits( WB_BORDER | WB_DROPDOWN ) )
      76           0 :     ,m_aNotifier( *this )
      77             : {
      78           0 : }
      79             : 
      80           0 : DocListenerBox::~DocListenerBox()
      81             : {
      82           0 :     disposeOnce();
      83           0 : }
      84             : 
      85           0 : void DocListenerBox::dispose()
      86             : {
      87           0 :     m_aNotifier.dispose();
      88           0 :     ListBox::dispose();
      89           0 : }
      90             : 
      91           0 : void DocListenerBox::onDocumentCreated( const ScriptDocument& /*_rDocument*/ )
      92             : {
      93           0 :     FillBox();
      94           0 : }
      95             : 
      96           0 : void DocListenerBox::onDocumentOpened( const ScriptDocument& /*_rDocument*/ )
      97             : {
      98           0 :     FillBox();
      99           0 : }
     100             : 
     101           0 : void DocListenerBox::onDocumentSave( const ScriptDocument& /*_rDocument*/ )
     102             : {
     103             :     // not interested in
     104           0 : }
     105             : 
     106           0 : void DocListenerBox::onDocumentSaveDone( const ScriptDocument& /*_rDocument*/ )
     107             : {
     108             :     // not interested in
     109           0 : }
     110             : 
     111           0 : void DocListenerBox::onDocumentSaveAs( const ScriptDocument& /*_rDocument*/ )
     112             : {
     113             :     // not interested in
     114           0 : }
     115             : 
     116           0 : void DocListenerBox::onDocumentSaveAsDone( const ScriptDocument& /*_rDocument*/ )
     117             : {
     118           0 :     FillBox();
     119           0 : }
     120             : 
     121           0 : void DocListenerBox::onDocumentClosed( const ScriptDocument& /*_rDocument*/ )
     122             : {
     123           0 :     FillBox();
     124           0 : }
     125             : 
     126           0 : void DocListenerBox::onDocumentTitleChanged( const ScriptDocument& /*_rDocument*/ )
     127             : {
     128             :     // not interested in
     129           0 : }
     130             : 
     131           0 : void DocListenerBox::onDocumentModeChanged( const ScriptDocument& /*_rDocument*/ )
     132             : {
     133             :     // not interested in
     134           0 : }
     135             : 
     136           0 : LibBox::LibBox( vcl::Window* pParent, const uno::Reference< frame::XFrame >& rFrame ) :
     137             :     DocListenerBox( pParent ),
     138           0 :     m_xFrame( rFrame )
     139             : {
     140           0 :     FillBox();
     141           0 :     bIgnoreSelect = true;   // do not yet transfer select of 0
     142           0 :     bFillBox = true;
     143           0 :     SelectEntryPos( 0 );
     144           0 :     aCurText = GetEntry( 0 );
     145           0 :     SetSizePixel( Size( 250, 200 ) );
     146           0 :     bIgnoreSelect = false;
     147           0 : }
     148             : 
     149             : 
     150             : 
     151           0 : LibBox::~LibBox()
     152             : {
     153           0 :     disposeOnce();
     154           0 : }
     155             : 
     156           0 : void LibBox::dispose()
     157             : {
     158           0 :     ClearBox();
     159           0 :     DocListenerBox::dispose();
     160           0 : }
     161             : 
     162           0 : void LibBox::Update( const SfxStringItem* pItem )
     163             : {
     164             : 
     165             : //  if ( !pItem  || !pItem->GetValue().Len() )
     166           0 :         FillBox();
     167             : 
     168           0 :     if ( pItem )
     169             :     {
     170           0 :         aCurText = pItem->GetValue();
     171           0 :         if ( aCurText.isEmpty() )
     172           0 :             aCurText = OUString( IDEResId( RID_STR_ALL ) );
     173             :     }
     174             : 
     175           0 :     if ( GetSelectEntry() != aCurText )
     176           0 :         SelectEntry( aCurText );
     177           0 : }
     178             : 
     179           0 : void LibBox::ReleaseFocus()
     180             : {
     181           0 :     SfxViewShell* pCurSh = SfxViewShell::Current();
     182             :     DBG_ASSERT( pCurSh, "Current ViewShell not found!" );
     183             : 
     184           0 :     if ( pCurSh )
     185             :     {
     186           0 :         vcl::Window* pShellWin = pCurSh->GetWindow();
     187           0 :         if ( !pShellWin )
     188           0 :             pShellWin = Application::GetDefDialogParent();
     189             : 
     190           0 :         pShellWin->GrabFocus();
     191             :     }
     192           0 : }
     193             : 
     194           0 : void LibBox::FillBox()
     195             : {
     196           0 :     SetUpdateMode(false);
     197           0 :     bIgnoreSelect = true;
     198             : 
     199           0 :     aCurText = GetSelectEntry();
     200             : 
     201           0 :     SelectEntryPos( 0 );
     202           0 :     ClearBox();
     203             : 
     204             :     // create list box entries
     205           0 :     sal_Int32 nPos = InsertEntry( OUString( IDEResId( RID_STR_ALL ) ), LISTBOX_APPEND );
     206           0 :     SetEntryData( nPos, new LibEntry( ScriptDocument::getApplicationScriptDocument(), LIBRARY_LOCATION_UNKNOWN, OUString() ) );
     207           0 :     InsertEntries( ScriptDocument::getApplicationScriptDocument(), LIBRARY_LOCATION_USER );
     208           0 :     InsertEntries( ScriptDocument::getApplicationScriptDocument(), LIBRARY_LOCATION_SHARE );
     209             : 
     210           0 :     ScriptDocuments aDocuments( ScriptDocument::getAllScriptDocuments( ScriptDocument::DocumentsSorted ) );
     211           0 :     for (   ScriptDocuments::const_iterator doc = aDocuments.begin();
     212           0 :             doc != aDocuments.end();
     213             :             ++doc
     214             :         )
     215             :     {
     216           0 :         InsertEntries( *doc, LIBRARY_LOCATION_DOCUMENT );
     217             :     }
     218             : 
     219           0 :     SetUpdateMode(true);
     220             : 
     221           0 :     SelectEntry( aCurText );
     222           0 :     if ( !GetSelectEntryCount() )
     223             :     {
     224           0 :         SelectEntryPos( GetEntryCount() );
     225           0 :         aCurText = GetSelectEntry();
     226             :     }
     227           0 :     bIgnoreSelect = false;
     228           0 : }
     229             : 
     230           0 : void LibBox::InsertEntries( const ScriptDocument& rDocument, LibraryLocation eLocation )
     231             : {
     232             :     // get a sorted list of library names
     233           0 :     Sequence< OUString > aLibNames = rDocument.getLibraryNames();
     234           0 :     sal_Int32 nLibCount = aLibNames.getLength();
     235           0 :     const OUString* pLibNames = aLibNames.getConstArray();
     236             : 
     237           0 :     for ( sal_Int32 i = 0 ; i < nLibCount ; ++i )
     238             :     {
     239           0 :         OUString aLibName = pLibNames[ i ];
     240           0 :         if ( eLocation == rDocument.getLibraryLocation( aLibName ) )
     241             :         {
     242           0 :             OUString aName( rDocument.getTitle( eLocation ) );
     243           0 :             OUString aEntryText( CreateMgrAndLibStr( aName, aLibName ) );
     244           0 :             sal_Int32 nPos = InsertEntry( aEntryText, LISTBOX_APPEND );
     245           0 :             SetEntryData( nPos, new LibEntry( rDocument, eLocation, aLibName ) );
     246             :         }
     247           0 :     }
     248           0 : }
     249             : 
     250           0 : bool LibBox::PreNotify( NotifyEvent& rNEvt )
     251             : {
     252           0 :     bool nDone = false;
     253           0 :     if( rNEvt.GetType() == MouseNotifyEvent::KEYINPUT )
     254             :     {
     255           0 :         KeyEvent aKeyEvt = *rNEvt.GetKeyEvent();
     256           0 :         sal_uInt16 nKeyCode = aKeyEvt.GetKeyCode().GetCode();
     257           0 :         switch( nKeyCode )
     258             :         {
     259             :             case KEY_RETURN:
     260             :             {
     261           0 :                 NotifyIDE();
     262           0 :                 nDone = true;
     263             :             }
     264           0 :             break;
     265             : 
     266             :             case KEY_ESCAPE:
     267             :             {
     268           0 :                 SelectEntry( aCurText );
     269           0 :                 ReleaseFocus();
     270           0 :                 nDone = true;
     271             :             }
     272           0 :             break;
     273             :         }
     274             :     }
     275           0 :     else if( rNEvt.GetType() == MouseNotifyEvent::GETFOCUS )
     276             :     {
     277           0 :         if ( bFillBox )
     278             :         {
     279           0 :             FillBox();
     280           0 :             bFillBox = false;
     281             :         }
     282             :     }
     283           0 :     else if( rNEvt.GetType() == MouseNotifyEvent::LOSEFOCUS )
     284             :     {
     285           0 :         if ( !HasChildPathFocus(true) )
     286             :         {
     287           0 :             bIgnoreSelect = true;
     288           0 :             bFillBox = true;
     289             :         }
     290             :     }
     291             : 
     292           0 :     return nDone || ListBox::PreNotify( rNEvt );
     293             : }
     294             : 
     295           0 : void LibBox::Select()
     296             : {
     297           0 :     if ( !IsTravelSelect() )
     298             :     {
     299           0 :         if ( !bIgnoreSelect )
     300           0 :             NotifyIDE();
     301             :         else
     302           0 :             SelectEntry( aCurText );    // since 306... (Select after Escape)
     303             :     }
     304           0 : }
     305             : 
     306           0 : void LibBox::NotifyIDE()
     307             : {
     308           0 :     sal_Int32 nSelPos = GetSelectEntryPos();
     309           0 :     if (LibEntry* pEntry = static_cast<LibEntry*>(GetEntryData(nSelPos)))
     310             :     {
     311           0 :         ScriptDocument aDocument( pEntry->GetDocument() );
     312           0 :         SfxUsrAnyItem aDocumentItem( SID_BASICIDE_ARG_DOCUMENT_MODEL, uno::makeAny( aDocument.getDocumentOrNull() ) );
     313           0 :         OUString aLibName = pEntry->GetLibName();
     314           0 :         SfxStringItem aLibNameItem( SID_BASICIDE_ARG_LIBNAME, aLibName );
     315           0 :         if (SfxDispatcher* pDispatcher = GetDispatcher())
     316             :             pDispatcher->Execute(
     317             :                 SID_BASICIDE_LIBSELECTED,
     318             :                 SfxCallMode::SYNCHRON, &aDocumentItem, &aLibNameItem, 0L
     319           0 :             );
     320             :     }
     321           0 :     ReleaseFocus();
     322           0 : }
     323             : 
     324           0 : void LibBox::ClearBox()
     325             : {
     326           0 :     sal_Int32 nCount = GetEntryCount();
     327           0 :     for ( sal_Int32 i = 0; i < nCount; ++i )
     328             :     {
     329           0 :         LibEntry* pEntry = static_cast<LibEntry*>(GetEntryData( i ));
     330           0 :         delete pEntry;
     331             :     }
     332           0 :     ListBox::Clear();
     333           0 : }
     334             : 
     335             : // class LanguageBoxControl ----------------------------------------------
     336             : 
     337           0 : SFX_IMPL_TOOLBOX_CONTROL( LanguageBoxControl, SfxStringItem );
     338             : 
     339           0 : LanguageBoxControl::LanguageBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx )
     340           0 :     : SfxToolBoxControl( nSlotId, nId, rTbx )
     341             : {
     342           0 : }
     343             : 
     344           0 : void LanguageBoxControl::StateChanged( sal_uInt16 nID, SfxItemState eState, const SfxPoolItem* pItem )
     345             : {
     346             :     (void)nID;
     347           0 :     if (LanguageBox* pBox = static_cast<LanguageBox*>(GetToolBox().GetItemWindow(GetId())))
     348             :     {
     349           0 :         if (eState != SfxItemState::DEFAULT)
     350           0 :             pBox->Disable();
     351             :         else
     352             :         {
     353           0 :             pBox->Enable();
     354           0 :             pBox->Update(dynamic_cast<SfxStringItem const*>(pItem));
     355             :         }
     356             :     }
     357           0 : }
     358             : 
     359           0 : VclPtr<vcl::Window> LanguageBoxControl::CreateItemWindow( vcl::Window *pParent )
     360             : {
     361           0 :     return VclPtr<LanguageBox>::Create( pParent );
     362             : }
     363             : 
     364             : // class basctl::LanguageBox -----------------------------------------------
     365             : 
     366           0 : LanguageBox::LanguageBox( vcl::Window* pParent ) :
     367             : 
     368             :     DocListenerBox( pParent ),
     369             : 
     370             :     m_sNotLocalizedStr( IDEResId( RID_STR_TRANSLATION_NOTLOCALIZED ) ),
     371             :     m_sDefaultLanguageStr( IDEResId( RID_STR_TRANSLATION_DEFAULT ) ),
     372             : 
     373           0 :     m_bIgnoreSelect( false )
     374             : 
     375             : {
     376           0 :     SetSizePixel( Size( 210, 200 ) );
     377             : 
     378           0 :     FillBox();
     379           0 : }
     380             : 
     381           0 : LanguageBox::~LanguageBox()
     382             : {
     383           0 :     disposeOnce();
     384           0 : }
     385             : 
     386           0 : void LanguageBox::dispose()
     387             : {
     388           0 :     ClearBox();
     389           0 :     DocListenerBox::dispose();
     390           0 : }
     391             : 
     392           0 : void LanguageBox::FillBox()
     393             : {
     394           0 :     SetUpdateMode(false);
     395           0 :     m_bIgnoreSelect = true;
     396           0 :     m_sCurrentText = GetSelectEntry();
     397           0 :     ClearBox();
     398             : 
     399           0 :     boost::shared_ptr<LocalizationMgr> pCurMgr(GetShell()->GetCurLocalizationMgr());
     400           0 :     if ( pCurMgr->isLibraryLocalized() )
     401             :     {
     402           0 :         Enable();
     403           0 :         Locale aDefaultLocale = pCurMgr->getStringResourceManager()->getDefaultLocale();
     404           0 :         Locale aCurrentLocale = pCurMgr->getStringResourceManager()->getCurrentLocale();
     405           0 :         Sequence< Locale > aLocaleSeq = pCurMgr->getStringResourceManager()->getLocales();
     406           0 :         const Locale* pLocale = aLocaleSeq.getConstArray();
     407           0 :         sal_Int32 i, nCount = aLocaleSeq.getLength();
     408           0 :         sal_Int32 nSelPos = LISTBOX_ENTRY_NOTFOUND;
     409           0 :         for ( i = 0;  i < nCount;  ++i )
     410             :         {
     411           0 :             bool bIsDefault = localesAreEqual( aDefaultLocale, pLocale[i] );
     412           0 :             bool bIsCurrent = localesAreEqual( aCurrentLocale, pLocale[i] );
     413           0 :             LanguageType eLangType = LanguageTag::convertToLanguageType( pLocale[i] );
     414           0 :             OUString sLanguage = SvtLanguageTable::GetLanguageString( eLangType );
     415           0 :             if ( bIsDefault )
     416             :             {
     417           0 :                 sLanguage += " ";
     418           0 :                 sLanguage += m_sDefaultLanguageStr;
     419             :             }
     420           0 :             sal_Int32 nPos = InsertEntry( sLanguage );
     421           0 :             SetEntryData( nPos, new LanguageEntry( sLanguage, pLocale[i], bIsDefault ) );
     422             : 
     423           0 :             if ( bIsCurrent )
     424           0 :                 nSelPos = nPos;
     425           0 :         }
     426             : 
     427           0 :         if ( nSelPos != LISTBOX_ENTRY_NOTFOUND )
     428             :         {
     429           0 :             SelectEntryPos( nSelPos );
     430           0 :             m_sCurrentText = GetSelectEntry();
     431           0 :         }
     432             :     }
     433             :     else
     434             :     {
     435           0 :         InsertEntry( m_sNotLocalizedStr );
     436           0 :         SelectEntryPos(0);
     437           0 :         Disable();
     438             :     }
     439             : 
     440           0 :     SetUpdateMode(true);
     441           0 :     m_bIgnoreSelect = false;
     442           0 : }
     443             : 
     444           0 : void LanguageBox::ClearBox()
     445             : {
     446           0 :     sal_Int32 nCount = GetEntryCount();
     447           0 :     for ( sal_Int32 i = 0; i < nCount; ++i )
     448             :     {
     449           0 :         LanguageEntry* pEntry = static_cast<LanguageEntry*>(GetEntryData(i));
     450           0 :         delete pEntry;
     451             :     }
     452           0 :     ListBox::Clear();
     453           0 : }
     454             : 
     455           0 : void LanguageBox::SetLanguage()
     456             : {
     457           0 :     LanguageEntry* pEntry = static_cast<LanguageEntry*>(GetSelectEntryData());
     458           0 :     if ( pEntry )
     459           0 :         GetShell()->GetCurLocalizationMgr()->handleSetCurrentLocale( pEntry->m_aLocale );
     460           0 : }
     461             : 
     462           0 : void LanguageBox::Select()
     463             : {
     464           0 :     if ( !m_bIgnoreSelect )
     465           0 :         SetLanguage();
     466             :     else
     467           0 :         SelectEntry( m_sCurrentText );  // Select after Escape
     468           0 : }
     469             : 
     470           0 : bool LanguageBox::PreNotify( NotifyEvent& rNEvt )
     471             : {
     472           0 :     bool nDone = false;
     473           0 :     if( rNEvt.GetType() == MouseNotifyEvent::KEYINPUT )
     474             :     {
     475           0 :         sal_uInt16 nKeyCode = rNEvt.GetKeyEvent()->GetKeyCode().GetCode();
     476           0 :         switch( nKeyCode )
     477             :         {
     478             :             case KEY_RETURN:
     479             :             {
     480           0 :                 SetLanguage();
     481           0 :                 nDone = true;
     482             :             }
     483           0 :             break;
     484             : 
     485             :             case KEY_ESCAPE:
     486             :             {
     487           0 :                 SelectEntry( m_sCurrentText );
     488           0 :                 nDone = true;
     489             :             }
     490           0 :             break;
     491             :         }
     492             :     }
     493           0 :     else if( rNEvt.GetType() == MouseNotifyEvent::GETFOCUS )
     494             :     {
     495             :     }
     496           0 :     else if( rNEvt.GetType() == MouseNotifyEvent::LOSEFOCUS )
     497             :     {
     498             :     }
     499             : 
     500           0 :     return nDone || ListBox::PreNotify( rNEvt );
     501             : }
     502             : 
     503           0 : void LanguageBox::Update( const SfxStringItem* pItem )
     504             : {
     505           0 :     FillBox();
     506             : 
     507           0 :     if ( pItem && !pItem->GetValue().isEmpty() )
     508             :     {
     509           0 :         m_sCurrentText = pItem->GetValue();
     510           0 :         if ( GetSelectEntry() != m_sCurrentText )
     511           0 :             SelectEntry( m_sCurrentText );
     512             :     }
     513           0 : }
     514             : 
     515             : 
     516           0 : } // namespace basctl
     517             : 
     518             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11