xref: /aoo4110/main/svtools/inc/svtools/ctrltool.hxx (revision b1cdbd2c)
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 
23 
24 #ifndef _CTRLTOOL_HXX
25 #define _CTRLTOOL_HXX
26 
27 #include "svtools/svtdllapi.h"
28 
29 #ifndef _SAL_TYPES_H
30 #include <sal/types.h>
31 #endif
32 #include <tools/list.hxx>
33 #ifndef _METRIC_HXX
34 #include <vcl/metric.hxx>
35 #endif
36 
37 class ImplFontListNameInfo;
38 class OutputDevice;
39 
40 /*************************************************************************
41 
42 Beschreibung
43 ============
44 
45 class FontList
46 
47 Diese Klasse verwaltet alle Fonts, die auf einem oder zwei Ausgabegeraeten
48 dargestellt werden koennen. Zusaetzlich bietet die Klasse Methoden an, um
49 aus Fett und Kursiv den StyleName zu generieren oder aus einem Stylename
50 die fehlenden Attribute. Zusaetzlich kann diese Klasse syntetisch nachgebildete
51 Fonts verarbeiten. Diese Klasse kann mit verschiedenen Standard-Controls und
52 Standard-Menus zusammenarbeiten.
53 
54 Querverweise
55 
56 class FontNameBox, class FontStyleBox, class FontSizeBox,
57 class FontNameMenu, class FontStyleMenu, class FontSizeMenu
58 
59 --------------------------------------------------------------------------
60 
61 FontList::FontList( OutputDevice* pDevice, OutputDevice* pDevice2 = NULL,
62 					sal_Bool bAll = sal_True );
63 
64 Konstruktor der Klasse FontList. Vom uebergebenen OutputDevice werden die
65 entsprechenden Fonts abgefragt. Das OutputDevice muss solange existieren,
66 wie auch die Klasse FontList existiert. Optional kann noch ein 2tes
67 Ausgabedevice uebergeben werden, damit man zum Beispiel die Fonts von
68 einem Drucker und dem Bildschirm zusammen in einer FontListe verwalten kann
69 und somit auch den FontListen und FontMenus die Fonts von beiden OutputDevices
70 zu uebergeben. Auch das pDevice2 muss solange existieren, wie die Klasse
71 FontList existiert.
72 
73 Das OutputDevice, welches als erstes uebergeben wird, sollte das bevorzugte
74 sein. Dies sollte im normalfall der Drucker sein. Denn wenn 2 verschiede
75 Device-Schriften (eine fuer Drucker und eine fuer den Bildschirm) vorhanden
76 sind, wird die vom uebergebenen Device "pDevice" bevorzugt.
77 
78 Mit dem dritten Parameter kann man angeben, ob nur skalierbare Schriften
79 abgefragt werden sollen oder alle. Wenn sal_True uebergeben wird, werden auch
80 Bitmap-Schriften mit abgefragt. Bei sal_False werden Vector-Schriften und
81 scalierbare Schriften abgefragt.
82 
83 --------------------------------------------------------------------------
84 
85 String FontList::GetStyleName( const FontInfo& rInfo ) const;
86 
87 Diese Methode gibt den StyleName von einer FontInfo zurueck. Falls kein
88 StyleName gesetzt ist, wird aus den gesetzten Attributen ein entsprechender
89 Name generiert, der dem Anwender praesentiert werden kann.
90 
91 --------------------------------------------------------------------------
92 
93 XubString FontList::GetFontMapText( const FontInfo& rInfo ) const;
94 
95 Diese Methode gibt einen Matchstring zurueck, der dem Anwender
96 anzeigen soll, welche Probleme es mit diesem Font geben kann.
97 
98 --------------------------------------------------------------------------
99 
100 FontInfo FontList::Get( const String& rName, const String& rStyleName ) const;
101 
102 Diese Methode sucht aus dem uebergebenen Namen und dem uebergebenen StyleName
103 die entsprechende FontInfo-Struktur raus. Der Stylename kann in dieser
104 Methode auch ein syntetischer sein. In diesem Fall werden die entsprechenden
105 Werte in der FontInfo-Struktur entsprechend gesetzt. Wenn ein StyleName
106 uebergeben wird, kann jedoch eine FontInfo-Struktur ohne Stylename
107 zurueckgegeben werden. Um den StyleName dem Anwender zu repraesentieren,
108 muss GetStyleName() mit dieser FontInfo-Struktur aufgerufen werden.
109 
110 Querverweise
111 
112 FontList::GetStyleName()
113 
114 --------------------------------------------------------------------------
115 
116 FontInfo FontList::Get( const String& rName, FontWeight eWeight,
117 						FontItalic eItalic ) const;
118 
119 Diese Methode sucht aus dem uebergebenen Namen und den uebergebenen Styles
120 die entsprechende FontInfo-Struktur raus. Diese Methode kann auch eine
121 FontInfo-Struktur ohne Stylename zurueckgegeben. Um den StyleName dem
122 Anwender zu repraesentieren, muss GetStyleName() mit dieser FontInfo-Struktur
123 aufgerufen werden.
124 
125 Querverweise
126 
127 FontList::GetStyleName()
128 
129 --------------------------------------------------------------------------
130 
131 const long* FontList::GetSizeAry( const FontInfo& rInfo ) const;
132 
133 Diese Methode liefert zum uebergebenen Font die vorhandenen Groessen.
134 Falls es sich dabei um einen skalierbaren Font handelt, werden Standard-
135 Groessen zurueckgegeben. Das Array enthaelt die Hoehen des Fonts in 10tel
136 Point. Der letzte Wert des Array ist 0. Das Array, was zurueckgegeben wird,
137 wird von der FontList wieder zerstoert. Nach dem Aufruf der naechsten Methode
138 von der FontList, sollte deshalb das Array nicht mehr referenziert werden.
139 
140 *************************************************************************/
141 
142 // ------------
143 // - FontList -
144 // ------------
145 
146 #define FONTLIST_FONTINFO_NOTFOUND	((sal_uInt16)0xFFFF)
147 
148 #define FONTLIST_FONTNAMETYPE_PRINTER			((sal_uInt16)0x0001)
149 #define FONTLIST_FONTNAMETYPE_SCREEN			((sal_uInt16)0x0002)
150 #define FONTLIST_FONTNAMETYPE_SCALABLE			((sal_uInt16)0x0004)
151 
152 class SVT_DLLPUBLIC FontList : private List
153 {
154 private:
155 	XubString				maMapBoth;
156 	XubString				maMapPrinterOnly;
157 	XubString				maMapScreenOnly;
158 	XubString				maMapSizeNotAvailable;
159 	XubString				maMapStyleNotAvailable;
160 	XubString				maMapNotAvailable;
161 	XubString				maLight;
162 	XubString				maLightItalic;
163 	XubString				maNormal;
164 	XubString				maNormalItalic;
165 	XubString				maBold;
166 	XubString				maBoldItalic;
167 	XubString				maBlack;
168 	XubString				maBlackItalic;
169 	long*					mpSizeAry;
170 	OutputDevice*			mpDev;
171 	OutputDevice*			mpDev2;
172 
173 #ifdef CTRLTOOL_CXX
174 	SVT_DLLPRIVATE ImplFontListNameInfo*	ImplFind( const XubString& rSearchName, sal_uLong* pIndex ) const;
175 	SVT_DLLPRIVATE ImplFontListNameInfo*	ImplFindByName( const XubString& rStr ) const;
176 	SVT_DLLPRIVATE void					ImplInsertFonts( OutputDevice* pDev, sal_Bool bAll,
177 											 sal_Bool bInsertData );
178 #endif
179 
180 public:
181 							FontList( OutputDevice* pDevice,
182 									  OutputDevice* pDevice2 = NULL,
183 									  sal_Bool bAll = sal_True );
184 							~FontList();
185 
186     FontList*               Clone() const;
187 
GetDevice() const188     OutputDevice*           GetDevice() const { return mpDev; }
GetDevice2() const189 	OutputDevice*			GetDevice2() const { return mpDev2; }
190 	XubString				GetFontMapText( const FontInfo& rInfo ) const;
191 	sal_uInt16					GetFontNameType( const XubString& rFontName ) const;
192 
GetNormalStr() const193 	const XubString&		GetNormalStr() const { return maNormal; }
GetItalicStr() const194 	const XubString&		GetItalicStr() const { return maNormalItalic; }
GetBoldStr() const195 	const XubString&		GetBoldStr() const { return maBold; }
GetBoldItalicStr() const196 	const XubString&		GetBoldItalicStr() const { return maBoldItalic; }
197 	const XubString&		GetStyleName( FontWeight eWeight, FontItalic eItalic ) const;
198 	XubString				GetStyleName( const FontInfo& rInfo ) const;
199 
200 	FontInfo				Get( const XubString& rName,
201 								 const XubString& rStyleName ) const;
202 	FontInfo				Get( const XubString& rName,
203 								 FontWeight eWeight,
204 								 FontItalic eItalic ) const;
205 
206 	sal_Bool					IsAvailable( const XubString& rName ) const;
GetFontNameCount() const207 	sal_uInt16					GetFontNameCount() const
208 								{ return (sal_uInt16)List::Count(); }
209 	const FontInfo& 		GetFontName( sal_uInt16 nFont ) const;
210 	sal_uInt16					GetFontNameType( sal_uInt16 nFont ) const;
211 	sal_Handle				GetFirstFontInfo( const XubString& rName ) const;
212 	sal_Handle				GetNextFontInfo( sal_Handle hFontInfo ) const;
213 	const FontInfo& 		GetFontInfo( sal_Handle hFontInfo ) const;
214 
215 	const long* 			GetSizeAry( const FontInfo& rInfo ) const;
216 	static const long*		GetStdSizeAry();
217 
218 private:
219 							FontList( const FontList& );
220 	FontList&				operator =( const FontList& );
221 };
222 
223 
224 // -----------------
225 // - FontSizeNames -
226 // -----------------
227 
228 class SVT_DLLPUBLIC FontSizeNames
229 {
230 private:
231 	struct ImplFSNameItem*	mpArray;
232 	sal_uLong					mnElem;
233 
234 public:
235 							FontSizeNames( LanguageType eLanguage /* = LANGUAGE_DONTKNOW */ );
236 
Count() const237 	sal_uLong					Count() const { return mnElem; }
IsEmpty() const238 	sal_Bool					IsEmpty() const { return !mnElem; }
239 
240 	long					Name2Size( const String& ) const;
241 	String					Size2Name( long ) const;
242 
243 	String					GetIndexName( sal_uLong nIndex ) const;
244 	long					GetIndexSize( sal_uLong nIndex ) const;
245 };
246 
247 #endif	// _CTRLTOOL_HXX
248