1*5900e8ecSAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*5900e8ecSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*5900e8ecSAndrew Rist * or more contributor license agreements. See the NOTICE file
5*5900e8ecSAndrew Rist * distributed with this work for additional information
6*5900e8ecSAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*5900e8ecSAndrew Rist * to you under the Apache License, Version 2.0 (the
8*5900e8ecSAndrew Rist * "License"); you may not use this file except in compliance
9*5900e8ecSAndrew Rist * with the License. You may obtain a copy of the License at
10cdf0e10cSrcweir *
11*5900e8ecSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir *
13*5900e8ecSAndrew Rist * Unless required by applicable law or agreed to in writing,
14*5900e8ecSAndrew Rist * software distributed under the License is distributed on an
15*5900e8ecSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*5900e8ecSAndrew Rist * KIND, either express or implied. See the License for the
17*5900e8ecSAndrew Rist * specific language governing permissions and limitations
18*5900e8ecSAndrew Rist * under the License.
19cdf0e10cSrcweir *
20*5900e8ecSAndrew Rist *************************************************************/
21*5900e8ecSAndrew Rist
22*5900e8ecSAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_svtools.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir #include <string.h>
28cdf0e10cSrcweir #include <vcl/svapp.hxx>
29cdf0e10cSrcweir #include <vcl/i18nhelp.hxx>
30cdf0e10cSrcweir #include <svtools/ctrltool.hxx>
31cdf0e10cSrcweir #include <svtools/stdmenu.hxx>
32cdf0e10cSrcweir
33cdf0e10cSrcweir // ========================================================================
34cdf0e10cSrcweir
FontNameMenu()35cdf0e10cSrcweir FontNameMenu::FontNameMenu()
36cdf0e10cSrcweir {
37cdf0e10cSrcweir SetMenuFlags( GetMenuFlags() | MENU_FLAG_NOAUTOMNEMONICS );
38cdf0e10cSrcweir }
39cdf0e10cSrcweir
40cdf0e10cSrcweir // -----------------------------------------------------------------------
41cdf0e10cSrcweir
~FontNameMenu()42cdf0e10cSrcweir FontNameMenu::~FontNameMenu()
43cdf0e10cSrcweir {
44cdf0e10cSrcweir }
45cdf0e10cSrcweir
46cdf0e10cSrcweir // -----------------------------------------------------------------------
47cdf0e10cSrcweir
Select()48cdf0e10cSrcweir void FontNameMenu::Select()
49cdf0e10cSrcweir {
50cdf0e10cSrcweir maCurName = GetItemText( GetCurItemId() );
51cdf0e10cSrcweir maSelectHdl.Call( this );
52cdf0e10cSrcweir }
53cdf0e10cSrcweir
54cdf0e10cSrcweir // -----------------------------------------------------------------------
55cdf0e10cSrcweir
Highlight()56cdf0e10cSrcweir void FontNameMenu::Highlight()
57cdf0e10cSrcweir {
58cdf0e10cSrcweir XubString aTempName = maCurName;
59cdf0e10cSrcweir maCurName = GetItemText( GetCurItemId() );
60cdf0e10cSrcweir maHighlightHdl.Call( this );
61cdf0e10cSrcweir maCurName = aTempName;
62cdf0e10cSrcweir }
63cdf0e10cSrcweir
64cdf0e10cSrcweir // -----------------------------------------------------------------------
65cdf0e10cSrcweir
Fill(const FontList * pList)66cdf0e10cSrcweir void FontNameMenu::Fill( const FontList* pList )
67cdf0e10cSrcweir {
68cdf0e10cSrcweir // clear menu
69cdf0e10cSrcweir Clear();
70cdf0e10cSrcweir
71cdf0e10cSrcweir // add fonts
72cdf0e10cSrcweir const vcl::I18nHelper& rI18nHelper = Application::GetSettings().GetUILocaleI18nHelper();
73cdf0e10cSrcweir // more than 100 fonts reduces the speed of opening the menu.
74cdf0e10cSrcweir // So only the first 100 fonts will be displayed.
75cdf0e10cSrcweir sal_uInt16 nFontCount = ::std::min( pList->GetFontNameCount(), static_cast< sal_uInt16 >(100) );
76cdf0e10cSrcweir for ( sal_uInt16 i = 0; i < nFontCount; i++ )
77cdf0e10cSrcweir {
78cdf0e10cSrcweir const XubString& rName = pList->GetFontName( i ).GetName();
79cdf0e10cSrcweir
80cdf0e10cSrcweir // sort with the I18nHelper
81cdf0e10cSrcweir sal_uInt16 j = GetItemCount();
82cdf0e10cSrcweir while ( j )
83cdf0e10cSrcweir {
84cdf0e10cSrcweir XubString aText = GetItemText( GetItemId( j-1 ) );
85cdf0e10cSrcweir if ( rI18nHelper.CompareString( rName, aText ) > 0 )
86cdf0e10cSrcweir break;
87cdf0e10cSrcweir j--;
88cdf0e10cSrcweir }
89cdf0e10cSrcweir InsertItem( i+1, rName, MIB_RADIOCHECK | MIB_AUTOCHECK, j );
90cdf0e10cSrcweir }
91cdf0e10cSrcweir
92cdf0e10cSrcweir SetCurName( maCurName );
93cdf0e10cSrcweir }
94cdf0e10cSrcweir
95cdf0e10cSrcweir // -----------------------------------------------------------------------
96cdf0e10cSrcweir
SetCurName(const XubString & rName)97cdf0e10cSrcweir void FontNameMenu::SetCurName( const XubString& rName )
98cdf0e10cSrcweir {
99cdf0e10cSrcweir maCurName = rName;
100cdf0e10cSrcweir
101cdf0e10cSrcweir // Menueintrag checken
102cdf0e10cSrcweir sal_uInt16 nChecked = 0;
103cdf0e10cSrcweir sal_uInt16 nItemCount = GetItemCount();
104cdf0e10cSrcweir for( sal_uInt16 i = 0; i < nItemCount; i++ )
105cdf0e10cSrcweir {
106cdf0e10cSrcweir sal_uInt16 nItemId = GetItemId( i );
107cdf0e10cSrcweir
108cdf0e10cSrcweir if ( IsItemChecked( nItemId ) )
109cdf0e10cSrcweir nChecked = nItemId;
110cdf0e10cSrcweir
111cdf0e10cSrcweir XubString aText = GetItemText( nItemId );
112cdf0e10cSrcweir if ( aText == maCurName )
113cdf0e10cSrcweir {
114cdf0e10cSrcweir CheckItem( nItemId, sal_True );
115cdf0e10cSrcweir return;
116cdf0e10cSrcweir }
117cdf0e10cSrcweir }
118cdf0e10cSrcweir
119cdf0e10cSrcweir if ( nChecked )
120cdf0e10cSrcweir CheckItem( nChecked, sal_False );
121cdf0e10cSrcweir }
122cdf0e10cSrcweir
123cdf0e10cSrcweir // ========================================================================
124cdf0e10cSrcweir
FontStyleMenu()125cdf0e10cSrcweir FontStyleMenu::FontStyleMenu()
126cdf0e10cSrcweir {
127cdf0e10cSrcweir SetMenuFlags( GetMenuFlags() | MENU_FLAG_NOAUTOMNEMONICS );
128cdf0e10cSrcweir }
129cdf0e10cSrcweir
130cdf0e10cSrcweir // -----------------------------------------------------------------------
131cdf0e10cSrcweir
~FontStyleMenu()132cdf0e10cSrcweir FontStyleMenu::~FontStyleMenu()
133cdf0e10cSrcweir {
134cdf0e10cSrcweir }
135cdf0e10cSrcweir
136cdf0e10cSrcweir // -----------------------------------------------------------------------
137cdf0e10cSrcweir
Select()138cdf0e10cSrcweir void FontStyleMenu::Select()
139cdf0e10cSrcweir {
140cdf0e10cSrcweir sal_uInt16 nCurId = GetCurItemId();
141cdf0e10cSrcweir
142cdf0e10cSrcweir if ( (nCurId >= FONTSTYLEMENU_FIRSTID) && (nCurId <= FONTSTYLEMENU_LASTID) )
143cdf0e10cSrcweir {
144cdf0e10cSrcweir maCurStyle = GetItemText( nCurId );
145cdf0e10cSrcweir maSelectHdl.Call( this );
146cdf0e10cSrcweir }
147cdf0e10cSrcweir else
148cdf0e10cSrcweir PopupMenu::Select();
149cdf0e10cSrcweir }
150cdf0e10cSrcweir
151cdf0e10cSrcweir // -----------------------------------------------------------------------
152cdf0e10cSrcweir
Highlight()153cdf0e10cSrcweir void FontStyleMenu::Highlight()
154cdf0e10cSrcweir {
155cdf0e10cSrcweir sal_uInt16 nCurId = GetCurItemId();
156cdf0e10cSrcweir
157cdf0e10cSrcweir if ( (nCurId >= FONTSTYLEMENU_FIRSTID) && (nCurId <= FONTSTYLEMENU_LASTID) )
158cdf0e10cSrcweir {
159cdf0e10cSrcweir XubString aTempName = maCurStyle;
160cdf0e10cSrcweir maCurStyle = GetItemText( nCurId );
161cdf0e10cSrcweir maHighlightHdl.Call( this );
162cdf0e10cSrcweir maCurStyle = aTempName;
163cdf0e10cSrcweir }
164cdf0e10cSrcweir else
165cdf0e10cSrcweir PopupMenu::Highlight();
166cdf0e10cSrcweir }
167cdf0e10cSrcweir
168cdf0e10cSrcweir // -----------------------------------------------------------------------
169cdf0e10cSrcweir
ImplIsAlreadyInserted(const XubString & rStyleName,sal_uInt16 nCount)170cdf0e10cSrcweir sal_Bool FontStyleMenu::ImplIsAlreadyInserted( const XubString& rStyleName, sal_uInt16 nCount )
171cdf0e10cSrcweir {
172cdf0e10cSrcweir for ( sal_uInt16 i = 0; i < nCount; i++ )
173cdf0e10cSrcweir {
174cdf0e10cSrcweir if ( GetItemText( i+FONTSTYLEMENU_FIRSTID ) == rStyleName )
175cdf0e10cSrcweir return sal_True;
176cdf0e10cSrcweir }
177cdf0e10cSrcweir
178cdf0e10cSrcweir return sal_False;
179cdf0e10cSrcweir }
180cdf0e10cSrcweir
181cdf0e10cSrcweir // -----------------------------------------------------------------------
182cdf0e10cSrcweir
Fill(const XubString & rName,const FontList * pList)183cdf0e10cSrcweir void FontStyleMenu::Fill( const XubString& rName, const FontList* pList )
184cdf0e10cSrcweir {
185cdf0e10cSrcweir sal_uInt16 nItemId = GetItemId( 0 );
186cdf0e10cSrcweir while ( (nItemId >= FONTSTYLEMENU_FIRSTID) &&
187cdf0e10cSrcweir (nItemId <= FONTSTYLEMENU_LASTID) )
188cdf0e10cSrcweir {
189cdf0e10cSrcweir RemoveItem( 0 );
190cdf0e10cSrcweir nItemId = GetItemId( 0 );
191cdf0e10cSrcweir }
192cdf0e10cSrcweir
193cdf0e10cSrcweir // Existiert ein Font mit diesem Namen
194cdf0e10cSrcweir sal_Handle hFontInfo = pList->GetFirstFontInfo( rName );
195cdf0e10cSrcweir if ( hFontInfo )
196cdf0e10cSrcweir {
197cdf0e10cSrcweir XubString aStyleText;
198cdf0e10cSrcweir sal_uInt16 nPos = 0;
199cdf0e10cSrcweir sal_uInt16 nId = FONTSTYLEMENU_FIRSTID;
200cdf0e10cSrcweir FontWeight eLastWeight = WEIGHT_DONTKNOW;
201cdf0e10cSrcweir FontItalic eLastItalic = ITALIC_NONE;
202cdf0e10cSrcweir FontWidth eLastWidth = WIDTH_DONTKNOW;
203cdf0e10cSrcweir sal_Bool bNormal = sal_False;
204cdf0e10cSrcweir sal_Bool bItalic = sal_False;
205cdf0e10cSrcweir sal_Bool bBold = sal_False;
206cdf0e10cSrcweir sal_Bool bBoldItalic = sal_False;
207cdf0e10cSrcweir sal_Bool bInsert = sal_False;
208cdf0e10cSrcweir FontInfo aInfo;
209cdf0e10cSrcweir while ( hFontInfo )
210cdf0e10cSrcweir {
211cdf0e10cSrcweir aInfo = pList->GetFontInfo( hFontInfo );
212cdf0e10cSrcweir
213cdf0e10cSrcweir FontWeight eWeight = aInfo.GetWeight();
214cdf0e10cSrcweir FontItalic eItalic = aInfo.GetItalic();
215cdf0e10cSrcweir FontWidth eWidth = aInfo.GetWidthType();
216cdf0e10cSrcweir // Only if the attributes are different, we insert the
217cdf0e10cSrcweir // Font to avoid double Entries in different languages
218cdf0e10cSrcweir if ( (eWeight != eLastWeight) || (eItalic != eLastItalic) ||
219cdf0e10cSrcweir (eWidth != eLastWidth) )
220cdf0e10cSrcweir {
221cdf0e10cSrcweir if ( bInsert )
222cdf0e10cSrcweir {
223cdf0e10cSrcweir InsertItem( nId, aStyleText,
224cdf0e10cSrcweir MIB_RADIOCHECK | MIB_AUTOCHECK, nPos );
225cdf0e10cSrcweir nPos++;
226cdf0e10cSrcweir nId++;
227cdf0e10cSrcweir }
228cdf0e10cSrcweir
229cdf0e10cSrcweir if ( eWeight <= WEIGHT_NORMAL )
230cdf0e10cSrcweir {
231cdf0e10cSrcweir if ( eItalic != ITALIC_NONE )
232cdf0e10cSrcweir bItalic = sal_True;
233cdf0e10cSrcweir else
234cdf0e10cSrcweir bNormal = sal_True;
235cdf0e10cSrcweir }
236cdf0e10cSrcweir else
237cdf0e10cSrcweir {
238cdf0e10cSrcweir if ( eItalic != ITALIC_NONE )
239cdf0e10cSrcweir bBoldItalic = sal_True;
240cdf0e10cSrcweir else
241cdf0e10cSrcweir bBold = sal_True;
242cdf0e10cSrcweir }
243cdf0e10cSrcweir
244cdf0e10cSrcweir // For wrong StyleNames we replace this with the correct once
245cdf0e10cSrcweir aStyleText = pList->GetStyleName( aInfo );
246cdf0e10cSrcweir bInsert = !ImplIsAlreadyInserted( aStyleText, nPos );
247cdf0e10cSrcweir if ( !bInsert )
248cdf0e10cSrcweir {
249cdf0e10cSrcweir aStyleText = pList->GetStyleName( eWeight, eItalic );
250cdf0e10cSrcweir bInsert = !ImplIsAlreadyInserted( aStyleText, nPos );
251cdf0e10cSrcweir }
252cdf0e10cSrcweir
253cdf0e10cSrcweir eLastWeight = eWeight;
254cdf0e10cSrcweir eLastItalic = eItalic;
255cdf0e10cSrcweir eLastWidth = eWidth;
256cdf0e10cSrcweir }
257cdf0e10cSrcweir else
258cdf0e10cSrcweir {
259cdf0e10cSrcweir if ( bInsert )
260cdf0e10cSrcweir {
261cdf0e10cSrcweir // If we have two names for the same attributes
262cdf0e10cSrcweir // we prefer the translated standard names
263cdf0e10cSrcweir const XubString& rAttrStyleText = pList->GetStyleName( eWeight, eItalic );
264cdf0e10cSrcweir if ( rAttrStyleText != aStyleText )
265cdf0e10cSrcweir {
266cdf0e10cSrcweir XubString aTempStyleText = pList->GetStyleName( aInfo );
267cdf0e10cSrcweir if ( rAttrStyleText == aTempStyleText )
268cdf0e10cSrcweir aStyleText = rAttrStyleText;
269cdf0e10cSrcweir bInsert = !ImplIsAlreadyInserted( aStyleText, nPos );
270cdf0e10cSrcweir }
271cdf0e10cSrcweir }
272cdf0e10cSrcweir }
273cdf0e10cSrcweir
274cdf0e10cSrcweir if ( !bItalic && (aStyleText == pList->GetItalicStr()) )
275cdf0e10cSrcweir bItalic = sal_True;
276cdf0e10cSrcweir else if ( !bBold && (aStyleText == pList->GetBoldStr()) )
277cdf0e10cSrcweir bBold = sal_True;
278cdf0e10cSrcweir else if ( !bBoldItalic && (aStyleText == pList->GetBoldItalicStr()) )
279cdf0e10cSrcweir bBoldItalic = sal_True;
280cdf0e10cSrcweir
281cdf0e10cSrcweir hFontInfo = pList->GetNextFontInfo( hFontInfo );
282cdf0e10cSrcweir }
283cdf0e10cSrcweir
284cdf0e10cSrcweir if ( bInsert )
285cdf0e10cSrcweir {
286cdf0e10cSrcweir InsertItem( nId, aStyleText,
287cdf0e10cSrcweir MIB_RADIOCHECK | MIB_AUTOCHECK, nPos );
288cdf0e10cSrcweir nPos++;
289cdf0e10cSrcweir nId++;
290cdf0e10cSrcweir }
291cdf0e10cSrcweir
292cdf0e10cSrcweir // Bestimmte Styles als Nachbildung
293cdf0e10cSrcweir if ( bNormal )
294cdf0e10cSrcweir {
295cdf0e10cSrcweir if ( !bItalic )
296cdf0e10cSrcweir {
297cdf0e10cSrcweir InsertItem( nId, pList->GetItalicStr(),
298cdf0e10cSrcweir MIB_RADIOCHECK | MIB_AUTOCHECK, nPos );
299cdf0e10cSrcweir nPos++;
300cdf0e10cSrcweir nId++;
301cdf0e10cSrcweir }
302cdf0e10cSrcweir if ( !bBold )
303cdf0e10cSrcweir {
304cdf0e10cSrcweir InsertItem( nId, pList->GetBoldStr(),
305cdf0e10cSrcweir MIB_RADIOCHECK | MIB_AUTOCHECK, nPos );
306cdf0e10cSrcweir nPos++;
307cdf0e10cSrcweir nId++;
308cdf0e10cSrcweir }
309cdf0e10cSrcweir }
310cdf0e10cSrcweir if ( !bBoldItalic )
311cdf0e10cSrcweir {
312cdf0e10cSrcweir if ( bNormal || bItalic || bBold )
313cdf0e10cSrcweir {
314cdf0e10cSrcweir InsertItem( nId, pList->GetBoldItalicStr(),
315cdf0e10cSrcweir MIB_RADIOCHECK | MIB_AUTOCHECK, nPos );
316cdf0e10cSrcweir nPos++;
317cdf0e10cSrcweir nId++;
318cdf0e10cSrcweir }
319cdf0e10cSrcweir }
320cdf0e10cSrcweir }
321cdf0e10cSrcweir else
322cdf0e10cSrcweir {
323cdf0e10cSrcweir // Wenn Font nicht, dann Standard-Styles einfuegen
324cdf0e10cSrcweir InsertItem( FONTSTYLEMENU_FIRSTID, pList->GetNormalStr(),
325cdf0e10cSrcweir MIB_RADIOCHECK | MIB_AUTOCHECK, 0 );
326cdf0e10cSrcweir InsertItem( FONTSTYLEMENU_FIRSTID+1, pList->GetItalicStr(),
327cdf0e10cSrcweir MIB_RADIOCHECK | MIB_AUTOCHECK, 0 );
328cdf0e10cSrcweir InsertItem( FONTSTYLEMENU_FIRSTID+2, pList->GetBoldStr(),
329cdf0e10cSrcweir MIB_RADIOCHECK | MIB_AUTOCHECK, 0 );
330cdf0e10cSrcweir InsertItem( FONTSTYLEMENU_FIRSTID+3, pList->GetBoldItalicStr(),
331cdf0e10cSrcweir MIB_RADIOCHECK | MIB_AUTOCHECK, 0 );
332cdf0e10cSrcweir }
333cdf0e10cSrcweir
334cdf0e10cSrcweir SetCurStyle( maCurStyle );
335cdf0e10cSrcweir }
336cdf0e10cSrcweir
337cdf0e10cSrcweir // -----------------------------------------------------------------------
338cdf0e10cSrcweir
SetCurStyle(const XubString & rStyle)339cdf0e10cSrcweir void FontStyleMenu::SetCurStyle( const XubString& rStyle )
340cdf0e10cSrcweir {
341cdf0e10cSrcweir maCurStyle = rStyle;
342cdf0e10cSrcweir
343cdf0e10cSrcweir // Menueintrag checken
344cdf0e10cSrcweir sal_uInt16 nChecked = 0;
345cdf0e10cSrcweir sal_uInt16 nItemCount = GetItemCount();
346cdf0e10cSrcweir for( sal_uInt16 i = 0; i < nItemCount; i++ )
347cdf0e10cSrcweir {
348cdf0e10cSrcweir sal_uInt16 nItemId = GetItemId( i );
349cdf0e10cSrcweir
350cdf0e10cSrcweir if ( (nItemId < FONTSTYLEMENU_FIRSTID) ||
351cdf0e10cSrcweir (nItemId > FONTSTYLEMENU_LASTID) )
352cdf0e10cSrcweir break;
353cdf0e10cSrcweir
354cdf0e10cSrcweir if ( IsItemChecked( nItemId ) )
355cdf0e10cSrcweir nChecked = nItemId;
356cdf0e10cSrcweir
357cdf0e10cSrcweir XubString aText = GetItemText( nItemId );
358cdf0e10cSrcweir if ( aText == maCurStyle )
359cdf0e10cSrcweir {
360cdf0e10cSrcweir CheckItem( nItemId, sal_True );
361cdf0e10cSrcweir return;
362cdf0e10cSrcweir }
363cdf0e10cSrcweir }
364cdf0e10cSrcweir
365cdf0e10cSrcweir if ( nChecked )
366cdf0e10cSrcweir CheckItem( nChecked, sal_False );
367cdf0e10cSrcweir }
368cdf0e10cSrcweir
369cdf0e10cSrcweir // ========================================================================
370cdf0e10cSrcweir
FontSizeMenu()371cdf0e10cSrcweir FontSizeMenu::FontSizeMenu()
372cdf0e10cSrcweir : mpHeightAry( NULL )
373cdf0e10cSrcweir , mnCurHeight( 100 )
374cdf0e10cSrcweir {
375cdf0e10cSrcweir SetMenuFlags( GetMenuFlags() | MENU_FLAG_NOAUTOMNEMONICS );
376cdf0e10cSrcweir }
377cdf0e10cSrcweir
378cdf0e10cSrcweir // -----------------------------------------------------------------------
379cdf0e10cSrcweir
~FontSizeMenu()380cdf0e10cSrcweir FontSizeMenu::~FontSizeMenu()
381cdf0e10cSrcweir {
382cdf0e10cSrcweir if ( mpHeightAry )
383cdf0e10cSrcweir delete[] mpHeightAry;
384cdf0e10cSrcweir }
385cdf0e10cSrcweir
386cdf0e10cSrcweir // -----------------------------------------------------------------------
387cdf0e10cSrcweir
Select()388cdf0e10cSrcweir void FontSizeMenu::Select()
389cdf0e10cSrcweir {
390cdf0e10cSrcweir const sal_uInt16 nCurItemId = GetCurItemId();
391cdf0e10cSrcweir mnCurHeight = mpHeightAry[ nCurItemId - 1 ];
392cdf0e10cSrcweir maSelectHdl.Call( this );
393cdf0e10cSrcweir }
394cdf0e10cSrcweir
395cdf0e10cSrcweir // -----------------------------------------------------------------------
396cdf0e10cSrcweir
Highlight()397cdf0e10cSrcweir void FontSizeMenu::Highlight()
398cdf0e10cSrcweir {
399cdf0e10cSrcweir const long nTempHeight = mnCurHeight;
400cdf0e10cSrcweir const sal_uInt16 nCurItemId = GetCurItemId();
401cdf0e10cSrcweir if ( !nCurItemId )
402cdf0e10cSrcweir mnCurHeight = 0;
403cdf0e10cSrcweir else
404cdf0e10cSrcweir {
405cdf0e10cSrcweir //sal_Int32 nValue = GetItemText( nCurItemId ).ToInt32();
406cdf0e10cSrcweir mnCurHeight = mpHeightAry[ nCurItemId - 1 ];
407cdf0e10cSrcweir }
408cdf0e10cSrcweir maHighlightHdl.Call( this );
409cdf0e10cSrcweir mnCurHeight = nTempHeight;
410cdf0e10cSrcweir }
411cdf0e10cSrcweir
412cdf0e10cSrcweir // -----------------------------------------------------------------------
413cdf0e10cSrcweir
Fill(const FontInfo & rInfo,const FontList * pList)414cdf0e10cSrcweir void FontSizeMenu::Fill( const FontInfo& rInfo, const FontList* pList )
415cdf0e10cSrcweir {
416cdf0e10cSrcweir Clear();
417cdf0e10cSrcweir
418cdf0e10cSrcweir // setup font size array
419cdf0e10cSrcweir if ( mpHeightAry )
420cdf0e10cSrcweir delete[] mpHeightAry;
421cdf0e10cSrcweir
422cdf0e10cSrcweir const long* pTempAry;
423cdf0e10cSrcweir const long* pAry = pList->GetSizeAry( rInfo );
424cdf0e10cSrcweir sal_uInt16 nSizeCount = 0;
425cdf0e10cSrcweir while ( pAry[nSizeCount] )
426cdf0e10cSrcweir nSizeCount++;
427cdf0e10cSrcweir
428cdf0e10cSrcweir sal_uInt16 nPos = 0;
429cdf0e10cSrcweir
430cdf0e10cSrcweir // first insert font size names (for simplified/traditional chinese)
431cdf0e10cSrcweir FontSizeNames aFontSizeNames( Application::GetSettings().GetUILanguage() );
432cdf0e10cSrcweir mpHeightAry = new long[nSizeCount+aFontSizeNames.Count()];
433cdf0e10cSrcweir if ( !aFontSizeNames.IsEmpty() )
434cdf0e10cSrcweir {
435cdf0e10cSrcweir if ( pAry == pList->GetStdSizeAry() )
436cdf0e10cSrcweir {
437cdf0e10cSrcweir // for scalable fonts all font size names
438cdf0e10cSrcweir sal_uLong nCount = aFontSizeNames.Count();
439cdf0e10cSrcweir for( sal_uLong i = 0; i < nCount; i++ )
440cdf0e10cSrcweir {
441cdf0e10cSrcweir String aSizeName = aFontSizeNames.GetIndexName( i );
442cdf0e10cSrcweir long nSize = aFontSizeNames.GetIndexSize( i );
443cdf0e10cSrcweir mpHeightAry[nPos] = nSize;
444cdf0e10cSrcweir nPos++; // Id is nPos+1
445cdf0e10cSrcweir InsertItem( nPos, aSizeName, MIB_RADIOCHECK | MIB_AUTOCHECK );
446cdf0e10cSrcweir }
447cdf0e10cSrcweir }
448cdf0e10cSrcweir else
449cdf0e10cSrcweir {
450cdf0e10cSrcweir // for fixed size fonts only selectable font size names
451cdf0e10cSrcweir pTempAry = pAry;
452cdf0e10cSrcweir while ( *pTempAry )
453cdf0e10cSrcweir {
454cdf0e10cSrcweir String aSizeName = aFontSizeNames.Size2Name( *pTempAry );
455cdf0e10cSrcweir if ( aSizeName.Len() )
456cdf0e10cSrcweir {
457cdf0e10cSrcweir mpHeightAry[nPos] = *pTempAry;
458cdf0e10cSrcweir nPos++; // Id is nPos+1
459cdf0e10cSrcweir InsertItem( nPos, aSizeName, MIB_RADIOCHECK | MIB_AUTOCHECK );
460cdf0e10cSrcweir }
461cdf0e10cSrcweir pTempAry++;
462cdf0e10cSrcweir }
463cdf0e10cSrcweir }
464cdf0e10cSrcweir }
465cdf0e10cSrcweir
466cdf0e10cSrcweir // then insert numerical font size values
467cdf0e10cSrcweir const vcl::I18nHelper& rI18nHelper = Application::GetSettings().GetUILocaleI18nHelper();
468cdf0e10cSrcweir pTempAry = pAry;
469cdf0e10cSrcweir while ( *pTempAry )
470cdf0e10cSrcweir {
471cdf0e10cSrcweir mpHeightAry[nPos] = *pTempAry;
472cdf0e10cSrcweir nPos++; // Id is nPos+1
473cdf0e10cSrcweir InsertItem( nPos, rI18nHelper.GetNum( *pTempAry, 1, sal_True, sal_False ), MIB_RADIOCHECK | MIB_AUTOCHECK );
474cdf0e10cSrcweir pTempAry++;
475cdf0e10cSrcweir }
476cdf0e10cSrcweir
477cdf0e10cSrcweir SetCurHeight( mnCurHeight );
478cdf0e10cSrcweir }
479cdf0e10cSrcweir
480cdf0e10cSrcweir // -----------------------------------------------------------------------
481cdf0e10cSrcweir
SetCurHeight(long nHeight)482cdf0e10cSrcweir void FontSizeMenu::SetCurHeight( long nHeight )
483cdf0e10cSrcweir {
484cdf0e10cSrcweir mnCurHeight = nHeight;
485cdf0e10cSrcweir
486cdf0e10cSrcweir // check menue item
487cdf0e10cSrcweir XubString aHeight = Application::GetSettings().GetUILocaleI18nHelper().GetNum( nHeight, 1, sal_True, sal_False );
488cdf0e10cSrcweir sal_uInt16 nChecked = 0;
489cdf0e10cSrcweir sal_uInt16 nItemCount = GetItemCount();
490cdf0e10cSrcweir for( sal_uInt16 i = 0; i < nItemCount; i++ )
491cdf0e10cSrcweir {
492cdf0e10cSrcweir sal_uInt16 nItemId = GetItemId( i );
493cdf0e10cSrcweir
494cdf0e10cSrcweir if ( mpHeightAry[i] == nHeight )
495cdf0e10cSrcweir {
496cdf0e10cSrcweir CheckItem( nItemId, sal_True );
497cdf0e10cSrcweir return;
498cdf0e10cSrcweir }
499cdf0e10cSrcweir
500cdf0e10cSrcweir if ( IsItemChecked( nItemId ) )
501cdf0e10cSrcweir nChecked = nItemId;
502cdf0e10cSrcweir }
503cdf0e10cSrcweir
504cdf0e10cSrcweir if ( nChecked )
505cdf0e10cSrcweir CheckItem( nChecked, sal_False );
506cdf0e10cSrcweir }
507