1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
23 #include <boost/ptr_container/ptr_vector.hpp>
25 #include <svtools/svtdllapi.h>
26 #include <rtl/ustring.hxx>
27 #include <sal/types.h>
28 #include <vcl/metric.hxx>
30 class ImplFontListNameInfo
;
33 /*************************************************************************
40 Diese Klasse verwaltet alle Fonts, die auf einem oder zwei Ausgabegeraeten
41 dargestellt werden koennen. Zusaetzlich bietet die Klasse Methoden an, um
42 aus Fett und Kursiv den StyleName zu generieren oder aus einem Stylename
43 die fehlenden Attribute. Zusaetzlich kann diese Klasse syntetisch nachgebildete
44 Fonts verarbeiten. Diese Klasse kann mit verschiedenen Standard-Controls und
45 Standard-Menus zusammenarbeiten.
49 class FontNameBox, class FontStyleBox, class FontSizeBox,
50 class FontNameMenu, class FontSizeMenu
52 --------------------------------------------------------------------------
54 FontList::FontList( OutputDevice* pDevice, OutputDevice* pDevice2 = NULL,
55 sal_Bool bAll = sal_True );
57 Konstruktor der Klasse FontList. Vom uebergebenen OutputDevice werden die
58 entsprechenden Fonts abgefragt. Das OutputDevice muss solange existieren,
59 wie auch die Klasse FontList existiert. Optional kann noch ein 2tes
60 Ausgabedevice uebergeben werden, damit man zum Beispiel die Fonts von
61 einem Drucker und dem Bildschirm zusammen in einer FontListe verwalten kann
62 und somit auch den FontListen und FontMenus die Fonts von beiden OutputDevices
63 zu uebergeben. Auch das pDevice2 muss solange existieren, wie die Klasse
66 Das OutputDevice, welches als erstes uebergeben wird, sollte das bevorzugte
67 sein. Dies sollte im normalfall der Drucker sein. Denn wenn 2 verschiede
68 Device-Schriften (eine fuer Drucker und eine fuer den Bildschirm) vorhanden
69 sind, wird die vom uebergebenen Device "pDevice" bevorzugt.
71 Mit dem dritten Parameter kann man angeben, ob nur skalierbare Schriften
72 abgefragt werden sollen oder alle. Wenn sal_True uebergeben wird, werden auch
73 Bitmap-Schriften mit abgefragt. Bei sal_False werden Vector-Schriften und
74 scalierbare Schriften abgefragt.
76 --------------------------------------------------------------------------
78 String FontList::GetStyleName( const FontInfo& rInfo ) const;
80 Diese Methode gibt den StyleName von einer FontInfo zurueck. Falls kein
81 StyleName gesetzt ist, wird aus den gesetzten Attributen ein entsprechender
82 Name generiert, der dem Anwender praesentiert werden kann.
84 --------------------------------------------------------------------------
86 OUString FontList::GetFontMapText( const FontInfo& rInfo ) const;
88 Diese Methode gibt einen Matchstring zurueck, der dem Anwender
89 anzeigen soll, welche Probleme es mit diesem Font geben kann.
91 --------------------------------------------------------------------------
93 FontInfo FontList::Get( const String& rName, const String& rStyleName ) const;
95 Diese Methode sucht aus dem uebergebenen Namen und dem uebergebenen StyleName
96 die entsprechende FontInfo-Struktur raus. Der Stylename kann in dieser
97 Methode auch ein syntetischer sein. In diesem Fall werden die entsprechenden
98 Werte in der FontInfo-Struktur entsprechend gesetzt. Wenn ein StyleName
99 uebergeben wird, kann jedoch eine FontInfo-Struktur ohne Stylename
100 zurueckgegeben werden. Um den StyleName dem Anwender zu repraesentieren,
101 muss GetStyleName() mit dieser FontInfo-Struktur aufgerufen werden.
105 FontList::GetStyleName()
107 --------------------------------------------------------------------------
109 FontInfo FontList::Get( const String& rName, FontWeight eWeight,
110 FontItalic eItalic ) const;
112 Diese Methode sucht aus dem uebergebenen Namen und den uebergebenen Styles
113 die entsprechende FontInfo-Struktur raus. Diese Methode kann auch eine
114 FontInfo-Struktur ohne Stylename zurueckgegeben. Um den StyleName dem
115 Anwender zu repraesentieren, muss GetStyleName() mit dieser FontInfo-Struktur
120 FontList::GetStyleName()
122 --------------------------------------------------------------------------
124 const sal_IntPtr* FontList::GetSizeAry( const FontInfo& rInfo ) const;
126 Diese Methode liefert zum uebergebenen Font die vorhandenen Groessen.
127 Falls es sich dabei um einen skalierbaren Font handelt, werden Standard-
128 Groessen zurueckgegeben. Das Array enthaelt die Hoehen des Fonts in 10tel
129 Point. Der letzte Wert des Array ist 0. Das Array, was zurueckgegeben wird,
130 wird von der FontList wieder zerstoert. Nach dem Aufruf der naechsten Methode
131 von der FontList, sollte deshalb das Array nicht mehr referenziert werden.
133 *************************************************************************/
139 #define FONTLIST_FONTINFO_NOTFOUND ((sal_uInt16)0xFFFF)
141 #define FONTLIST_FONTNAMETYPE_PRINTER ((sal_uInt16)0x0001)
142 #define FONTLIST_FONTNAMETYPE_SCREEN ((sal_uInt16)0x0002)
144 class SVT_DLLPUBLIC FontList
148 OUString maMapPrinterOnly
;
149 OUString maMapScreenOnly
;
150 OUString maMapSizeNotAvailable
;
151 OUString maMapStyleNotAvailable
;
152 mutable OUString maMapNotAvailable
;
154 OUString maLightItalic
;
156 OUString maNormalItalic
;
158 OUString maBoldItalic
;
160 OUString maBlackItalic
;
161 sal_IntPtr
* mpSizeAry
;
163 OutputDevice
* mpDev2
;
164 boost::ptr_vector
<ImplFontListNameInfo
> maEntries
;
166 SVT_DLLPRIVATE ImplFontListNameInfo
* ImplFind( const OUString
& rSearchName
, sal_uLong
* pIndex
) const;
167 SVT_DLLPRIVATE ImplFontListNameInfo
* ImplFindByName( const OUString
& rStr
) const;
168 SVT_DLLPRIVATE
void ImplInsertFonts( OutputDevice
* pDev
, sal_Bool bAll
,
169 sal_Bool bInsertData
);
172 FontList( OutputDevice
* pDevice
,
173 OutputDevice
* pDevice2
= NULL
,
174 sal_Bool bAll
= sal_True
);
177 FontList
* Clone() const;
179 OutputDevice
* GetDevice() const { return mpDev
; }
180 OutputDevice
* GetDevice2() const { return mpDev2
; }
181 OUString
GetFontMapText( const FontInfo
& rInfo
) const;
183 const OUString
& GetNormalStr() const { return maNormal
; }
184 const OUString
& GetItalicStr() const { return maNormalItalic
; }
185 const OUString
& GetBoldStr() const { return maBold
; }
186 const OUString
& GetBoldItalicStr() const { return maBoldItalic
; }
187 const OUString
& GetStyleName( FontWeight eWeight
, FontItalic eItalic
) const;
188 OUString
GetStyleName( const FontInfo
& rInfo
) const;
190 FontInfo
Get( const OUString
& rName
,
191 const OUString
& rStyleName
) const;
192 FontInfo
Get( const OUString
& rName
,
194 FontItalic eItalic
) const;
196 sal_Bool
IsAvailable( const OUString
& rName
) const;
197 sal_uInt16
GetFontNameCount() const
199 return (sal_uInt16
)maEntries
.size();
201 const FontInfo
& GetFontName( sal_uInt16 nFont
) const;
202 sal_Handle
GetFirstFontInfo( const OUString
& rName
) const;
203 sal_Handle
GetNextFontInfo( sal_Handle hFontInfo
) const;
204 const FontInfo
& GetFontInfo( sal_Handle hFontInfo
) const;
206 const sal_IntPtr
* GetSizeAry( const FontInfo
& rInfo
) const;
207 static const sal_IntPtr
* GetStdSizeAry();
210 FontList( const FontList
& );
211 FontList
& operator =( const FontList
& );
219 class SVT_DLLPUBLIC FontSizeNames
222 const struct ImplFSNameItem
* mpArray
;
226 FontSizeNames( LanguageType eLanguage
/* = LANGUAGE_DONTKNOW */ );
228 sal_uLong
Count() const { return mnElem
; }
229 sal_Bool
IsEmpty() const { return !mnElem
; }
231 long Name2Size( const OUString
& ) const;
232 OUString
Size2Name( long ) const;
234 OUString
GetIndexName( sal_uLong nIndex
) const;
235 long GetIndexSize( sal_uLong nIndex
) const;
238 #endif // _CTRLTOOL_HXX
240 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */