summaryrefslogtreecommitdiff
path: root/capplets/rollback/rollback-control.c
diff options
context:
space:
mode:
Diffstat (limited to 'capplets/rollback/rollback-control.c')
-rw-r--r--capplets/rollback/rollback-control.c352
1 files changed, 0 insertions, 352 deletions
diff --git a/capplets/rollback/rollback-control.c b/capplets/rollback/rollback-control.c
deleted file mode 100644
index 9e0573afe..000000000
--- a/capplets/rollback/rollback-control.c
+++ /dev/null
@@ -1,352 +0,0 @@
-/* -*- mode: c; style: linux -*- */
-
-/* rollback-control.c
- * Copyright (C) 2000 Helix Code, Inc.
- *
- * Written by Bradford Hovinen <hovinen@helixcode.com>
- *
- * 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, 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.
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <archive.h>
-#include <location.h>
-#include <config-log.h>
-
-#include "rollback-control.h"
-#include "rollback-widget.h"
-
-#define CONTROL_HEIGHT 30
-#define MARKER_SIZE 8
-
-enum {
- ARG_0,
- ARG_CONTROL_NUMBER,
- ARG_BACKEND_ID,
- ARG_IS_GLOBAL
-};
-
-struct _RollbackControlPrivate
-{
- Archive *archive;
- Location *location;
- ConfigLog *config_log;
- gchar *backend_id;
- gint y; /* y-coordonite of the canvas item */
-
- GdkDrawable *drawable;
-};
-
-static GnomeCanvasItemClass *parent_class;
-
-static void rollback_control_init (RollbackControl *rollback_control);
-static void rollback_control_class_init (RollbackControlClass *class);
-
-static void rollback_control_set_arg (GtkObject *object,
- GtkArg *arg,
- guint arg_id);
-static void rollback_control_get_arg (GtkObject *object,
- GtkArg *arg,
- guint arg_id);
-
-static void rollback_control_finalize (GtkObject *object);
-
-static void rollback_control_update (GnomeCanvasItem *item,
- double affine[6],
- ArtSVP *clip_path,
- gint flags);
-static void rollback_control_draw (GnomeCanvasItem *item,
- GdkDrawable *drawable,
- int x, int y,
- int width, int height);
-
-static int draw_markers_cb (ConfigLog *config_log,
- gint id,
- gchar *backend_id,
- struct tm *time,
- RollbackControl *control);
-static gint time_to_x (time_t t, gint width);
-static gint horner (gint *coeff, gint degree,
- gint divisor, gint x);
-
-GType
-rollback_control_get_type (void)
-{
- static GType rollback_control_type = 0;
-
- if (!rollback_control_type) {
- GtkTypeInfo rollback_control_info = {
- "RollbackControl",
- sizeof (RollbackControl),
- sizeof (RollbackControlClass),
- (GtkClassInitFunc) rollback_control_class_init,
- (GtkObjectInitFunc) rollback_control_init,
- (GtkArgSetFunc) NULL,
- (GtkArgGetFunc) NULL
- };
-
- rollback_control_type =
- gtk_type_unique (gnome_canvas_item_get_type (),
- &rollback_control_info);
- }
-
- return rollback_control_type;
-}
-
-static void
-rollback_control_init (RollbackControl *rollback_control)
-{
- rollback_control->p = g_new0 (RollbackControlPrivate, 1);
-}
-
-static void
-rollback_control_class_init (RollbackControlClass *class)
-{
- GtkObjectClass *object_class;
- GnomeCanvasItemClass *canvas_item_class;
-
- gtk_object_add_arg_type ("RollbackControl::control-number",
- GTK_TYPE_INT,
- GTK_ARG_READWRITE,
- ARG_CONTROL_NUMBER);
- gtk_object_add_arg_type ("RollbackControl::backend-id",
- GTK_TYPE_POINTER,
- GTK_ARG_READWRITE | GTK_ARG_CONSTRUCT_ONLY,
- ARG_BACKEND_ID);
- gtk_object_add_arg_type ("RollbackControl::is-global",
- GTK_TYPE_INT,
- GTK_ARG_READWRITE | GTK_ARG_CONSTRUCT_ONLY,
- ARG_IS_GLOBAL);
-
- object_class = GTK_OBJECT_CLASS (class);
- object_class->finalize = rollback_control_finalize;
- object_class->set_arg = rollback_control_set_arg;
- object_class->get_arg = rollback_control_get_arg;
-
- canvas_item_class = GNOME_CANVAS_ITEM_CLASS (class);
- canvas_item_class->update = rollback_control_update;
- canvas_item_class->draw = rollback_control_draw;
-
- parent_class = GNOME_CANVAS_ITEM_CLASS
- (gtk_type_class (gnome_canvas_item_get_type ()));
-}
-
-static void
-rollback_control_set_arg (GtkObject *object, GtkArg *arg, guint arg_id)
-{
- RollbackControl *rollback_control;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (IS_ROLLBACK_CONTROL (object));
-
- rollback_control = ROLLBACK_CONTROL (object);
-
- switch (arg_id) { case ARG_CONTROL_NUMBER:
- rollback_control->p->y =
- GTK_VALUE_INT (*arg) * CONTROL_HEIGHT;
- break;
-
- case ARG_BACKEND_ID:
- g_return_if_fail (GTK_VALUE_POINTER (*arg) != NULL);
-
- rollback_control->p->backend_id =
- g_strdup (GTK_VALUE_POINTER (*arg));
- break;
-
- case ARG_IS_GLOBAL:
- if (GTK_VALUE_INT (*arg))
- rollback_control->p->archive =
- ARCHIVE (archive_load (TRUE));
- else
- rollback_control->p->archive =
- ARCHIVE (archive_load (FALSE));
-
- rollback_control->p->location =
- archive_get_current_location
- (rollback_control->p->archive);
-/* rollback_control->p->config_log = */
-/* location_get_config_log */
-/* (rollback_control->p->location); */
- break;
-
- default:
- g_warning ("Bad argument set");
- break;
- }
-}
-
-static void
-rollback_control_get_arg (GtkObject *object, GtkArg *arg, guint arg_id)
-{
- RollbackControl *rollback_control;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (IS_ROLLBACK_CONTROL (object));
-
- rollback_control = ROLLBACK_CONTROL (object);
-
- switch (arg_id) {
- case ARG_CONTROL_NUMBER:
- GTK_VALUE_INT (*arg) = rollback_control->p->y / CONTROL_HEIGHT;
- break;
-
- case ARG_BACKEND_ID:
- GTK_VALUE_POINTER (*arg) = rollback_control->p->backend_id;
- break;
-
- case ARG_IS_GLOBAL:
- GTK_VALUE_INT (*arg) = rollback_control->p->archive->is_global;
- break;
-
- default:
- g_warning ("Bad argument get");
- break;
- }
-}
-
-static void
-rollback_control_finalize (GtkObject *object)
-{
- RollbackControl *rollback_control;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (IS_ROLLBACK_CONTROL (object));
-
- rollback_control = ROLLBACK_CONTROL (object);
-
- g_free (rollback_control->p);
-
- GTK_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static void
-rollback_control_update (GnomeCanvasItem *item, double affine[6],
- ArtSVP *clip_path, gint flags)
-{
- RollbackControl *control;
-
- g_return_if_fail (item != NULL);
- g_return_if_fail (IS_ROLLBACK_CONTROL (item));
-
- control = ROLLBACK_CONTROL (item);
-
- /* We don't support aa canvas for now */
-
- if (item->canvas->aa) {
- g_warning ("Anti-aliased canvas not supported for "
- "this item");
- } else {
- /* FIXME: Fix this */
- gnome_canvas_update_bbox (item,
- 0, control->p->y, 65536,
- control->p->y + CONTROL_HEIGHT);
- }
-}
-
-static void
-rollback_control_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
- int x, int y, int width, int height)
-{
- RollbackWidget *widget;
- RollbackControl *control;
- GdkGC *gc;
-
- g_return_if_fail (item != NULL);
- g_return_if_fail (IS_ROLLBACK_CONTROL (item));
- g_return_if_fail (IS_ROLLBACK_WIDGET (item->canvas));
-
- control = ROLLBACK_CONTROL (item);
- widget = ROLLBACK_WIDGET (item->canvas);
-
- gc = rollback_widget_get_gc (widget);
- control->p->drawable = drawable;
-
- /* Render the background color */
- gdk_gc_set_foreground (gc, &widget->control_colors[BACKGROUND_COLOR]);
- gdk_draw_rectangle (drawable, gc, TRUE, x, y, width, height);
-
- /* Render the markers */
- gdk_gc_set_foreground (gc, &widget->control_colors[MARKER_COLOR]);
- config_log_iterate (control->p->config_log,
- (ConfigLogIteratorCB) draw_markers_cb, control);
-}
-
-static int
-draw_markers_cb (ConfigLog *config_log, gint id, gchar *backend_id,
- struct tm *time, RollbackControl *control)
-{
- RollbackWidget *widget;
- GdkGC *gc;
- gint x;
-
- if (strcmp (backend_id, control->p->backend_id)) return 0;
-
- widget = ROLLBACK_WIDGET (GNOME_CANVAS_ITEM (control)->canvas);
- gc = rollback_widget_get_gc (widget);
-
- /* FIXME: Get the width correctly */
- x = time_to_x (mktime (time), 300);
-
- gdk_draw_arc (control->p->drawable, gc, TRUE, x,
- control->p->y + (CONTROL_HEIGHT - MARKER_SIZE) / 2,
- MARKER_SIZE, MARKER_SIZE, 0, 360 * 64);
-
- return 0;
-}
-
-/* I think I'm going to fake this over the rationals here by getting the lcm
- * of all the denominators and dividing the result by that in the end. That
- * might make my life less painful.
- */
-
-static gint
-time_to_x (time_t t, gint width)
-{
- gint coeff[5]; /* We have five points, so we use a degree-4
- * polynomial */
- time_t now;
-
- now = time (NULL);
-
- /* FIXME: Find out the real coefficients to use here */
- coeff[0] = 1;
- coeff[1] = 2;
- coeff[2] = 2;
- coeff[3] = 5;
- coeff[4] = 6;
-
- return width - width * (now - t) / (7 * 24 * 60 * 60);
-/* return width - horner (coeff, 1, 4, now - t) * width; */
-}
-
-/* Treat the array coeff as the coefficient vector of a polynomial over the
- * ring of integers and evaluate that polynomial at the given integer x,
- * dividing at each step by the given divisor
- */
-
-static gint
-horner (gint *coeff, gint divisor, gint degree, gint x)
-{
- gint total = 0, i;
-
- for (i = 0; i <= degree; i++)
- total = (total * x + coeff[i]) / divisor;
-
- return total;
-}