Files
loongoffice/svx/source/stbctrls/zoomctrl.cxx
Chris Laplante 7b33dbb253 svx: Cleanup ASCII art and useless comments
Change-Id: I5399362056276f324fd43eda05d3f606dc6f8c71
Reviewed-on: https://gerrit.libreoffice.org/11011
Reviewed-by: Noel Grandin <noelgrandin@gmail.com>
Tested-by: Noel Grandin <noelgrandin@gmail.com>
2014-08-19 01:28:24 -05:00

214 lines
6.5 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#include <i18nutil/unicode.hxx>
#include <vcl/svapp.hxx>
#include <vcl/status.hxx>
#include <vcl/menu.hxx>
#include <vcl/settings.hxx>
#include <sfx2/dispatch.hxx>
#include <tools/urlobj.hxx>
#include <svx/dialogs.hrc>
#include <svx/zoomctrl.hxx>
#include <svx/zoomslideritem.hxx>
#include <sfx2/zoomitem.hxx>
#include "stbctrls.h"
#include <svx/dialmgr.hxx>
#include "modctrl_internal.hxx"
SFX_IMPL_STATUSBAR_CONTROL(SvxZoomStatusBarControl,SvxZoomItem);
class ZoomPopup_Impl : public PopupMenu
{
public:
ZoomPopup_Impl( sal_uInt16 nZ, sal_uInt16 nValueSet );
sal_uInt16 GetZoom() const { return nZoom; }
sal_uInt16 GetCurId() const { return nCurId; }
private:
sal_uInt16 nZoom;
sal_uInt16 nCurId;
virtual void Select() SAL_OVERRIDE;
};
ZoomPopup_Impl::ZoomPopup_Impl( sal_uInt16 nZ, sal_uInt16 nValueSet )
: PopupMenu(ResId(RID_SVXMNU_ZOOM, DIALOG_MGR()))
, nZoom(nZ)
, nCurId(0)
{
static const sal_uInt16 aTable[] =
{
SVX_ZOOM_ENABLE_50, ZOOM_50,
SVX_ZOOM_ENABLE_100, ZOOM_100,
SVX_ZOOM_ENABLE_150, ZOOM_150,
SVX_ZOOM_ENABLE_200, ZOOM_200,
SVX_ZOOM_ENABLE_OPTIMAL, ZOOM_OPTIMAL,
SVX_ZOOM_ENABLE_WHOLEPAGE, ZOOM_WHOLE_PAGE,
SVX_ZOOM_ENABLE_PAGEWIDTH, ZOOM_PAGE_WIDTH
};
for ( sal_uInt16 nPos = 0; nPos < SAL_N_ELEMENTS(aTable); nPos += 2 )
if ( ( aTable[nPos] != ( aTable[nPos] & nValueSet ) ) )
EnableItem( aTable[nPos+1], false );
}
void ZoomPopup_Impl::Select()
{
nCurId = GetCurItemId();
switch ( nCurId )
{
case ZOOM_200: nZoom = 200; break;
case ZOOM_150: nZoom = 150; break;
case ZOOM_100: nZoom = 100; break;
case ZOOM_75: nZoom = 75; break;
case ZOOM_50: nZoom = 50; break;
case ZOOM_OPTIMAL:
case ZOOM_PAGE_WIDTH:
case ZOOM_WHOLE_PAGE: nZoom = 0; break;
}
}
SvxZoomStatusBarControl::SvxZoomStatusBarControl( sal_uInt16 _nSlotId,
sal_uInt16 _nId,
StatusBar& rStb ) :
SfxStatusBarControl( _nSlotId, _nId, rStb ),
nZoom( 100 ),
nValueSet( SVX_ZOOM_ENABLE_ALL )
{
}
void SvxZoomStatusBarControl::StateChanged( sal_uInt16, SfxItemState eState,
const SfxPoolItem* pState )
{
if( SFX_ITEM_AVAILABLE != eState )
{
GetStatusBar().SetItemText( GetId(), "" );
nValueSet = 0;
}
else if ( pState->ISA( SfxUInt16Item) )
{
const SfxUInt16Item* pItem = (const SfxUInt16Item*)pState;
nZoom = pItem->GetValue();
OUString aStr(unicode::formatPercent(nZoom, Application::GetSettings().GetUILanguageTag()));
GetStatusBar().SetItemText( GetId(), aStr );
if ( pState->ISA(SvxZoomItem) )
{
nValueSet = ((const SvxZoomItem*)pState)->GetValueSet();
}
else
{
DBG_WARNING( "use SfxZoomItem for SID_ATTR_ZOOM" );
nValueSet = SVX_ZOOM_ENABLE_ALL;
}
}
}
void SvxZoomStatusBarControl::Paint( const UserDrawEvent& )
{
OUString aStr(unicode::formatPercent(nZoom, Application::GetSettings().GetUILanguageTag()));
GetStatusBar().SetItemText( GetId(), aStr );
}
void SvxZoomStatusBarControl::Command( const CommandEvent& rCEvt )
{
if ( COMMAND_CONTEXTMENU & rCEvt.GetCommand() && 0 != nValueSet )
{
CaptureMouse();
ZoomPopup_Impl aPop( nZoom, nValueSet );
StatusBar& rStatusbar = GetStatusBar();
if ( aPop.Execute( &rStatusbar, rCEvt.GetMousePosPixel() ) && ( nZoom != aPop.GetZoom() || !nZoom ) )
{
nZoom = aPop.GetZoom();
SvxZoomItem aZoom( SVX_ZOOM_PERCENT, nZoom, GetId() );
switch( aPop.GetCurId() )
{
case ZOOM_OPTIMAL: aZoom.SetType( SVX_ZOOM_OPTIMAL ); break;
case ZOOM_PAGE_WIDTH: aZoom.SetType( SVX_ZOOM_PAGEWIDTH ); break;
case ZOOM_WHOLE_PAGE: aZoom.SetType( SVX_ZOOM_WHOLEPAGE ); break;
}
::com::sun::star::uno::Any a;
INetURLObject aObj( m_aCommandURL );
::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > aArgs( 1 );
aArgs[0].Name = aObj.GetURLPath();
aZoom.QueryValue( a );
aArgs[0].Value = a;
execute( aArgs );
}
ReleaseMouse();
}
else
SfxStatusBarControl::Command( rCEvt );
}
SFX_IMPL_STATUSBAR_CONTROL(SvxZoomPageStatusBarControl,SfxVoidItem);
SvxZoomPageStatusBarControl::SvxZoomPageStatusBarControl(sal_uInt16 _nSlotId,
sal_uInt16 _nId, StatusBar& rStb)
: SfxStatusBarControl(_nSlotId, _nId, rStb)
, maImage(SVX_RES(RID_SVXBMP_ZOOM_PAGE))
{
GetStatusBar().SetQuickHelpText(GetId(), SVX_RESSTR(RID_SVXSTR_FIT_SLIDE));
}
void SvxZoomPageStatusBarControl::Paint(const UserDrawEvent& rUsrEvt)
{
OutputDevice* pDev = rUsrEvt.GetDevice();
Rectangle aRect = rUsrEvt.GetRect();
Point aPt = centerImage(aRect, maImage);
pDev->DrawImage(aPt, maImage);
}
bool SvxZoomPageStatusBarControl::MouseButtonDown(const MouseEvent&)
{
SvxZoomItem aZoom( SVX_ZOOM_WHOLEPAGE, 0, GetId() );
::com::sun::star::uno::Any a;
INetURLObject aObj( m_aCommandURL );
::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > aArgs( 1 );
aArgs[0].Name = aObj.GetURLPath();
aZoom.QueryValue( a );
aArgs[0].Value = a;
execute( aArgs );
return true;
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */