[drgeo/goffice: 73/82] use gi18n.h for gettext macros. ditto. add drgeo_mdi.h. removed gettext
- From: Jean Bréfort <jbrefort src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [drgeo/goffice: 73/82] use gi18n.h for gettext macros. ditto. add drgeo_mdi.h. removed gettext
- Date: Sat, 13 Feb 2010 14:24:46 +0000 (UTC)
commit 7cee7b683f3df149f328e1d8e55edb20d8685d51
Author: Jean Brefort <jean brefort normalesup org>
Date: Sat Feb 25 17:03:27 2006 +0000
use gi18n.h for gettext macros. ditto. add drgeo_mdi.h. removed gettext
2006-02-25 Jean Brefort <jean brefort normalesup org>
* drgenius_mdi.cc: use gi18n.h for gettext macros.
* drgeo_adaptDialog.cc: ditto.
* geo/Makefile.am: add drgeo_mdi.h.
* geo/define.h: removed gettext macros
* geo/drgeo_angle.cc: use gi18n-lib.h for gettext macros.
* geo/drgeo_arcCircle.cc: use gi18n-lib.h and add GetBounds.
* geo/drgeo_arcCircle.h: add GetBounds.
* geo/drgeo_circle.cc: use gi18n-lib.h and add GetBounds.
* geo/drgeo_circle.h: add GetBounds.
* geo/drgeo_config.cc: use gi18n-lib.h for gettext macros.
* geo/drgeo_control.cc: ditto.
* geo/drgeo_dialog.cc: ditto.
* geo/drgeo_drawable.cc: set NULL tool before destroying a drgeoDrawableUI
[#1438665].
* geo/drgeo_equation.cc: use gi18n-lib.h for gettext macros.
* geo/drgeo_figure.cc: don't try to save area related stuff is area is NULL.
* geo/drgeo_halfLine.cc: use gi18n-lib.h and add GetBounds.
* geo/drgeo_halfLine.h: add GetBounds.
* geo/drgeo_line.cc: use gi18n-lib.h and add GetBounds.
* geo/drgeo_line.h: add GetBounds.
* geo/drgeo_locus.cc: use gi18n-lib.h for gettext macros.
* geo/drgeo_mdi.cc: minor typo.
* geo/drgeo_menu.cc: use GETTEXT_PACKAGE when calling libglade.
* geo/drgeo_numeric.cc: use gi18n-lib.h for gettext macros.
* geo/drgeo_point.cc: use gi18n-lib.h and point::GetBounds returns false
when masked.
* geo/drgeo_point.h: removed unuseful virtual.
* geo/drgeo_polygon.cc: use gi18n-lib.h for gettext macros.
* geo/drgeo_repere.cc: ditto.
* geo/drgeo_scm_helper.cc: ditto.
* geo/drgeo_script.cc: ditto.
* geo/drgeo_segment.cc: ditto.
* geo/drgeo_tool.cc: ditto.
* geo/drgeo_toolbar.cc: use GETTEXT_PACKAGE when calling libglade.
* geo/drgeo_value.cc: use gi18n-lib.h for gettext macros.
* geo/drgeo_vector.cc: ditto.
* geo/geo_view.cc: ditto.
* glade/Makefile.am: add areabounds.glade
* glade/areabounds.glade: new glade file.
* goffice/Makefile.am: add new files.
* goffice/drgeo.cc: implement editing and add limits to the drawing area.
* goffice/drgeo_areabounds.cc: edit drawing area limits.
* goffice/drgeo_areabounds.h: ditto.
* goffice/drgeo_cairodrawable.cc: displays almost anything except text.
* goffice/drgeo_cairodrawable.h: ditto.
* goffice/drgeo_dummydrawable.cc: used when determining size.
* goffice/drgeo_dummydrawable.h: ditto.
* goffice/drgeo_gpdrawable.cc: prints almost anything, except text.
* goffice/drgeo_gpdrawable.h: ditto.
* goffice/drgeo_impl.h: component implementation.
* goffice/goffice_mdi.cc: make edition work.
* goffice/goffice_mdi.h: ditto.
* goffice/goffice_window.cc: editor window.
* goffice/goffice_window.h: ditto.
ChangeLog | 69 ++++++-
drgenius_mdi.cc | 3 +-
drgeo_adaptDialog.cc | 2 +
geo/Makefile.am | 2 +-
geo/define.h | 5 -
geo/drgeo_angle.cc | 1 +
geo/drgeo_arcCircle.cc | 46 ++++-
geo/drgeo_arcCircle.h | 2 +
geo/drgeo_circle.cc | 14 ++
geo/drgeo_circle.h | 49 ++--
geo/drgeo_config.cc | 2 +
geo/drgeo_control.cc | 3 +-
geo/drgeo_dialog.cc | 2 +
geo/drgeo_drawable.cc | 1 +
geo/drgeo_drawable.h | 1 -
geo/drgeo_equation.cc | 1 +
geo/drgeo_figure.cc | 39 ++--
geo/drgeo_halfLine.cc | 29 +++
geo/drgeo_halfLine.h | 2 +
geo/drgeo_line.cc | 29 +++
geo/drgeo_line.h | 2 +
geo/drgeo_locus.cc | 2 +-
geo/drgeo_mdi.cc | 2 +-
geo/drgeo_menu.cc | 2 +-
geo/drgeo_numeric.cc | 1 +
geo/drgeo_point.cc | 3 +
geo/drgeo_point.h | 2 +-
geo/drgeo_polygon.cc | 1 +
geo/drgeo_repere.cc | 1 +
geo/drgeo_scm_helper.cc | 2 +
geo/drgeo_script.cc | 4 +-
geo/drgeo_segment.cc | 1 +
geo/drgeo_tool.cc | 2 +
geo/drgeo_toolbar.cc | 19 +-
geo/drgeo_value.cc | 1 +
geo/drgeo_vector.cc | 4 +-
geo/geo_view.cc | 2 +
glade/Makefile.am | 4 +-
glade/areabounds.glade | 495 ++++++++++++++++++++++++++++++++++++++++
goffice/Makefile.am | 33 +++-
goffice/drgeo.cc | 257 ++++++++++++++++++---
goffice/drgeo_areabounds.cc | 222 ++++++++++++++++++
goffice/drgeo_areabounds.h | 53 +++++
goffice/drgeo_cairodrawable.cc | 139 +++++++++++-
goffice/drgeo_cairodrawable.h | 8 +-
goffice/drgeo_dummydrawable.cc | 44 ++++
goffice/drgeo_dummydrawable.h | 52 +++++
goffice/drgeo_gpdrawable.cc | 146 +++++++++++--
goffice/drgeo_gpdrawable.h | 8 +-
goffice/drgeo_impl.h | 43 ++++
goffice/goffice_mdi.cc | 121 +++++++++--
goffice/goffice_mdi.h | 40 ++--
goffice/goffice_window.cc | 297 ++++++++++++++++++++++++
goffice/goffice_window.h | 60 +++++
54 files changed, 2197 insertions(+), 178 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 7bb206f..3a51f2d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -27,6 +27,63 @@
* configure.ac: Add "zh_HK" to ALL_LINGUAS.
+2006-02-25 Jean Brefort <jean brefort normalesup org>
+
+ * drgenius_mdi.cc: use gi18n.h for gettext macros.
+ * drgeo_adaptDialog.cc: ditto.
+ * geo/Makefile.am: add drgeo_mdi.h.
+ * geo/define.h: removed gettext macros
+ * geo/drgeo_angle.cc: use gi18n-lib.h for gettext macros.
+ * geo/drgeo_arcCircle.cc: use gi18n-lib.h and add GetBounds.
+ * geo/drgeo_arcCircle.h: add GetBounds.
+ * geo/drgeo_circle.cc: use gi18n-lib.h and add GetBounds.
+ * geo/drgeo_circle.h: add GetBounds.
+ * geo/drgeo_config.cc: use gi18n-lib.h for gettext macros.
+ * geo/drgeo_control.cc: ditto.
+ * geo/drgeo_dialog.cc: ditto.
+ * geo/drgeo_drawable.cc: set NULL tool before destroying a drgeoDrawableUI
+ [#1438665].
+ * geo/drgeo_equation.cc: use gi18n-lib.h for gettext macros.
+ * geo/drgeo_figure.cc: don't try to save area related stuff is area is NULL.
+ * geo/drgeo_halfLine.cc: use gi18n-lib.h and add GetBounds.
+ * geo/drgeo_halfLine.h: add GetBounds.
+ * geo/drgeo_line.cc: use gi18n-lib.h and add GetBounds.
+ * geo/drgeo_line.h: add GetBounds.
+ * geo/drgeo_locus.cc: use gi18n-lib.h for gettext macros.
+ * geo/drgeo_mdi.cc: minor typo.
+ * geo/drgeo_menu.cc: use GETTEXT_PACKAGE when calling libglade.
+ * geo/drgeo_numeric.cc: use gi18n-lib.h for gettext macros.
+ * geo/drgeo_point.cc: use gi18n-lib.h and point::GetBounds returns false
+ when masked.
+ * geo/drgeo_point.h: removed unuseful virtual.
+ * geo/drgeo_polygon.cc: use gi18n-lib.h for gettext macros.
+ * geo/drgeo_repere.cc: ditto.
+ * geo/drgeo_scm_helper.cc: ditto.
+ * geo/drgeo_script.cc: ditto.
+ * geo/drgeo_segment.cc: ditto.
+ * geo/drgeo_tool.cc: ditto.
+ * geo/drgeo_toolbar.cc: use GETTEXT_PACKAGE when calling libglade.
+ * geo/drgeo_value.cc: use gi18n-lib.h for gettext macros.
+ * geo/drgeo_vector.cc: ditto.
+ * geo/geo_view.cc: ditto.
+ * glade/Makefile.am: add areabounds.glade
+ * glade/areabounds.glade: new glade file.
+ * goffice/Makefile.am: add new files.
+ * goffice/drgeo.cc: implement editing and add limits to the drawing area.
+ * goffice/drgeo_areabounds.cc: edit drawing area limits.
+ * goffice/drgeo_areabounds.h: ditto.
+ * goffice/drgeo_cairodrawable.cc: displays almost anything except text.
+ * goffice/drgeo_cairodrawable.h: ditto.
+ * goffice/drgeo_dummydrawable.cc: used when determining size.
+ * goffice/drgeo_dummydrawable.h: ditto.
+ * goffice/drgeo_gpdrawable.cc: prints almost anything, except text.
+ * goffice/drgeo_gpdrawable.h: ditto.
+ * goffice/drgeo_impl.h: component implementation.
+ * goffice/goffice_mdi.cc: make edition work.
+ * goffice/goffice_mdi.h: ditto.
+ * goffice/goffice_window.cc: editor window.
+ * goffice/goffice_window.h: ditto.
+
2006-02-08 Jean Brefort <jean brefort normalesup org>
* goffice/drgeo_cairodrawable.cc: now display all lines and points styles.
@@ -144,7 +201,11 @@
* configure.ac: Fix up the Norwegian entries in ALL_LINGUAS.
+<<<<<<< HEAD
2005-05-05 I�aki Larra�aga <dooteo euskalgnu org>
+=======
+2005-05-05 Iñaki Larrañaga <dooteo euskalgnu org>
+>>>>>>> use gi18n.h for gettext macros. ditto. add drgeo_mdi.h. removed gettext
* configure.ac: Added "eu" (Basque) to ALL_LINGUAS.
@@ -341,7 +402,7 @@
* drgeo_init.cc (drgeoInit): Load Serbian constant definitions.
-2003-09-16 Danilo � egan <dsegan gmx net>
+2003-09-16 Danilo ��� egan <dsegan gmx net>
* configure.ac: Added "sr" and "sr Latn" to ALL_LINGUAS.
@@ -762,7 +823,7 @@
* configure.in: Check if extra ncurses/ is required or not. Thanks
to Vladimir Tamara <vtamara gnu org>.
-2000-11-28 Martin NorbÃ?â?¬ck <d95mback dtek chalmers se>
+2000-11-28 Martin Norb���ck <d95mback dtek chalmers se>
* drgenius.desktop: Added Swedish translation.
@@ -870,7 +931,7 @@ Sun May 21 01:01:31 2000 George Lebl <jirka 5z com>
2000-02-15 Hilaire Fernandes <hilaire seul org>
- * drgenius_menus.c (toolbar): Use icons provide by Fr�©d�©ric
+ * drgenius_menus.c (toolbar): Use icons provide by Fr���©d���©ric
Toussaint for the toolbar.
Fri Feb 11 19:08:53 2000 George Lebl <jirka 5z com>
@@ -1403,7 +1464,7 @@ Mon May 17 23:55:50 1999 George Lebl <jirka 5z com>
* configure.in: raised version
-1999-05-18 03:27 1999 Tomas Ã?Â?gren <stric ing umu se>
+1999-05-18 03:27 1999 Tomas Ã?Â?Ã?Â?gren <stric ing umu se>
* src/*.c: Fixed i18n support
diff --git a/drgenius_mdi.cc b/drgenius_mdi.cc
index 97d98e8..9daf7c3 100644
--- a/drgenius_mdi.cc
+++ b/drgenius_mdi.cc
@@ -20,7 +20,7 @@
* 675 Mass Ave, Cambridge, MA 02139, USA.
*/
-#include <config.h>
+#include "config.h"
#include <glade/glade.h>
#include <errno.h>
@@ -35,6 +35,7 @@
#include "drgeo_gtkhelpers.h"
#include "drgeo_scm_helper.h"
#include "drgeo_tool.h"
+#include <glib/gi18n.h>
#define DATA_BEGIN ((char) 2)
#define DATA_END ((char) 5)
diff --git a/drgeo_adaptDialog.cc b/drgeo_adaptDialog.cc
index 9feba41..070bb80 100644
--- a/drgeo_adaptDialog.cc
+++ b/drgeo_adaptDialog.cc
@@ -21,6 +21,7 @@
* 675 Mass Ave, Cambridge, MA 02139, USA.
*/
+#include "config.h"
#include <stdio.h>
#include <time.h>
#include <unistd.h>
@@ -32,6 +33,7 @@
#include "drgeo_figure.h"
#include "drgeo_menu.h"
#include "drgenius_mdi.h"
+#include <glib/gi18n-lib.h>
#ifndef G_PLATFORM_WIN32
#include <crypt.h>
diff --git a/geo/Makefile.am b/geo/Makefile.am
index bc016a9..de12609 100644
--- a/geo/Makefile.am
+++ b/geo/Makefile.am
@@ -80,7 +80,7 @@ libgeo_la_SOURCES = \
drgeo_scm_api.h drgeo_scm_api.cc \
drgeo_scm_helper.h drgeo_scm_helper.cc \
drgeo_gtkhelpers.h drgeo_gtkhelpers.cc \
- drgeo_mdi.cc
+ drgeo_mdi.h drgeo_mdi.cc
CLEANFILES = $(BUILT_SOURCES)
diff --git a/geo/define.h b/geo/define.h
index d2c5f89..b602ab8 100755
--- a/geo/define.h
+++ b/geo/define.h
@@ -24,11 +24,6 @@
#ifndef define_h
#define define_h
-// Gettext macro
-#define _(x) gettext (x)
-#define N_(x) x
-
-
// Epsilon
#define EPSILON (10e-10)
diff --git a/geo/drgeo_angle.cc b/geo/drgeo_angle.cc
index f77a578..413d01a 100644
--- a/geo/drgeo_angle.cc
+++ b/geo/drgeo_angle.cc
@@ -30,6 +30,7 @@
#include "drgeo_repere.h"
#include "drgeo_drgeoStyle.h"
#include "drgeo_drawable.h"
+#include <glib/gi18n-lib.h>
angle::angle (drgeoPoint & p, liste_elem & parents, angleType type, gboolean createdFromMacro, liste_elem * figureList):
value (p, createdFromMacro, figureList)
diff --git a/geo/drgeo_arcCircle.cc b/geo/drgeo_arcCircle.cc
index efa0b24..85604c5 100644
--- a/geo/drgeo_arcCircle.cc
+++ b/geo/drgeo_arcCircle.cc
@@ -31,7 +31,7 @@
#include "drgeo_direction.h"
#include "liste_elem.h"
#include "drgeo_drawable.h"
-
+#include <glib/gi18n-lib.h>
arcCircle::arcCircle (liste_elem & parents, arcCircleType type, gboolean createdFromMacro, liste_elem * figureList):
geometricObject (createdFromMacro, figureList)
@@ -520,3 +520,47 @@ arcCircle::getIntersection (geometricObject & c, drgeoPoint & p, gint k)
}
}
}
+
+gboolean
+arcCircle::getBounds (double &left, double &top, double &right, double &bottom)
+{
+ if (style.mask == yes)
+ return false;
+ double x = center.getX (), y = center.getY (), cur, end,
+ xc, yc, step = M_PI / 2.;
+ if (length > 0) {
+ cur = origin;
+ end = origin + length;
+ } else {
+ end = origin;
+ cur = origin + length;
+ }
+ left = right = x + radius * cos (cur);
+ top = bottom = y + radius * sin (cur);
+ cur = ceil (cur / step) * step;
+ while (cur < end) {
+ xc = x + radius * cos (cur);
+ yc = y + radius * sin (cur);
+ if (xc < left)
+ left = xc;
+ if (xc > right)
+ right = xc;
+ if (yc < bottom)
+ bottom = yc;
+ if (yc > top)
+ top = yc;
+ cur += step;
+ }
+ xc = x + radius * cos (end);
+ yc = y + radius * sin (end);
+ if (xc < left)
+ left = xc;
+ if (xc > right)
+ right = xc;
+ if (yc < bottom)
+ bottom = yc;
+ if (yc > top)
+ top = yc;
+ cur += step;
+ return true;
+}
diff --git a/geo/drgeo_arcCircle.h b/geo/drgeo_arcCircle.h
index 22300ec..2a1f623 100644
--- a/geo/drgeo_arcCircle.h
+++ b/geo/drgeo_arcCircle.h
@@ -51,6 +51,8 @@ public:
drgeoPoint & getClosestPoint (drgeoPoint & p);
gdouble getAbscissa (drgeoPoint & p);
gboolean getIntersection (geometricObject & c, drgeoPoint & p, gint k);
+ gboolean getBounds (double &left, double &top, double &right,
+ double &bottom);
protected:
drgeoPoint center;
gdouble radius, origin, length;
diff --git a/geo/drgeo_circle.cc b/geo/drgeo_circle.cc
index ad30e20..91e4c50 100644
--- a/geo/drgeo_circle.cc
+++ b/geo/drgeo_circle.cc
@@ -31,6 +31,7 @@
#include "drgeo_direction.h"
#include "liste_elem.h"
#include "drgeo_drawable.h"
+#include <glib/gi18n-lib.h>
circle::circle (liste_elem & parents, circleType type, gboolean createdFromMacro, liste_elem * figureList):
geometricObject (createdFromMacro, figureList)
@@ -458,3 +459,16 @@ circle::getIntersection (geometricObject & c, drgeoPoint & p, gint k)
break;
}
}
+
+gboolean
+circle::getBounds (double &left, double &top, double &right, double &bottom)
+{
+ if (style.mask == yes)
+ return false;
+ double x = center.getX (), y = center.getY ();
+ left = x - radius;
+ right = x + radius;
+ bottom = y - radius;
+ top = y + radius;
+ return true;
+}
diff --git a/geo/drgeo_circle.h b/geo/drgeo_circle.h
index 2dd147d..e68e9af 100644
--- a/geo/drgeo_circle.h
+++ b/geo/drgeo_circle.h
@@ -28,30 +28,33 @@
class circle:public geometricObject
{
-public:
- circle (liste_elem & parents, circleType type,
- gboolean createdFromMacro, liste_elem * figureList);
- circle (xmlNodePtr tree, GHashTable * itemIdToAdress,
- liste_elem * figureList);
- ~circle ()
- {
- };
- void draw (drgeoDrawable & area, char force);
- void update (drgeoDrawable & area);
- gboolean overObject (drgeoPoint & mouse, gdouble range);
- void move (drgeoVector & t);
- void initName ();
- void save (xmlNodePtr tree, liste_elem & figureList);
- void updateDescription ();
- drgeoPoint & getCenter ();
- gdouble getRadius ();
- drgeoPoint & getPointAt (gdouble abscissa);
- drgeoPoint & getClosestPoint (drgeoPoint & p);
- gdouble getAbscissa (drgeoPoint & p);
- gboolean getIntersection (geometricObject & c, drgeoPoint & p, gint k);
+ public:
+ circle (liste_elem & parents, circleType type,
+ gboolean createdFromMacro, liste_elem * figureList);
+ circle (xmlNodePtr tree, GHashTable * itemIdToAdress,
+ liste_elem * figureList);
+ ~circle ()
+ {
+ };
+ void draw (drgeoDrawable & area, char force);
+ void update (drgeoDrawable & area);
+ gboolean overObject (drgeoPoint & mouse, gdouble range);
+ void move (drgeoVector & t);
+ void initName ();
+ void save (xmlNodePtr tree, liste_elem & figureList);
+ void updateDescription ();
+ drgeoPoint & getCenter ();
+ gdouble getRadius ();
+ drgeoPoint & getPointAt (gdouble abscissa);
+ drgeoPoint & getClosestPoint (drgeoPoint & p);
+ gdouble getAbscissa (drgeoPoint & p);
+ gboolean getIntersection (geometricObject & c, drgeoPoint & p,
+ gint k);
+ gboolean getBounds (double &left, double &top, double &right,
+ double &bottom);
protected:
- drgeoPoint center;
- gdouble radius;
+ drgeoPoint center;
+ gdouble radius;
};
#endif /* DRGEO_CIRCLE_H */
diff --git a/geo/drgeo_config.cc b/geo/drgeo_config.cc
index 7f27a4a..eb48c62 100644
--- a/geo/drgeo_config.cc
+++ b/geo/drgeo_config.cc
@@ -22,12 +22,14 @@
* 675 Mass Ave, Cambridge, MA 02139, USA.
*/
+#include "config.h"
#include <libintl.h>
#include "define.h"
#include "drgeo_config.h"
#include "drgeo_gtkhelpers.h"
#include "drgeo_drgeoStyle.h"
#include "drgeo_mdi.h"
+#include <glib/gi18n-lib.h>
extern int numericPrecision;
extern drgeoMDI *mdi;
diff --git a/geo/drgeo_control.cc b/geo/drgeo_control.cc
index bee4571..d605d3f 100644
--- a/geo/drgeo_control.cc
+++ b/geo/drgeo_control.cc
@@ -20,10 +20,11 @@
* 675 Mass Ave, Cambridge, MA 02139, USA.
*/
-
+#include "config.h"
#include "drgeo_mdi.h"
#include "drgeo_control.h"
#include "drgeo_gtkdrawable.h"
+#include <glib/gi18n-lib.h>
extern drgeoMDI *mdi;
diff --git a/geo/drgeo_dialog.cc b/geo/drgeo_dialog.cc
index f80cb52..4182e46 100644
--- a/geo/drgeo_dialog.cc
+++ b/geo/drgeo_dialog.cc
@@ -20,6 +20,7 @@
* 675 Mass Ave, Cambridge, MA 02139, USA.
*/
+#include "config.h"
#include <gtk/gtk.h>
#include <string.h>
#include <libintl.h>
@@ -29,6 +30,7 @@
#include "drgeo_gtkdrawable.h"
#include "drgeo_numeric.h"
#include "drgeo_mdi.h"
+#include <glib/gi18n-lib.h>
extern drgeoMDI *mdi;
diff --git a/geo/drgeo_drawable.cc b/geo/drgeo_drawable.cc
index 9c9f30b..68ff604 100644
--- a/geo/drgeo_drawable.cc
+++ b/geo/drgeo_drawable.cc
@@ -310,6 +310,7 @@ drgeoDrawableUI::drgeoDrawableUI ()
drgeoDrawableUI::~drgeoDrawableUI ()
{
printf ("drgeoDrawableUI destructor \n");
+ setTool (NULL);
delete animationToolDialogLess;
delete macroPlayToolDialogLess;
delete macroPlayTool;
diff --git a/geo/drgeo_drawable.h b/geo/drgeo_drawable.h
index f8ef7a6..7846142 100644
--- a/geo/drgeo_drawable.h
+++ b/geo/drgeo_drawable.h
@@ -237,7 +237,6 @@ private:
class drgeoTool * tool; // The current tool in use. This tool
// is determining the way user actions
// are handled.
-
};
#endif
diff --git a/geo/drgeo_equation.cc b/geo/drgeo_equation.cc
index 979b3d5..372810e 100644
--- a/geo/drgeo_equation.cc
+++ b/geo/drgeo_equation.cc
@@ -26,6 +26,7 @@
#include "drgeo_direction.h"
#include "drgeo_circle.h"
#include "drgeo_drawable.h"
+#include <glib/gi18n-lib.h>
equation::equation (drgeoPoint & p, liste_elem & parents, equationType type, gboolean createdFromMacro, liste_elem * figureList):
string (createdFromMacro, figureList)
diff --git a/geo/drgeo_figure.cc b/geo/drgeo_figure.cc
index 9fec01c..6291886 100644
--- a/geo/drgeo_figure.cc
+++ b/geo/drgeo_figure.cc
@@ -186,28 +186,30 @@ gboolean drgeoFigure::saveAs (xmlNodePtr drgeoXml, const gchar * name)
tree = xmlNewChild (drgeoXml, NULL, BAD_CAST "drgeo", NULL);
xmlSetProp (tree, BAD_CAST "name", BAD_CAST name);
- // Save the scale and coordinate of the origin
- xml_set_double_prop (tree, "scale", area->getScale ());
- center = area->getAreaCenter ();
- xml_set_double_prop (tree, "origin_x", center.getX ());
- xml_set_double_prop (tree, "origin_y", center.getY ());
if (showGrid)
xmlSetProp (tree, BAD_CAST "grid", BAD_CAST "True");
else
xmlSetProp (tree, BAD_CAST "grid", BAD_CAST "False");
-
- /* eventually save the printing area if defined */
- if (((drgeoGtkDrawable *) area)->printingArea ())
- {
- p1 = ((drgeoGtkDrawable *) area)->getPrintingAreaBR ();
- p2 = ((drgeoGtkDrawable *) area)->getPrintingAreaTL ();
-
- tree1 = xmlNewChild (tree, NULL, BAD_CAST "boundingBox", NULL);
- xml_set_double_prop (tree1, "tl_x", p2.getX ());
- xml_set_double_prop (tree1, "tl_y", p2.getY ());
- xml_set_double_prop (tree1, "br_x", p1.getX ());
- xml_set_double_prop (tree1, "br_y", p1.getY ());
- }
+ if (area) {
+ // Save the scale and coordinate of the origin
+ xml_set_double_prop (tree, "scale", area->getScale ());
+ center = area->getAreaCenter ();
+ xml_set_double_prop (tree, "origin_x", center.getX ());
+ xml_set_double_prop (tree, "origin_y", center.getY ());
+
+ /* eventually save the printing area if defined */
+ if (((drgeoGtkDrawable *) area)->printingArea ())
+ {
+ p1 = ((drgeoGtkDrawable *) area)->getPrintingAreaBR ();
+ p2 = ((drgeoGtkDrawable *) area)->getPrintingAreaTL ();
+
+ tree1 = xmlNewChild (tree, NULL, BAD_CAST "boundingBox", NULL);
+ xml_set_double_prop (tree1, "tl_x", p2.getX ());
+ xml_set_double_prop (tree1, "tl_y", p2.getY ());
+ xml_set_double_prop (tree1, "br_x", p1.getX ());
+ xml_set_double_prop (tree1, "br_y", p1.getY ());
+ }
+ }
/* eventually save the customized ui */
if (getPassword ())
@@ -1517,6 +1519,7 @@ gboolean drgeoFigure::getBounds (double &left, double &top,
liste_elem *fig;
geometricObject *item;
double itleft, ittop, itright, itbottom;
+ updateItems ();
fig = getFigureList ();
fig->init_lire ();
while ((item = (geometricObject *) fig->lire (0)) != NULL)
diff --git a/geo/drgeo_halfLine.cc b/geo/drgeo_halfLine.cc
index 5933f3e..1946b15 100644
--- a/geo/drgeo_halfLine.cc
+++ b/geo/drgeo_halfLine.cc
@@ -28,6 +28,7 @@
#include "drgeo_point.h"
#include "liste_elem.h"
#include "drgeo_drawable.h"
+#include <glib/gi18n-lib.h>
halfLine::halfLine (liste_elem & parents, halfLineType type, gboolean createdFromMacro, liste_elem * figureList):
direction (parents, (transformationType) type, createdFromMacro, figureList)
@@ -332,3 +333,31 @@ halfLine::getIntersection (geometricObject & c, drgeoPoint & p, gint k)
break;
}
}
+
+gboolean
+halfLine::getBounds (double &left, double &top, double &right, double &bottom)
+{
+ if (style.mask == yes)
+ return false;
+ double x0 = origin.getX (), y0 = origin.getY (),
+ x1 = u.getX (), y1 = u.getY (), a = atan2 (y1, x1);
+ left = x0;
+ bottom = y0;
+ right = x0 + 2. * cos (a);
+ top = y0 + 2. * sin (a);
+ if (type == HALFLINE_2PTS) {
+ right += x1;
+ top += y1;
+ }
+ if (left > right) {
+ a = left;
+ left = right;
+ right = a;
+ }
+ if (bottom > top) {
+ a = bottom;
+ bottom = top;
+ top = a;
+ }
+ return true;
+}
diff --git a/geo/drgeo_halfLine.h b/geo/drgeo_halfLine.h
index 61f507e..f5669b8 100644
--- a/geo/drgeo_halfLine.h
+++ b/geo/drgeo_halfLine.h
@@ -47,6 +47,8 @@ public:
drgeoPoint & getClosestPoint (drgeoPoint & p);
gdouble getAbscissa (drgeoPoint & p);
gboolean getIntersection (geometricObject & c, drgeoPoint & p, gint k);
+ gboolean getBounds (double &left, double &top,
+ double &right, double &bottom);
protected:
};
diff --git a/geo/drgeo_line.cc b/geo/drgeo_line.cc
index be34450..b0beef2 100644
--- a/geo/drgeo_line.cc
+++ b/geo/drgeo_line.cc
@@ -28,6 +28,7 @@
#include "drgeo_point.h"
#include "liste_elem.h"
#include "drgeo_drawable.h"
+#include <glib/gi18n-lib.h>
line::line (liste_elem & parents, lineType type, gboolean createdFromMacro, liste_elem * figureList):
direction (parents, (transformationType) type, createdFromMacro, figureList)
@@ -407,3 +408,31 @@ line::getIntersection (geometricObject & c, drgeoPoint & p, gint k)
}
}
+gboolean line::getBounds (double &left, double &top,
+ double &right, double &bottom)
+{
+ if (style.mask == yes)
+ return false;
+ double x0 = origin.getX (), y0 = origin.getY (),
+ x1 = u.getX (), y1 = u.getY (), a = atan2 (y1, x1);
+ // add 2 units around each points or just origin
+ left = x0 - 2. * cos (a);
+ bottom = y0 - 2. * sin (a);
+ right = x0 + 2. * cos (a);
+ top = y0 + 2. * sin (a);
+ if (type == LINE_2PTS) {
+ right += x1;
+ top += y1;
+ }
+ if (left > right) {
+ a = left;
+ left = right;
+ right = a;
+ }
+ if (bottom > top) {
+ a = bottom;
+ bottom = top;
+ top = a;
+ }
+ return true;
+}
diff --git a/geo/drgeo_line.h b/geo/drgeo_line.h
index f0898df..de7d8a8 100644
--- a/geo/drgeo_line.h
+++ b/geo/drgeo_line.h
@@ -47,6 +47,8 @@ public:
drgeoPoint & getClosestPoint (drgeoPoint & p);
gdouble getAbscissa (drgeoPoint & p);
gboolean getIntersection (geometricObject & c, drgeoPoint & p, gint k);
+ gboolean getBounds (double &left, double &top,
+ double &right, double &bottom);
protected:
};
diff --git a/geo/drgeo_locus.cc b/geo/drgeo_locus.cc
index 6e3ed40..5b6baa3 100644
--- a/geo/drgeo_locus.cc
+++ b/geo/drgeo_locus.cc
@@ -27,7 +27,7 @@
#include "drgeo_drawable.h"
#include "drgeo_gtkdrawable.h"
#include "traite.h" /* FIXME : move the method updateItems as a static method in drgeo_locus.* */
-
+#include <glib/gi18n-lib.h>
enum locusState
{
diff --git a/geo/drgeo_mdi.cc b/geo/drgeo_mdi.cc
index a984f51..efe6004 100644
--- a/geo/drgeo_mdi.cc
+++ b/geo/drgeo_mdi.cc
@@ -20,7 +20,7 @@
* 675 Mass Ave, Cambridge, MA 02139, USA.
*/
-#include <config.h>
+#include "config.h"
#include "drgeo_mdi.h"
drgeoMDI::drgeoMDI ()
diff --git a/geo/drgeo_menu.cc b/geo/drgeo_menu.cc
index 5ddc812..8bedec6 100644
--- a/geo/drgeo_menu.cc
+++ b/geo/drgeo_menu.cc
@@ -36,7 +36,7 @@ drgeoMenu::drgeoMenu (geoView *view):
GtkWidget *w;
// Build the pop up menu
- xml = glade_xml_new (DRGEO_GLADEDIR"/drgeoMDI.glade","geoMenu", NULL);
+ xml = glade_xml_new (DRGEO_GLADEDIR"/drgeoMDI.glade","geoMenu", GETTEXT_PACKAGE);
glade_xml_signal_autoconnect (xml);
// take a reference of each menu item so we can :
diff --git a/geo/drgeo_numeric.cc b/geo/drgeo_numeric.cc
index 22c31c4..06d2f35 100644
--- a/geo/drgeo_numeric.cc
+++ b/geo/drgeo_numeric.cc
@@ -32,6 +32,7 @@
#include "drgeo_repere.h"
#include "drgeo_drgeoStyle.h"
#include "drgeo_drawable.h"
+#include <glib/gi18n-lib.h>
int numericPrecision;
diff --git a/geo/drgeo_point.cc b/geo/drgeo_point.cc
index 20b3956..f693fcf 100644
--- a/geo/drgeo_point.cc
+++ b/geo/drgeo_point.cc
@@ -22,6 +22,7 @@
*/
#include "config.h"
+#include <glib/gi18n-lib.h>
#include "drgeo_point.h"
#include "drgeo_direction.h"
#include "drgeo_value.h"
@@ -561,6 +562,8 @@ point::preferedShape (gchar *attr)
gboolean
point::getBounds (double &left, double &top, double &right, double &bottom)
{
+ if (style.mask == yes)
+ return false;
left = right = p.getX();
top = bottom = p.getY();
return true;
diff --git a/geo/drgeo_point.h b/geo/drgeo_point.h
index 6626196..fdbe250 100644
--- a/geo/drgeo_point.h
+++ b/geo/drgeo_point.h
@@ -53,7 +53,7 @@ public:
gdouble getAbscissa ();
void * getExtra ();
drgeoPointType preferedShape (gchar *attr);
- virtual gboolean getBounds (double &left, double &top,
+ gboolean getBounds (double &left, double &top,
double &right, double &bottom);
protected:
drgeoPoint p;
diff --git a/geo/drgeo_polygon.cc b/geo/drgeo_polygon.cc
index e7c8417..d5c83d0 100644
--- a/geo/drgeo_polygon.cc
+++ b/geo/drgeo_polygon.cc
@@ -29,6 +29,7 @@
#include "drgeo_repere.h"
#include "drgeo_drgeoStyle.h"
#include "drgeo_drawable.h"
+#include <glib/gi18n-lib.h>
polygon::polygon (liste_elem & parents, polygonType type, gboolean createdFromMacro, liste_elem * figureList):
geometricObject (createdFromMacro, figureList)
diff --git a/geo/drgeo_repere.cc b/geo/drgeo_repere.cc
index 8024746..6104a2f 100644
--- a/geo/drgeo_repere.cc
+++ b/geo/drgeo_repere.cc
@@ -27,6 +27,7 @@
#include "drgeo_direction.h"
#include "liste_elem.h"
#include "drgeo_drawable.h"
+#include <glib/gi18n-lib.h>
repere::repere (liste_elem & parents, repereType type, gboolean createdFromMacro, liste_elem * figureList):
geometricObject (createdFromMacro, figureList)
diff --git a/geo/drgeo_scm_helper.cc b/geo/drgeo_scm_helper.cc
index d561cac..d8bff1b 100644
--- a/geo/drgeo_scm_helper.cc
+++ b/geo/drgeo_scm_helper.cc
@@ -21,11 +21,13 @@
* 675 Mass Ave, Cambridge, MA 02139, USA.
*/
+#include "config.h"
#include <errno.h>
#include <libintl.h>
#include "define.h"
#include "drgeo_scm_helper.h"
#include "drgeo_mdi.h"
+#include <glib/gi18n-lib.h>
extern drgeoMDI *mdi;
diff --git a/geo/drgeo_script.cc b/geo/drgeo_script.cc
index 3876b08..30e7fdc 100644
--- a/geo/drgeo_script.cc
+++ b/geo/drgeo_script.cc
@@ -21,11 +21,12 @@
* 675 Mass Ave, Cambridge, MA 02139, USA.
*/
-#include <guile/gh.h>
#include "config.h"
+#include <guile/gh.h>
#include "drgeo_script.h"
#include "drgeo_drawable.h"
#include "drgeo_scm_helper.h"
+#include <glib/gi18n-lib.h>
extern int numericPrecision;
@@ -266,4 +267,3 @@ script::getExtra ()
{
return (void *) g_strdup (scriptCode);
}
-
diff --git a/geo/drgeo_segment.cc b/geo/drgeo_segment.cc
index 36d89a4..35b0fcd 100644
--- a/geo/drgeo_segment.cc
+++ b/geo/drgeo_segment.cc
@@ -28,6 +28,7 @@
#include "drgeo_point.h"
#include "liste_elem.h"
#include "drgeo_drawable.h"
+#include <glib/gi18n-lib.h>
segment::segment (liste_elem & parents, segmentType type, gboolean createdFromMacro, liste_elem * figureList):
direction (parents, (transformationType) type, createdFromMacro, figureList)
diff --git a/geo/drgeo_tool.cc b/geo/drgeo_tool.cc
index 6a13f8a..d7b3a86 100644
--- a/geo/drgeo_tool.cc
+++ b/geo/drgeo_tool.cc
@@ -22,10 +22,12 @@
* 675 Mass Ave, Cambridge, MA 02139, USA.
*/
+#include "config.h"
#include <string.h>
#include "drgeo_tool.h"
#include "drgeo_point.h"
+#include <glib/gi18n-lib.h>
drgeoState
drgeoTool::getDrgeoState ()
diff --git a/geo/drgeo_toolbar.cc b/geo/drgeo_toolbar.cc
index 5629bab..01ef878 100644
--- a/geo/drgeo_toolbar.cc
+++ b/geo/drgeo_toolbar.cc
@@ -36,7 +36,7 @@ drgeoToolbar::drgeoToolbar (geoView *view):
// . attach a referecence of this class instance
- xml = glade_xml_new (DRGEO_GLADEDIR"/drgeo2.glade","menuBar", NULL);
+ xml = glade_xml_new (DRGEO_GLADEDIR"/drgeo2.glade","menuBar", GETTEXT_PACKAGE);
setTopControlerWidget (xml);
fetchWidgetParent (xml,&p_toolbar, "menuBar",
@@ -49,7 +49,7 @@ drgeoToolbar::drgeoToolbar (geoView *view):
/* short cut bar */
- xml = glade_xml_new (DRGEO_GLADEDIR"/drgeo2.glade","shortcutBar", NULL);
+ xml = glade_xml_new (DRGEO_GLADEDIR"/drgeo2.glade","shortcutBar", GETTEXT_PACKAGE);
setShortcutControlerWidget (xml);
fetchWidgetParent (xml,&p_shortcutBar, "shortcutBar",
(gpointer) this);
@@ -57,7 +57,7 @@ drgeoToolbar::drgeoToolbar (geoView *view):
g_object_unref (G_OBJECT (xml));
- xml = glade_xml_new (DRGEO_GLADEDIR"/drgeo2.glade","pointBar", NULL);
+ xml = glade_xml_new (DRGEO_GLADEDIR"/drgeo2.glade","pointBar", GETTEXT_PACKAGE);
glade_xml_signal_autoconnect (xml);
setPointControlerWidget (xml);
fetchWidgetParent (xml,&p_pointBar, "pointBar",
@@ -66,14 +66,14 @@ drgeoToolbar::drgeoToolbar (geoView *view):
gtk_toolbar_set_tooltips (GTK_TOOLBAR (w), true);
g_object_unref (G_OBJECT (xml));
- xml = glade_xml_new (DRGEO_GLADEDIR"/drgeo2.glade","curveBar", NULL);
+ xml = glade_xml_new (DRGEO_GLADEDIR"/drgeo2.glade","curveBar", GETTEXT_PACKAGE);
glade_xml_signal_autoconnect (xml);
setCurveControlerWidget (xml);
fetchWidgetParent (xml,&p_curveBar, "curveBar",
(gpointer) this);
g_object_unref (G_OBJECT (xml));
- xml = glade_xml_new (DRGEO_GLADEDIR"/drgeo2.glade","transformationBar", NULL);
+ xml = glade_xml_new (DRGEO_GLADEDIR"/drgeo2.glade","transformationBar", GETTEXT_PACKAGE);
glade_xml_signal_autoconnect (xml);
setTransformationControlerWidget (xml);
fetchWidgetParent (xml,&p_transformationBar,
@@ -81,21 +81,21 @@ drgeoToolbar::drgeoToolbar (geoView *view):
(gpointer) this);
g_object_unref (G_OBJECT (xml));
- xml = glade_xml_new (DRGEO_GLADEDIR"/drgeo2.glade","numericBar", NULL);
+ xml = glade_xml_new (DRGEO_GLADEDIR"/drgeo2.glade","numericBar", GETTEXT_PACKAGE);
glade_xml_signal_autoconnect (xml);
setNumericControlerWidget (xml);
fetchWidgetParent (xml,&p_numericBar, "numericBar",
(gpointer) this);
g_object_unref (G_OBJECT (xml));
- xml = glade_xml_new (DRGEO_GLADEDIR"/drgeo2.glade","macroBar", NULL);
+ xml = glade_xml_new (DRGEO_GLADEDIR"/drgeo2.glade","macroBar", GETTEXT_PACKAGE);
glade_xml_signal_autoconnect (xml);
setMacroControlerWidget (xml);
fetchWidgetParent (xml,&p_macroBar, "macroBar",
(gpointer) this);
g_object_unref (G_OBJECT (xml));
- xml = glade_xml_new (DRGEO_GLADEDIR"/drgeo2.glade","otherBar", NULL);
+ xml = glade_xml_new (DRGEO_GLADEDIR"/drgeo2.glade","otherBar", GETTEXT_PACKAGE);
glade_xml_signal_autoconnect (xml);
setOtherControlerWidget (xml);
fetchWidgetParent (xml,&p_otherBar, "otherBar",
@@ -337,6 +337,3 @@ on_zoom_valeur_changed (GtkEditable * w, gpointer data)
else if (zoom == 25.)
control->view ()->setZoomFactorMenu (z25);
}
-
-
-
diff --git a/geo/drgeo_value.cc b/geo/drgeo_value.cc
index 6830cb0..99d708a 100644
--- a/geo/drgeo_value.cc
+++ b/geo/drgeo_value.cc
@@ -24,6 +24,7 @@
#include "config.h"
#include "drgeo_value.h"
#include "drgeo_drawable.h"
+#include <glib/gi18n-lib.h>
value::value (drgeoPoint & p, gboolean createdFromMacro, liste_elem * figureList):
string (p, createdFromMacro, figureList)
diff --git a/geo/drgeo_vector.cc b/geo/drgeo_vector.cc
index 3f33542..7d2a8e5 100644
--- a/geo/drgeo_vector.cc
+++ b/geo/drgeo_vector.cc
@@ -21,14 +21,14 @@
* 675 Mass Ave, Cambridge, MA 02139, USA.
*/
-#include <math.h>
-
#include "config.h"
+#include <math.h>
#include "drgeo_vector.h"
#include "drgeo_repere.h"
#include "drgeo_point.h"
#include "liste_elem.h"
#include "drgeo_drawable.h"
+#include <glib/gi18n-lib.h>
vector::vector (liste_elem & parents, vectorType type, gboolean createdFromMacro, liste_elem * figureList):
direction (parents, (transformationType) type, createdFromMacro, figureList)
diff --git a/geo/geo_view.cc b/geo/geo_view.cc
index 162d72e..52def00 100644
--- a/geo/geo_view.cc
+++ b/geo/geo_view.cc
@@ -20,12 +20,14 @@
* 675 Mass Ave, Cambridge, MA 02139, USA.
*/
+#include "config.h"
#include "geo_view.h"
#include "drgeo_figure.h"
#include "drgeo_menu.h"
#include "drgeo_toolbar.h"
#include "drgeo_gtkdrawable.h"
#include "drgeo_config.h"
+#include <glib/gi18n-lib.h>
extern gchar *toolName[];
diff --git a/glade/Makefile.am b/glade/Makefile.am
index 5e3ba00..e0f72f1 100644
--- a/glade/Makefile.am
+++ b/glade/Makefile.am
@@ -113,7 +113,7 @@ icons_DATA = \
glade_DATA = \
drgeo2.glade \
drgenius2.glade \
- drgeoMDI.glade
+ drgeoMDI.glade \
+ areabounds.glade
EXTRA_DIST = $(icons_DATA) $(glade_DATA)
-
diff --git a/glade/areabounds.glade b/glade/areabounds.glade
new file mode 100644
index 0000000..922a84c
--- /dev/null
+++ b/glade/areabounds.glade
@@ -0,0 +1,495 @@
+<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
+<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
+
+<glade-interface>
+
+<widget class="GtkDialog" id="area-bounds">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Dr Geo component</property>
+ <property name="type">GTK_WINDOW_TOPLEVEL</property>
+ <property name="window_position">GTK_WIN_POS_NONE</property>
+ <property name="modal">False</property>
+ <property name="resizable">False</property>
+ <property name="destroy_with_parent">False</property>
+ <property name="icon">drgeo.png</property>
+ <property name="decorated">True</property>
+ <property name="skip_taskbar_hint">False</property>
+ <property name="skip_pager_hint">False</property>
+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+ <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+ <property name="focus_on_map">True</property>
+ <property name="urgency_hint">False</property>
+ <property name="has_separator">True</property>
+
+ <child internal-child="vbox">
+ <widget class="GtkVBox" id="dialog-vbox1">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child internal-child="action_area">
+ <widget class="GtkHButtonBox" id="dialog-action_area1">
+ <property name="visible">True</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+
+ <child>
+ <widget class="GtkButton" id="cancel">
+ <property name="visible">True</property>
+ <property name="can_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="label">gtk-cancel</property>
+ <property name="use_stock">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="response_id">-6</property>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkButton" id="OK">
+ <property name="visible">True</property>
+ <property name="can_default">True</property>
+ <property name="has_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="has_focus">True</property>
+ <property name="label">gtk-ok</property>
+ <property name="use_stock">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="response_id">-5</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkVBox" id="vbox1">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkHBox" id="hbox4">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"><b>Displayed area bounds</b></property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">True</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <placeholder/>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkAlignment" id="alignment1">
+ <property name="visible">True</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xscale">1</property>
+ <property name="yscale">1</property>
+ <property name="top_padding">5</property>
+ <property name="bottom_padding">5</property>
+ <property name="left_padding">10</property>
+ <property name="right_padding">10</property>
+
+ <child>
+ <widget class="GtkTable" id="table1">
+ <property name="visible">True</property>
+ <property name="n_rows">4</property>
+ <property name="n_columns">5</property>
+ <property name="homogeneous">False</property>
+ <property name="row_spacing">4</property>
+ <property name="column_spacing">0</property>
+
+ <child>
+ <widget class="GtkLabel" id="label7">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"><b>Y</b></property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">True</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label6">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"><b>X</b></property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">True</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label4">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Automatic</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label5">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Automatic</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">3</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label2">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"><b>Minimum</b></property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">True</property>
+ <property name="justify">GTK_JUSTIFY_CENTER</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label3">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"><b>Maximum</b></property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">True</property>
+ <property name="justify">GTK_JUSTIFY_CENTER</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">3</property>
+ <property name="right_attach">5</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkSpinButton" id="xmin">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="climb_rate">1</property>
+ <property name="digits">2</property>
+ <property name="numeric">True</property>
+ <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+ <property name="snap_to_ticks">False</property>
+ <property name="wrap">False</property>
+ <property name="adjustment">0 -100 100 1 10 10</property>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkSpinButton" id="xmax">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="climb_rate">1</property>
+ <property name="digits">2</property>
+ <property name="numeric">True</property>
+ <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+ <property name="snap_to_ticks">False</property>
+ <property name="wrap">False</property>
+ <property name="adjustment">0 -100 100 1 10 10</property>
+ </widget>
+ <packing>
+ <property name="left_attach">4</property>
+ <property name="right_attach">5</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkSpinButton" id="ymin">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="climb_rate">1</property>
+ <property name="digits">2</property>
+ <property name="numeric">True</property>
+ <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+ <property name="snap_to_ticks">False</property>
+ <property name="wrap">False</property>
+ <property name="adjustment">0 -100 100 1 10 10</property>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkSpinButton" id="ymax">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="climb_rate">1</property>
+ <property name="digits">2</property>
+ <property name="numeric">True</property>
+ <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+ <property name="snap_to_ticks">False</property>
+ <property name="wrap">False</property>
+ <property name="adjustment">0 -100 100 1 10 10</property>
+ </widget>
+ <packing>
+ <property name="left_attach">4</property>
+ <property name="right_attach">5</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkCheckButton" id="auto-xmax">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"></property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">False</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">3</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options"></property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkCheckButton" id="auto-ymax">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"></property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">False</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">3</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options"></property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkCheckButton" id="auto-ymin">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"></property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">False</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options"></property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkCheckButton" id="auto-xmin">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"></property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">False</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options"></property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+</widget>
+
+</glade-interface>
diff --git a/goffice/Makefile.am b/goffice/Makefile.am
index 811f7f2..d1e1334 100644
--- a/goffice/Makefile.am
+++ b/goffice/Makefile.am
@@ -1,3 +1,8 @@
+helpdir = $(datadir)/drgeo/help
+gladedir = $(datadir)/drgeo/glade
+scmdir = $(datadir)/drgeo/scm
+appicondir = $(datadir)/pixmaps
+
if WITH_GOFFICE
goffice_drgeo_LTLIBRARIES = drgeo.la
@@ -5,7 +10,11 @@ goffice_drgeodir = $(GOFFICE_PLUGINS_DIR)/drgeo
drgeo_la_LDFLAGS = -module -avoid-version -no-undefined
drgeo_la_LIBADD = \
$(top_builddir)/geo/libgeo.la \
- @GODRGEO_LIBS@
+ $(GODRGEO_LIBS) \
+ $(INTLLIBS) \
+ $(DRGEO_LIBS) \
+ $(GUILE_LDFLAGS) \
+ -lcrypt
xml_DATA = $(xml_in_files:.xml.in=.xml)
else
@@ -16,16 +25,34 @@ xml_DATA =
endif
-AM_CPPFLAGS = -I$(top_srcdir) -DGNOMELOCALEDIR=\"$(datadir)/locale\" @GODRGEO_CFLAGS@
+INCLUDES = \
+ -DGNOMELOCALEDIR=\""$(datadir)/locale"\" \
+ -DDRGEO_GLADEDIR=\""$(gladedir)"\" \
+ -DDRGEO_SCMDIR=\""$(scmdir)"\" \
+ -DDRGEO_HELPDIR=\""$(helpdir)"\" \
+ -DDRGEO_ICONDIR=\""$(appicondir)"\" \
+ -I$(includedir) \
+ -I$(top_srcdir) \
+ -I$(srcdir)/geo \
+ $(GODRGEO_CFLAGS) \
+ $(DRGEO_CFLAGS) \
+ $(GUILE_CFLAGS)
drgeo_la_SOURCES = \
drgeo.cc \
+ drgeo-impl.h \
goffice_mdi.cc \
goffice_mdi.h \
drgeo_cairodrawable.cc \
drgeo_cairodrawable.h \
drgeo_gpdrawable.cc \
- drgeo_gpdrawable.h
+ drgeo_gpdrawable.h \
+ goffice_window.cc \
+ goffice_window.h \
+ drgeo_dummydrawable.cc \
+ drgeo_dummydrawable.h \
+ drgeo_areabounds.cc \
+ drgeo_areabounds.h
xml_in_files = plugin.xml.in
xmldir = $(goffice_drgeodir)
diff --git a/goffice/drgeo.cc b/goffice/drgeo.cc
index 4cc95ab..cc2db6d 100644
--- a/goffice/drgeo.cc
+++ b/goffice/drgeo.cc
@@ -2,9 +2,7 @@
* DrGeo GOffice component
* drgeo.cc
*
- * Copyright (C) 2006
- *
- * Developed by Jean Bréfort <jean brefort normalesup org>
+ * Copyright (C) 2006 Jean Bréfort <jean brefort normalesup org>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
@@ -22,21 +20,16 @@
* USA
*/
-#include <config.h>
+#include "config.h"
#include <drgenius_help.h>
-#include <geo/drgeo_figure.h>
#include "goffice_mdi.h"
+#include "goffice_window.h"
#include "drgeo_cairodrawable.h"
#include "drgeo_gpdrawable.h"
+#include "drgeo_dummydrawable.h"
#include <libxml/tree.h>
-#ifdef _
-# undef _
-# undef N_
-#endif
#include <glib/gi18n-lib.h>
-#include <goffice/component/goffice-component.h>
-#include <goffice/component/go-component.h>
#include <gsf/gsf-impl-utils.h>
#include <goffice/app/module-plugin-defs.h>
#include <locale.h>
@@ -45,19 +38,24 @@ extern "C" {
gofficeMDI *mdi;
+enum {
+ GO_DRGEO_PROP_0,
+ GO_DRGEO_PROP_XMIN,
+ GO_DRGEO_PROP_XMAX,
+ GO_DRGEO_PROP_YMIN,
+ GO_DRGEO_PROP_YMAX,
+ GO_DRGEO_PROP_AUTO_XMIN,
+ GO_DRGEO_PROP_AUTO_XMAX,
+ GO_DRGEO_PROP_AUTO_YMIN,
+ GO_DRGEO_PROP_AUTO_YMAX,
+};
+
extern GOPluginModuleDepend const go_plugin_depends [] = {
{ "goffice", GOFFICE_API_VERSION }
};
extern GOPluginModuleHeader const go_plugin_header =
{ GOFFICE_MODULE_PLUGIN_MAGIC_NUMBER, G_N_ELEMENTS (go_plugin_depends) };
-typedef struct
-{
- GOComponent parent;
- drgeoFigure *figure;
- double xoffset, yoffset, width, height;
-} GODrGeoComponent;
-
typedef GOComponentClass GODrGeoComponentClass;
#define GO_DRGEO_COMPONENT_TYPE (go_drgeo_component_get_type ())
@@ -73,8 +71,48 @@ go_drgeo_component_get_data (GOComponent *component, gpointer *data, int *length
void (**clearfunc) (gpointer))
{
GODrGeoComponent *godrgeo = GO_DRGEO_COMPONENT (component);
- bool result = true;
- return result;
+ xmlDocPtr xml = NULL;
+ char *old_num_locale;
+
+ if (!godrgeo->figure || godrgeo->figure->getFigureList ()->nb_elem == 0) {
+ *data = NULL;
+ *length = 0;
+ *clearfunc = NULL;
+ return true;
+ }
+
+ old_num_locale = g_strdup (setlocale (LC_NUMERIC, NULL));
+ setlocale(LC_NUMERIC, "C");
+
+ xml = xmlNewDoc((xmlChar*)"1.0");
+ xml->children = xmlNewDocNode (xml, NULL, (xmlChar*) "drgenius", NULL);
+ godrgeo->figure->saveAs (xml->children, "embedded");
+ xmlChar *mem;
+ int size;
+ xmlDocDumpMemory (xml, &mem, &size);
+ xmlFreeDoc (xml);
+ *data = mem;
+ *length = size;
+ *clearfunc = xmlFree;
+ setlocale (LC_NUMERIC, old_num_locale);
+ g_free (old_num_locale);
+
+ return true;
+}
+
+static void
+go_drgeo_component_update_bounds (GODrGeoComponent *godrgeo)
+{
+ GOComponent *component = GO_COMPONENT (godrgeo);
+ godrgeo->xoffset = (godrgeo->auto_xmin)? godrgeo->left: godrgeo->xmin;
+ godrgeo->width = ((godrgeo->auto_xmax)? godrgeo->right: godrgeo->xmax)
+ - godrgeo->xoffset;
+ godrgeo->yoffset = (godrgeo->auto_ymax)? godrgeo->top: godrgeo->ymax;
+ godrgeo->height = godrgeo->yoffset
+ -((godrgeo->auto_ymin)? godrgeo->bottom: godrgeo->ymin);
+ component->ascent = godrgeo->height / 2.54;
+ component->descent = 0.;
+ component->width = godrgeo->width / 2.54;
}
static void
@@ -96,31 +134,34 @@ go_drgeo_component_set_data (GOComponent *component, char const *data, int lengt
setlocale (LC_NUMERIC, old_num_locale);
g_free (old_num_locale);
xmlFreeDoc (xml);
- double left, top, right, bottom;
- godrgeo->figure->getBounds (left, top, right, bottom);
- godrgeo->xoffset = left - 0.2;
- godrgeo->yoffset = top + 0.2;
- godrgeo->height = top - bottom + 0.4;
- godrgeo->width = right - left + 0.4;
- component->ascent = godrgeo->height / 2.54;
- component->descent = 0.;
- component->width = godrgeo->width / 2.54;
+ drgeoDummyDrawable d;
+ godrgeo->figure->setDrawable (&d);
+ godrgeo->figure->getBounds (godrgeo->left, godrgeo->top,
+ godrgeo->right, godrgeo->bottom);
+ godrgeo->figure->setDrawable (NULL);
+ godrgeo->left -= 0.2;
+ godrgeo->right += 0.2;
+ godrgeo->bottom -= 0.2;
+ godrgeo->top += 0.2;
+ go_drgeo_component_update_bounds (godrgeo);
}
static void
go_drgeo_component_draw (GOComponent *component, int width_pixels, int height_pixels)
{
GODrGeoComponent *godrgeo = GO_DRGEO_COMPONENT (component);
- gdk_pixbuf_fill (component->pixbuf, 0);
+ gdk_pixbuf_fill (component->pixbuf, 0xffffff00);
cairo_surface_t* surface = cairo_image_surface_create_for_data (
gdk_pixbuf_get_pixels (component->pixbuf),
CAIRO_FORMAT_ARGB32,
width_pixels, height_pixels,
gdk_pixbuf_get_rowstride (component->pixbuf));
drgeoCairoDrawable *drawable = new drgeoCairoDrawable (godrgeo->figure, surface);
- drawable->scale = width_pixels / godrgeo->width;
- drawable->setOffset (godrgeo->xoffset, godrgeo->yoffset);
+ drawable->setMetrics (width_pixels / godrgeo->width,
+ godrgeo->xoffset, godrgeo->yoffset,
+ godrgeo->width, godrgeo->height);
godrgeo->figure->redraw (0);
+ godrgeo->figure->setDrawable (NULL);
delete drawable;
}
@@ -130,17 +171,114 @@ go_drgeo_component_print (GOComponent *component, GnomePrintContext *gpc,
{
GODrGeoComponent *godrgeo = GO_DRGEO_COMPONENT (component);
drgeoGPDrawable *drawable = new drgeoGPDrawable (godrgeo->figure, gpc);
- drawable->scale = width / godrgeo->width;
- drawable->setOffset (godrgeo->xoffset, godrgeo->yoffset - godrgeo->height);
+ drawable->setMetrics (width / godrgeo->width, godrgeo->xoffset,
+ godrgeo->yoffset - godrgeo->height,
+ godrgeo->width, godrgeo->height);
godrgeo->figure->redraw (0);
+ godrgeo->figure->setDrawable (NULL);
delete drawable;
}
+static gboolean
+go_drgeo_component_edit (GOComponent *component)
+{
+ GODrGeoComponent *godrgeo = GO_DRGEO_COMPONENT (component);
+ if (!godrgeo->figure) {
+ component->ascent = 0.;
+ component->descent = 0.;
+ component->width = 0.;
+ }
+ mdi->EditComponent (godrgeo);
+ return true;
+}
+
+static void
+go_drgeo_component_get_property (GObject *obj, guint param_id,
+ GValue *value, GParamSpec *pspec)
+{
+ GODrGeoComponent *godrgeo = GO_DRGEO_COMPONENT (obj);
+ switch (param_id) {
+ case GO_DRGEO_PROP_XMIN:
+ g_value_set_double (value, godrgeo->xmin);
+ break;
+ case GO_DRGEO_PROP_XMAX:
+ g_value_set_double (value, godrgeo->xmax);
+ break;
+ case GO_DRGEO_PROP_YMIN:
+ g_value_set_double (value, godrgeo->ymin);
+ break;
+ case GO_DRGEO_PROP_YMAX:
+ g_value_set_double (value, godrgeo->ymax);
+ break;
+ case GO_DRGEO_PROP_AUTO_XMIN:
+ g_value_set_boolean (value, godrgeo->auto_xmin);
+ break;
+ case GO_DRGEO_PROP_AUTO_XMAX:
+ g_value_set_boolean (value, godrgeo->auto_xmax);
+ break;
+ case GO_DRGEO_PROP_AUTO_YMIN:
+ g_value_set_boolean (value, godrgeo->auto_ymin);
+ break;
+ case GO_DRGEO_PROP_AUTO_YMAX:
+ g_value_set_boolean (value, godrgeo->auto_ymax);
+ break;
+
+ default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, param_id, pspec);
+ break;
+ }
+}
+
+static void
+go_drgeo_component_set_property (GObject *obj, guint param_id,
+ GValue const *value, GParamSpec *pspec)
+{
+ GODrGeoComponent *godrgeo = GO_DRGEO_COMPONENT (obj);
+ switch (param_id) {
+ case GO_DRGEO_PROP_XMIN:
+ godrgeo->xmin = g_value_get_double (value);
+ godrgeo->auto_xmin = false;
+ break;
+ case GO_DRGEO_PROP_XMAX:
+ godrgeo->xmax = g_value_get_double (value);
+ godrgeo->auto_xmax = false;
+ break;
+ case GO_DRGEO_PROP_YMIN:
+ godrgeo->ymin = g_value_get_double (value);
+ godrgeo->auto_ymin = false;
+ break;
+ case GO_DRGEO_PROP_YMAX:
+ godrgeo->ymax = g_value_get_double (value);
+ godrgeo->auto_ymax = false;
+ break;
+ case GO_DRGEO_PROP_AUTO_XMIN:
+ if ((godrgeo->auto_xmin = g_value_get_boolean (value)))
+ godrgeo->xmin = 0.;
+ break;
+ case GO_DRGEO_PROP_AUTO_XMAX:
+ if ((godrgeo->auto_xmax = g_value_get_boolean (value)))
+ godrgeo->xmax = 0.;
+ break;
+ case GO_DRGEO_PROP_AUTO_YMIN:
+ if ((godrgeo->auto_ymin = g_value_get_boolean (value)))
+ godrgeo->ymin = 0.;
+ break;
+ case GO_DRGEO_PROP_AUTO_YMAX:
+ if ((godrgeo->auto_ymax = g_value_get_boolean (value)))
+ godrgeo->ymax = 0.;
+ break;
+
+ default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, param_id, pspec);
+ return; /* NOTE : RETURN */
+ }
+ go_drgeo_component_update_bounds (godrgeo);
+}
static void
go_drgeo_component_finalize (GObject *obj)
{
GODrGeoComponent *godrgeo = GO_DRGEO_COMPONENT (obj);
+ if (godrgeo->window)
+ godrgeo->window->Destroy ();
G_OBJECT_CLASS (godrgeo_parent_klass)->finalize (obj);
}
@@ -149,9 +287,13 @@ go_drgeo_component_init (GOComponent *component)
{
GODrGeoComponent *godrgeo = GO_DRGEO_COMPONENT (component);
component->resizable = false;
- component->editable = false;
+ component->editable = true;
component->needs_window = false;
godrgeo->figure = NULL;
+ godrgeo->window = NULL;
+ godrgeo->xmin = godrgeo->xmax = godrgeo->ymin = godrgeo->ymax = 0.;
+ godrgeo->auto_xmin = godrgeo->auto_xmax = godrgeo->auto_ymin =
+ godrgeo->auto_ymax = true;
}
static void
@@ -159,6 +301,8 @@ go_drgeo_component_class_init (GOComponentClass *klass)
{
GObjectClass *obj_klass = (GObjectClass *) klass;
obj_klass->finalize = go_drgeo_component_finalize;
+ obj_klass->set_property = go_drgeo_component_set_property;
+ obj_klass->get_property = go_drgeo_component_get_property;
godrgeo_parent_klass = (GObjectClass*) g_type_class_peek_parent (klass);
@@ -166,7 +310,48 @@ go_drgeo_component_class_init (GOComponentClass *klass)
klass->set_data = go_drgeo_component_set_data;
klass->draw = go_drgeo_component_draw;
klass->print = go_drgeo_component_print;
-// klass->edit = go_drgeo_component_edit;
+ klass->edit = go_drgeo_component_edit;
+
+ g_object_class_install_property (obj_klass, GO_DRGEO_PROP_XMIN,
+ g_param_spec_double ("drgeo-xmin", "drgeo-xmin",
+ "x at left of displayed area",
+ -200., 200., 0.,
+ (GParamFlags) (G_PARAM_READWRITE | GOC_PARAM_PERSISTENT)));
+ g_object_class_install_property (obj_klass, GO_DRGEO_PROP_XMAX,
+ g_param_spec_double ("drgeo-xmax", "drgeo-xmax",
+ "x at right of displayed area",
+ -200., 200., 0.,
+ (GParamFlags) (G_PARAM_READWRITE | GOC_PARAM_PERSISTENT)));
+ g_object_class_install_property (obj_klass, GO_DRGEO_PROP_YMIN,
+ g_param_spec_double ("drgeo-ymin", "drgeo-ymin",
+ "y at bottom of displayed area",
+ -200., 200., 0.,
+ (GParamFlags) (G_PARAM_READWRITE | GOC_PARAM_PERSISTENT)));
+ g_object_class_install_property (obj_klass, GO_DRGEO_PROP_YMAX,
+ g_param_spec_double ("drgeo-ymax", "drgeo-ymax",
+ "y at top of displayed area",
+ -200., 200., 0.,
+ (GParamFlags) (G_PARAM_READWRITE | GOC_PARAM_PERSISTENT)));
+ g_object_class_install_property (obj_klass, GO_DRGEO_PROP_AUTO_XMIN,
+ g_param_spec_boolean ("drgeo-auto-xmin", "drgeo-auto-xmin",
+ "Use automatic xmin",
+ true,
+ (GParamFlags) G_PARAM_READWRITE));
+ g_object_class_install_property (obj_klass, GO_DRGEO_PROP_AUTO_XMAX,
+ g_param_spec_boolean ("drgeo-auto-xmax", "drgeo-auto-xmax",
+ "Use automatic xmax",
+ true,
+ (GParamFlags) G_PARAM_READWRITE));
+ g_object_class_install_property (obj_klass, GO_DRGEO_PROP_AUTO_YMIN,
+ g_param_spec_boolean ("drgeo-auto-ymin", "drgeo-auto-ymin",
+ "Use automatic ymin",
+ true,
+ (GParamFlags) G_PARAM_READWRITE));
+ g_object_class_install_property (obj_klass, GO_DRGEO_PROP_AUTO_YMAX,
+ g_param_spec_boolean ("drgeo-auto-ymax", "drgeo-auto-ymax",
+ "Use automatic ymax",
+ true,
+ (GParamFlags) G_PARAM_READWRITE));
}
GSF_DYNAMIC_CLASS (GODrGeoComponent, go_drgeo_component,
diff --git a/goffice/drgeo_areabounds.cc b/goffice/drgeo_areabounds.cc
new file mode 100644
index 0000000..51c75b3
--- /dev/null
+++ b/goffice/drgeo_areabounds.cc
@@ -0,0 +1,222 @@
+/*
+ * DrGeo GOffice component
+ * drgeo_areabounds.cc
+ *
+ * Copyright (C) 2006 Jean Bréfort <jean brefort normalesup org>
+ *
+ * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ * USA
+ */
+
+#include "config.h"
+#include "drgeo_areabounds.h"
+#include "goffice_window.h"
+#include <glib/gi18n-lib.h>
+
+static void
+destroy_cb (drgeoAreaBoundsDlg *dlg)
+{
+ delete dlg;
+}
+
+static void
+apply_cb (drgeoAreaBoundsDlg *dlg)
+{
+ dlg->Apply ();
+}
+
+static void
+close_cb (drgeoAreaBoundsDlg *dlg)
+{
+ dlg->Destroy ();
+}
+
+static void
+xmin_toggled_cb (drgeoAreaBoundsDlg *dlg)
+{
+ dlg->xminToggled ();
+}
+
+static void
+xmax_toggled_cb (drgeoAreaBoundsDlg *dlg)
+{
+ dlg->xmaxToggled ();
+}
+
+static void
+ymin_toggled_cb (drgeoAreaBoundsDlg *dlg)
+{
+ dlg->yminToggled ();
+}
+
+static void
+ymax_toggled_cb (drgeoAreaBoundsDlg *dlg)
+{
+ dlg->ymaxToggled ();
+}
+
+drgeoAreaBoundsDlg::drgeoAreaBoundsDlg (GODrGeoComponent *component, gofficeWindow *window)
+{
+ m_component = component;
+ m_parent = window;
+ xml = glade_xml_new (DRGEO_GLADEDIR"/areabounds.glade", "area-bounds", GETTEXT_PACKAGE);
+ m_window = glade_xml_get_widget (xml, "area-bounds");
+ gtk_window_set_transient_for (GTK_WINDOW (m_window), m_parent->getWindow ());
+ g_signal_connect_swapped (G_OBJECT (m_window), "destroy", G_CALLBACK (destroy_cb), this);
+ GtkWidget *w = glade_xml_get_widget (xml, "OK");
+ g_signal_connect_swapped (G_OBJECT (w), "clicked", G_CALLBACK (apply_cb), this);
+ w = glade_xml_get_widget (xml, "cancel");
+ g_signal_connect_swapped (G_OBJECT (w), "clicked", G_CALLBACK (close_cb), this);
+ m_xmin = glade_xml_get_widget (xml, "xmin");
+ m_auto_xmin = glade_xml_get_widget (xml, "auto-xmin");
+ if (component->auto_xmin) {
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (m_xmin), component->left);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (m_auto_xmin), true);
+ gtk_widget_set_sensitive (m_xmin, false);
+ } else
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (m_xmin), component->xmin);
+ g_signal_connect_swapped (G_OBJECT (m_auto_xmin), "toggled", G_CALLBACK (xmin_toggled_cb), this);
+ m_xmax = glade_xml_get_widget (xml, "xmax");
+ m_auto_xmax = glade_xml_get_widget (xml, "auto-xmax");
+ if (component->auto_xmax) {
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (m_xmax), component->right);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (m_auto_xmax), true);
+ gtk_widget_set_sensitive (m_xmax, false);
+ } else
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (m_xmax), component->xmax);
+ g_signal_connect_swapped (G_OBJECT (m_auto_xmax), "toggled", G_CALLBACK (xmax_toggled_cb), this);
+ m_ymin = glade_xml_get_widget (xml, "ymin");
+ m_auto_ymin = glade_xml_get_widget (xml, "auto-ymin");
+ if (component->auto_ymin) {
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (m_ymin), component->bottom);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (m_auto_ymin), true);
+ gtk_widget_set_sensitive (m_ymin, false);
+ } else
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (m_ymin), component->ymin);
+ g_signal_connect_swapped (G_OBJECT (m_auto_ymin), "toggled", G_CALLBACK (ymin_toggled_cb), this);
+ m_ymax = glade_xml_get_widget (xml, "ymax");
+ m_auto_ymax = glade_xml_get_widget (xml, "auto-ymax");
+ if (component->auto_ymax) {
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (m_ymax), component->top);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (m_auto_ymax), true);
+ gtk_widget_set_sensitive (m_ymax, false);
+ } else
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (m_ymax), component->ymax);
+ g_signal_connect_swapped (G_OBJECT (m_auto_ymax), "toggled", G_CALLBACK (ymax_toggled_cb), this);
+}
+
+drgeoAreaBoundsDlg::~drgeoAreaBoundsDlg ()
+{
+ g_object_unref (G_OBJECT (xml));
+ if (m_parent)
+ m_parent->notifyBoundsDlgDestroyed ();
+}
+
+void drgeoAreaBoundsDlg::Apply ()
+{
+ double xmin, xmax, ymin, ymax;
+ bool auto_xmin, auto_ymin;
+ xmin = gtk_spin_button_get_value (GTK_SPIN_BUTTON (m_xmin));
+ xmax = gtk_spin_button_get_value (GTK_SPIN_BUTTON (m_xmax));
+ auto_xmin = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (m_auto_xmin));
+ if (xmin >= xmax) {
+ GtkDialog* box = GTK_DIALOG (gtk_message_dialog_new (GTK_WINDOW (m_window),
+ GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
+ _("x minimum must be lower than x maximum.")));
+ GdkPixbuf *pixbuf = gtk_window_get_icon (GTK_WINDOW (m_window));
+ gtk_window_set_icon (GTK_WINDOW (box), pixbuf);
+ if (gtk_dialog_run (box) != GTK_RESPONSE_NONE)
+ gtk_widget_destroy (GTK_WIDGET (box));
+ gtk_window_set_focus (GTK_WINDOW (m_window), (auto_xmin)? m_xmax: m_xmin);
+ return;
+ }
+ ymin = gtk_spin_button_get_value (GTK_SPIN_BUTTON (m_ymin));
+ ymax = gtk_spin_button_get_value (GTK_SPIN_BUTTON (m_ymax));
+ auto_ymin = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (m_auto_ymin));
+ if (ymin >= ymax) {
+ GtkDialog* box = GTK_DIALOG (gtk_message_dialog_new (GTK_WINDOW (m_window),
+ GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
+ _("y minimum must be lower than y maximum.")));
+ GdkPixbuf *pixbuf = gtk_window_get_icon (GTK_WINDOW (m_window));
+ gtk_window_set_icon (GTK_WINDOW (box), pixbuf);
+ if (gtk_dialog_run (box) != GTK_RESPONSE_NONE)
+ gtk_widget_destroy (GTK_WIDGET (box));
+ gtk_window_set_focus (GTK_WINDOW (m_window), (auto_ymin)? m_ymax: m_ymin);
+ return;
+ }
+ g_object_set (
+ m_component,
+ "drgeo-xmin", xmin,
+ "drgeo-auto-xmin", auto_xmin,
+ "drgeo-xmax", xmax,
+ "drgeo-auto-xmax", gtk_toggle_button_get_active (
+ GTK_TOGGLE_BUTTON (m_auto_ymin)),
+ "drgeo-xmin", xmin,
+ "drgeo-auto-xmin", auto_xmin,
+ "drgeo-xmax", xmax,
+ "drgeo-auto-xmax", gtk_toggle_button_get_active (
+ GTK_TOGGLE_BUTTON (m_auto_ymin)),
+ NULL);
+ Destroy ();
+}
+
+void drgeoAreaBoundsDlg::Destroy ()
+{
+ gtk_widget_destroy (m_window);
+}
+
+void drgeoAreaBoundsDlg::xminToggled ()
+{
+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (m_auto_xmin))) {
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (m_xmin), m_component->left);
+ gtk_widget_set_sensitive (m_xmin, false);
+ } else {
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (m_xmin), m_component->xmin);
+ gtk_widget_set_sensitive (m_xmin, true);
+ }
+}
+
+void drgeoAreaBoundsDlg::xmaxToggled ()
+{
+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (m_auto_xmax))) {
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (m_xmax), m_component->right);
+ gtk_widget_set_sensitive (m_xmax, false);
+ } else {
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (m_xmax), m_component->xmax);
+ gtk_widget_set_sensitive (m_xmax, true);
+ }
+}
+
+void drgeoAreaBoundsDlg::yminToggled ()
+{
+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (m_auto_ymin))) {
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (m_ymin), m_component->bottom);
+ gtk_widget_set_sensitive (m_ymin, false);
+ } else {
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (m_ymin), m_component->ymin);
+ gtk_widget_set_sensitive (m_ymin, true);
+ }
+}
+
+void drgeoAreaBoundsDlg::ymaxToggled ()
+{
+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (m_auto_ymax))) {
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (m_ymax), m_component->top);
+ gtk_widget_set_sensitive (m_ymax, false);
+ } else {
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (m_ymax), m_component->ymax);
+ gtk_widget_set_sensitive (m_ymax, true);
+ }
+}
diff --git a/goffice/drgeo_areabounds.h b/goffice/drgeo_areabounds.h
new file mode 100644
index 0000000..da97f53
--- /dev/null
+++ b/goffice/drgeo_areabounds.h
@@ -0,0 +1,53 @@
+/*
+ * DrGeo GOffice component
+ * drgeo_areabounds.h
+ *
+ * Copyright (C) 2006 Jean Bréfort <jean brefort normalesup org>
+ *
+ * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ * USA
+ */
+
+#ifndef DRGEO_AREABOUNDS_H
+#define DRGEO_AREABOUNDS_H
+
+#include "drgeo_impl.h"
+#include <glade/glade.h>
+
+class gofficeWindow;
+
+class drgeoAreaBoundsDlg
+{
+public:
+ drgeoAreaBoundsDlg (GODrGeoComponent *component, gofficeWindow *window);
+ ~drgeoAreaBoundsDlg ();
+
+ void Apply ();
+ void Destroy ();
+ void xminToggled ();
+ void xmaxToggled ();
+ void yminToggled ();
+ void ymaxToggled ();
+
+private:
+ GODrGeoComponent *m_component;
+ GladeXML *xml;
+ GtkWidget *m_window;
+ GtkWidget *m_auto_xmin, *m_auto_xmax, *m_auto_ymin, *m_auto_ymax;
+ GtkWidget *m_xmin, *m_xmax, *m_ymin, *m_ymax;
+ gofficeWindow *m_parent;
+};
+
+#endif
diff --git a/goffice/drgeo_cairodrawable.cc b/goffice/drgeo_cairodrawable.cc
index a895365..25d64fa 100644
--- a/goffice/drgeo_cairodrawable.cc
+++ b/goffice/drgeo_cairodrawable.cc
@@ -2,9 +2,7 @@
* DrGeo GOffice component
* drgeo_cairodrawable.cc
*
- * Copyright (C) 2006
- *
- * Developed by Jean Bréfort <jean brefort normalesup org>
+ * Copyright (C) 2006 Jean Bréfort <jean brefort normalesup org>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
@@ -22,15 +20,19 @@
* USA
*/
-#include <config.h>
+#include "config.h"
#include "drgeo_cairodrawable.h"
-#include <geo/couleur.h>
+#include "geo/couleur.h"
#include <math.h>
static cairo_pattern_t *cairoColor[drgeoColorNumber] = {
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
};
+static cairo_pattern_t *alphacairoColor[drgeoColorNumber] = {
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
+};
+
drgeoCairoDrawable::drgeoCairoDrawable (drgeoFigure * figure, cairo_surface_t *surface)
{
if (cairoColor[drgeoColorBlack] == NULL) {
@@ -48,6 +50,20 @@ drgeoCairoDrawable::drgeoCairoDrawable (drgeoFigure * figure, cairo_surface_t *s
cairoColor[drgeoColorYellow] = cairo_pattern_create_rgb (.129412, .941176, 1.);
cairoColor[drgeoColorTips] = cairo_pattern_create_rgb (.752941, 1., 1.);
cairoColor[drgeoColorPrintingArea] = cairo_pattern_create_rgb (.941176, .941176, .941176);
+ alphacairoColor[drgeoColorBlack] = cairo_pattern_create_rgba (0., 0., 0., .5);
+ alphacairoColor[drgeoColorDarkGrey] = cairo_pattern_create_rgba (.333333, .333333, .333333, .5);
+ alphacairoColor[drgeoColorGrey] = cairo_pattern_create_rgba (.666667, .666667, .666667, .5);
+ alphacairoColor[drgeoColorWhite] = cairo_pattern_create_rgba (1., 1., 1., .5);
+ alphacairoColor[drgeoColorDarkGreen] = cairo_pattern_create_rgba (0., .392157, 0., .5);
+ alphacairoColor[drgeoColorGreen] = cairo_pattern_create_rgba (0., .921569, 0., .5);
+ alphacairoColor[drgeoColorDarkBlue] = cairo_pattern_create_rgba (1., .219608, .176471, .5);
+ alphacairoColor[drgeoColorBlue] = cairo_pattern_create_rgba (1., .694118, .313725, .5);
+ alphacairoColor[drgeoColorBordeaux] = cairo_pattern_create_rgba (0., 0., .568627, .5);
+ alphacairoColor[drgeoColorRed] = cairo_pattern_create_rgba (0., 0., .921569, .5);
+ alphacairoColor[drgeoColorOrange] = cairo_pattern_create_rgba (.168627, .6, 1., .5);
+ alphacairoColor[drgeoColorYellow] = cairo_pattern_create_rgba (.129412, .941176, 1., .5);
+ alphacairoColor[drgeoColorTips] = cairo_pattern_create_rgba (.752941, 1., 1., .5);
+ alphacairoColor[drgeoColorPrintingArea] = cairo_pattern_create_rgba (.941176, .941176, .941176, .5);
}
setFigure (figure);
m_Surf = surface;
@@ -143,15 +159,46 @@ void drgeoCairoDrawable::drawPoint (drgeoStyle & style, drgeoPoint & point)
void drgeoCairoDrawable::drawPolygon (drgeoStyle & style, drgeoPoint * point, gint number)
{
+ if (style.mask == yes)
+ return;
+
+ int i;
+
+ cairo_set_source (m_Cairo, alphacairoColor[style.color]);
+
+ cairo_new_path (m_Cairo);
+ cairo_move_to (m_Cairo, point[0].getX (), point[0].getY ());
+ for (i=1; i < number; i++)
+ cairo_line_to (m_Cairo, point[i].getX (), point[i].getY ());
+ cairo_close_path (m_Cairo);
+ cairo_fill (m_Cairo);
}
void drgeoCairoDrawable::drawLine (drgeoStyle & style, drgeoPoint & start, drgeoPoint & end)
{
+ if (style.mask == yes)
+ return;
+
+ double width = m_Size.getX (), height = m_Size.getY (),
+ x = m_Center.getX (), y = m_Center.getY ();
+
+
+ clipLine (style, start, end, y + height / 2., y - height / 2,
+ x - width / 2., x + width / 2.);
}
void drgeoCairoDrawable::drawHalfLine (drgeoStyle & style, drgeoPoint & start,
drgeoVector & vect)
{
+ if (style.mask == yes)
+ return;
+
+ double width = m_Size.getX (), height = m_Size.getY (),
+ x = m_Center.getX (), y = m_Center.getY ();
+
+
+ clipHalfLine (style, start, vect, y + height / 2., y - height / 2,
+ x - width / 2., x + width / 2.);
}
void drgeoCairoDrawable::drawSegment (drgeoStyle & style, drgeoPoint & start, drgeoPoint & end)
@@ -170,7 +217,6 @@ void drgeoCairoDrawable::drawSegment (drgeoStyle & style, drgeoPoint & start, dr
cairo_set_dash (m_Cairo, dashes, 2, 0.);
}
break;
- break;
case drgeoThicknessNormal:
cairo_set_line_width (m_Cairo, .025);
cairo_set_dash (m_Cairo, NULL, 0, 0.);
@@ -193,16 +239,89 @@ void drgeoCairoDrawable::drawSegment (drgeoStyle & style, drgeoPoint & start, dr
void drgeoCairoDrawable::drawCircle (drgeoStyle & style, drgeoPoint & center, double radius)
{
+ if (style.mask == yes)
+ return;
+
+ cairo_set_source (m_Cairo, cairoColor[style.color]);
+
+ switch (style.thick)
+ {
+ case drgeoThicknessDashed:
+ {
+ double dashes[] = {.1, .1};
+ cairo_set_line_width (m_Cairo, .025);
+ cairo_set_dash (m_Cairo, dashes, 2, 0.);
+ }
+ break;
+ case drgeoThicknessNormal:
+ cairo_set_line_width (m_Cairo, .025);
+ cairo_set_dash (m_Cairo, NULL, 0, 0.);
+ break;
+ case drgeoThicknessLarge:
+ cairo_set_line_width (m_Cairo, .05);
+ cairo_set_dash (m_Cairo, NULL, 0, 0.);
+ break;
+ }
+
+ cairo_set_line_cap (m_Cairo, CAIRO_LINE_CAP_ROUND);
+ cairo_set_line_join (m_Cairo, CAIRO_LINE_JOIN_MITER);
+
+ // Draw the line.
+ cairo_new_path (m_Cairo);
+ cairo_arc (m_Cairo, center.getX (), center.getY (), radius, 0, 2 * M_PI);
+ cairo_stroke (m_Cairo);
}
void drgeoCairoDrawable::drawCircle (drgeoStyle & style, drgeoPoint & center,
drgeoPoint & point)
{
+ double radius;
+
+ radius = (point - center).norm ();
+ drawCircle (style, center, radius);
}
void drgeoCairoDrawable::drawArc (drgeoStyle & style, drgeoPoint & center, double radius,
double start, double length)
{
+ if (style.mask == yes)
+ return;
+
+ double end;
+ if (length > 0)
+ end = start + length;
+ else {
+ end = start;
+ start += length;
+ }
+
+ cairo_set_source (m_Cairo, cairoColor[style.color]);
+
+ switch (style.thick)
+ {
+ case drgeoThicknessDashed:
+ {
+ double dashes[] = {.1, .1};
+ cairo_set_line_width (m_Cairo, .025);
+ cairo_set_dash (m_Cairo, dashes, 2, 0.);
+ }
+ break;
+ case drgeoThicknessNormal:
+ cairo_set_line_width (m_Cairo, .025);
+ cairo_set_dash (m_Cairo, NULL, 0, 0.);
+ break;
+ case drgeoThicknessLarge:
+ cairo_set_line_width (m_Cairo, .05);
+ cairo_set_dash (m_Cairo, NULL, 0, 0.);
+ break;
+ }
+
+ cairo_set_line_cap (m_Cairo, CAIRO_LINE_CAP_ROUND);
+ cairo_set_line_join (m_Cairo, CAIRO_LINE_JOIN_MITER);
+
+ cairo_new_path (m_Cairo);
+ cairo_arc (m_Cairo, center.getX (), center.getY (), radius, start, end);
+ cairo_stroke (m_Cairo);
}
void drgeoCairoDrawable::drawText (drgeoPoint & where, char *text, drgeoColorType fontColor)
@@ -219,14 +338,20 @@ double drgeoCairoDrawable::stringHeight (char *text)
drgeoPoint drgeoCairoDrawable::getAreaCenter ()
{
+ return m_Center;
}
drgeoPoint drgeoCairoDrawable::getAreaSize ()
{
+ return m_Size;
}
-void drgeoCairoDrawable::setOffset (double xOffset, double yOffset)
+void drgeoCairoDrawable::setMetrics (double Scale, double xOffset, double yOffset,
+ double width, double height)
{
+ scale = Scale;
cairo_scale (m_Cairo, scale, -scale);
cairo_translate (m_Cairo, -xOffset, -yOffset);
+ m_Center = drgeoPoint (xOffset + width / 2., yOffset - height / 2.);
+ m_Size = drgeoPoint (width, height);
}
diff --git a/goffice/drgeo_cairodrawable.h b/goffice/drgeo_cairodrawable.h
index f4d61a6..528073c 100644
--- a/goffice/drgeo_cairodrawable.h
+++ b/goffice/drgeo_cairodrawable.h
@@ -2,9 +2,7 @@
* DrGeo GOffice component
* drgeo_cairodrawable.h
*
- * Copyright (C) 2006
- *
- * Developed by Jean Bréfort <jean brefort normalesup org>
+ * Copyright (C) 2006 Jean Bréfort <jean brefort normalesup org>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
@@ -51,11 +49,13 @@ public:
double stringHeight (char *text);
drgeoPoint getAreaCenter ();
drgeoPoint getAreaSize ();
- void setOffset (double xOffset, double yOffset);
+ void setMetrics (double Scale, double xOffset, double yOffset,
+ double width, double height);
private:
cairo_surface_t *m_Surf;
cairo_t *m_Cairo;
+ drgeoPoint m_Center, m_Size;
};
#endif
diff --git a/goffice/drgeo_dummydrawable.cc b/goffice/drgeo_dummydrawable.cc
new file mode 100644
index 0000000..33d99c8
--- /dev/null
+++ b/goffice/drgeo_dummydrawable.cc
@@ -0,0 +1,44 @@
+/*
+ * DrGeo GOffice component
+ * drgeo_dummydrawable.cc
+ *
+ * Copyright (C) 2006 Jean Bréfort <jean brefort normalesup org>
+ *
+ * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ * USA
+ */
+
+#include "config.h"
+#include "drgeo_dummydrawable.h"
+
+static drgeoPoint c (0., 0.), s (300., 300.);
+
+drgeoDummyDrawable::drgeoDummyDrawable () {;}
+void drgeoDummyDrawable::drawPoint (drgeoStyle & style, drgeoPoint & point) {;}
+void drgeoDummyDrawable::drawPolygon (drgeoStyle & style, drgeoPoint * point, gint number) {;}
+void drgeoDummyDrawable::drawLine (drgeoStyle & style, drgeoPoint & start, drgeoPoint & end) {;}
+void drgeoDummyDrawable::drawHalfLine (drgeoStyle & style, drgeoPoint & start,
+ drgeoVector & vect) {;}
+void drgeoDummyDrawable::drawSegment (drgeoStyle & style, drgeoPoint & start, drgeoPoint & end) {;}
+void drgeoDummyDrawable::drawCircle (drgeoStyle & style, drgeoPoint & center, double radius) {;}
+void drgeoDummyDrawable::drawCircle (drgeoStyle & style, drgeoPoint & center,
+ drgeoPoint & point) {;}
+void drgeoDummyDrawable::drawArc (drgeoStyle & style, drgeoPoint & center, double radius,
+ double start, double length) {;}
+void drgeoDummyDrawable::drawText (drgeoPoint & where, char *text, drgeoColorType fontColor) {;}
+double drgeoDummyDrawable::stringWidth (char *text) {return 0.;}
+double drgeoDummyDrawable::stringHeight (char *text) {return 0.;}
+drgeoPoint drgeoDummyDrawable::getAreaCenter () {return c;}
+drgeoPoint drgeoDummyDrawable::getAreaSize () {return s;}
diff --git a/goffice/drgeo_dummydrawable.h b/goffice/drgeo_dummydrawable.h
new file mode 100644
index 0000000..b5dde3c
--- /dev/null
+++ b/goffice/drgeo_dummydrawable.h
@@ -0,0 +1,52 @@
+/*
+ * DrGeo GOffice component
+ * drgeo_cairodrawable.h
+ *
+ * Copyright (C) 2006 Jean Bréfort <jean brefort normalesup org>
+ *
+ * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ * USA
+ */
+
+#ifndef DRGEO_DUMMYDRAWABLE_H
+#define DRGEO_DUMMYDRAWABLE_H
+
+#include <geo/drgeo_drawable.h>
+#include <cairo/cairo.h>
+
+class drgeoDummyDrawable: public drgeoDrawable
+{
+public:
+ drgeoDummyDrawable ();
+
+ void drawPoint (drgeoStyle & style, drgeoPoint & point);
+ void drawPolygon (drgeoStyle & style, drgeoPoint * point, gint number);
+ void drawLine (drgeoStyle & style, drgeoPoint & start, drgeoPoint & end);
+ void drawHalfLine (drgeoStyle & style, drgeoPoint & start,
+ drgeoVector & vect);
+ void drawSegment (drgeoStyle & style, drgeoPoint & start, drgeoPoint & end);
+ void drawCircle (drgeoStyle & style, drgeoPoint & center, double radius);
+ void drawCircle (drgeoStyle & style, drgeoPoint & center,
+ drgeoPoint & point);
+ void drawArc (drgeoStyle & style, drgeoPoint & center, double radius,
+ double start, double length);
+ void drawText (drgeoPoint & where, char *text, drgeoColorType fontColor);
+ double stringWidth (char *text);
+ double stringHeight (char *text);
+ drgeoPoint getAreaCenter ();
+ drgeoPoint getAreaSize ();
+};
+
+#endif
diff --git a/goffice/drgeo_gpdrawable.cc b/goffice/drgeo_gpdrawable.cc
index ef499f5..f4fccec 100644
--- a/goffice/drgeo_gpdrawable.cc
+++ b/goffice/drgeo_gpdrawable.cc
@@ -2,9 +2,7 @@
* DrGeo GOffice component
* drgeo_gnome_printdrawable.cc
*
- * Copyright (C) 2006
- *
- * Developed by Jean Bréfort <jean brefort normalesup org>
+ * Copyright (C) 2006 Jean Bréfort <jean brefort normalesup org>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
@@ -22,9 +20,10 @@
* USA
*/
-#include <config.h>
+#include "config.h"
#include "drgeo_gpdrawable.h"
-#include <geo/couleur.h>
+#include "geo/couleur.h"
+#include <math.h>
drgeoGPDrawable::drgeoGPDrawable (drgeoFigure * figure, GnomePrintContext *pc)
{
@@ -76,20 +75,20 @@ void drgeoGPDrawable::drawPoint (drgeoStyle & style, drgeoPoint & point)
gnome_print_setlinejoin (m_pc, 1);
gnome_print_newpath (m_pc);
- gnome_print_moveto (m_pc, x - radius, y - radius);
- gnome_print_lineto (m_pc, x + radius, y + radius);
+ gnome_print_moveto (m_pc, x - radius, y - radius);
+ gnome_print_lineto (m_pc, x + radius, y + radius);
gnome_print_stroke (m_pc);
gnome_print_newpath (m_pc);
- gnome_print_moveto (m_pc, x - radius, y + radius);
- gnome_print_lineto (m_pc, x + radius, y - radius);
+ gnome_print_moveto (m_pc, x - radius, y + radius);
+ gnome_print_lineto (m_pc, x + radius, y - radius);
gnome_print_stroke (m_pc);
break;
case drgeoPointRec:
- gnome_print_moveto (m_pc, x - radius, y - radius);
- gnome_print_lineto (m_pc, x + radius, y - radius);
- gnome_print_lineto (m_pc, x + radius, y + radius);
- gnome_print_lineto (m_pc, x - radius, y + radius);
- gnome_print_lineto (m_pc, x - radius, y - radius);
+ gnome_print_moveto (m_pc, x - radius, y - radius);
+ gnome_print_lineto (m_pc, x + radius, y - radius);
+ gnome_print_lineto (m_pc, x + radius, y + radius);
+ gnome_print_lineto (m_pc, x - radius, y + radius);
+ gnome_print_lineto (m_pc, x - radius, y - radius);
gnome_print_fill (m_pc);
break;
case drgeoPointRoundEmpty:
@@ -119,15 +118,47 @@ void drgeoGPDrawable::drawPoint (drgeoStyle & style, drgeoPoint & point)
void drgeoGPDrawable::drawPolygon (drgeoStyle & style, drgeoPoint * point, gint number)
{
+ if (style.mask == yes)
+ return;
+
+ int i;
+
+ setColor (style.color);
+ gnome_print_setopacity (m_pc, 0.5);
+
+ gnome_print_newpath (m_pc);
+ gnome_print_moveto (m_pc, point[0].getX (), point[0].getY ());
+ for (i=1; i < number; i++)
+ gnome_print_lineto (m_pc,point[i].getX (), point[i].getY ());
+ gnome_print_closepath (m_pc);
+ gnome_print_fill (m_pc);
}
void drgeoGPDrawable::drawLine (drgeoStyle & style, drgeoPoint & start, drgeoPoint & end)
{
+ if (style.mask == yes)
+ return;
+
+ double width = m_Size.getX (), height = m_Size.getY (),
+ x = m_Center.getX (), y = m_Center.getY ();
+
+
+ clipLine (style, start, end, y + height / 2., y - height / 2,
+ x - width / 2., x + width / 2.);
}
void drgeoGPDrawable::drawHalfLine (drgeoStyle & style, drgeoPoint & start,
drgeoVector & vect)
{
+ if (style.mask == yes)
+ return;
+
+ double width = m_Size.getX (), height = m_Size.getY (),
+ x = m_Center.getX (), y = m_Center.getY ();
+
+
+ clipHalfLine (style, start, vect, y + height / 2., y - height / 2,
+ x - width / 2., x + width / 2.);
}
void drgeoGPDrawable::drawSegment (drgeoStyle & style, drgeoPoint & start, drgeoPoint & end)
@@ -168,16 +199,95 @@ void drgeoGPDrawable::drawSegment (drgeoStyle & style, drgeoPoint & start, drgeo
void drgeoGPDrawable::drawCircle (drgeoStyle & style, drgeoPoint & center, double radius)
{
+ if (style.mask == yes)
+ return;
+
+ setColor (style.color);
+
+ switch (style.thick)
+ {
+ case drgeoThicknessDashed:
+ {
+ double dashes[] = {4.0, 2.0};
+ gnome_print_setlinewidth (m_pc, .025);
+ gnome_print_setdash (m_pc, 2, dashes, 0.);
+ }
+ break;
+ case drgeoThicknessNormal:
+ gnome_print_setlinewidth (m_pc, .025);
+ gnome_print_setdash (m_pc, 0, NULL, 0.);
+ break;
+ case drgeoThicknessLarge:
+ gnome_print_setlinewidth (m_pc, .05);
+ gnome_print_setdash (m_pc, 0, NULL, 0.);
+ break;
+ }
+
+ gnome_print_setlinecap (m_pc, 1);
+ gnome_print_setlinejoin (m_pc, 1);
+
+ // Draw the circle.
+ double x = center.getX (), y = center.getY ();
+ gnome_print_newpath (m_pc);
+ gnome_print_moveto (m_pc, x + radius, y);
+ gnome_print_arcto (m_pc, x, y, radius, 0., 180., 0);
+ gnome_print_arcto (m_pc, x, y, radius, 180., 360., 0);
+ gnome_print_stroke (m_pc);
}
void drgeoGPDrawable::drawCircle (drgeoStyle & style, drgeoPoint & center,
drgeoPoint & point)
{
+ double radius;
+
+ radius = (point - center).norm ();
+ drawCircle (style, center, radius);
}
void drgeoGPDrawable::drawArc (drgeoStyle & style, drgeoPoint & center, double radius,
double start, double length)
{
+ if (style.mask == yes)
+ return;
+
+ double end;
+ if (length > 0)
+ end = start + length;
+ else {
+ end = start;
+ start += length;
+ }
+
+ setColor (style.color);
+
+ switch (style.thick)
+ {
+ case drgeoThicknessDashed:
+ {
+ double dashes[] = {4.0, 2.0};
+ gnome_print_setlinewidth (m_pc, .025);
+ gnome_print_setdash (m_pc, 2, dashes, 0.);
+ }
+ break;
+ case drgeoThicknessNormal:
+ gnome_print_setlinewidth (m_pc, .025);
+ gnome_print_setdash (m_pc, 0, NULL, 0.);
+ break;
+ case drgeoThicknessLarge:
+ gnome_print_setlinewidth (m_pc, .05);
+ gnome_print_setdash (m_pc, 0, NULL, 0.);
+ break;
+ }
+
+ gnome_print_setlinecap (m_pc, 1);
+ gnome_print_setlinejoin (m_pc, 1);
+
+ // Draw the arc.
+ double x = center.getX (), y = center.getY ();
+ gnome_print_newpath (m_pc);
+ gnome_print_moveto (m_pc, x + radius * cos (start), y * sin (start));
+ gnome_print_arcto (m_pc, x, y, radius, start * 180. / M_PI, end * 180. / M_PI, 0);
+ gnome_print_stroke (m_pc);
}
void drgeoGPDrawable::drawText (drgeoPoint & where, char *text, drgeoColorType fontColor)
@@ -194,16 +304,22 @@ double drgeoGPDrawable::stringHeight (char *text)
drgeoPoint drgeoGPDrawable::getAreaCenter ()
{
+ return m_Center;
}
drgeoPoint drgeoGPDrawable::getAreaSize ()
{
+ return m_Size;
}
-void drgeoGPDrawable::setOffset (double xOffset, double yOffset)
+void drgeoGPDrawable::setMetrics (double Scale, double xOffset, double yOffset,
+ double width, double height)
{
+ scale = Scale;
gnome_print_scale (m_pc, scale, scale);
gnome_print_translate (m_pc, -xOffset, -yOffset);
+ m_Center = drgeoPoint (xOffset + width / 2., yOffset + height / 2.);
+ m_Size = drgeoPoint (width, height);
}
void drgeoGPDrawable::setColor (enum drgeoColorType color)
diff --git a/goffice/drgeo_gpdrawable.h b/goffice/drgeo_gpdrawable.h
index 5e8ce3a..52835c3 100644
--- a/goffice/drgeo_gpdrawable.h
+++ b/goffice/drgeo_gpdrawable.h
@@ -2,9 +2,7 @@
* DrGeo GOffice component
* drgeo_cairodrawable.h
*
- * Copyright (C) 2006
- *
- * Developed by Jean Bréfort <jean brefort normalesup org>
+ * Copyright (C) 2006 Jean Bréfort <jean brefort normalesup org>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
@@ -51,13 +49,15 @@ public:
double stringHeight (char *text);
drgeoPoint getAreaCenter ();
drgeoPoint getAreaSize ();
- void setOffset (double xOffset, double yOffset);
+ void setMetrics (double Scale, double xOffset, double yOffset,
+ double width, double height);
private:
void setColor (enum drgeoColorType color);
private:
GnomePrintContext *m_pc;
+ drgeoPoint m_Center, m_Size;
};
#endif
diff --git a/goffice/drgeo_impl.h b/goffice/drgeo_impl.h
new file mode 100644
index 0000000..8514021
--- /dev/null
+++ b/goffice/drgeo_impl.h
@@ -0,0 +1,43 @@
+/*
+ * DrGeo GOffice component
+ * drgeo_impl.h
+ *
+ * Copyright (C) 2006 Jean Bréfort <jean brefort normalesup org>
+ *
+ * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ * USA
+ */
+
+#ifndef DRGEO_IMPL_H
+#define DRGEO_IMPL_H
+
+#include <goffice/component/goffice-component.h>
+#include <goffice/component/go-component.h>
+#include <geo/drgeo_figure.h>
+
+class gofficeWindow;
+
+typedef struct
+{
+ GOComponent parent;
+ drgeoFigure *figure;
+ gofficeWindow *window;
+ double xoffset, yoffset, width, height;
+ double left, right, bottom, top;
+ double xmin, xmax, ymin, ymax;
+ bool auto_xmin, auto_xmax, auto_ymin, auto_ymax;
+} GODrGeoComponent;
+
+#endif /* DRGEO_IMPL_H */
diff --git a/goffice/goffice_mdi.cc b/goffice/goffice_mdi.cc
index 4309b16..27f0cdf 100644
--- a/goffice/goffice_mdi.cc
+++ b/goffice/goffice_mdi.cc
@@ -1,30 +1,112 @@
-/* Dr Genius an interactive geometry software
- * (C) Copyright Jean Bréfort 2006
- * jean brefort normalesup org
- *
+/*
+ * DrGeo GOffice component
+ * goffice_mdi.cc
*
+ * Copyright (C) 2006 Jean Bréfort <jean brefort normalesup org>
*
+ * 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 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 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.
*
- * 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.
+ * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ * USA
*/
-#include <config.h>
+#include "config.h"
#include "goffice_mdi.h"
+#include "goffice_window.h"
+#include <geo/drgeo_scm_api.h>
+#include <geo/drgeo_scm_interface.h>
+#include <locale.h>
gofficeMDI::gofficeMDI (): drgeoMDI ()
{
+// setlocale (LC_NUMERIC, "C");
+ scm_init_guile ();
+
+ // source pasted from drgeo_init.cc
+ SCM ret;
+ // Code to handle user configurations
+ ret = gh_load (DRGEO_SCMDIR"/drgeo_config.scm");
+ // The Dr. Geo Scheme interface
+ ret = gh_load (DRGEO_SCMDIR"/drgeo_scm_interface.scm");
+ // The Scheme interface constants and synonymes and their
+ // translations in other national language
+ ret = gh_load (DRGEO_SCMDIR"/drgeo_scm_interface_constant.scm");
+ ret = gh_load (DRGEO_SCMDIR"/drgeo_scm_interface_constant_fr.scm");
+ ret = gh_load (DRGEO_SCMDIR"/drgeo_scm_interface_constant_sr.scm");
+ ret = gh_load (DRGEO_SCMDIR"/drgeo_scm_interface_constant_es.scm");
+ ret = gh_load (DRGEO_SCMDIR"/drgeo_scm_interface_constant_nl.scm");
+
+ // source pasted from drgenius_main.cc
+ /* Load user preferences */
+ loadUserPreferences ();
+
+ /* declare drgeo API in guile */
+ gh_new_procedure ("move", (SCM (*) ()) drgeo_scm_move, 2, 0, 0);
+ gh_new_procedure ("getAbscissa", (SCM (*) ()) drgeo_scm_getAbscissa, 1, 0, 0);
+ gh_new_procedure ("setAbscissa", (SCM (*) ()) drgeo_scm_setAbscissa, 2, 0, 0);
+ gh_new_procedure ("getCoordinates", (SCM (*) ()) drgeo_scm_getCoordinates, 1, 0, 0);
+ gh_new_procedure ("setCoordinates", (SCM (*) ()) drgeo_scm_setCoordinates, 2, 0, 0);
+ gh_new_procedure ("getUnit", (SCM (*) ()) drgeo_scm_getUnit, 1, 0, 0);
+ gh_new_procedure ("getNormal", (SCM (*) ()) drgeo_scm_getNormal, 1, 0, 0);
+ gh_new_procedure ("getSlope", (SCM (*) ()) drgeo_scm_getSlope, 1, 0, 0);
+ gh_new_procedure ("getNorm", (SCM (*) ()) drgeo_scm_getNorm, 1, 0, 0);
+ gh_new_procedure ("getLength", (SCM (*) ()) drgeo_scm_getLength, 1, 0, 0);
+ gh_new_procedure ("getCenter", (SCM (*) ()) drgeo_scm_getCenter, 1, 0, 0);
+ gh_new_procedure ("getRadius", (SCM (*) ()) drgeo_scm_getRadius, 1, 0, 0);
+ gh_new_procedure ("getValue", (SCM (*) ()) drgeo_scm_getValue, 1, 0, 0);
+ gh_new_procedure ("setValue", (SCM (*) ()) drgeo_scm_setValue, 2, 0, 0);
+ gh_new_procedure ("getAngle", (SCM (*) ()) drgeo_scm_getAngle, 1, 0, 0);
+
+ /* declare the drgeo interface in Guile */
+ gh_new_procedure ("drgeoMake-figure", (SCM (*) ()) drgeo_scm_make_figure, 1, 0, 0);
+ gh_new_procedure ("drgeoMake-freePoint", (SCM (*) ()) drgeo_scm_make_freePoint, 4, 0, 0);
+ gh_new_procedure ("drgeoMake-pointOnCurve", (SCM (*) ()) drgeo_scm_make_pointOnCurve, 4, 0, 0);
+ gh_new_procedure ("drgeoMake-middle2Points", (SCM (*) ()) drgeo_scm_make_middle2Points, 4, 0, 0);
+ gh_new_procedure ("drgeoMake-middleSegment", (SCM (*) ()) drgeo_scm_make_middleSegment, 3, 0, 0);
+ gh_new_procedure ("drgeoMake-intersection", (SCM (*) ()) drgeo_scm_make_intersection, 5, 0, 0);
+ gh_new_procedure ("drgeoMake-segmentExtremity", (SCM (*) ()) drgeo_scm_make_segmentExtremity, 4, 0, 0);
+ gh_new_procedure ("drgeoMake-line", (SCM (*) ()) drgeo_scm_make_line, 4, 0, 0);
+ gh_new_procedure ("drgeoMake-parallel", (SCM (*) ()) drgeo_scm_make_parallel, 4, 0, 0);
+ gh_new_procedure ("drgeoMake-orthogonal", (SCM (*) ()) drgeo_scm_make_orthogonal, 4, 0, 0);
+ gh_new_procedure ("drgeoMake-ray", (SCM (*) ()) drgeo_scm_make_ray, 4, 0, 0);
+ gh_new_procedure ("drgeoMake-vector", (SCM (*) ()) drgeo_scm_make_vector, 4, 0, 0);
+ gh_new_procedure ("drgeoMake-circle2Points", (SCM (*) ()) drgeo_scm_make_circle2Points, 4, 0, 0);
+ gh_new_procedure ("drgeoMake-circleRadius", (SCM (*) ()) drgeo_scm_make_circleRadius, 4, 0, 0);
+ gh_new_procedure ("drgeoMake-circleSegment", (SCM (*) ()) drgeo_scm_make_circleSegment, 4, 0, 0);
+ gh_new_procedure ("drgeoMake-arc", (SCM (*) ()) drgeo_scm_make_arc, 5, 0, 0);
+ gh_new_procedure ("drgeoMake-locus", (SCM (*) ()) drgeo_scm_make_locus, 4, 0, 0);
+ gh_new_procedure ("drgeoMake-polygon", (SCM (*) ()) drgeo_scm_make_polygon, 3, 0, 0);
+ gh_new_procedure ("drgeoMake-freeValue", (SCM (*) ()) drgeo_scm_make_freeValue, 5, 0, 0);
+ gh_new_procedure ("drgeoMake-segmentLength", (SCM (*) ()) drgeo_scm_make_segmentLength, 5, 0, 0);
+ gh_new_procedure ("drgeoMake-vectorNorm", (SCM (*) ()) drgeo_scm_make_vectorNorm, 5, 0, 0);
+ gh_new_procedure ("drgeoMake-distancePointCircle", (SCM (*) ()) drgeo_scm_make_distancePointCircle, 6, 0, 0);
+ gh_new_procedure ("drgeoMake-distancePointLine", (SCM (*) ()) drgeo_scm_make_distancePointLine, 6, 0, 0);
+ gh_new_procedure ("drgeoMake-distancePointPoint", (SCM (*) ()) drgeo_scm_make_distancePointPoint, 6, 0, 0);
+ gh_new_procedure ("drgeoMake-circleLength", (SCM (*) ()) drgeo_scm_make_circleLength, 5, 0, 0);
+ gh_new_procedure ("drgeoMake-lineSlope", (SCM (*) ()) drgeo_scm_make_lineSlope, 5, 0, 0);
+ gh_new_procedure ("drgeoMake-arcLength", (SCM (*) ()) drgeo_scm_make_arcLength, 5, 0, 0);
+ gh_new_procedure ("drgeoMake-geometricAngle", (SCM (*) ()) drgeo_scm_make_geometricAngle, 5, 0, 0);
+ gh_new_procedure ("drgeoMake-orientedAngle", (SCM (*) ()) drgeo_scm_make_orientedAngle, 6, 0, 0);
+
+ gh_new_procedure ("drgeoMake-rotation", (SCM (*) ()) drgeo_scm_make_rotation, 5, 0, 0);
+ gh_new_procedure ("drgeoMake-scale", (SCM (*) ()) drgeo_scm_make_scale, 5, 0, 0);
+ gh_new_procedure ("drgeoMake-symmetry", (SCM (*) ()) drgeo_scm_make_symmetry, 4, 0, 0);
+ gh_new_procedure ("drgeoMake-reflexion", (SCM (*) ()) drgeo_scm_make_reflexion, 4, 0, 0);
+ gh_new_procedure ("drgeoMake-translation", (SCM (*) ()) drgeo_scm_make_translation, 4, 0, 0);
+ gh_new_procedure ("change-color", (SCM (*) ()) drgeo_scm_change_color, 3, 0, 0);
+ gh_new_procedure ("change-thickness", (SCM (*) ()) drgeo_scm_change_thickness, 3, 0, 0);
+ gh_new_procedure ("change-pointShape", (SCM (*) ()) drgeo_scm_change_pointShape, 3, 0, 0);
+ gh_new_procedure ("change-masked", (SCM (*) ()) drgeo_scm_change_masked, 2, 0, 0);
}
gofficeMDI::~gofficeMDI ()
@@ -68,3 +150,8 @@ void gofficeMDI::newGeometricDocument (xmlNodePtr tree)
void gofficeMDI::setMacroMenuItemDescription (gchar *name, gchar *description)
{
}
+
+void gofficeMDI::EditComponent (GODrGeoComponent *component)
+{
+ new gofficeWindow (this, component);
+}
diff --git a/goffice/goffice_mdi.h b/goffice/goffice_mdi.h
index 725fcde..bac1944 100644
--- a/goffice/goffice_mdi.h
+++ b/goffice/goffice_mdi.h
@@ -1,29 +1,32 @@
-/* Dr Genius an interactive geometry software
- * (C) Copyright Jean Bréfort 2006
- * jean brefort normalesup org
- *
+/*
+ * DrGeo GOffice component
+ * goffice_mdi.cc
*
+ * Copyright (C) 2006 Jean Bréfort <jean brefort normalesup org>
*
+ * 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 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 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.
*
- * 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.
+ * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ * USA
*/
#ifndef GOFFICE_MDI_H
#define GOFFICE_MDI_H
#include <geo/drgeo_mdi.h>
+#include "drgeo_impl.h"
+
+class gofficeWindow;
class gofficeMDI: public drgeoMDI
{
@@ -40,6 +43,11 @@ public:
virtual void reconcile_grayout_undo ();
virtual void newGeometricDocument (xmlNodePtr tree);
virtual void setMacroMenuItemDescription (gchar *name, gchar *description);
+ void EditComponent (GODrGeoComponent *component);
+ void setActiveWindow (gofficeWindow *window) {m_ActiveWindow = window;}
+
+private:
+ gofficeWindow *m_ActiveWindow;
};
#endif /* GOFFICE_MDI_H */
diff --git a/goffice/goffice_window.cc b/goffice/goffice_window.cc
new file mode 100644
index 0000000..1c193c2
--- /dev/null
+++ b/goffice/goffice_window.cc
@@ -0,0 +1,297 @@
+/*
+ * DrGeo GOffice component
+ * goffice_window.cc
+ *
+ * Copyright (C) 2006 Jean Bréfort <jean brefort normalesup org>
+ *
+ * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ * USA
+ */
+
+#include "config.h"
+#include "goffice_window.h"
+#include "drgeo_areabounds.h"
+#include <geo/geo_view.h>
+#include <glade/glade.h>
+#include <glib/gi18n-lib.h>
+
+static void
+save_cb (GtkWidget* widget, gofficeWindow *window)
+{
+ window->Save ();
+}
+
+static void
+close_cb (GtkWidget* widget, gofficeWindow *window)
+{
+ window->Close ();
+}
+
+static void
+undo_cb (GtkWidget* widget, gofficeWindow *window)
+{
+ window->Undo ();
+}
+
+static void
+redo_cb (GtkWidget* widget, gofficeWindow *window)
+{
+ window->Redo ();
+}
+
+static void
+bounds_cb (GtkWidget* widget, gofficeWindow *window)
+{
+ window->Bounds ();
+}
+
+static void
+help_cb ()
+{
+}
+
+static void
+about_cb ()
+{
+}
+
+static void
+focus_in_cb (gofficeWindow *window)
+{
+ window->setActive ();
+}
+
+static void
+destroy_cb (gofficeWindow *window)
+{
+ delete window;
+}
+
+static void show_menu_tip_cb (GtkWidget *proxy, gofficeWindow* Win)
+{
+ GtkAction *action = (GtkAction*) g_object_get_data (G_OBJECT (proxy), "action");
+ char *tip;
+ g_object_get (action, "tooltip", &tip, NULL);
+ if (tip != NULL){
+ Win->SetStatusText (tip);
+ g_free (tip);
+ }
+}
+
+static void clear_menu_tip_cb (gofficeWindow* Win)
+{
+ Win->ClearStatus ();
+}
+
+static void connect_proxy_cb (GtkUIManager *ui, GtkAction *action, GtkWidget *proxy, gofficeWindow* Win)
+{
+ /* connect whether there is a tip or not it may change later */
+ if (GTK_IS_MENU_ITEM (proxy)) {
+ g_object_set_data (G_OBJECT (proxy), "action", action);
+ g_object_connect (proxy,
+ "signal::select", G_CALLBACK (show_menu_tip_cb), Win,
+ "swapped_signal::deselect", G_CALLBACK (clear_menu_tip_cb), Win,
+ NULL);
+ }
+}
+
+static void disconnect_proxy_cb (GtkUIManager *ui, GtkAction *action, GtkWidget *proxy, gofficeWindow* Win)
+{
+ if (GTK_IS_MENU_ITEM (proxy)) {
+ g_object_set_data (G_OBJECT (proxy), "action", NULL);
+ g_object_disconnect (proxy,
+ "any_signal::select", G_CALLBACK (show_menu_tip_cb), Win,
+ "any_signal::deselect", G_CALLBACK (clear_menu_tip_cb), Win,
+ NULL);
+ }
+}
+
+static GtkActionEntry entries[] = {
+ { "FileMenu", NULL, N_("_File") },
+ { "Save", GTK_STOCK_SAVE, N_("_Save"), "<control>S",
+ N_("Save the current figure"), G_CALLBACK (save_cb) },
+ { "Close", GTK_STOCK_CLOSE, N_("_Close"), "<control>W",
+ N_("Close the current figure"), G_CALLBACK (close_cb) },
+ { "EditMenu", NULL, N_("_Edit") },
+ { "Undo", GTK_STOCK_UNDO, N_("_Undo"), "<control>Z",
+ N_("Undo the last action"), G_CALLBACK (undo_cb) },
+ { "Redo", GTK_STOCK_REDO, N_("_Redo"), "<shift><control>Z",
+ N_("Redo the undone action"), G_CALLBACK (redo_cb) },
+ { "Bounds", NULL, N_("_Component area bounds"), NULL,
+ N_("Set explicit bounds to the displayed area of the embedded object"),
+ G_CALLBACK (bounds_cb) },
+ { "HelpMenu", NULL, N_("_Help") },
+ { "Help", GTK_STOCK_HELP, N_("_Contents"), "F1",
+ N_("User manual"), G_CALLBACK (help_cb) },
+ { "About", NULL, N_("_About"), NULL,
+ N_("About Dr Geo..."), G_CALLBACK (about_cb) }
+};
+
+static const char *ui_description =
+"<ui>"
+" <menubar name='MainMenu'>"
+" <menu action='FileMenu'>"
+" <menuitem action='Save'/>"
+" <menuitem action='Close'/>"
+" </menu>"
+" <menu action='EditMenu'>"
+" <menuitem action='Undo'/>"
+" <menuitem action='Redo'/>"
+" <separator name='edit-sep1'/>"
+" <menuitem action='Bounds'/>"
+" </menu>"
+" <menu action='HelpMenu'>"
+" <menuitem action='Help'/>"
+" <menuitem action='About'/>"
+" </menu>"
+" </menubar>"
+" <toolbar name='MainToolbar'>"
+" <toolitem action='Undo'/>"
+" <toolitem action='Redo'/>"
+" </toolbar>"
+"</ui>";
+
+gofficeWindow::gofficeWindow (gofficeMDI *mdi, GODrGeoComponent *component)
+{
+ GladeXML *xml;
+ GtkWidget *w, *vbox;
+ GtkActionGroup *action_group;
+ GtkAccelGroup *accel_group;
+ GError *error;
+ GdkPixbuf *icon;
+
+ m_component = component;
+ m_component->window = this;
+ m_mdi = mdi;
+ m_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title (GTK_WINDOW (m_window), _("Dr Geo"));
+ gtk_window_resize (GTK_WINDOW (m_window), 640, 480);
+ g_object_connect (G_OBJECT (m_window),
+ "swapped_signal::focus-in-event", G_CALLBACK (focus_in_cb), this,
+ "swapped_signal::destroy", G_CALLBACK (destroy_cb), this,
+ NULL);
+ vbox = gtk_vbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (m_window), vbox);
+
+ action_group = gtk_action_group_new ("MenuActions");
+ gtk_action_group_set_translation_domain (action_group, GETTEXT_PACKAGE);
+ gtk_action_group_add_actions (action_group, entries, G_N_ELEMENTS (entries), this);
+
+ m_UIManager = gtk_ui_manager_new ();
+ g_object_connect (m_UIManager,
+ "signal::connect_proxy", G_CALLBACK (connect_proxy_cb), this,
+ "signal::disconnect_proxy", G_CALLBACK (disconnect_proxy_cb), this,
+ NULL);
+ gtk_ui_manager_insert_action_group (m_UIManager, action_group, 0);
+
+ accel_group = gtk_ui_manager_get_accel_group (m_UIManager);
+ gtk_window_add_accel_group (GTK_WINDOW (m_window), accel_group);
+
+ error = NULL;
+ if (!gtk_ui_manager_add_ui_from_string (m_UIManager, ui_description, -1, &error)){
+ g_message ("building menus failed: %s", error->message);
+ g_error_free (error);
+ exit (EXIT_FAILURE);
+ }
+
+ w = gtk_ui_manager_get_widget (m_UIManager, "/MainMenu");
+ gtk_box_pack_start (GTK_BOX (vbox), w, false, false, 0);
+ w = gtk_ui_manager_get_widget (m_UIManager, "/MainToolbar");
+ gtk_toolbar_set_style(GTK_TOOLBAR (w), GTK_TOOLBAR_ICONS);
+ gtk_toolbar_set_show_arrow(GTK_TOOLBAR (w), false);
+ gtk_toolbar_set_tooltips(GTK_TOOLBAR (w), true);
+ gtk_box_pack_start (GTK_BOX (vbox), w, false, false, 0);
+
+ if (component->figure) {
+ // Duplicate the figure
+ xmlDocPtr doc = xmlNewDoc((xmlChar*)"1.0");
+ doc->children = xmlNewDocNode (doc, NULL, (xmlChar*) "drgenius", NULL);
+ component->figure->saveAs (doc->children, "embedded");
+ m_view = new geoView (doc->children->children);
+ xmlFreeDoc (doc);
+ } else
+ m_view = new geoView (NULL);
+ gtk_box_pack_start_defaults (GTK_BOX (vbox), m_view->widgetView ());
+ m_status_bar = gtk_statusbar_new ();
+ m_statusId = gtk_statusbar_get_context_id (GTK_STATUSBAR (m_status_bar), "status");
+ gtk_box_pack_start (GTK_BOX (vbox), m_status_bar, false, false, 0);
+ icon = gdk_pixbuf_new_from_file (DRGEO_GLADEDIR"/drgeo.png", &error);
+ if (error) {
+ g_message ("error while loading icon file: %s", error->message);
+ g_error_free (error);
+ } else {
+ gtk_window_set_icon (GTK_WINDOW (m_window), icon);
+ g_object_unref (icon);
+ }
+ gtk_widget_show_all (m_window);
+ m_boundsDlg = NULL;
+}
+
+gofficeWindow::~gofficeWindow ()
+{
+ if (!m_component->figure)
+ go_component_emit_changed (GO_COMPONENT (m_component));
+ m_component->window = NULL;
+ delete m_view;
+ if (m_boundsDlg)
+ m_boundsDlg->Destroy ();
+}
+
+void gofficeWindow::Save ()
+{
+ if (m_component->figure)
+ delete m_component->figure;
+ xmlDocPtr doc = xmlNewDoc((xmlChar*)"1.0");
+ doc->children = xmlNewDocNode (doc, NULL, (xmlChar*) "drgenius", NULL);
+ m_view->figure ()->saveAs (doc->children, "embedded");
+ m_component->figure = new drgeoFigure (doc->children->children);
+ m_component->figure->setDrawable (NULL);
+ xmlFreeDoc (doc);
+ go_component_emit_changed (GO_COMPONENT (m_component));
+}
+
+void gofficeWindow::Close ()
+{
+ Destroy ();
+}
+
+void gofficeWindow::Undo ()
+{
+}
+
+void gofficeWindow::Redo ()
+{
+}
+
+void gofficeWindow::Bounds ()
+{
+ if (!m_boundsDlg)
+ m_boundsDlg = new drgeoAreaBoundsDlg (m_component, this);
+}
+
+void gofficeWindow::ClearStatus()
+{
+ gtk_statusbar_pop (GTK_STATUSBAR (m_status_bar), m_statusId);
+}
+
+void gofficeWindow::SetStatusText(const char* text)
+{
+ gtk_statusbar_push (GTK_STATUSBAR (m_status_bar), m_statusId, text);
+}
+
+void gofficeWindow::Destroy ()
+{
+ gtk_widget_destroy (m_window);
+}
diff --git a/goffice/goffice_window.h b/goffice/goffice_window.h
new file mode 100644
index 0000000..086c434
--- /dev/null
+++ b/goffice/goffice_window.h
@@ -0,0 +1,60 @@
+/*
+ * DrGeo GOffice component
+ * goffice_window.cc
+ *
+ * Copyright (C) 2006 Jean Bréfort <jean brefort normalesup org>
+ *
+ * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ * USA
+ */
+
+#ifndef GOFFICE_WINDOW_H
+#define GOFFICE_WINDOW_H
+
+#include "drgeo_impl.h"
+#include "goffice_mdi.h"
+
+class geoView;
+class drgeoAreaBoundsDlg;
+
+class gofficeWindow
+{
+public:
+ gofficeWindow (gofficeMDI *mdi, GODrGeoComponent *component);
+ ~gofficeWindow ();
+
+ void setActive () {m_mdi->setActiveWindow (this);}
+ void Save ();
+ void Close ();
+ void Undo ();
+ void Redo ();
+ void Bounds ();
+ void ClearStatus();
+ void SetStatusText(const char* text);
+ void Destroy ();
+ GtkWindow *getWindow () {return GTK_WINDOW (m_window);}
+ void notifyBoundsDlgDestroyed () {m_boundsDlg = NULL;}
+
+private:
+ GODrGeoComponent *m_component;
+ gofficeMDI *m_mdi;
+ geoView *m_view;
+ GtkWidget *m_status_bar, *m_window;
+ GtkUIManager *m_UIManager;
+ unsigned m_statusId;
+ drgeoAreaBoundsDlg *m_boundsDlg;
+};
+
+#endif /* GOFFICE_WINDOW_H */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]