LCOV - code coverage report
Current view: top level - sw/source/uibase/ribbar - workctrl.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 16 333 4.8 %
Date: 2015-06-13 12:38:46 Functions: 11 60 18.3 %
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 <string>
      21             : #include <comphelper/string.hxx>
      22             : #include <i18nutil/unicode.hxx>
      23             : #include <svl/eitem.hxx>
      24             : #include <sfx2/htmlmode.hxx>
      25             : #include <sfx2/dispatch.hxx>
      26             : #include <sfx2/bindings.hxx>
      27             : #include <sfx2/imagemgr.hxx>
      28             : #include <sfx2/mnumgr.hxx>
      29             : #include <sfx2/msgpool.hxx>
      30             : #include <swmodule.hxx>
      31             : #include <view.hxx>
      32             : #include <initui.hxx>
      33             : #include <viewopt.hxx>
      34             : #include <docsh.hxx>
      35             : #include <gloshdl.hxx>
      36             : #include <glosdoc.hxx>
      37             : #include <gloslst.hxx>
      38             : #include <workctrl.hxx>
      39             : #include <workctrl.hrc>
      40             : #include <cmdid.h>
      41             : #include <helpid.h>
      42             : #include <wrtsh.hxx>
      43             : #include <svl/imageitm.hxx>
      44             : #include <vcl/lstbox.hxx>
      45             : #include <vcl/settings.hxx>
      46             : #include <rtl/ustring.hxx>
      47             : #include "swabstdlg.hxx"
      48             : #include <misc.hrc>
      49             : #include <sfx2/zoomitem.hxx>
      50             : #include <vcl/svapp.hxx>
      51             : #include <svx/dialmgr.hxx>
      52             : #include <svx/dialogs.hrc>
      53             : 
      54             : // Size check
      55             : #define NAVI_ENTRIES 20
      56             : #if NAVI_ENTRIES != NID_COUNT
      57             : #error SwScrollNaviPopup-CTOR static array wrong size. Are new IDs added?
      58             : #endif
      59             : 
      60             : #define ZOOM_ENTRIES 9
      61             : 
      62             : using namespace ::com::sun::star;
      63             : using namespace ::com::sun::star::uno;
      64             : using namespace ::com::sun::star::beans;
      65             : using namespace ::com::sun::star::frame;
      66             : 
      67         118 : SFX_IMPL_TOOLBOX_CONTROL( SwTbxInsertCtrl, SfxImageItem);
      68          59 : SFX_IMPL_TOOLBOX_CONTROL( SwTbxAutoTextCtrl, SfxVoidItem );
      69         405 : SFX_IMPL_TOOLBOX_CONTROL( SwTbxFieldCtrl, SfxBoolItem );
      70             : 
      71           0 : SwTbxInsertCtrl::SwTbxInsertCtrl(
      72             :     sal_uInt16 nSlotId,
      73             :     sal_uInt16 nId,
      74             :     ToolBox& rTbx ) :
      75             :         SfxToolBoxControl( nSlotId, nId, rTbx ),
      76           0 :         nLastSlotId(FN_INSERT_CTRL == nSlotId ? FN_INSERT_TABLE : SID_INSERT_DIAGRAM)
      77             : {
      78           0 :     rTbx.SetItemBits( nId, ToolBoxItemBits::DROPDOWN | rTbx.GetItemBits( nId ) );
      79           0 : }
      80             : 
      81           0 : SwTbxInsertCtrl::~SwTbxInsertCtrl()
      82             : {
      83           0 : }
      84             : 
      85           0 : void SAL_CALL SwTbxInsertCtrl::update() throw (uno::RuntimeException, std::exception)
      86             : {
      87           0 :     ToolBox& rTbx = GetToolBox();
      88           0 :     OUString aSlotURL = "slot:" + OUString::number( nLastSlotId);
      89           0 :     Image aImage = GetImage( m_xFrame, aSlotURL, hasBigImages() );
      90             : 
      91           0 :     rTbx.SetItemImage(GetId(), aImage);
      92           0 :     rTbx.Invalidate();
      93             : 
      94           0 :     SfxToolBoxControl::update();
      95           0 : }
      96             : 
      97           0 : void SwTbxInsertCtrl::StateChanged( sal_uInt16 /*nSID*/,
      98             :                                       SfxItemState eState,
      99             :                                       const SfxPoolItem* pState )
     100             : {
     101           0 :     sal_uInt16 nId = GetId();
     102           0 :     GetToolBox().EnableItem( nId, (GetItemState(pState) != SfxItemState::DISABLED) );
     103             : 
     104           0 :     if( eState == SfxItemState::DEFAULT )
     105             :     {
     106           0 :         const SfxImageItem* pItem = PTR_CAST( SfxImageItem, pState );
     107           0 :         if(pItem)
     108             :         {
     109           0 :             nLastSlotId = pItem->GetValue();
     110           0 :             if( nLastSlotId )
     111           0 :                 nId = nLastSlotId;
     112             : 
     113           0 :             OUString aSlotURL = "slot:" + OUString::number( nId);
     114           0 :             ToolBox& rBox = GetToolBox();
     115           0 :             Image aImage = GetImage( m_xFrame, aSlotURL, hasBigImages() );
     116           0 :             rBox.SetItemImage(GetId(), aImage);
     117           0 :             rBox.SetItemImageMirrorMode( GetId(), false );
     118           0 :             rBox.SetItemImageAngle( GetId(), pItem->GetRotation() );
     119           0 :             rBox.SetItemImageMirrorMode( GetId(), pItem->IsMirrored() );
     120             :         }
     121             :     }
     122             : 
     123           0 : }
     124             : 
     125           0 : VclPtr<SfxPopupWindow> SwTbxInsertCtrl::CreatePopupWindow()
     126             : {
     127           0 :     if(GetSlotId() == FN_INSERT_CTRL)
     128             :     {
     129           0 :         OUString aToolBarResStr( "private:resource/toolbar/insertbar" );
     130           0 :         createAndPositionSubToolBar( aToolBarResStr );
     131             :     }
     132             :     else /* FN_INSERT_OBJ_CTRL */
     133             :     {
     134           0 :         OUString aToolBarResStr( "private:resource/toolbar/insertobjectbar" );
     135           0 :         createAndPositionSubToolBar( aToolBarResStr );
     136             :     }
     137           0 :     return NULL;
     138             : }
     139             : 
     140           0 : SfxPopupWindowType  SwTbxInsertCtrl::GetPopupWindowType() const
     141             : {
     142           0 :     return nLastSlotId ? SfxPopupWindowType::ONTIMEOUT : SfxPopupWindowType::ONCLICK;
     143             : }
     144             : 
     145           0 : void SwTbxInsertCtrl::Select( sal_uInt16 /*nSelectModifier*/ )
     146             : {
     147           0 :     if( nLastSlotId )
     148             :     {
     149           0 :         SfxViewShell*   pCurSh( SfxViewShell::Current() );
     150           0 :         SfxDispatcher*  pDispatch( 0 );
     151             : 
     152           0 :         if ( pCurSh )
     153             :         {
     154           0 :             SfxViewFrame*   pViewFrame = pCurSh->GetViewFrame();
     155           0 :             if ( pViewFrame )
     156           0 :                 pDispatch = pViewFrame->GetDispatcher();
     157             :         }
     158             : 
     159           0 :         if ( pDispatch )
     160           0 :             pDispatch->Execute(nLastSlotId);
     161             :     }
     162           0 : }
     163             : 
     164           0 : SwTbxAutoTextCtrl::SwTbxAutoTextCtrl(
     165             :     sal_uInt16 nSlotId,
     166             :     sal_uInt16 nId,
     167             :     ToolBox& rTbx ) :
     168             :     SfxToolBoxControl( nSlotId, nId, rTbx ),
     169           0 :     pPopup(0)
     170             : {
     171           0 :     rTbx.SetItemBits( nId, ToolBoxItemBits::DROPDOWN | rTbx.GetItemBits( nId ) );
     172           0 : }
     173             : 
     174           0 : SwTbxAutoTextCtrl::~SwTbxAutoTextCtrl()
     175             : {
     176           0 :     DelPopup();
     177           0 : }
     178             : 
     179           0 : VclPtr<SfxPopupWindow> SwTbxAutoTextCtrl::CreatePopupWindow()
     180             : {
     181           0 :     SwView* pView = ::GetActiveView();
     182           0 :     if(pView && !pView->GetDocShell()->IsReadOnly() &&
     183           0 :        !pView->GetWrtShell().HasReadonlySel() )
     184             :     {
     185           0 :         Link<> aLnk = LINK(this, SwTbxAutoTextCtrl, PopupHdl);
     186             : 
     187           0 :         pPopup = new PopupMenu;
     188           0 :         SwGlossaryList* pGlossaryList = ::GetGlossaryList();
     189           0 :         const size_t nGroupCount = pGlossaryList->GetGroupCount();
     190           0 :         for(size_t i = 1; i <= nGroupCount; ++i)
     191             :         {
     192           0 :             OUString sTitle = pGlossaryList->GetGroupTitle(i - 1);
     193           0 :             const sal_uInt16 nBlockCount = pGlossaryList->GetBlockCount(i -1);
     194           0 :             if(nBlockCount)
     195             :             {
     196           0 :                 sal_uInt16 nIndex = static_cast<sal_uInt16>(100*i);
     197             :                 // but insert without extension
     198           0 :                 pPopup->InsertItem( i, sTitle);
     199           0 :                 PopupMenu* pSub = new PopupMenu;
     200           0 :                 pSub->SetSelectHdl(aLnk);
     201           0 :                 pPopup->SetPopupMenu(i, pSub);
     202           0 :                 for(sal_uInt16 j = 0; j < nBlockCount; j++)
     203             :                 {
     204           0 :                     OUString sLongName(pGlossaryList->GetBlockLongName(i - 1, j));
     205           0 :                     OUString sShortName(pGlossaryList->GetBlockShortName(i - 1, j));
     206             : 
     207           0 :                     OUString sEntry = sShortName + " - " + sLongName;
     208           0 :                     pSub->InsertItem(++nIndex, sEntry);
     209           0 :                 }
     210             :             }
     211           0 :         }
     212             : 
     213           0 :         ToolBox* pToolBox = &GetToolBox();
     214           0 :         sal_uInt16 nId = GetId();
     215           0 :         pToolBox->SetItemDown( nId, true );
     216             : 
     217           0 :         pPopup->Execute( pToolBox, pToolBox->GetItemRect( nId ),
     218           0 :             (pToolBox->GetAlign() == WINDOWALIGN_TOP || pToolBox->GetAlign() == WINDOWALIGN_BOTTOM) ?
     219           0 :                 PopupMenuFlags::ExecuteDown : PopupMenuFlags::ExecuteRight );
     220             : 
     221           0 :         pToolBox->SetItemDown( nId, false );
     222             :     }
     223           0 :     GetToolBox().EndSelection();
     224           0 :     DelPopup();
     225           0 :     return 0;
     226             : 
     227             : }
     228             : 
     229           0 : SfxPopupWindowType SwTbxAutoTextCtrl::GetPopupWindowType() const
     230             : {
     231           0 :     return SfxPopupWindowType::ONTIMEOUT;
     232             : }
     233             : 
     234           0 : void SwTbxAutoTextCtrl::StateChanged( sal_uInt16,
     235             :                                               SfxItemState,
     236             :                                               const SfxPoolItem* pState )
     237             : {
     238           0 :     GetToolBox().EnableItem( GetId(), (GetItemState(pState) != SfxItemState::DISABLED) );
     239           0 : }
     240             : 
     241           0 : IMPL_STATIC_LINK(SwTbxAutoTextCtrl, PopupHdl, PopupMenu*, pMenu)
     242             : {
     243           0 :     sal_uInt16 nId = pMenu->GetCurItemId();
     244             : 
     245           0 :     sal_uInt16 nBlock = nId / 100;
     246             : 
     247           0 :     SwGlossaryList* pGlossaryList = ::GetGlossaryList();
     248           0 :     OUString sGroup = pGlossaryList->GetGroupName(nBlock - 1, false);
     249             :     OUString sShortName =
     250           0 :         pGlossaryList->GetBlockShortName(nBlock - 1, nId - (100 * nBlock) - 1);
     251             : 
     252           0 :     SwGlossaryHdl* pGlosHdl = ::GetActiveView()->GetGlosHdl();
     253           0 :     SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
     254             :     OSL_ENSURE(pFact, "Dialog creation failed!");
     255           0 :     ::GlossarySetActGroup fnSetActGroup = pFact->SetGlossaryActGroupFunc();
     256           0 :     if ( fnSetActGroup )
     257           0 :         (*fnSetActGroup)( sGroup );
     258           0 :     pGlosHdl->SetCurGroup(sGroup, true);
     259           0 :     pGlosHdl->InsertGlossary(sShortName);
     260             : 
     261           0 :     return 0;
     262             : }
     263             : 
     264           0 : void SwTbxAutoTextCtrl::DelPopup()
     265             : {
     266           0 :     if(pPopup)
     267             :     {
     268           0 :         for( sal_uInt16 i = 0; i < pPopup->GetItemCount(); i ++ )
     269             :         {
     270           0 :             PopupMenu* pSubPopup = pPopup->GetPopupMenu(pPopup->GetItemId(i));
     271           0 :             delete pSubPopup;
     272             :         }
     273           0 :         delete pPopup;
     274           0 :         pPopup = 0;
     275             :     }
     276           0 : }
     277             : 
     278         346 : SwTbxFieldCtrl::SwTbxFieldCtrl(
     279             :     sal_uInt16 nSlotId,
     280             :     sal_uInt16 nId,
     281             :     ToolBox& rTbx ) :
     282         346 :     SfxToolBoxControl( nSlotId, nId, rTbx )
     283             : {
     284         346 :     rTbx.SetItemBits( nId, ToolBoxItemBits::DROPDOWNONLY | rTbx.GetItemBits( nId ) );
     285         346 : }
     286             : 
     287         692 : SwTbxFieldCtrl::~SwTbxFieldCtrl()
     288             : {
     289         692 : }
     290             : 
     291           0 : VclPtr<SfxPopupWindow> SwTbxFieldCtrl::CreatePopupWindow()
     292             : {
     293           0 :     SwView* pView = ::GetActiveView();
     294           0 :     if(pView && !pView->GetDocShell()->IsReadOnly() &&
     295           0 :        !pView->GetWrtShell().HasReadonlySel() )
     296             :     {
     297           0 :         PopupMenu* pPopup = new PopupMenu(SW_RES(RID_INSERT_FIELD_CTRL));
     298             : 
     299           0 :         if (::GetHtmlMode(pView->GetDocShell()) & HTMLMODE_ON)
     300             :         {
     301           0 :             pPopup->RemoveItem(pPopup->GetItemPos(FN_INSERT_FLD_PGCOUNT));
     302           0 :             pPopup->RemoveItem(pPopup->GetItemPos(FN_INSERT_FLD_TOPIC));
     303             :         }
     304             : 
     305           0 :         ToolBox*      pToolBox = &GetToolBox();
     306           0 :         sal_uInt16    nId      = GetId();
     307           0 :         SfxDispatcher *rDispat = pView->GetViewFrame()->GetDispatcher();
     308             : 
     309             :         // set the icons in the Popup-Menu, delete the pPopup
     310           0 :         SfxPopupMenuManager aPop( pPopup, rDispat->GetFrame()->GetBindings() );
     311             : 
     312           0 :         pToolBox->SetItemDown( nId, true );
     313             : 
     314           0 :         pPopup->Execute( pToolBox, pToolBox->GetItemRect( nId ),
     315           0 :                 (pToolBox->GetAlign() == WINDOWALIGN_TOP || pToolBox->GetAlign() == WINDOWALIGN_BOTTOM) ?
     316           0 :                  PopupMenuFlags::ExecuteDown : PopupMenuFlags::ExecuteRight );
     317             : 
     318           0 :         pToolBox->SetItemDown( nId, false );
     319             :     }
     320             : 
     321           0 :     GetToolBox().EndSelection();
     322             : 
     323           0 :     return 0;
     324             : }
     325             : 
     326           0 : SfxPopupWindowType SwTbxFieldCtrl::GetPopupWindowType() const
     327             : {
     328           0 :     return SfxPopupWindowType::ONTIMEOUT;
     329             : }
     330             : 
     331         598 : void SwTbxFieldCtrl::StateChanged( sal_uInt16,
     332             :                                               SfxItemState eState,
     333             :                                               const SfxPoolItem* pState )
     334             : {
     335         598 :     GetToolBox().EnableItem( GetId(), (GetItemState(pState) != SfxItemState::DISABLED) );
     336         598 :     if (eState >= SfxItemState::DEFAULT)
     337             :     {
     338         596 :         GetToolBox().CheckItem( GetId(), static_cast<const SfxBoolItem*>(pState)->GetValue() );
     339             :     }
     340         598 : }
     341             : 
     342             : 
     343             : // Navigation-Popup
     344             : // determine the order of the toolbox items
     345             : static sal_uInt16 aNavigationInsertIds[ NAVI_ENTRIES ] =
     346             : {
     347             :     // -- first line
     348             :     NID_TBL,
     349             :     NID_FRM,
     350             :     NID_GRF,
     351             :     NID_OLE,
     352             :     NID_PGE,
     353             :     NID_OUTL,
     354             :     NID_MARK,
     355             :     NID_DRW,
     356             :     NID_CTRL,
     357             :     NID_PREV,
     358             :     // -- second line
     359             :     NID_REG,
     360             :     NID_BKM,
     361             :     NID_SEL,
     362             :     NID_FTN,
     363             :     NID_POSTIT,
     364             :     NID_SRCH_REP,
     365             :     NID_INDEX_ENTRY,
     366             :     NID_TABLE_FORMULA,
     367             :     NID_TABLE_FORMULA_ERROR,
     368             :     NID_NEXT
     369             : };
     370             : static const char* aNavigationHelpIds[ NAVI_ENTRIES ] =
     371             : {
     372             :     // -- first line
     373             :     HID_NID_TBL,
     374             :     HID_NID_FRM,
     375             :     HID_NID_GRF,
     376             :     HID_NID_OLE,
     377             :     HID_NID_PGE,
     378             :     HID_NID_OUTL,
     379             :     HID_NID_MARK,
     380             :     HID_NID_DRW,
     381             :     HID_NID_CTRL,
     382             :     HID_NID_PREV,
     383             :     // -- second line
     384             :     HID_NID_REG,
     385             :     HID_NID_BKM,
     386             :     HID_NID_SEL,
     387             :     HID_NID_FTN,
     388             :     HID_NID_POSTIT,
     389             :     HID_NID_SRCH_REP,
     390             :     HID_NID_INDEX_ENTRY,
     391             :     HID_NID_TABLE_FORMULA,
     392             :     HID_NID_TABLE_FORMULA_ERROR,
     393             :     HID_NID_NEXT
     394             : };
     395             : 
     396           0 : SwScrollNaviPopup::SwScrollNaviPopup(sal_uInt16 nId, const Reference< XFrame >& rFrame, vcl::Window *pParent)
     397             :     : SfxPopupWindow(nId, pParent, "FloatingNavigation",
     398             :         "modules/swriter/ui/floatingnavigation.ui", rFrame),
     399           0 :     aIList(SW_RES(IL_VALUES))
     400             : {
     401           0 :     m_pToolBox = VclPtr<SwScrollNaviToolBox>::Create(get<vcl::Window>("box"), this, 0);
     402           0 :     get(m_pInfoField, "label");
     403             : 
     404             :     sal_uInt16 i;
     405             : 
     406           0 :     m_pToolBox->SetHelpId(HID_NAVI_VS);
     407           0 :     m_pToolBox->SetLineCount( 2 );
     408           0 :     m_pToolBox->SetOutStyle(TOOLBOX_STYLE_FLAT);
     409           0 :     for( i = 0; i < NID_COUNT; i++)
     410             :     {
     411           0 :         sal_uInt16 nNaviId = aNavigationInsertIds[i];
     412           0 :         OUString sText;
     413           0 :         ToolBoxItemBits  nTbxBits = ToolBoxItemBits::NONE;
     414           0 :         if((NID_PREV != nNaviId) && (NID_NEXT != nNaviId))
     415             :         {
     416             :             // -2, there's no string for Next/Prev
     417           0 :             sal_uInt16 nResStr = ST_TBL - 2 + nNaviId - NID_START;
     418           0 :             sText = SW_RESSTR(nResStr);
     419           0 :             nTbxBits = ToolBoxItemBits::CHECKABLE;
     420             :         }
     421             :         else
     422             :         {
     423           0 :             if (nNaviId == NID_PREV)
     424           0 :                 sText = SW_RESSTR(STR_IMGBTN_PGE_UP);
     425           0 :             else if (nNaviId == NID_NEXT)
     426           0 :                 sText = SW_RESSTR(STR_IMGBTN_PGE_DOWN);
     427             :         }
     428           0 :         m_pToolBox->InsertItem(nNaviId, sText, nTbxBits);
     429           0 :         m_pToolBox->SetHelpId( nNaviId, aNavigationHelpIds[i] );
     430           0 :     }
     431           0 :     ApplyImageList();
     432           0 :     m_pToolBox->InsertBreak(NID_COUNT/2);
     433             : 
     434             :     // these are global strings
     435           0 :     for( i = 0; i < 2 * NID_COUNT; i++)
     436             :     {
     437           0 :         sQuickHelp[i] = SW_RESSTR(STR_IMGBTN_START + i);
     438             :     }
     439             : 
     440           0 :     sal_uInt16 nItemId = SwView::GetMoveType();
     441           0 :     m_pInfoField->SetText(m_pToolBox->GetItemText(nItemId));
     442           0 :     m_pToolBox->CheckItem( nItemId, true );
     443             : 
     444           0 :     m_pToolBox->SetSelectHdl(LINK(this, SwScrollNaviPopup, SelectHdl));
     445           0 :     m_pToolBox->StartSelection();
     446           0 :     m_pToolBox->Show();
     447           0 : }
     448             : 
     449           0 : SwScrollNaviPopup::~SwScrollNaviPopup()
     450             : {
     451           0 :     disposeOnce();
     452           0 : }
     453             : 
     454           0 : void SwScrollNaviPopup::dispose()
     455             : {
     456           0 :     m_pToolBox.disposeAndClear();
     457           0 :     m_pInfoField.clear();
     458           0 :     SfxPopupWindow::dispose();
     459           0 : }
     460             : 
     461           0 : void SwScrollNaviPopup::DataChanged( const DataChangedEvent& rDCEvt )
     462             : {
     463           0 :     if ( (rDCEvt.GetType() == DataChangedEventType::SETTINGS) &&
     464           0 :          (rDCEvt.GetFlags() & AllSettingsFlags::STYLE) )
     465           0 :             ApplyImageList();
     466             : 
     467           0 :     Window::DataChanged( rDCEvt );
     468           0 : }
     469             : 
     470           0 : void SwScrollNaviPopup::ApplyImageList()
     471             : {
     472           0 :     ImageList& rImgLst = aIList;
     473           0 :     for(sal_uInt16 i = 0; i < NID_COUNT; i++)
     474             :     {
     475           0 :         sal_uInt16 nNaviId = aNavigationInsertIds[i];
     476           0 :         m_pToolBox->SetItemImage(nNaviId, rImgLst.GetImage(nNaviId));
     477             :     }
     478           0 : }
     479             : 
     480           0 : VclPtr<SfxPopupWindow> SwScrollNaviPopup::Clone() const
     481             : {
     482           0 :     return VclPtr<SwScrollNaviPopup>::Create( GetId(), GetFrame(), GetParent() );
     483             : }
     484             : 
     485           0 : IMPL_LINK_TYPED(SwScrollNaviPopup, SelectHdl, ToolBox*, pSet, void)
     486             : {
     487           0 :     sal_uInt16 nSet = pSet->GetCurItemId();
     488           0 :     if( nSet != NID_PREV && nSet != NID_NEXT )
     489             :     {
     490           0 :         SwView::SetMoveType(nSet);
     491           0 :         m_pToolBox->SetItemText(NID_NEXT, sQuickHelp[nSet - NID_START]);
     492           0 :         m_pToolBox->SetItemText(NID_PREV, sQuickHelp[nSet - NID_START + NID_COUNT]);
     493           0 :         m_pInfoField->SetText(m_pToolBox->GetItemText(nSet));
     494             :         // check the current button only
     495           0 :         for(sal_uInt16 i = 0; i < NID_COUNT; i++)
     496             :         {
     497           0 :             sal_uInt16 nItemId = m_pToolBox->GetItemId( i );
     498           0 :             m_pToolBox->CheckItem( nItemId, nItemId == nSet );
     499           0 :         }
     500             :     }
     501             :     else
     502             :     {
     503           0 :         Sequence< PropertyValue > aArgs;
     504           0 :         OUString cmd(".uno:ScrollToPrevious");
     505           0 :         if (NID_NEXT == nSet)
     506           0 :             cmd = ".uno:ScrollToNext";
     507           0 :         SfxToolBoxControl::Dispatch( Reference< XDispatchProvider >( GetFrame()->getController(), UNO_QUERY ),
     508           0 :                                      cmd, aArgs );
     509             :     }
     510           0 : }
     511             : 
     512           0 : SwScrollNaviToolBox::~SwScrollNaviToolBox()
     513             : {
     514           0 :     disposeOnce();
     515           0 : }
     516             : 
     517           0 : void SwScrollNaviToolBox::dispose()
     518             : {
     519           0 :     m_pNaviPopup.disposeAndClear();
     520           0 :     ToolBox::dispose();
     521           0 : }
     522             : 
     523           0 : void SwScrollNaviToolBox::MouseButtonUp( const MouseEvent& rMEvt )
     524             : {
     525           0 :     ToolBox::MouseButtonUp(rMEvt);
     526           0 :     if (m_pNaviPopup->IsInPopupMode())
     527           0 :         m_pNaviPopup->EndPopupMode(FloatWinPopupEndFlags::CloseAll);
     528           0 : }
     529             : 
     530           0 : void  SwScrollNaviToolBox::RequestHelp( const HelpEvent& rHEvt )
     531             : {
     532           0 :     SetItemText(NID_NEXT, SwScrollNaviPopup::GetQuickHelpText(true));
     533           0 :     SetItemText(NID_PREV, SwScrollNaviPopup::GetQuickHelpText(false));
     534           0 :     ToolBox::RequestHelp( rHEvt );
     535           0 : }
     536             : 
     537           0 : OUString SwScrollNaviPopup::GetQuickHelpText(bool bNext)
     538             : {
     539           0 :     sal_uInt16 nResId = STR_IMGBTN_START;
     540           0 :     nResId += SwView::GetMoveType() - NID_START;
     541           0 :     if(!bNext)
     542           0 :         nResId += NID_COUNT;
     543           0 :     return SW_RESSTR(nResId);
     544             : }
     545             : 
     546           0 : void SwHlpImageButton::RequestHelp( const HelpEvent& rHEvt )
     547             : {
     548             : 
     549           0 :     SetQuickHelpText(SwScrollNaviPopup::GetQuickHelpText(!bUp));
     550             : 
     551           0 :     ImageButton::RequestHelp(rHEvt);
     552           0 : }
     553             : 
     554             : class SwZoomBox_Impl : public ComboBox
     555             : {
     556             :     sal_uInt16          nSlotId;
     557             :     bool            bRelease;
     558             :     uno::Reference< frame::XDispatchProvider > m_xDispatchProvider;
     559             : 
     560             : public:
     561             :     SwZoomBox_Impl(
     562             :         vcl::Window* pParent,
     563             :         sal_uInt16 nSlot,
     564             :         const Reference< XDispatchProvider >& rDispatchProvider );
     565             :     virtual ~SwZoomBox_Impl();
     566             : 
     567             : protected:
     568             :     virtual void    Select() SAL_OVERRIDE;
     569             :     virtual bool    Notify( NotifyEvent& rNEvt ) SAL_OVERRIDE;
     570             : 
     571             :     void ReleaseFocus();
     572             : 
     573             : };
     574             : 
     575           0 : SwZoomBox_Impl::SwZoomBox_Impl(
     576             :     vcl::Window* pParent,
     577             :     sal_uInt16 nSlot,
     578             :     const Reference< XDispatchProvider >& rDispatchProvider ):
     579             :     ComboBox( pParent, SW_RES(RID_PVIEW_ZOOM_LB)),
     580             :     nSlotId(nSlot),
     581             :     bRelease(true),
     582           0 :     m_xDispatchProvider( rDispatchProvider )
     583             : {
     584           0 :     EnableAutocomplete( false );
     585             :     sal_uInt16 aZoomValues[] =
     586             :     { RID_SVXSTR_ZOOM_25 , RID_SVXSTR_ZOOM_50 ,
     587             :       RID_SVXSTR_ZOOM_75 , RID_SVXSTR_ZOOM_100 ,
     588             :       RID_SVXSTR_ZOOM_150 , RID_SVXSTR_ZOOM_200 ,
     589             :       RID_SVXSTR_ZOOM_WHOLE_PAGE, RID_SVXSTR_ZOOM_PAGE_WIDTH ,
     590           0 :       RID_SVXSTR_ZOOM_OPTIMAL_VIEW };
     591           0 :     for(sal_uInt16 i = 0; i < ZOOM_ENTRIES ; i++)
     592             :     {
     593           0 :         OUString sEntry = SVX_RESSTR( aZoomValues[i] );
     594           0 :         InsertEntry(sEntry);
     595           0 :     }
     596             : 
     597           0 : }
     598             : 
     599           0 : SwZoomBox_Impl::~SwZoomBox_Impl()
     600           0 : {}
     601             : 
     602           0 : void    SwZoomBox_Impl::Select()
     603             : {
     604           0 :     if ( !IsTravelSelect() )
     605             :     {
     606           0 :         OUString sEntry(comphelper::string::remove(GetText(), '%'));
     607           0 :         SvxZoomItem aZoom(SvxZoomType::PERCENT,100);
     608           0 :         if(sEntry == SVX_RESSTR( RID_SVXSTR_ZOOM_PAGE_WIDTH ) )
     609           0 :             aZoom.SetType(SvxZoomType::PAGEWIDTH);
     610           0 :         else if(sEntry == SVX_RESSTR( RID_SVXSTR_ZOOM_OPTIMAL_VIEW ) )
     611           0 :             aZoom.SetType(SvxZoomType::OPTIMAL);
     612           0 :         else if(sEntry == SVX_RESSTR( RID_SVXSTR_ZOOM_WHOLE_PAGE) )
     613           0 :             aZoom.SetType(SvxZoomType::WHOLEPAGE);
     614             :         else
     615             :         {
     616           0 :             sal_uInt16 nZoom = (sal_uInt16)sEntry.toInt32();
     617           0 :             if(nZoom < MINZOOM)
     618           0 :                 nZoom = MINZOOM;
     619           0 :             if(nZoom > MAXZOOM)
     620           0 :                 nZoom = MAXZOOM;
     621           0 :             aZoom.SetValue(nZoom);
     622             :         }
     623           0 :         if( FN_PREVIEW_ZOOM == nSlotId )
     624             :         {
     625           0 :             SfxObjectShell* pCurrentShell = SfxObjectShell::Current();
     626             : 
     627           0 :             pCurrentShell->GetDispatcher()->Execute(SID_ATTR_ZOOM, SfxCallMode::ASYNCHRON, &aZoom, 0L);
     628             :         }
     629           0 :         ReleaseFocus();
     630             :     }
     631           0 : }
     632             : 
     633           0 : bool SwZoomBox_Impl::Notify( NotifyEvent& rNEvt )
     634             : {
     635           0 :     bool bHandled = false;
     636             : 
     637           0 :     if ( rNEvt.GetType() == MouseNotifyEvent::KEYINPUT )
     638             :     {
     639           0 :         sal_uInt16 nCode = rNEvt.GetKeyEvent()->GetKeyCode().GetCode();
     640             : 
     641           0 :         switch ( nCode )
     642             :         {
     643             :             case KEY_RETURN:
     644             :             case KEY_TAB:
     645             :             {
     646           0 :                 if ( KEY_TAB == nCode )
     647           0 :                     bRelease = false;
     648             :                 else
     649           0 :                     bHandled = true;
     650           0 :                 Select();
     651           0 :                 break;
     652             :             }
     653             : 
     654             :             case KEY_ESCAPE:
     655           0 :                 SetText( GetSavedValue() );
     656           0 :                 ReleaseFocus();
     657           0 :                 break;
     658             :         }
     659             :     }
     660           0 :     else if ( MouseNotifyEvent::LOSEFOCUS == rNEvt.GetType() )
     661             :     {
     662           0 :         vcl::Window* pFocusWin = Application::GetFocusWindow();
     663           0 :         if ( !HasFocus() && GetSubEdit() != pFocusWin )
     664           0 :             SetText( GetSavedValue() );
     665             :     }
     666             : 
     667           0 :     return bHandled || ComboBox::Notify( rNEvt );
     668             : }
     669             : 
     670           0 : void SwZoomBox_Impl::ReleaseFocus()
     671             : {
     672           0 :     if ( !bRelease )
     673             :     {
     674           0 :         bRelease = true;
     675           0 :         return;
     676             :     }
     677           0 :     SfxViewShell* pCurSh = SfxViewShell::Current();
     678             : 
     679           0 :     if ( pCurSh )
     680             :     {
     681           0 :         vcl::Window* pShellWnd = pCurSh->GetWindow();
     682             : 
     683           0 :         if ( pShellWnd )
     684           0 :             pShellWnd->GrabFocus();
     685             :     }
     686             : }
     687             : 
     688          59 : SFX_IMPL_TOOLBOX_CONTROL( SwPreviewZoomControl, SfxUInt16Item);
     689             : 
     690           0 : SwPreviewZoomControl::SwPreviewZoomControl(
     691             :     sal_uInt16 nSlotId,
     692             :     sal_uInt16 nId,
     693             :     ToolBox& rTbx) :
     694           0 :     SfxToolBoxControl( nSlotId, nId, rTbx )
     695             : {
     696           0 : }
     697             : 
     698           0 : SwPreviewZoomControl::~SwPreviewZoomControl()
     699             : {
     700           0 : }
     701             : 
     702           0 : void SwPreviewZoomControl::StateChanged( sal_uInt16 /*nSID*/,
     703             :                                          SfxItemState eState,
     704             :                                          const SfxPoolItem* pState )
     705             : {
     706           0 :     sal_uInt16 nId = GetId();
     707           0 :     GetToolBox().EnableItem( nId, (GetItemState(pState) != SfxItemState::DISABLED) );
     708           0 :     SwZoomBox_Impl* pBox = static_cast<SwZoomBox_Impl*>(GetToolBox().GetItemWindow( GetId() ));
     709           0 :     if(SfxItemState::DEFAULT <= eState)
     710             :     {
     711           0 :         OUString sZoom(unicode::formatPercent(static_cast<const SfxUInt16Item*>(pState)->GetValue(),
     712           0 :             Application::GetSettings().GetUILanguageTag()));
     713           0 :         pBox->SetText(sZoom);
     714           0 :         pBox->SaveValue();
     715             :     }
     716           0 : }
     717             : 
     718           0 : VclPtr<vcl::Window> SwPreviewZoomControl::CreateItemWindow( vcl::Window *pParent )
     719             : {
     720           0 :     VclPtrInstance<SwZoomBox_Impl> pRet( pParent, GetSlotId(), Reference< XDispatchProvider >( m_xFrame->getController(), UNO_QUERY ));
     721           0 :     return pRet.get();
     722         177 : }
     723             : 
     724             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11