1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 #include "precompiled_svx.hxx" 23 24 #include "SvxSBFontNameBox.hxx" 25 26 #include <unotools/fontoptions.hxx> 27 #include <sfx2/objsh.hxx> 28 #include <sfx2/dispatch.hxx> 29 #include <editeng/flstitem.hxx> 30 #include <editeng/editids.hrc> 31 #include <editeng/fontitem.hxx> 32 33 34 const static sal_uInt16 MAX_MRU_FONTNAME_ENTRIES = 5; 35 36 37 namespace svx { namespace sidebar { 38 39 namespace { 40 bool GetDocFontList_Impl( const FontList** ppFontList, SvxSBFontNameBox* pBox ) 41 { 42 bool bChanged = false; 43 const SfxObjectShell* pDocSh = SfxObjectShell::Current(); 44 SvxFontListItem* pFontListItem = NULL; 45 46 if ( pDocSh ) 47 pFontListItem = 48 (SvxFontListItem*)pDocSh->GetItem( SID_ATTR_CHAR_FONTLIST ); 49 50 if ( pFontListItem ) 51 { 52 const FontList* pNewFontList = pFontListItem->GetFontList(); 53 DBG_ASSERT( pNewFontList, "Doc-FontList not available!" ); 54 55 if ( !*ppFontList ) 56 { 57 *ppFontList = pNewFontList; 58 bChanged = true; 59 } 60 else 61 { 62 bChanged = ( *ppFontList != pNewFontList ); 63 if( !bChanged && pBox!=NULL ) 64 bChanged = ( pBox->GetListCount() != pNewFontList->GetFontNameCount() ); 65 HACK(vergleich ist unvollstaendig) 66 67 if ( bChanged ) 68 *ppFontList = pNewFontList; 69 } 70 71 if ( pBox ) 72 pBox->Enable(); 73 } 74 else if ( pBox ) 75 pBox->Disable(); 76 77 // in die FontBox ggf. auch die neue Liste f"ullen 78 if ( pBox && bChanged ) 79 { 80 if ( *ppFontList ) 81 pBox->Fill( *ppFontList ); 82 else 83 pBox->Clear(); 84 } 85 return bChanged; 86 } 87 } 88 89 90 91 92 SvxSBFontNameBox::SvxSBFontNameBox( Window* pParent, const ResId& rResId ) : 93 FontNameBox ( pParent, rResId ) 94 , pFontList ( NULL ) 95 , nFtCount ( 0 ) 96 , bInput(false) 97 , pBindings(NULL) 98 { 99 EnableControls_Impl(); 100 // StartListening( *SFX_APP() ); 101 } 102 103 void SvxSBFontNameBox::EnableControls_Impl() 104 { 105 SvtFontOptions aFontOpt; 106 bool bEnable = aFontOpt.IsFontHistoryEnabled(); 107 sal_uInt16 nEntries = bEnable ? MAX_MRU_FONTNAME_ENTRIES : 0; 108 if ( GetMaxMRUCount() != nEntries ) 109 { 110 // refill in the next GetFocus-Handler 111 pFontList = NULL; 112 Clear(); 113 SetMaxMRUCount( nEntries ); 114 } 115 116 bEnable = aFontOpt.IsFontWYSIWYGEnabled(); 117 EnableWYSIWYG( bEnable ); 118 EnableSymbols( bEnable ); 119 } 120 121 void SvxSBFontNameBox::FillList() 122 { 123 Selection aOldSel = GetSelection(); 124 GetDocFontList_Impl( &pFontList, this ); 125 aCurText = GetText(); 126 SetSelection( aOldSel ); 127 } 128 129 long SvxSBFontNameBox::PreNotify( NotifyEvent& rNEvt ) 130 { 131 const sal_uInt16 nType (rNEvt.GetType()); 132 133 if ( EVENT_MOUSEBUTTONDOWN == nType || EVENT_GETFOCUS == nType ) 134 FillList(); 135 return FontNameBox::PreNotify( rNEvt ); 136 } 137 //<<modify 138 long SvxSBFontNameBox::Notify( NotifyEvent& rNEvt) //SfxBroadcaster& rBC, const SfxHint& rHint 139 { 140 //SfxItemSetHint* pHint = PTR_CAST(SfxItemSetHint, &rHint); 141 //if ( pHint ) 142 // EnableControls_Impl(); 143 bool bHandle = 0; 144 if ( rNEvt.GetType() == EVENT_KEYINPUT ) 145 { 146 const sal_uInt16 nCode (rNEvt.GetKeyEvent()->GetKeyCode().GetCode()); 147 148 if( nCode == KEY_RETURN) 149 { 150 bHandle = 1; 151 Select(); 152 } 153 } 154 155 return bHandle ? bHandle : FontNameBox::Notify( rNEvt ); 156 } 157 void SvxSBFontNameBox::Select() 158 { 159 FontNameBox::Select(); 160 161 if ( !IsTravelSelect() ) 162 { 163 FillList(); 164 FontInfo aInfo( pFontList->Get( GetText(),WEIGHT_NORMAL, ITALIC_NORMAL ) );//meWeight, meItalic 165 166 SvxFontItem aFontItem( aInfo.GetFamily(), aInfo.GetName(), aInfo.GetStyleName(), 167 aInfo.GetPitch(), aInfo.GetCharSet(), SID_ATTR_CHAR_FONT ); 168 169 pBindings->GetDispatcher()->Execute( SID_ATTR_CHAR_FONT, SFX_CALLMODE_RECORD, &aFontItem, 0L ); 170 pBindings->Invalidate(SID_ATTR_CHAR_FONT,true,false); 171 } 172 } 173 void SvxSBFontNameBox::SetBindings(SfxBindings* pB) 174 { 175 pBindings = pB; 176 } 177 178 } } // end of namespace svx::sidebar 179