// -*- C++ -*- /* * GChemPaint library * application.h * * Copyright (C) 2004-2007 Jean Bréfort * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #ifndef GCHEMPAINT_APPLICATION_H #define GCHEMPAINT_APPLICATION_H #include "tool.h" #include #include #include #include #include #include using namespace gcu; typedef struct { char const *name; unsigned char const *data_24; } gcpIconDesc; class gcpWindow; class gcpNewFileDlg; class gcpApplication: public Application { public: gcpApplication(); virtual ~gcpApplication(); void ActivateTool (const string& toolname, bool activate); void ActivateWindowsActionWidget (const char *path, bool activate); virtual void ClearStatus(); virtual void SetStatusText(const char* text); virtual GtkWindow* GetWindow() = 0; void SetMenu(const string& menuname, GtkWidget* menu) {Menus[menuname] = menu;} GtkWidget* GetMenu(const string& name) {return Menus[name];} gcpTool* GetActiveTool() {return m_pActiveTool;} gcpDocument* GetActiveDocument() {return m_pActiveDoc;} void SetActiveDocument (gcpDocument* pDoc) {m_pActiveDoc = pDoc;} gcpTool* GetTool(const string& name) {return Tools[name];} void SetTool (const string& toolname, gcpTool* tool) {Tools[toolname] = tool;} GtkWidget* GetToolItem(const string& name) {return ToolItems[name];} void SetToolItem(const string& name, GtkWidget* w) {ToolItems[name] = w;} void SetCurZ(int Z) {m_CurZ = Z;} int GetCurZ() {return m_CurZ;} void OnSaveAs(); bool FileProcess(const gchar* filename, const gchar* mime_type, bool bSave, GtkWindow *window, Document *pDoc = NULL); void SaveWithBabel(string const &filename, const gchar *mime_type, gcpDocument* pDoc); void OpenWithBabel(string const &filename, const gchar *mime_type, gcpDocument* pDoc); void SaveGcp(string const &filename, gcpDocument* pDoc); void OpenGcp(string const &filename, gcpDocument* pDoc); xmlDocPtr GetXmlDoc() {return XmlDoc;} void SetCallback(const string& name, GCallback cb) {Callbacks[name] = cb;} GCallback GetCallback(const string& name) {return Callbacks[name];} void OnSaveAsImage (); bool HaveGhemical () {return m_Have_Ghemical;} bool HaveInChI () {return m_Have_InChI;} int GetDocsNumber () {return m_Docs.size ();} void Zoom (double zoom); void AddActions (GtkRadioActionEntry const *entries, int nb, char const *ui_description, gcpIconDesc const *icons); void RegisterToolbar (char const *name, int index); void OnToolChanged (GtkAction *current); void AddWindow (gcpWindow *window); void DeleteWindow (gcpWindow *window); void NotifyIconification (bool iconified); void NotifyFocus (bool has_focus, gcpWindow *window = NULL); void CheckFocus (); void CloseAll (); list &GetSupportedMimeTypes () {return m_SupportedMimeTypes;} void OnConfigChanged (GConfClient *client, guint cnxn_id, GConfEntry *entry); list &GetExtensions(string &mime_type); void OnThemeNamesChanged (); // virtual menus actions: virtual void OnFileNew (char const *Theme = NULL) = 0; protected: void InitTools(); void BuildTools (); void ShowTools (bool visible); private: void TestSupportedType (char const *mime_type); protected: int m_CurZ; gcpDocument *m_pActiveDoc; gcpWindow *m_pActiveWin; map Menus; map ToolItems; map Toolbars; map Tools; map Callbacks; gcpTool* m_pActiveTool; static bool m_bInit, m_Have_Ghemical, m_Have_InChI; xmlDocPtr XmlDoc; unsigned m_NumWindow; //used for new files (Untitled%d) private: GtkIconFactory *IconFactory; list UiDescs; GtkRadioActionEntry* RadioActions; int m_entries; map ToolbarNames; unsigned m_NumDoc; //used to build the name of the action associated with the menu std::set m_Windows; int visible_windows; list m_SupportedMimeTypes; list m_WriteableMimeTypes; GConfClient *m_ConfClient; guint m_NotificationId; Object *m_Dummy; }; #endif //GCHEMPAINT_APPLICATION_H