Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/pygtk_chart/chart_object.py
diff options
context:
space:
mode:
Diffstat (limited to 'pygtk_chart/chart_object.py')
-rw-r--r--pygtk_chart/chart_object.py155
1 files changed, 155 insertions, 0 deletions
diff --git a/pygtk_chart/chart_object.py b/pygtk_chart/chart_object.py
new file mode 100644
index 0000000..8e4cd7e
--- /dev/null
+++ b/pygtk_chart/chart_object.py
@@ -0,0 +1,155 @@
+#!/usr/bin/env python
+#
+# chart_object.py
+#
+# Copyright 2009 Sven Festersen <sven@sven-festersen.de>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1301, USA.
+"""
+This module contains the ChartObject class.
+
+Author: Sven Festersen (sven@sven-festersen.de)
+"""
+import cairo
+import gobject
+
+class ChartObject(gobject.GObject):
+ """
+ This is the base class for all things that can be drawn on a chart
+ widget.
+ It emits the signal 'appearance-changed' when it needs to be
+ redrawn.
+
+ Properties
+ ==========
+ ChartObject inherits properties from gobject.GObject.
+ Additional properties:
+ - visible (sets whether the object should be visible,
+ type: boolean)
+ - antialias (sets whether the object should be antialiased,
+ type: boolean).
+
+ Signals
+ =======
+ ChartObject inherits signals from gobject.GObject,
+ Additional signals:
+ - appearance-changed (emitted if the object needs to be redrawn).
+ """
+
+ __gsignals__ = {"appearance-changed": (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [])}
+
+
+ __gproperties__ = {"visible": (gobject.TYPE_BOOLEAN,
+ "visibilty of the object",
+ "Set whether to draw the object or not.",
+ True, gobject.PARAM_READWRITE),
+ "antialias": (gobject.TYPE_BOOLEAN,
+ "use antialiasing",
+ "Set whether to use antialiasing when drawing the object.",
+ True, gobject.PARAM_READWRITE)}
+
+ def __init__(self):
+ gobject.GObject.__init__(self)
+ self._show = True
+ self._antialias = True
+
+ def do_get_property(self, property):
+ if property.name == "visible":
+ return self._show
+ elif property.name == "antialias":
+ return self._antialias
+ else:
+ raise AttributeError, "Property %s does not exist." % property.name
+
+ def do_set_property(self, property, value):
+ if property.name == "visible":
+ self._show = value
+ elif property.name == "antialias":
+ self._antialias = value
+ else:
+ raise AttributeError, "Property %s does not exist." % property.name
+
+ def _do_draw(self, context, rect):
+ """
+ A derived class should override this method. The drawing stuff
+ should happen here.
+
+ @type context: cairo.Context
+ @param context: The context to draw on.
+ @type rect: gtk.gdk.Rectangle
+ @param rect: A rectangle representing the charts area.
+ """
+ pass
+
+ def draw(self, context, rect, *args):
+ """
+ This method is called by the parent Chart instance. It
+ calls _do_draw.
+
+ @type context: cairo.Context
+ @param context: The context to draw on.
+ @type rect: gtk.gdk.Rectangle
+ @param rect: A rectangle representing the charts area.
+ """
+ res = None
+ if self._show:
+ if not self._antialias:
+ context.set_antialias(cairo.ANTIALIAS_NONE)
+ res = self._do_draw(context, rect, *args)
+ context.set_antialias(cairo.ANTIALIAS_DEFAULT)
+ return res
+
+ def set_antialias(self, antialias):
+ """
+ This method sets the antialiasing mode of the ChartObject. Antialiasing
+ is enabled by default.
+
+ @type antialias: boolean
+ @param antialias: If False, antialiasing is disabled for this
+ ChartObject.
+ """
+ self.set_property("antialias", antialias)
+ self.emit("appearance_changed")
+
+ def get_antialias(self):
+ """
+ Returns True if antialiasing is enabled for the object.
+
+ @return: boolean.
+ """
+ return self.get_property("antialias")
+
+ def set_visible(self, visible):
+ """
+ Use this method to set whether the ChartObject should be visible or
+ not.
+
+ @type visible: boolean
+ @param visible: If False, the PlotObject won't be drawn.
+ """
+ self.set_property("visible", visible)
+ self.emit("appearance_changed")
+
+ def get_visible(self):
+ """
+ Returns True if the object is visble.
+
+ @return: boolean.
+ """
+ return self.get_property("visible")
+
+
+gobject.type_register(ChartObject)