1 /* -*- mode: C++; tab-width: 4; c-basic-offset: 4; -*- */ 2 3 /* AbiSource Application Framework 4 * Copyright (C) 1998,1999 AbiSource, Inc. 5 * Copyright (C) 2004 Hubert Figuiere 6 * 7 * This program is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU General Public License 9 * as published by the Free Software Foundation; either version 2 10 * of the License, or (at your option) any later version. 11 * 12 * This program is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this program; if not, write to the Free Software 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 20 * 02110-1301 USA. 21 */ 22 23 24 #ifndef XAP_APP_H 25 #define XAP_APP_H 26 27 /* pre-emptive dismissal; ut_types.h is needed by just about everything, 28 * so even if it's commented out in-file that's still a lot of work for 29 * the preprocessor to do... 30 */ 31 #ifndef UT_TYPES_H 32 #include "ut_types.h" 33 #endif 34 #include "ut_vector.h" 35 #include "ut_Language.h" 36 #include "ut_string_class.h" 37 #include "xap_AppImpl.h" 38 #include "xav_Listener.h" 39 #include <map> 40 #include <string> 41 #include <list> 42 43 #define NUM_MODELESSID 39 44 45 class XAP_DialogFactory; 46 class XAP_Dialog_Modeless; 47 class XAP_Toolbar_ControlFactory; 48 class XAP_Frame; 49 class EV_EditMethodContainer; 50 class EV_EditBindingMap; 51 class EV_EditEventMapper; 52 class EV_Menu_ActionSet; 53 class EV_Toolbar_ActionSet; 54 class XAP_BindingSet; 55 class XAP_Prefs; 56 class XAP_StringSet; 57 class XAP_Dictionary; 58 class PD_DocumentRange; 59 class AV_View; 60 class AD_Document; 61 class XAP_EncodingManager; 62 class UT_String; 63 class XAP_Menu_Factory; 64 class XAP_Toolbar_Factory; 65 class UT_UUIDGenerator; 66 class GR_GraphicsFactory; 67 class GR_Graphics; 68 class GR_AllocInfo; 69 class XAP_InputModes; 70 class AV_Listener; 71 class GR_EmbedManager; 72 class XAP_Module; 73 class UT_ScriptLibrary; 74 75 76 #define XAP_SD_FILENAME_LENGTH 256 77 #define XAP_SD_MAX_FILES 5 78 79 /*! 80 Date for storing state 81 Please note that this struction must not contain any pointers; the hildon state saving 82 mechanism simply memcopies its contents. 83 */ 84 struct ABI_EXPORT XAP_StateData 85 { 86 XAP_StateData(); 87 UT_uint32 iFileCount; 88 char filenames[XAP_SD_MAX_FILES][XAP_SD_FILENAME_LENGTH]; 89 UT_uint32 iDocPos[XAP_SD_MAX_FILES]; 90 UT_sint32 iXScroll[XAP_SD_MAX_FILES]; 91 UT_sint32 iYScroll[XAP_SD_MAX_FILES]; 92 }; 93 94 /***************************************************************** 95 ****************************************************************** 96 ** This file defines the base class for the cross-platform 97 ** application. This is used to hold all of the application-specific 98 ** data. Only one of these is created by the application. 99 ****************************************************************** 100 *****************************************************************/ 101 102 class ABI_EXPORT XAP_App 103 { 104 public: /* TODO these should be protected */ 105 static const char* s_szBuild_ID; 106 static const char* s_szBuild_Version; 107 static const char* s_szBuild_Options; 108 static const char* s_szBuild_Target; 109 static const char* s_szBuild_CompileTime; 110 static const char* s_szBuild_CompileDate; 111 static const char* s_szAbiSuite_Home; 112 113 public: 114 static const char* getBuildId (); 115 static const char* getBuildVersion (); 116 static const char* getBuildOptions (); 117 static const char* getBuildTarget (); 118 static const char* getBuildCompileTime (); 119 static const char* getBuildCompileDate (); 120 static const char* getAbiSuiteHome (); 121 122 public: 123 XAP_App(const char * szAppName); 124 virtual ~XAP_App(); 125 getImpl()126 XAP_AppImpl* getImpl() 127 { return m_pImpl; } 128 129 virtual const char * getDefaultEncoding () const = 0 ; 130 131 virtual bool initialize(const char * szKeyBindingsKey, const char * szKeyBindingsDefaultValue); 132 virtual bool rememberFrame(XAP_Frame* pFrame, XAP_Frame* pCloneOf = 0); 133 virtual bool forgetFrame(XAP_Frame * pFrame); 134 virtual bool forgetClones(XAP_Frame * pFrame); 135 virtual bool getClones(UT_GenericVector<XAP_Frame*> *pvClonesCopy, XAP_Frame * pFrame); 136 virtual XAP_Frame * newFrame() = 0; 137 virtual void reallyExit() = 0; 138 139 bool updateClones(XAP_Frame * pFrame); 140 141 virtual void notifyFrameCountChange (); // default is empty method 142 UT_sint32 getFrameCount() const; 143 XAP_Frame * getFrame(UT_sint32 ndx) const; 144 UT_sint32 findFrame(XAP_Frame * pFrame) const; 145 UT_sint32 findFrame(const char * szFilename) const; 146 147 void enumerateFrames(UT_Vector & v) const; 148 std::list< AD_Document* > getDocuments( const AD_Document * pExclude = 0 ) const; 149 void enumerateDocuments(UT_Vector & v, const AD_Document * pExclude) const; 150 const char * getApplicationTitleForTitleBar() const; 151 const char * getApplicationName() const; 152 153 virtual void rebuildMenus(void); 154 155 EV_EditMethodContainer * getEditMethodContainer() const; 156 EV_EditBindingMap * getBindingMap(const char * szName); getBindingSet(void)157 XAP_BindingSet * getBindingSet(void) 158 { return m_pBindingSet;} /* the set of binding maps */ 159 const EV_Menu_ActionSet * getMenuActionSet() const; 160 const EV_Toolbar_ActionSet * getToolbarActionSet() const; 161 const XAP_EncodingManager * getEncodingManager() const; 162 EV_Menu_ActionSet * getMenuActionSet(); 163 EV_Toolbar_ActionSet * getToolbarActionSet(); 164 165 // only used in ispell builds because aspell doesn't suck... 166 bool addWordToDict(const UT_UCSChar * pWord, UT_uint32 len); 167 bool isWordInDict(const UT_UCSChar * pWord, UT_uint32 len) const; 168 void suggestWord(UT_GenericVector<UT_UCSChar*> * pVecSuggestions, const UT_UCSChar * pWord, UT_uint32 lenWord); 169 XAP_Prefs * getPrefs() const; 170 bool getPrefsValue(const gchar * szKey, const gchar ** pszValue) const; 171 bool getPrefsValue(const UT_String &stKey, UT_String &stValue) const; 172 bool getPrefsValueBool(const gchar * szKey, bool * pbValue) const; 173 174 static XAP_App * getApp(); 175 176 virtual XAP_DialogFactory * getDialogFactory() = 0; 177 virtual XAP_Toolbar_ControlFactory * getControlFactory() = 0; 178 179 virtual const XAP_StringSet * getStringSet() const = 0; 180 virtual void migrate(const char *oldName, const char *newName, const char *path) const; 181 virtual const char * getUserPrivateDirectory() = 0; 182 virtual const char * getAbiSuiteLibDir() const; 183 virtual const char * getAbiSuiteAppDir() const = 0; 184 virtual bool findAbiSuiteLibFile(std::string & path, const char * filename, const char * subdir = 0); 185 virtual bool findAbiSuiteAppFile(std::string & path, const char * filename, const char * subdir = 0); // doesn't check user-dir 186 virtual void copyToClipboard(PD_DocumentRange * pDocRange, bool bUseClipboard = true) = 0; 187 virtual void pasteFromClipboard(PD_DocumentRange * pDocRange, bool bUseClipboard, bool bHonorFormatting = true) = 0; 188 virtual bool canPasteFromClipboard() = 0; 189 virtual void cacheCurrentSelection(AV_View *) = 0; addClipboardFmt(const char *)190 virtual void addClipboardFmt (const char * /*szFormat*/) {} deleteClipboardFmt(const char *)191 virtual void deleteClipboardFmt (const char * /*szFormat*/) {} 192 void rememberFocussedFrame(void * pJustFocussedFrame); 193 XAP_Frame * getLastFocussedFrame() const; 194 XAP_Frame * findValidFrame() const; 195 bool safeCompare(XAP_Frame * lff, XAP_Frame * f); 196 UT_sint32 safefindFrame(XAP_Frame * f) const; 197 void clearLastFocussedFrame(); 198 void clearIdTable(); setDebugBool(void)199 bool setDebugBool(void) { m_bDebugBool = true; return m_bDebugBool; } clearDebugBool(void)200 bool clearDebugBool(void) { m_bDebugBool = false; return m_bDebugBool; } isDebug(void)201 bool isDebug(void) { return m_bDebugBool; } 202 void rememberModelessId(UT_sint32 id, XAP_Dialog_Modeless * pDialog); 203 void forgetModelessId(UT_sint32 id); 204 bool isModelessRunning(UT_sint32 id); 205 XAP_Dialog_Modeless * getModelessDialog(UT_sint32 id); 206 void closeModelessDlgs(); 207 void notifyModelessDlgsOfActiveFrame(XAP_Frame *p_Frame); 208 void notifyModelessDlgsCloseFrame(XAP_Frame *p_Frame); 209 setViewSelection(AV_View *)210 virtual void setViewSelection(AV_View * /*pView*/) {}; //subclasses override getViewSelection()211 virtual AV_View * getViewSelection() { return static_cast<AV_View *>(NULL);} ; // subclasses override 212 213 virtual bool setGeometry(UT_sint32 x, UT_sint32 y, 214 UT_uint32 width, UT_uint32 height, UT_uint32 flags = 0); 215 virtual bool getGeometry(UT_sint32 *x, UT_sint32 *y, 216 UT_uint32 *width, UT_uint32 *height, UT_uint32 *flags = 0); 217 virtual void parseAndSetGeometry(const char *string); 218 virtual UT_sint32 makeDirectory(const char * szPath, const UT_sint32 mode ) const = 0; getMenuFactory(void)219 XAP_Menu_Factory * getMenuFactory(void) const { return m_pMenuFactory; } getToolbarFactory(void)220 XAP_Toolbar_Factory * getToolbarFactory(void) const { return m_pToolbarFactory; } 221 222 typedef enum {BIDI_SUPPORT_NONE, BIDI_SUPPORT_GUI, BIDI_SUPPORT_FULL} BidiSupportType; 223 theOSHasBidiSupport()224 virtual BidiSupportType theOSHasBidiSupport() const {return BIDI_SUPPORT_NONE;} 225 void setEnableSmoothScrolling(bool b); isSmoothScrollingEnabled(void)226 bool isSmoothScrollingEnabled(void) { return m_bEnableSmoothScrolling; } 227 setBonoboRunning(void)228 void setBonoboRunning(void) { m_bBonoboRunning = true; } isBonoboRunning(void)229 bool isBonoboRunning(void) const { return m_bBonoboRunning; } getDefaultGeometry(UT_uint32 &,UT_uint32 &,UT_uint32 &)230 virtual void getDefaultGeometry(UT_uint32& /*width*/, 231 UT_uint32& /*height*/, 232 UT_uint32& /*flags*/) {} 233 getKbdLanguage()234 const UT_LangRecord * getKbdLanguage() const { return m_pKbdLang; } 235 void setKbdLanguage(const char * pszLang); 236 getUUIDGenerator()237 UT_UUIDGenerator * getUUIDGenerator() const { return m_pUUIDGenerator; } 238 std::string createUUIDString() const; 239 openURL(const char * url)240 bool openURL(const char * url) { return m_pImpl->openURL(url); } openHelpURL(const char * url)241 bool openHelpURL(const char * url) { return m_pImpl->openHelpURL(url); } localizeHelpUrl(const char * pathBeforeLang,const char * pathAfterLang,const char * remoteURLbase)242 UT_String localizeHelpUrl(const char * pathBeforeLang, 243 const char * pathAfterLang, const char * remoteURLbase) 244 { return m_pImpl->localizeHelpUrl(pathBeforeLang, pathAfterLang, remoteURLbase); } 245 getGraphicsFactory()246 GR_GraphicsFactory * getGraphicsFactory() const { return m_pGraphicsFactory; } 247 void setDefaultGraphicsId(UT_uint32 i); 248 /* primary graphics allocator */ 249 GR_Graphics * newGraphics(GR_AllocInfo &ai) const; 250 /* secondary graphics allocator; use only in special cases */ 251 GR_Graphics * newGraphics(UT_uint32 iClassId, GR_AllocInfo &ai) const; 252 virtual GR_Graphics * newDefaultScreenGraphics() const = 0; 253 254 virtual UT_sint32 setInputMode(const char * szName, bool bForce=false); 255 const char * getInputMode() const; 256 EV_EditEventMapper * getEditEventMapper() const; 257 bool addListener(AV_Listener * pListener, AV_ListenerId * pListenerId); 258 bool removeListener(AV_ListenerId listenerId); 259 virtual bool notifyListeners(AV_View * pView, const AV_ChangeMask hint,void * pPrivateData = NULL); 260 261 bool registerEmbeddable(GR_EmbedManager * pEmbed, const char *uid = NULL); 262 bool unRegisterEmbeddable(const char *uid); 263 GR_EmbedManager * getEmbeddableManager(GR_Graphics * pG, const char * szObjectType); 264 XAP_Module * getPlugin(const char * szPluginName); 265 266 static const char* findNearestFont(const char* pszFontFamily, 267 const char* pszFontStyle, 268 const char* pszFontVariant, 269 const char* pszFontWeight, 270 const char* pszFontStretch, 271 const char* pszFontSize, 272 const char* pszLang); 273 274 bool saveState(bool bQuit); 275 bool retrieveState(); clearStateInfo()276 virtual void clearStateInfo(){}; 277 278 bool getDisableDoubleBuffering() const; 279 void setDisableDoubleBuffering( bool v ); 280 bool getNoGUI() const; 281 void setNoGUI( bool v ); 282 283 protected: 284 void _setAbiSuiteLibDir(const char * sz); _getKbdLanguage()285 virtual const char * _getKbdLanguage() {return NULL;} _setUUIDGenerator(UT_UUIDGenerator * pG)286 void _setUUIDGenerator(UT_UUIDGenerator * pG) { m_pUUIDGenerator = pG; } 287 288 virtual bool _saveState(XAP_StateData & sd); 289 virtual bool _retrieveState(XAP_StateData & sd); 290 291 const char * m_szAppName; 292 const char * m_szAbiSuiteLibDir; 293 294 EV_EditMethodContainer * m_pEMC; /* the set of all possible EditMethods in the app */ 295 XAP_BindingSet * m_pBindingSet; /* the set of binding maps */ 296 EV_Menu_ActionSet * m_pMenuActionSet; /* the set of all possible menu actions in the app */ 297 EV_Toolbar_ActionSet * m_pToolbarActionSet; 298 XAP_Dictionary * m_pDict; 299 XAP_Prefs * m_prefs; /* populated in AP_<platform>App::initialize() */ 300 301 UT_GenericVector<XAP_Frame*> m_vecFrames; 302 typedef std::map<std::string, UT_GenericVector<XAP_Frame*>*> CloneMap; 303 CloneMap m_hashClones; 304 XAP_Frame * m_lastFocussedFrame; 305 XAP_Menu_Factory * m_pMenuFactory; 306 XAP_Toolbar_Factory * m_pToolbarFactory; 307 308 struct modeless_pair 309 { 310 UT_sint32 id; 311 XAP_Dialog_Modeless * pDialog; 312 } m_IdTable[NUM_MODELESSID+1]; 313 314 static XAP_App * m_pApp; 315 bool m_bAllowCustomizing; 316 bool m_bAreCustomized; 317 bool m_bDebugBool; 318 bool m_bBonoboRunning; 319 bool m_bEnableSmoothScrolling; 320 bool m_bDisableDoubleBuffering; 321 bool m_bNoGUI; 322 private: 323 const UT_LangRecord * m_pKbdLang; 324 UT_UUIDGenerator * m_pUUIDGenerator; 325 326 GR_GraphicsFactory * m_pGraphicsFactory; 327 UT_uint32 m_iDefaultGraphicsId; 328 329 XAP_InputModes * m_pInputModes; 330 std::map<std::string, GR_EmbedManager *> m_mapEmbedManagers; 331 XAP_App(const XAP_App&); // should not even be called. Just to avoid a warning. 332 void operator=(const XAP_App&); 333 #ifdef DEBUG 334 void _fundamentalAsserts() const; 335 #endif 336 XAP_AppImpl* m_pImpl; 337 UT_GenericVector<AV_Listener *> m_vecPluginListeners; 338 UT_ScriptLibrary * m_pScriptLibrary; 339 }; 340 341 #endif /* XAP_APP_H */ 342