/************************************************************** * * 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. * *************************************************************/ #include "precompiled_svx.hxx" #include "SvxSBFontNameBox.hxx" #include #include #include #include #include #include const static sal_uInt16 MAX_MRU_FONTNAME_ENTRIES = 5; namespace svx { namespace sidebar { namespace { bool GetDocFontList_Impl( const FontList** ppFontList, SvxSBFontNameBox* pBox ) { bool bChanged = false; const SfxObjectShell* pDocSh = SfxObjectShell::Current(); SvxFontListItem* pFontListItem = NULL; if ( pDocSh ) pFontListItem = (SvxFontListItem*)pDocSh->GetItem( SID_ATTR_CHAR_FONTLIST ); if ( pFontListItem ) { const FontList* pNewFontList = pFontListItem->GetFontList(); DBG_ASSERT( pNewFontList, "Doc-FontList not available!" ); if ( !*ppFontList ) { *ppFontList = pNewFontList; bChanged = true; } else { bChanged = ( *ppFontList != pNewFontList ); if( !bChanged && pBox!=NULL ) bChanged = ( pBox->GetListCount() != pNewFontList->GetFontNameCount() ); HACK(vergleich ist unvollstaendig) if ( bChanged ) *ppFontList = pNewFontList; } if ( pBox ) pBox->Enable(); } else if ( pBox ) pBox->Disable(); // in die FontBox ggf. auch die neue Liste f"ullen if ( pBox && bChanged ) { if ( *ppFontList ) pBox->Fill( *ppFontList ); else pBox->Clear(); } return bChanged; } } SvxSBFontNameBox::SvxSBFontNameBox( Window* pParent, const ResId& rResId ) : FontNameBox ( pParent, rResId ) , pFontList ( NULL ) , nFtCount ( 0 ) , bInput(false) , pBindings(NULL) { EnableControls_Impl(); // StartListening( *SFX_APP() ); } void SvxSBFontNameBox::EnableControls_Impl() { SvtFontOptions aFontOpt; bool bEnable = aFontOpt.IsFontHistoryEnabled(); sal_uInt16 nEntries = bEnable ? MAX_MRU_FONTNAME_ENTRIES : 0; if ( GetMaxMRUCount() != nEntries ) { // refill in the next GetFocus-Handler pFontList = NULL; Clear(); SetMaxMRUCount( nEntries ); } bEnable = aFontOpt.IsFontWYSIWYGEnabled(); EnableWYSIWYG( bEnable ); EnableSymbols( bEnable ); } void SvxSBFontNameBox::FillList() { Selection aOldSel = GetSelection(); GetDocFontList_Impl( &pFontList, this ); aCurText = GetText(); SetSelection( aOldSel ); } long SvxSBFontNameBox::PreNotify( NotifyEvent& rNEvt ) { const sal_uInt16 nType (rNEvt.GetType()); if ( EVENT_MOUSEBUTTONDOWN == nType || EVENT_GETFOCUS == nType ) FillList(); return FontNameBox::PreNotify( rNEvt ); } //<GetKeyCode().GetCode()); if( nCode == KEY_RETURN) { bHandle = 1; Select(); } } return bHandle ? bHandle : FontNameBox::Notify( rNEvt ); } void SvxSBFontNameBox::Select() { FontNameBox::Select(); if ( !IsTravelSelect() ) { FillList(); FontInfo aInfo( pFontList->Get( GetText(),WEIGHT_NORMAL, ITALIC_NORMAL ) );//meWeight, meItalic SvxFontItem aFontItem( aInfo.GetFamily(), aInfo.GetName(), aInfo.GetStyleName(), aInfo.GetPitch(), aInfo.GetCharSet(), SID_ATTR_CHAR_FONT ); pBindings->GetDispatcher()->Execute( SID_ATTR_CHAR_FONT, SFX_CALLMODE_RECORD, &aFontItem, 0L ); pBindings->Invalidate(SID_ATTR_CHAR_FONT,true,false); } } void SvxSBFontNameBox::SetBindings(SfxBindings* pB) { pBindings = pB; } } } // end of namespace svx::sidebar