xref: /trunk/main/svtools/inc/svtools/stdmenu.hxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 #ifndef _STDMENU_HXX
29 #define _STDMENU_HXX
30 
31 #include "svtools/svtdllapi.h"
32 #include <tools/link.hxx>
33 #ifndef _MENU_HXX
34 #include <vcl/menu.hxx>
35 #endif
36 
37 class FontList;
38 class FontInfo;
39 
40 /*************************************************************************
41 
42 Beschreibung
43 ============
44 
45 class FontNameMenu
46 
47 Beschreibung
48 
49 Erlaubt die Auswahl von Fonts. Das Menu wird ueber Fill mit den FontNamen
50 gefuellt. Fill sortiert automatisch die FontNamen (inkl. aller Umlaute und
51 sprachabhaengig). Mit SetCurName()/GetCurName() kann der aktuelle Fontname
52 gesetzt/abgefragt werden. Wenn SetCurName() mit einem leeren String
53 aufgerufen wird, wird kein Eintrag als aktueller angezeigt (fuer DontKnow).
54 Vor dem Selectaufruf wird der ausgewaehlte Name automatisch als aktueller
55 gesetzt und wuerde beim naechsten Aufruf auch als aktueller Name angezeigt
56 werden. Deshalb sollte vor PopupMenu::Execute() gegebenenfalls mit
57 SetCurName() der aktuelle Fontname gesetzt werden.
58 
59 Da die Id's und der interne Aufbau des Menus nicht bekannt ist, muss ein
60 Select-Handler gesetzt werden, um die Auswahl eines Namens mitzubekommen.
61 
62 In dieses Menu koennen keine weiteren Items eingefuegt werden.
63 
64 Spaeter soll auch das Menu die gleichen Bitmaps anzeigen, wie die
65 FontNameBox. Auf den Systemen, wo Menues nicht automatisch scrollen,
66 wird spaeter wohl ein A-Z Menu ziwschengeschaltet. Da ein Menu bei vielen
67 installierten Fonts bisher schon immer lange gebraucht hat, sollte dieses
68 Menu schon jetzt nur einmal erzeugt werden (da sonst das Kontextmenu bis
69 zu 10-Sekunden fuer die Erzeugung brauchen koennte).
70 
71 Querverweise
72 
73 FontList; FontStyleMenu; FontSizeMenu; FontNameBox
74 
75 --------------------------------------------------------------------------
76 
77 class FontStyleMenu
78 
79 Beschreibung
80 
81 Erlaubt die Auswahl eines FontStyles. Mit Fill wird das FontStyleMenu mit
82 den Styles zum uebergebenen Font gefuellt. Nachgebildete Styles werden
83 immer mit eingefuegt (kann sich aber noch aendern, da vielleicht
84 nicht alle Applikationen [StarDraw,Formel,FontWork] mit Syntetic-Fonts
85 umgehen koennen). Mit SetCurStyle()/GetCurStyle() kann der aktuelle Fontstyle
86 gesetzt/abgefragt werden. Der Stylename muss mit FontList::GetStyleName()
87 ermittelt werden. Wenn SetCurStyle() mit einem leeren String aufgerufen wird,
88 wird kein Eintrag als aktueller angezeigt (fuer DontKnow). Vor dem Selectaufruf
89 wird der ausgewaehlte Style automatisch als aktueller gesetzt und wuerde beim
90 naechsten Aufruf auch als aktueller Style angezeigt werden. Deshalb sollte vor
91 PopupMenu::Execute() gegebenenfalls mit SetCurStyle() der aktuelle Style
92 gesetzt werden. Da die Styles vom ausgewaehlten Font abhaengen, sollte
93 nach einer Aenderung des Fontnamen das Menu mit Fill mit den Styles des
94 Fonts neu gefuellt werden.
95 
96 Mit GetCurStyle() kann der ausgewaehlte Style abgefragt
97 werden. Mit Check wird der Style gecheckt/uncheckt, welcher aktiv
98 ist. Der Stylename muss mit FontList::GetStyleName() ermittelt werden. Vor
99 dem Selectaufruf wird der ausgewaehlte Style automatisch gecheckt. Mit
100 UncheckAllStyles() koennen alle Fontstyles geuncheckt werden (zum Beispiel
101 fuer DontKnow).
102 
103 Da die Id's und der interne Aufbau des Menus nicht bekannt ist, muss ein
104 Select-Handler gesetzt werden, um die Auswahl eines Styles mitzubekommen.
105 
106 An dieses Menu kann ueber MENU_APPEND weitere Items eingefuegt werden.
107 Bei Fill werden nur Items entfernt, die die Id zwischen FONTSTYLEMENU_FIRSTID
108 und FONTSTYLEMENU_LASTID haben.
109 
110 Querverweise
111 
112 FontList; FontNameMenu; FontSizeMenu; FontStyleBox
113 
114 --------------------------------------------------------------------------
115 
116 class FontSizeMenu
117 
118 Beschreibung
119 
120 Erlaubt die Auswahl von Fontgroessen. Ueber Fill wird das FontSizeMenu
121 gefuellt und ueber GetCurHeight() kann die ausgewaehlte Fontgroesse
122 abgefragt werden. Mit SetCurHeight()/GetCurHeight() kann die aktuelle
123 Fontgroesse gesetzt/abgefragt werden. Wenn SetCurHeight() mit 0 aufgerufen
124 wird, wird kein Eintrag als aktueller angezeigt (fuer DontKnow). Vor dem
125 Selectaufruf wird die ausgewaehlte Groesse automatisch als aktuelle gesetzt
126 und wuerde beim naechsten Aufruf auch als aktuelle Groesse angezeigt werden.
127 Deshalb sollte vor PopupMenu::Execute() gegebenenfalls mit SetCurHeight()
128 die aktuelle Groesse gesetzt werden. Da die Groessen vom ausgewaehlten Font
129 abhaengen, sollte nach einer Aenderung des Fontnamen das Menu mit Fill mit
130 den Groessen des Fonts neu gefuellt werden.
131 
132 Da die Id's und der interne Aufbau des Menus nicht bekannt ist, muss ein
133 Select-Handler gesetzt werden, um die Auswahl einer Groesse mitzubekommen.
134 
135 Alle Groessen werden in 10tel Point angegeben.
136 
137 In dieses Menu koennen keine weiteren Items eingefuegt werden.
138 
139 Spaeter soll das Menu je nach System die Groessen anders darstelllen. Zum
140 Beispiel koennte der Mac spaeter vielleicht einmal die Groessen als Outline
141 darstellen, die als Bitmap-Fonts vorhanden sind.
142 
143 Querverweise
144 
145 FontList; FontNameMenu; FontStyleMenu; FontSizeBox
146 
147 *************************************************************************/
148 
149 // ----------------
150 // - FontNameMenu -
151 // ----------------
152 
153 class SVT_DLLPUBLIC FontNameMenu : public PopupMenu
154 {
155 private:
156     XubString       maCurName;
157     Link            maSelectHdl;
158     Link            maHighlightHdl;
159 
160 public:
161                     FontNameMenu();
162     virtual         ~FontNameMenu();
163 
164     virtual void    Select();
165     virtual void    Highlight();
166 
167     void            Fill( const FontList* pList );
168 
169     void            SetCurName( const XubString& rName );
170     const XubString& GetCurName() const { return maCurName; }
171 
172     void            SetSelectHdl( const Link& rLink ) { maSelectHdl = rLink; }
173     const Link&     GetSelectHdl() const { return maSelectHdl; }
174     void            SetHighlightHdl( const Link& rLink ) { maHighlightHdl = rLink; }
175     const Link&     GetHighlightHdl() const { return maHighlightHdl; }
176 };
177 
178 // -----------------
179 // - FontStyleMenu -
180 // -----------------
181 
182 #define FONTSTYLEMENU_FIRSTID       62000
183 #define FONTSTYLEMENU_LASTID        62999
184 
185 class SVT_DLLPUBLIC FontStyleMenu : public PopupMenu
186 {
187 private:
188     XubString       maCurStyle;
189     Link            maSelectHdl;
190     Link            maHighlightHdl;
191 
192     SVT_DLLPRIVATE sal_Bool         ImplIsAlreadyInserted( const XubString& rStyleName, sal_uInt16 nCount );
193 
194 public:
195                     FontStyleMenu();
196     virtual         ~FontStyleMenu();
197 
198     virtual void    Select();
199     virtual void    Highlight();
200 
201     void            Fill( const XubString& rName, const FontList* pList );
202     void            SetCurStyle( const XubString& rStyle );
203     const XubString& GetCurStyle() const { return maCurStyle; }
204 
205     void            SetSelectHdl( const Link& rLink ) { maSelectHdl = rLink; }
206     const Link&     GetSelectHdl() const { return maSelectHdl; }
207     void            SetHighlightHdl( const Link& rLink ) { maHighlightHdl = rLink; }
208     const Link&     GetHighlightHdl() const { return maHighlightHdl; }
209 };
210 
211 // ----------------
212 // - FontSizeMenu -
213 // ----------------
214 
215 class SVT_DLLPUBLIC FontSizeMenu : public PopupMenu
216 {
217 private:
218     long*           mpHeightAry;
219     long            mnCurHeight;
220     Link            maSelectHdl;
221     Link            maHighlightHdl;
222 
223 public:
224                     FontSizeMenu();
225                     ~FontSizeMenu();
226 
227     virtual void    Select();
228     virtual void    Highlight();
229 
230     void            Fill( const FontInfo& rInfo, const FontList* pList );
231 
232     void            SetCurHeight( long nHeight );
233     long            GetCurHeight() const { return mnCurHeight; }
234 
235     void            SetSelectHdl( const Link& rLink ) { maSelectHdl = rLink; }
236     const Link&     GetSelectHdl() const { return maSelectHdl; }
237     void            SetHighlightHdl( const Link& rLink ) { maHighlightHdl = rLink; }
238     const Link&     GetHighlightHdl() const { return maHighlightHdl; }
239 };
240 
241 #endif  // _STDMENU_HXX
242