LCOV - code coverage report
Current view: top level - libreoffice/sw/source/ui/ribbar - workctrl.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 16 372 4.3 %
Date: 2012-12-27 Functions: 7 56 12.5 %
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 <svl/eitem.hxx>
      23             : #include <svx/htmlmode.hxx>
      24             : #include <sfx2/dispatch.hxx>
      25             : #include <sfx2/bindings.hxx>
      26             : #include <sfx2/imagemgr.hxx>
      27             : #include <swmodule.hxx>
      28             : #include <view.hxx>
      29             : #include <initui.hxx>
      30             : #include <viewopt.hxx>
      31             : #include <docsh.hxx>
      32             : #include <gloshdl.hxx>
      33             : #include <glosdoc.hxx>
      34             : #include <gloslst.hxx>
      35             : #include <workctrl.hxx>
      36             : #include <workctrl.hrc>
      37             : #include <cmdid.h>
      38             : #include <helpid.h>
      39             : #include <wrtsh.hxx>
      40             : #include <svl/imageitm.hxx>
      41             : #include <vcl/lstbox.hxx>
      42             : #include <rtl/ustring.hxx>
      43             : #include "swabstdlg.hxx"
      44             : #include <misc.hrc>
      45             : 
      46             : #include <vcl/svapp.hxx>
      47             : 
      48             : // Size Abpruefung
      49             : #define NAVI_ENTRIES 20
      50             : #if NAVI_ENTRIES != NID_COUNT
      51             : #error SwScrollNaviPopup-CTOR static Array falsche Size. Wurden neue IDs zugefuegt ??
      52             : #endif
      53             : 
      54             : using ::rtl::OUString;
      55             : using namespace ::com::sun::star;
      56             : using namespace ::com::sun::star::uno;
      57             : using namespace ::com::sun::star::beans;
      58             : using namespace ::com::sun::star::frame;
      59             : 
      60          20 : SFX_IMPL_TOOLBOX_CONTROL( SwTbxInsertCtrl, SfxImageItem);
      61          20 : SFX_IMPL_TOOLBOX_CONTROL( SwTbxAutoTextCtrl, SfxBoolItem );
      62             : 
      63           0 : SwTbxInsertCtrl::SwTbxInsertCtrl(
      64             :     sal_uInt16 nSlotId,
      65             :     sal_uInt16 nId,
      66             :     ToolBox& rTbx ) :
      67             :         SfxToolBoxControl( nSlotId, nId, rTbx ),
      68           0 :         nLastSlotId(FN_INSERT_CTRL == nSlotId ? FN_INSERT_TABLE : SID_INSERT_DIAGRAM)
      69             : {
      70           0 :     rTbx.SetItemBits( nId, TIB_DROPDOWN | rTbx.GetItemBits( nId ) );
      71           0 : }
      72             : 
      73           0 : SwTbxInsertCtrl::~SwTbxInsertCtrl()
      74             : {
      75           0 : }
      76             : 
      77           0 : void SAL_CALL SwTbxInsertCtrl::update() throw (uno::RuntimeException)
      78             : {
      79           0 :     ToolBox& rTbx = GetToolBox();
      80           0 :     rtl::OUString aSlotURL( RTL_CONSTASCII_USTRINGPARAM( "slot:" ));
      81           0 :     aSlotURL += rtl::OUString::valueOf( sal_Int32( nLastSlotId ));
      82           0 :     Image aImage = GetImage( m_xFrame, aSlotURL, hasBigImages() );
      83             : 
      84           0 :     rTbx.SetItemImage(GetId(), aImage);
      85           0 :     rTbx.Invalidate();
      86             : 
      87           0 :     SfxToolBoxControl::update();
      88           0 : }
      89             : 
      90           0 : void SwTbxInsertCtrl::StateChanged( sal_uInt16 /*nSID*/,
      91             :                                       SfxItemState eState,
      92             :                                       const SfxPoolItem* pState )
      93             : {
      94           0 :     sal_uInt16 nId = GetId();
      95           0 :     GetToolBox().EnableItem( nId, (GetItemState(pState) != SFX_ITEM_DISABLED) );
      96             : 
      97           0 :     if( eState == SFX_ITEM_AVAILABLE )
      98             :     {
      99           0 :         const SfxImageItem* pItem = PTR_CAST( SfxImageItem, pState );
     100           0 :         if(pItem)
     101             :         {
     102           0 :             nLastSlotId = pItem->GetValue();
     103           0 :             if( nLastSlotId )
     104           0 :                 nId = nLastSlotId;
     105             : 
     106           0 :             rtl::OUString aSlotURL( RTL_CONSTASCII_USTRINGPARAM( "slot:" ));
     107           0 :             aSlotURL += rtl::OUString::valueOf( sal_Int32( nId ));
     108           0 :             ToolBox& rBox = GetToolBox();
     109           0 :             Image aImage = GetImage( m_xFrame, aSlotURL, hasBigImages() );
     110           0 :             rBox.SetItemImage(GetId(), aImage);
     111           0 :             rBox.SetItemImageMirrorMode( GetId(), sal_False );
     112           0 :             rBox.SetItemImageAngle( GetId(), pItem->GetRotation() );
     113           0 :             rBox.SetItemImageMirrorMode( GetId(), pItem->IsMirrored() );
     114             :         }
     115             :     }
     116             : 
     117           0 : }
     118             : 
     119           0 : SfxPopupWindow* SwTbxInsertCtrl::CreatePopupWindow()
     120             : {
     121           0 :     if(GetSlotId() == FN_INSERT_CTRL)
     122             :     {
     123           0 :         OUString aToolBarResStr( RTL_CONSTASCII_USTRINGPARAM( "private:resource/toolbar/insertbar" ));
     124           0 :         createAndPositionSubToolBar( aToolBarResStr );
     125             :     }
     126             :     else /* FN_INSERT_OBJ_CTRL */
     127             :     {
     128           0 :         OUString aToolBarResStr( RTL_CONSTASCII_USTRINGPARAM( "private:resource/toolbar/insertobjectbar" ));
     129           0 :         createAndPositionSubToolBar( aToolBarResStr );
     130             :     }
     131           0 :     return NULL;
     132             : }
     133             : 
     134           0 : SfxPopupWindowType  SwTbxInsertCtrl::GetPopupWindowType() const
     135             : {
     136           0 :     return nLastSlotId ? SFX_POPUPWINDOW_ONTIMEOUT : SFX_POPUPWINDOW_ONCLICK;
     137             : }
     138             : 
     139             : 
     140           0 : void SwTbxInsertCtrl::Select( sal_Bool /*bMod1*/ )
     141             : {
     142           0 :     if( nLastSlotId )
     143             :     {
     144           0 :         SfxViewShell*   pCurSh( SfxViewShell::Current() );
     145           0 :         SfxDispatcher*  pDispatch( 0 );
     146             : 
     147           0 :         if ( pCurSh )
     148             :         {
     149           0 :             SfxViewFrame*   pViewFrame = pCurSh->GetViewFrame();
     150           0 :             if ( pViewFrame )
     151           0 :                 pDispatch = pViewFrame->GetDispatcher();
     152             :         }
     153             : 
     154           0 :         if ( pDispatch )
     155           0 :             pDispatch->Execute(nLastSlotId);
     156             :     }
     157           0 : }
     158             : 
     159           0 : SwTbxAutoTextCtrl::SwTbxAutoTextCtrl(
     160             :     sal_uInt16 nSlotId,
     161             :     sal_uInt16 nId,
     162             :     ToolBox& rTbx ) :
     163             :     SfxToolBoxControl( nSlotId, nId, rTbx ),
     164             :     pPopup(0),
     165           0 :     pView(0)
     166             : {
     167           0 :     rTbx.SetItemBits( nId, TIB_DROPDOWN | rTbx.GetItemBits( nId ) );
     168           0 : }
     169             : 
     170           0 : SwTbxAutoTextCtrl::~SwTbxAutoTextCtrl()
     171             : {
     172           0 :     DelPopup();
     173           0 : }
     174             : 
     175           0 : SfxPopupWindow* SwTbxAutoTextCtrl::CreatePopupWindow()
     176             : {
     177           0 :     pView = ::GetActiveView();
     178           0 :     if(pView && !pView->GetDocShell()->IsReadOnly() &&
     179           0 :        !pView->GetWrtShell().HasReadonlySel() )
     180             :     {
     181           0 :         ToolBox& rBox = GetToolBox();
     182             : 
     183           0 :         Rectangle aItemRect( rBox.GetItemRect( GetId() ) );
     184           0 :         Point aPt(rBox.OutputToScreenPixel(aItemRect.TopLeft()));
     185           0 :         aPt.X() += aItemRect.GetWidth()/2;
     186           0 :         aPt.Y() += aItemRect.GetHeight()/2;
     187           0 :         if(pView)
     188             :         {
     189           0 :             Link aLnk = LINK(this, SwTbxAutoTextCtrl, PopupHdl);
     190             : 
     191           0 :             if (GetSlotId() == FN_INSERT_FIELD_CTRL)
     192             :             {
     193           0 :                 pPopup = new PopupMenu(SW_RES(RID_INSERT_FIELD_CTRL));
     194           0 :                 pPopup->SetSelectHdl(aLnk);
     195             : 
     196           0 :                 if (::GetHtmlMode(pView->GetDocShell()) & HTMLMODE_ON)
     197             :                 {
     198           0 :                     pPopup->RemoveItem(pPopup->GetItemPos(FN_INSERT_FLD_PGCOUNT));
     199           0 :                     pPopup->RemoveItem(pPopup->GetItemPos(FN_INSERT_FLD_TOPIC));
     200             :                 }
     201             :             }
     202             :             else
     203             :             {
     204           0 :                 pPopup = new PopupMenu;
     205           0 :                 SwGlossaryList* pGlossaryList = ::GetGlossaryList();
     206           0 :                 sal_uInt16 nGroupCount = pGlossaryList->GetGroupCount();
     207           0 :                 for(sal_uInt16 i = 1; i <= nGroupCount; i++)
     208             :                 {
     209             :                     // Gruppenname mit Pfad-Extension besorgen
     210           0 :                     String sTitle;
     211           0 :                     String sGroupName = pGlossaryList->GetGroupName(i - 1, sal_False, &sTitle);
     212           0 :                     sal_uInt16 nBlockCount = pGlossaryList->GetBlockCount(i -1);
     213           0 :                     if(nBlockCount)
     214             :                     {
     215           0 :                         sal_uInt16 nIndex = 100 * (i);
     216             :                         // aber ohne extension einfuegen
     217           0 :                         pPopup->InsertItem( i, sTitle);//sGroupName.GetToken(0, GLOS_DELIM));
     218           0 :                         PopupMenu* pSub = new PopupMenu;
     219           0 :                         pSub->SetSelectHdl(aLnk);
     220           0 :                         pPopup->SetPopupMenu(i, pSub);
     221           0 :                         for(sal_uInt16 j = 0; j < nBlockCount; j++)
     222             :                         {
     223           0 :                             String sEntry;
     224           0 :                             String sLongName(pGlossaryList->GetBlockName(i - 1, j, sEntry));
     225           0 :                             sEntry.AppendAscii(" - ");
     226           0 :                             sEntry += sLongName;
     227           0 :                             pSub->InsertItem(++nIndex, sEntry);
     228           0 :                         }
     229             :                     }
     230           0 :                 }
     231             :             }
     232             :         }
     233           0 :         ToolBox* pToolBox = &GetToolBox();
     234           0 :         sal_uInt16 nId = GetId();
     235           0 :         pToolBox->SetItemDown( nId, sal_True );
     236             : 
     237           0 :         pPopup->Execute( pToolBox, pToolBox->GetItemRect( nId ),
     238           0 :             (pToolBox->GetAlign() == WINDOWALIGN_TOP || pToolBox->GetAlign() == WINDOWALIGN_BOTTOM) ?
     239           0 :                 POPUPMENU_EXECUTE_DOWN : POPUPMENU_EXECUTE_RIGHT );
     240             : 
     241           0 :         pToolBox->SetItemDown( nId, sal_False );
     242             :     }
     243           0 :     GetToolBox().EndSelection();
     244           0 :     DelPopup();
     245           0 :     return 0;
     246             : 
     247             : }
     248             : 
     249             : 
     250           0 : SfxPopupWindowType SwTbxAutoTextCtrl::GetPopupWindowType() const
     251             : {
     252           0 :     return SFX_POPUPWINDOW_ONTIMEOUT;
     253             : }
     254             : 
     255           0 : void SwTbxAutoTextCtrl::StateChanged( sal_uInt16 nSID,
     256             :                                               SfxItemState eState,
     257             :                                               const SfxPoolItem* pState )
     258             : {
     259           0 :     GetToolBox().EnableItem( GetId(), (GetItemState(pState) != SFX_ITEM_DISABLED) );
     260           0 :     if(FN_INSERT_FIELD_CTRL == nSID && eState >= SFX_ITEM_DEFAULT)
     261             :     {
     262           0 :         GetToolBox().CheckItem( GetId(), ((SfxBoolItem*)pState)->GetValue() );
     263             :     }
     264           0 : }
     265             : 
     266           0 : IMPL_LINK(SwTbxAutoTextCtrl, PopupHdl, PopupMenu*, pMenu)
     267             : {
     268           0 :     sal_uInt16 nId = pMenu->GetCurItemId();
     269             : 
     270           0 :     if ( GetSlotId() == FN_INSERT_FIELD_CTRL)
     271             :     {
     272           0 :         Sequence< PropertyValue > aArgs;
     273           0 :         const char* pChar = 0;
     274           0 :         switch(nId)
     275             :         {
     276             :             case FN_INSERT_FLD_DATE:
     277           0 :                 pChar = ".uno:InsertDateField";
     278           0 :             break;
     279             :             case FN_INSERT_FLD_TIME:
     280           0 :                 pChar = ".uno:InsertTimeField";
     281           0 :             break;
     282             :             case FN_INSERT_FLD_PGNUMBER:
     283           0 :                 pChar = ".uno:InsertPageNumberField";
     284           0 :             break;
     285             :             case FN_INSERT_FLD_PGCOUNT:
     286           0 :                 pChar = ".uno:InsertPageCountField";
     287           0 :             break;
     288             :             case FN_INSERT_FLD_TOPIC:
     289           0 :                 pChar = ".uno:InsertTopicField";
     290           0 :             break;
     291             :             case FN_INSERT_FLD_TITLE:
     292           0 :                 pChar = ".uno:InsertTitleField";
     293           0 :             break;
     294             :             case FN_INSERT_FLD_AUTHOR:
     295           0 :                 pChar = ".uno:InsertAuthorField";
     296           0 :             break;
     297             :             default:
     298           0 :                 pChar = ".uno:InsertFieldCtrl";
     299             :         }
     300           0 :         Dispatch( rtl::OUString::createFromAscii( pChar ),aArgs );
     301             :     }
     302             :     else
     303             :     {
     304           0 :         sal_uInt16 nBlock = nId / 100;
     305             : 
     306           0 :         SwGlossaryList* pGlossaryList = ::GetGlossaryList();
     307           0 :         String sShortName;
     308           0 :         String sGroup = pGlossaryList->GetGroupName(nBlock - 1, sal_False);
     309           0 :         String sLongName(pGlossaryList->GetBlockName(nBlock - 1, nId - (100 * nBlock) - 1, sShortName));
     310             : 
     311           0 :         SwGlossaryHdl* pGlosHdl = pView->GetGlosHdl();
     312           0 :         SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
     313             :         OSL_ENSURE(pFact, "Dialogdiet fail!");
     314           0 :         ::GlossarySetActGroup fnSetActGroup = pFact->SetGlossaryActGroupFunc( DLG_RENAME_GLOS );
     315           0 :         if ( fnSetActGroup )
     316           0 :             (*fnSetActGroup)( sGroup );
     317           0 :         pGlosHdl->SetCurGroup(sGroup, sal_True);
     318           0 :         pGlosHdl->InsertGlossary(sShortName);
     319             :     }
     320           0 :     return 0;
     321             : }
     322             : 
     323           0 : void SwTbxAutoTextCtrl::DelPopup()
     324             : {
     325           0 :     if(pPopup)
     326             :     {
     327           0 :         if (GetSlotId() != FN_INSERT_FIELD_CTRL)
     328             :         {
     329           0 :             for( sal_uInt16 i = 0; i < pPopup->GetItemCount(); i ++ )
     330             :             {
     331           0 :                 PopupMenu* pSubPopup = pPopup->GetPopupMenu(pPopup->GetItemId(i));
     332           0 :                 delete pSubPopup;
     333             :             }
     334             :         }
     335           0 :         delete pPopup;
     336           0 :         pPopup = 0;
     337             :     }
     338           0 : }
     339             : 
     340             : /* Navigations-Popup */
     341             : // determine the order of the toolbox items
     342             : static sal_uInt16 aNavigationInsertIds[ NAVI_ENTRIES ] =
     343             : {
     344             :     // -- first line
     345             :     NID_TBL,
     346             :     NID_FRM,
     347             :     NID_GRF,
     348             :     NID_OLE,
     349             :     NID_PGE,
     350             :     NID_OUTL,
     351             :     NID_MARK,
     352             :     NID_DRW,
     353             :     NID_CTRL,
     354             :     NID_PREV,
     355             :     // -- second line
     356             :     NID_REG,
     357             :     NID_BKM,
     358             :     NID_SEL,
     359             :     NID_FTN,
     360             :     NID_POSTIT,
     361             :     NID_SRCH_REP,
     362             :     NID_INDEX_ENTRY,
     363             :     NID_TABLE_FORMULA,
     364             :     NID_TABLE_FORMULA_ERROR,
     365             :     NID_NEXT
     366             : };
     367             : static const char* aNavigationHelpIds[ NAVI_ENTRIES ] =
     368             : {
     369             :     // -- first line
     370             :     HID_NID_TBL,
     371             :     HID_NID_FRM,
     372             :     HID_NID_GRF,
     373             :     HID_NID_OLE,
     374             :     HID_NID_PGE,
     375             :     HID_NID_OUTL,
     376             :     HID_NID_MARK,
     377             :     HID_NID_DRW,
     378             :     HID_NID_CTRL,
     379             :     HID_NID_PREV,
     380             :     // -- second line
     381             :     HID_NID_REG,
     382             :     HID_NID_BKM,
     383             :     HID_NID_SEL,
     384             :     HID_NID_FTN,
     385             :     HID_NID_POSTIT,
     386             :     HID_NID_SRCH_REP,
     387             :     HID_NID_INDEX_ENTRY,
     388             :     HID_NID_TABLE_FORMULA,
     389             :     HID_NID_TABLE_FORMULA_ERROR,
     390             :     HID_NID_NEXT
     391             : };
     392             : 
     393           0 : SwScrollNaviPopup::SwScrollNaviPopup( sal_uInt16 nId, const Reference< XFrame >& rFrame )
     394             :     : SfxPopupWindow(nId, rFrame, SW_RES(RID_SCROLL_NAVIGATION_WIN) ),
     395             :     aToolBox(this, 0),
     396             :     aSeparator(this, SW_RES(FL_SEP)),
     397             :     aInfoField(this, SW_RES(FI_INFO)),
     398           0 :     aIList(SW_RES(IL_VALUES))
     399             : {
     400             :     sal_uInt16 i;
     401             : 
     402           0 :     aToolBox.SetHelpId(HID_NAVI_VS);
     403           0 :     aToolBox.SetLineCount( 2 );
     404           0 :     aToolBox.SetOutStyle(TOOLBOX_STYLE_FLAT);
     405           0 :     for( i = 0; i < NID_COUNT; i++)
     406             :     {
     407           0 :         sal_uInt16 nNaviId = aNavigationInsertIds[i];
     408           0 :         String sText;
     409           0 :         ToolBoxItemBits  nTbxBits = 0;
     410           0 :         if((NID_PREV != nNaviId) && (NID_NEXT != nNaviId))
     411             :         {
     412             :             // -2, there's no string for Next/Prev
     413           0 :             sal_uInt16 nResStr = ST_TBL - 2 + nNaviId - NID_START;
     414           0 :             sText = String(SW_RES(nResStr));
     415           0 :             nTbxBits = TIB_CHECKABLE;
     416             :         }
     417           0 :         aToolBox.InsertItem(nNaviId, sText, nTbxBits);
     418           0 :         aToolBox.SetHelpId( nNaviId, aNavigationHelpIds[i] );
     419           0 :     }
     420           0 :     ApplyImageList();
     421           0 :     aToolBox.InsertBreak(NID_COUNT/2);
     422             :     // don't call it before!
     423           0 :     FreeResource();
     424             : 
     425             :     // these are global strings
     426           0 :     for( i = 0; i < 2 * NID_COUNT; i++)
     427             :     {
     428           0 :         sQuickHelp[i] = String(SW_RES(STR_IMGBTN_START + i));
     429             :     }
     430             : 
     431           0 :     Size aImgSize = aIList.GetImageSize();
     432           0 :     aImgSize.Width() += 5;
     433           0 :     aImgSize.Height() += 5;
     434           0 :     Size aSz = aToolBox.CalcWindowSizePixel(2);
     435           0 :     aToolBox.SetPosSizePixel( Point(), aSz );
     436           0 :     sal_uInt16 nItemId = SwView::GetMoveType();
     437           0 :     aInfoField.SetText(aToolBox.GetItemText(nItemId));
     438           0 :     aToolBox.CheckItem( nItemId, sal_True );
     439           0 :     Size aFTSize(aInfoField.GetSizePixel());
     440           0 :     Size aSepSize(aSeparator.GetSizePixel());
     441           0 :     aSepSize.Width() = aSz.Width();
     442             : 
     443           0 :     aSz.Height() += aFTSize.Height() + aSepSize.Height();
     444             :     aInfoField.SetPosSizePixel(
     445           0 :         Point(0, aSz.Height() - aFTSize.Height()), Size(aSz.Width(), aFTSize.Height()));
     446             : 
     447           0 :     aSeparator.SetSizePixel(aSepSize);
     448           0 :     aSeparator.SetPosPixel(Point(0, aSz.Height() - aFTSize.Height() - aSepSize.Height()));
     449             : 
     450           0 :     SetOutputSizePixel(aSz);
     451           0 :     aToolBox.SetSelectHdl(LINK(this, SwScrollNaviPopup, SelectHdl));
     452           0 :     aToolBox.StartSelection();
     453           0 :     aToolBox.Show();
     454           0 : }
     455             : 
     456           0 : SwScrollNaviPopup::~SwScrollNaviPopup()
     457             : {
     458           0 : }
     459             : 
     460           0 : void SwScrollNaviPopup::DataChanged( const DataChangedEvent& rDCEvt )
     461             : {
     462           0 :     if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) &&
     463           0 :          (rDCEvt.GetFlags() & SETTINGS_STYLE) )
     464           0 :             ApplyImageList();
     465             : 
     466           0 :     Window::DataChanged( rDCEvt );
     467           0 : }
     468             : 
     469           0 : void SwScrollNaviPopup::ApplyImageList()
     470             : {
     471           0 :     ImageList& rImgLst = aIList;
     472           0 :     for(sal_uInt16 i = 0; i < NID_COUNT; i++)
     473             :     {
     474           0 :         sal_uInt16 nNaviId = aNavigationInsertIds[i];
     475           0 :         aToolBox.SetItemImage(nNaviId, rImgLst.GetImage(nNaviId));
     476             :     }
     477           0 : }
     478             : 
     479           0 : SfxPopupWindow* SwScrollNaviPopup::Clone() const
     480             : {
     481           0 :     return new SwScrollNaviPopup( GetId(), GetFrame() );
     482             : }
     483             : 
     484           0 : IMPL_LINK(SwScrollNaviPopup, SelectHdl, ToolBox*, pSet)
     485             : {
     486           0 :     sal_uInt16 nSet = pSet->GetCurItemId();
     487           0 :     if( nSet != NID_PREV && nSet != NID_NEXT )
     488             :     {
     489           0 :         SwView::SetMoveType(nSet);
     490           0 :         aToolBox.SetItemText(NID_NEXT, sQuickHelp[nSet - NID_START]);
     491           0 :         aToolBox.SetItemText(NID_PREV, sQuickHelp[nSet - NID_START + NID_COUNT]);
     492           0 :         aInfoField.SetText(aToolBox.GetItemText(nSet));
     493             :         //check the current button only
     494           0 :         for(sal_uInt16 i = 0; i < NID_COUNT; i++)
     495             :         {
     496           0 :             sal_uInt16 nItemId = aToolBox.GetItemId( i );
     497           0 :             aToolBox.CheckItem( nItemId, nItemId == nSet );
     498           0 :         }
     499             :     }
     500             :     else
     501             :     {
     502           0 :         SfxBoolItem aNext(FN_SCROLL_NEXT_PREV, NID_NEXT == nSet);
     503           0 :         Any a;
     504           0 :         Sequence< PropertyValue > aArgs( 1 );
     505           0 :         aArgs[0].Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ScrollNextPrev" ));
     506           0 :         aNext.QueryValue( a );
     507           0 :         aArgs[0].Value = a;
     508           0 :         SfxToolBoxControl::Dispatch( Reference< XDispatchProvider >( GetFrame()->getController(), UNO_QUERY ),
     509             :                                      rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:ScrollNextPrev" )),
     510           0 :                                      aArgs );
     511             :     }
     512           0 :     return 0;
     513             : }
     514             : 
     515           0 : void SwScrollNaviToolBox::MouseButtonUp( const MouseEvent& rMEvt )
     516             : {
     517           0 :     ToolBox::MouseButtonUp(rMEvt);
     518           0 :     if ( ((SwScrollNaviPopup*)GetParent())->IsInPopupMode() )
     519           0 :         ((SwScrollNaviPopup*)GetParent())->EndPopupMode( FLOATWIN_POPUPMODEEND_CLOSEALL );
     520           0 : }
     521             : 
     522           0 : void  SwScrollNaviToolBox::RequestHelp( const HelpEvent& rHEvt )
     523             : {
     524           0 :     SetItemText(NID_NEXT, SwScrollNaviPopup::GetQuickHelpText(sal_True));
     525           0 :     SetItemText(NID_PREV, SwScrollNaviPopup::GetQuickHelpText(sal_False));
     526           0 :     ToolBox::RequestHelp( rHEvt );
     527             : 
     528           0 : }
     529             : 
     530           0 : String  SwScrollNaviPopup::GetQuickHelpText(sal_Bool bNext)
     531             : {
     532           0 :     sal_uInt16 nResId = STR_IMGBTN_START;
     533           0 :     nResId += SwView::GetMoveType() - NID_START;
     534           0 :     if(!bNext)
     535           0 :         nResId += NID_COUNT;
     536           0 :     return String(SW_RES(nResId));
     537             : }
     538             : 
     539           0 : void SwNaviImageButton::Click()
     540             : {
     541             :     pPopup = new
     542             :         SwScrollNaviPopup( FN_SCROLL_NAVIGATION,
     543           0 :                            m_xFrame );
     544           0 :     Point aPos = OutputToScreenPixel(Point(0,0));
     545           0 :     Rectangle aRect(aPos, GetSizePixel());
     546           0 :     SetPopupWindow( pPopup );
     547           0 :     pPopup->StartPopupMode(aRect, FLOATWIN_POPUPMODE_LEFT|FLOATWIN_POPUPMODE_ALLOWTEAROFF);
     548           0 : }
     549             : 
     550             : //--------------------------------------------------------------------
     551             : 
     552           0 : void SwNaviImageButton::SetPopupWindow( SfxPopupWindow* pWindow )
     553             : {
     554           0 :     pPopupWindow = pWindow;
     555           0 :     pPopupWindow->SetPopupModeEndHdl( LINK( this, SwNaviImageButton, PopupModeEndHdl ));
     556           0 :     pPopupWindow->SetDeleteLink_Impl( LINK( this, SwNaviImageButton, ClosePopupWindow ));
     557           0 : }
     558             : 
     559             : //--------------------------------------------------------------------
     560             : 
     561           0 : IMPL_LINK_NOARG(SwNaviImageButton, PopupModeEndHdl)
     562             : {
     563           0 :     if ( pPopupWindow->IsVisible() )
     564             :     {
     565             :         // Replace floating window with popup window and destroy
     566             :         // floating window instance.
     567           0 :         delete pFloatingWindow;
     568           0 :         pFloatingWindow = pPopupWindow;
     569           0 :         pPopupWindow    = 0;
     570             :     }
     571             :     else
     572             :     {
     573             :         // Popup window has been closed by the user. No replacement, instance
     574             :         // will destroy itself.
     575           0 :         pPopupWindow = 0;
     576             :     }
     577             : 
     578           0 :     return 1;
     579             : }
     580             : 
     581             : //--------------------------------------------------------------------
     582           0 : IMPL_LINK( SwNaviImageButton, ClosePopupWindow, SfxPopupWindow *, pWindow )
     583             : {
     584           0 :     if ( pWindow == pFloatingWindow )
     585           0 :         pFloatingWindow = 0;
     586             :     else
     587           0 :         pPopupWindow = 0;
     588             : 
     589           0 :     return 1;
     590             : }
     591             : 
     592           0 : void SwHlpImageButton::RequestHelp( const HelpEvent& rHEvt )
     593             : {
     594             : 
     595           0 :     SetQuickHelpText(SwScrollNaviPopup::GetQuickHelpText(!bUp));
     596             : 
     597           0 :     ImageButton::RequestHelp(rHEvt);
     598           0 : }
     599             : 
     600         236 : SwNaviImageButton::SwNaviImageButton(
     601             :     Window* pParent,
     602             :     const Reference< XFrame >& rFrame ) :
     603             :     ImageButton(pParent, SW_RES(BTN_NAVI)),
     604             :         pPopup(0),
     605             :         aImage(SW_RES(IMG_BTN)),
     606             :         sQuickText(SW_RES(ST_QUICK)),
     607             :         pPopupWindow(0),
     608             :         pFloatingWindow(0),
     609         236 :         m_xFrame( rFrame )
     610             : {
     611         236 :     FreeResource();
     612         236 :     SetStyle(GetStyle()|WB_NOPOINTERFOCUS);
     613         236 :     SetQuickHelpText(sQuickText);
     614         236 :     SetModeImage( aImage );
     615         236 : }
     616             : 
     617          92 : void SwNaviImageButton::DataChanged( const DataChangedEvent& rDCEvt )
     618             : {
     619         184 :     if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) &&
     620          92 :          (rDCEvt.GetFlags() & SETTINGS_STYLE) )
     621           0 :             SetModeImage( aImage );
     622             : 
     623          92 :     Window::DataChanged( rDCEvt );
     624          92 : }
     625             : 
     626             : class SwZoomBox_Impl : public ComboBox
     627             : {
     628             :     sal_uInt16          nSlotId;
     629             :     sal_Bool            bRelease;
     630             :     uno::Reference< frame::XDispatchProvider > m_xDispatchProvider;
     631             : 
     632             : public:
     633             :     SwZoomBox_Impl(
     634             :         Window* pParent,
     635             :         sal_uInt16 nSlot,
     636             :         const Reference< XDispatchProvider >& rDispatchProvider );
     637             :     ~SwZoomBox_Impl();
     638             : 
     639             : protected:
     640             :     virtual void    Select();
     641             :     virtual long    Notify( NotifyEvent& rNEvt );
     642             : 
     643             :     void ReleaseFocus();
     644             : 
     645             : };
     646             : 
     647           0 : SwZoomBox_Impl::SwZoomBox_Impl(
     648             :     Window* pParent,
     649             :     sal_uInt16 nSlot,
     650             :     const Reference< XDispatchProvider >& rDispatchProvider ):
     651             :     ComboBox( pParent, SW_RES(RID_PVIEW_ZOOM_LB)),
     652             :     nSlotId(nSlot),
     653             :     bRelease(sal_True),
     654           0 :     m_xDispatchProvider( rDispatchProvider )
     655             : {
     656           0 :     EnableAutocomplete( sal_False );
     657             :     sal_uInt16 aZoomValues[] =
     658           0 :     {   25, 50, 75, 100, 150, 200 };
     659           0 :     for(sal_uInt16 i = 0; i < sizeof(aZoomValues)/sizeof(sal_uInt16); i++)
     660             :     {
     661           0 :         String sEntry = String::CreateFromInt32(aZoomValues[i]);
     662           0 :         sEntry += '%';
     663           0 :         InsertEntry(sEntry);
     664           0 :     }
     665           0 : }
     666             : 
     667           0 : SwZoomBox_Impl::~SwZoomBox_Impl()
     668           0 : {}
     669             : 
     670           0 : void    SwZoomBox_Impl::Select()
     671             : {
     672           0 :     if ( !IsTravelSelect() )
     673             :     {
     674           0 :         String sEntry(comphelper::string::remove(GetText(), '%'));
     675           0 :         sal_uInt16 nZoom = (sal_uInt16)sEntry.ToInt32();
     676           0 :         if(nZoom < MINZOOM)
     677           0 :             nZoom = MINZOOM;
     678           0 :         if(nZoom > MAXZOOM)
     679           0 :             nZoom = MAXZOOM;
     680             : 
     681           0 :         SfxUInt16Item aItem( nSlotId, nZoom );
     682           0 :         if ( FN_PREVIEW_ZOOM == nSlotId )
     683             :         {
     684           0 :             Any a;
     685           0 :             Sequence< PropertyValue > aArgs( 1 );
     686           0 :             aArgs[0].Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "PreviewZoom" ));
     687           0 :             aItem.QueryValue( a );
     688           0 :             aArgs[0].Value = a;
     689             :             SfxToolBoxControl::Dispatch(
     690             :                 m_xDispatchProvider,
     691             :                 rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:PreviewZoom" )),
     692           0 :                 aArgs );
     693             :         }
     694             : 
     695           0 :         ReleaseFocus();
     696             :     }
     697           0 : }
     698             : 
     699           0 : long SwZoomBox_Impl::Notify( NotifyEvent& rNEvt )
     700             : {
     701           0 :     long nHandled = 0;
     702             : 
     703           0 :     if ( rNEvt.GetType() == EVENT_KEYINPUT )
     704             :     {
     705           0 :         sal_uInt16 nCode = rNEvt.GetKeyEvent()->GetKeyCode().GetCode();
     706             : 
     707           0 :         switch ( nCode )
     708             :         {
     709             :             case KEY_RETURN:
     710             :             case KEY_TAB:
     711             :             {
     712           0 :                 if ( KEY_TAB == nCode )
     713           0 :                     bRelease = sal_False;
     714             :                 else
     715           0 :                     nHandled = 1;
     716           0 :                 Select();
     717           0 :                 break;
     718             :             }
     719             : 
     720             :             case KEY_ESCAPE:
     721           0 :                 SetText( GetSavedValue() );
     722           0 :                 ReleaseFocus();
     723           0 :                 break;
     724             :         }
     725             :     }
     726           0 :     else if ( EVENT_LOSEFOCUS == rNEvt.GetType() )
     727             :     {
     728           0 :         Window* pFocusWin = Application::GetFocusWindow();
     729           0 :         if ( !HasFocus() && GetSubEdit() != pFocusWin )
     730           0 :             SetText( GetSavedValue() );
     731             :     }
     732             : 
     733           0 :     return nHandled ? nHandled : ComboBox::Notify( rNEvt );
     734             : }
     735             : 
     736           0 : void SwZoomBox_Impl::ReleaseFocus()
     737             : {
     738           0 :     if ( !bRelease )
     739             :     {
     740           0 :         bRelease = sal_True;
     741           0 :         return;
     742             :     }
     743           0 :     SfxViewShell* pCurSh = SfxViewShell::Current();
     744             : 
     745           0 :     if ( pCurSh )
     746             :     {
     747           0 :         Window* pShellWnd = pCurSh->GetWindow();
     748             : 
     749           0 :         if ( pShellWnd )
     750           0 :             pShellWnd->GrabFocus();
     751             :     }
     752             : }
     753             : 
     754          10 : SFX_IMPL_TOOLBOX_CONTROL( SwPreviewZoomControl, SfxUInt16Item);
     755             : 
     756           0 : SwPreviewZoomControl::SwPreviewZoomControl(
     757             :     sal_uInt16 nSlotId,
     758             :     sal_uInt16 nId,
     759             :     ToolBox& rTbx) :
     760           0 :     SfxToolBoxControl( nSlotId, nId, rTbx )
     761             : {
     762           0 : }
     763             : 
     764           0 : SwPreviewZoomControl::~SwPreviewZoomControl()
     765             : {
     766           0 : }
     767             : 
     768           0 : void SwPreviewZoomControl::StateChanged( sal_uInt16 /*nSID*/,
     769             :                                          SfxItemState eState,
     770             :                                          const SfxPoolItem* pState )
     771             : {
     772           0 :     sal_uInt16 nId = GetId();
     773           0 :     GetToolBox().EnableItem( nId, (GetItemState(pState) != SFX_ITEM_DISABLED) );
     774           0 :     SwZoomBox_Impl* pBox = (SwZoomBox_Impl*)GetToolBox().GetItemWindow( GetId() );
     775           0 :     if(SFX_ITEM_AVAILABLE <= eState)
     776             :     {
     777           0 :         String sZoom(String::CreateFromInt32(((const SfxUInt16Item*)pState)->GetValue()));
     778           0 :         sZoom += '%';
     779           0 :         pBox->SetText(sZoom);
     780           0 :         pBox->SaveValue();
     781             :     }
     782           0 : }
     783             : 
     784           0 : Window* SwPreviewZoomControl::CreateItemWindow( Window *pParent )
     785             : {
     786           0 :     SwZoomBox_Impl* pRet = new SwZoomBox_Impl( pParent, GetSlotId(), Reference< XDispatchProvider >( m_xFrame->getController(), UNO_QUERY ));
     787           0 :     return pRet;
     788          30 : }
     789             : 
     790             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10