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