| /************************************************************** |
| * |
| * 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; |
| } |
| |
| |