/* Dr Genius an interactive geometry software
 * (C) Copyright Hilaire Fernandes  2003
 * hilaire@ofset.org 
 * 
 *
 *
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public Licences as by published
 * by the Free Software Foundation; either version 2; or (at your option)
 * any later version
 *
 * This program is distributed in the hope that it will entertaining,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of 
 * MERCHANTABILTY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
 * Publis 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.
 * 675 Mass Ave, Cambridge, MA 02139, USA.
 */

#ifndef DRGENIUS_MDI_H
#define DRGENIUS_MDI_H

// #define G_PLATFORM_WIN32

#include <gtk/gtk.h>
#include <gmodule.h>

#include "drgeo_printer.h"
#include "xmlinclude.h"
#include "drgenius_view.h"

// This class handle the multi document interface

class drgeniusMDI
{
 public:
  drgeniusMDI ();
  ~drgeniusMDI ();
  void newGeometricDocument (xmlNodePtr tree);
  void newTextDocument (xmlNodePtr tree);
  void openSession (gchar *filename);
  void evaluateScmFigure (gchar *filenalme);
  void closeView (drgeniusView *v);
  void renameView (drgeniusView *v, const gchar *newName);
  drgeniusView * activeView ();
  GList * viewList ();
  void reconcile_grayout_undo ();
  void reconcile_grayout_widget ();
  GList *addView (drgeniusView *v);
  GList *removeView (drgeniusView *v);
  void setMessage (const gchar * msg);
  void setNullView ();
  void setActiveView (gint page);
  void setActiveView (drgeniusView *v);
  GtkWindow * mainWindow ();
  void setTransientDialog (GtkWindow * dialog);
  GtkWidget *getMenuItem (gint n);
  void addMacroMenuItem (gchar *name, gchar *description);
  void setMacroMenuItemDescription (gchar *name, gchar *description);
 private:
  GtkWidget *p_undoButton, *p_undoItem, *p_redoButton, 
    *p_redoItem, *p_gridItem, *p_gridItemSc, *p_renameItem, *p_renameItemSc, *p_customUiItem,
    *p_saveItem, *p_saveAsItem, *p_saveMultipleItem, *p_printFigure,
    *p_exportItem, *p_exportPreferencesItem, *p_closeItem, 
    *p_drgeoStatusbar, *p_noteBook, *p_drgeoMDIVbox, *p_nullViewWidget,
    *p_windowsMenu, *p_macroMenu, *p_animationMenu;
  GtkTooltips *p_tooltipsMacro;
  GtkWindow *p_mainWindow;
  drgeniusView *p_activeView;
  GList *p_viewList;
  
};

// Helper functions to get the name of avalaible macro in the registry
char *firstMacroName ();
char *nextMacroName ();
gboolean saveMacro (gchar * name, xmlNodePtr tree);
gboolean loadMacro (xmlNodePtr macroXml);

// Callback for the Session Save Dialog
static void dialogSaveSession_response (gint r, GtkTreeSelection *select);
static void saveSelectedRow (GtkTreeModel *model, GtkTreePath *path,
			     GtkTreeIter *iter, gpointer data);
static void on_notebook_switchPage (GtkNotebook *notebook, 
				    GtkNotebookPage *page,
				    gint p, gpointer data);
static void on_windowsMenu_cb (GtkWidget * widget, gpointer v);
static void on_macroMenu_cb (GtkWidget * widget, gpointer v);

// Callback to libglade
extern "C" {
/*********************************/
/* Handlers to the MDI interface */
/*********************************/
G_MODULE_EXPORT static void nothing_cb (GtkWidget * widget, gpointer data);
G_MODULE_EXPORT gboolean on_drgeoMain_delete_event (GtkWidget *widget, 
						    GdkEvent *event, 
						    gpointer user_data);
G_MODULE_EXPORT void on_drgeoMain_destroy_event (GtkWidget *widget, 
						 GdkEvent *event,
						 gpointer user_data);
G_MODULE_EXPORT void undo_cb (GtkWidget * widget, gpointer data);
G_MODULE_EXPORT void redo_cb (GtkWidget * widget, gpointer data);
G_MODULE_EXPORT void new_figure_cb (GtkWidget * widget, gpointer data);
G_MODULE_EXPORT void new_editor_cb (GtkWidget * widget, gpointer data);
G_MODULE_EXPORT void close_cb (GtkWidget * widget, gpointer data);
G_MODULE_EXPORT void quit_cb (GtkWidget * widget, gpointer data);
G_MODULE_EXPORT void on_about_activate (GtkWidget * widget, gpointer data);
G_MODULE_EXPORT void open_cb (GtkWidget * widget, gpointer data);
G_MODULE_EXPORT void evaluate_cb (GtkWidget * widget, gpointer data);
G_MODULE_EXPORT void save_cb (GtkWidget * widget, gpointer data);
G_MODULE_EXPORT void save_as_cb (GtkWidget * widget, gpointer data);
G_MODULE_EXPORT void save_multiple_cb (GtkWidget * widget, gpointer data);
G_MODULE_EXPORT void print_figure_cb (GtkWidget * widget, gpointer data);
G_MODULE_EXPORT void print_view (gint reply, GtkOptionMenu *list, 
				 int printerCount, 
				 PrintDestination *pDestinations);
G_MODULE_EXPORT void export_figure_to_flydraw_cb (GtkWidget * widget, 
						  gpointer data);
G_MODULE_EXPORT void export_figure_to_latex_cb (GtkWidget * widget, 
						gpointer data);
G_MODULE_EXPORT void export_figure_to_postscript_cb (GtkWidget * widget, 
						     gpointer data);
G_MODULE_EXPORT void export_figure_to_png_cb (GtkWidget * widget, 
					      gpointer data);
G_MODULE_EXPORT void define_printing_area_cb (GtkWidget * widget, 
					      gpointer data);
G_MODULE_EXPORT void remove_printing_area_cb (GtkWidget * widget, 
					      gpointer data);
G_MODULE_EXPORT void save_session_ok_cb (GtkWidget * widget, 
					 GtkWidget * dialog);
G_MODULE_EXPORT void export_figure_flydraw_ok_cb (GtkWidget * widget, 
						  GtkWidget * dialog);
G_MODULE_EXPORT void export_figure_latex_ok_cb (GtkWidget * widget, 
						GtkWidget * dialog);
G_MODULE_EXPORT void export_figure_postscript_ok_cb (GtkWidget * widget, 
						     GtkWidget * dialog);
G_MODULE_EXPORT void export_figure_png_ok_cb (GtkWidget * widget, 
					      GtkWidget * dialog);
G_MODULE_EXPORT void gridItem_cb (GtkWidget * widget, 
				  gpointer data);
G_MODULE_EXPORT void rename_view_cb (GtkWidget * widget, gpointer data);
G_MODULE_EXPORT void rename_view_string(gint reply, GtkWidget *entry);
G_MODULE_EXPORT void on_entryRenameView_activate (GtkWidget *w, gpointer data);
G_MODULE_EXPORT void customize_interface_cb (GtkWidget * widget, gpointer data);
G_MODULE_EXPORT void on_contents_activate (GtkWidget *widget, gpointer data);
/*----- Property box ----------- */
G_MODULE_EXPORT void preferences_box_cb (GtkWidget * widget, gpointer data);
/*------ Animation -------*/
G_MODULE_EXPORT void on_animation1_activate(GtkWidget * widget, gpointer data);
G_MODULE_EXPORT void on_animation2_activate(GtkWidget * widget, gpointer data);
G_MODULE_EXPORT void on_animation3_activate(GtkWidget * widget, gpointer data);
G_MODULE_EXPORT void on_animation4_activate(GtkWidget * widget, gpointer data);
}

#endif /* DRGENIUS_MDI_H */


syntax highlighted by Code2HTML, v. 0.9.1