blob: 76e6c16576b517513e4afd522cfaf525868980c1 [file] [log] [blame]
/**************************************************************
*
* 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
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_svx.hxx"
#include <string> // HACK: prevent conflict between STLPORT and Workshop headern
#include <svl/itempool.hxx>
#include <svtools/stdmenu.hxx>
#include <svtools/ctrltool.hxx>
#include <sfx2/app.hxx>
#include <sfx2/objsh.hxx>
#include <sfx2/viewfrm.hxx>
#include <sfx2/dispatch.hxx>
#include <svx/fntszctl.hxx> //
#include <svx/dialogs.hrc>
#include <editeng/fhgtitem.hxx>
#include "editeng/fontitem.hxx"
#include "editeng/flstitem.hxx"
#include "svx/dlgutil.hxx"
#include <svx/dialmgr.hxx>
#define LOGIC OutputDevice::LogicToLogic
SFX_IMPL_MENU_CONTROL(SvxFontSizeMenuControl, SvxFontHeightItem);
//--------------------------------------------------------------------
/* [Beschreibung]
Select-Handler des Men"us; die aktuelle Fontgr"o\se
wird in einem SvxFontHeightItem verschickt.
*/
IMPL_LINK( SvxFontSizeMenuControl, MenuSelect, FontSizeMenu*, pMen )
{
SfxViewFrame* pFrm = SfxViewFrame::Current();
SfxShell* pSh = pFrm ? pFrm->GetDispatcher()->GetShell( 0 ) : NULL;
if ( !pSh )
return 0;
const SfxItemPool& rPool = pSh->GetPool();
sal_uInt16 nWhich = rPool.GetWhich( SID_ATTR_CHAR_FONTHEIGHT );
const SfxMapUnit eUnit = rPool.GetMetric( nWhich );
long nH = LOGIC( pMen->GetCurHeight(), MAP_POINT, (MapUnit)eUnit ) / 10;
SvxFontHeightItem aItem( nH, 100, GetId() );
GetBindings().GetDispatcher()->Execute( GetId(), SFX_CALLMODE_RECORD, &aItem, 0L );
return 1;
}
//--------------------------------------------------------------------
/* [Beschreibung]
Statusbenachrichtigung;
Ist die Funktionalit"at disabled, wird der entsprechende
Men"ueintrag im Parentmenu disabled, andernfalls wird er enabled.
die aktuelle Fontgr"o\se wird mit einer Checkmark versehen.
*/
void SvxFontSizeMenuControl::StateChanged(
sal_uInt16, SfxItemState eState, const SfxPoolItem* pState )
{
rParent.EnableItem( GetId(), SFX_ITEM_DISABLED != eState );
if ( SFX_ITEM_AVAILABLE == eState )
{
if ( pState->ISA(SvxFontHeightItem) )
{
const SvxFontHeightItem* pItem =
PTR_CAST( SvxFontHeightItem, pState );
long nVal = 0;
if ( pItem )
{
SfxViewFrame* pFrm = SfxViewFrame::Current();
SfxShell* pSh = pFrm ? pFrm->GetDispatcher()->GetShell( 0 )
: NULL;
if ( !pSh )
return;
const SfxItemPool& rPool = pSh->GetPool();
sal_uInt16 nWhich = rPool.GetWhich( SID_ATTR_CHAR_FONTHEIGHT );
const SfxMapUnit eUnit = rPool.GetMetric( nWhich );
long nH = pItem->GetHeight() * 10;
nVal = LOGIC( nH, (MapUnit)eUnit, MAP_POINT );
}
pMenu->SetCurHeight( nVal );
}
else if ( pState->ISA(SvxFontItem) )
{
const SvxFontItem* pItem = PTR_CAST( SvxFontItem, pState );
if ( pItem )
{
SfxObjectShell *pDoc = SfxObjectShell::Current();
if ( pDoc )
{
const SvxFontListItem* pFonts = (const SvxFontListItem*)
pDoc->GetItem( SID_ATTR_CHAR_FONTLIST );
const FontList* pList = pFonts ? pFonts->GetFontList(): 0;
if ( pList )
{
FontInfo aFntInf = pList->Get( pItem->GetFamilyName(),
pItem->GetStyleName() );
pMenu->Fill( aFntInf, pList );
}
// else manche Shells haben keine Fontliste (z.B. Image)
}
}
}
}
else
{
// irgendwie muss man ja das Men"u f"ullen
SfxObjectShell* pSh = SfxObjectShell::Current();
if ( pSh )
{
// daf"ur von der Shell eine Fontliste besorgen
const SvxFontListItem* pFonts =
(const SvxFontListItem*)pSh->GetItem( SID_ATTR_CHAR_FONTLIST );
const FontList* pList = pFonts ? pFonts->GetFontList(): NULL;
if ( pList )
pMenu->Fill( pList->GetFontName(0), pList );
}
}
}
//--------------------------------------------------------------------
/* [Beschreibung]
Ctor; setzt den Select-Handler am Men"u und tr"agt Men"u
in seinen Parent ein.
*/
SvxFontSizeMenuControl::SvxFontSizeMenuControl
(
sal_uInt16 _nId,
Menu& rMenu,
SfxBindings& rBindings
) :
SfxMenuControl( _nId, rBindings ),
pMenu ( new FontSizeMenu ),
rParent ( rMenu ),
aFontNameForwarder( SID_ATTR_CHAR_FONT, *this )
{
rMenu.SetPopupMenu( _nId, pMenu );
pMenu->SetSelectHdl( LINK( this, SvxFontSizeMenuControl, MenuSelect ) );
}
//--------------------------------------------------------------------
/* [Beschreibung]
Dtor; gibt das Men"u frei.
*/
SvxFontSizeMenuControl::~SvxFontSizeMenuControl()
{
delete pMenu;
}
//--------------------------------------------------------------------
/* [Beschreibung]
Gibt das Men"u zur"uck
*/
PopupMenu* SvxFontSizeMenuControl::GetPopup() const
{
return pMenu;
}