]> git.sur5r.net Git - glabels/blobdiff - glabels2/src/label.c
Organized master branch to be top-level directory for glabels, instead of
[glabels] / glabels2 / src / label.c
diff --git a/glabels2/src/label.c b/glabels2/src/label.c
deleted file mode 100644 (file)
index 659c110..0000000
+++ /dev/null
@@ -1,707 +0,0 @@
-/*
- *  label.c
- *  Copyright (C) 2001-2009  Jim Evins <evins@snaught.com>.
- *
- *  This file is part of gLabels.
- *
- *  gLabels 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 3 of the License, or
- *  (at your option) any later version.
- *
- *  gLabels 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 gLabels.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <config.h>
-
-#include "label.h"
-
-#include <glib/gi18n.h>
-
-#include "prefs.h"
-#include "file-util.h"
-#include "marshal.h"
-
-#include "debug.h"
-
-
-/*========================================================*/
-/* Private macros and constants.                          */
-/*========================================================*/
-
-
-/*========================================================*/
-/* Private types.                                         */
-/*========================================================*/
-
-struct _glLabelPrivate {
-
-       gchar       *filename;
-       gint         compression;
-       gboolean     modified_flag;
-       gint         untitled_instance;
-
-       glMerge     *merge;
-
-       GHashTable  *pixbuf_cache;
-};
-
-enum {
-       CHANGED,
-       NAME_CHANGED,
-       MODIFIED_CHANGED,
-       MERGE_CHANGED,
-       SIZE_CHANGED,
-        OBJECT_ADDED,
-       LAST_SIGNAL
-};
-
-
-/*========================================================*/
-/* Private globals.                                       */
-/*========================================================*/
-
-static guint signals[LAST_SIGNAL] = {0};
-
-static guint untitled = 0;
-
-
-/*========================================================*/
-/* Private function prototypes.                           */
-/*========================================================*/
-
-static void gl_label_finalize      (GObject *object);
-
-static void object_changed_cb      (glLabelObject *object,
-                                   glLabel       *label);
-
-static void object_moved_cb        (glLabelObject *object,
-                                   gdouble        x,
-                                   gdouble        y,
-                                   glLabel       *label);
-
-
-/*****************************************************************************/
-/* Boilerplate object stuff.                                                 */
-/*****************************************************************************/
-G_DEFINE_TYPE (glLabel, gl_label, G_TYPE_OBJECT);
-
-
-static void
-gl_label_class_init (glLabelClass *class)
-{
-       GObjectClass *object_class = G_OBJECT_CLASS (class);
-
-       gl_debug (DEBUG_LABEL, "START");
-
-       gl_label_parent_class = g_type_class_peek_parent (class);
-
-       object_class->finalize = gl_label_finalize;
-
-       signals[CHANGED] =
-               g_signal_new ("changed",
-                             G_OBJECT_CLASS_TYPE (object_class),
-                             G_SIGNAL_RUN_LAST,
-                             G_STRUCT_OFFSET (glLabelClass, changed),
-                             NULL, NULL,
-                             gl_marshal_VOID__VOID,
-                             G_TYPE_NONE,
-                             0);
-       signals[NAME_CHANGED] =
-               g_signal_new ("name_changed",
-                             G_OBJECT_CLASS_TYPE (object_class),
-                             G_SIGNAL_RUN_LAST,
-                             G_STRUCT_OFFSET (glLabelClass, name_changed),
-                             NULL, NULL,
-                             gl_marshal_VOID__VOID,
-                             G_TYPE_NONE,
-                             0);
-       signals[MODIFIED_CHANGED] =
-               g_signal_new ("modified_changed",
-                             G_OBJECT_CLASS_TYPE (object_class),
-                             G_SIGNAL_RUN_LAST,
-                             G_STRUCT_OFFSET (glLabelClass, modified_changed),
-                             NULL, NULL,
-                             gl_marshal_VOID__VOID,
-                             G_TYPE_NONE,
-                             0);
-       signals[MERGE_CHANGED] =
-               g_signal_new ("merge_changed",
-                             G_OBJECT_CLASS_TYPE (object_class),
-                             G_SIGNAL_RUN_LAST,
-                             G_STRUCT_OFFSET (glLabelClass, merge_changed),
-                             NULL, NULL,
-                             gl_marshal_VOID__VOID,
-                             G_TYPE_NONE,
-                             0);
-       signals[SIZE_CHANGED] =
-               g_signal_new ("size_changed",
-                             G_OBJECT_CLASS_TYPE (object_class),
-                             G_SIGNAL_RUN_LAST,
-                             G_STRUCT_OFFSET (glLabelClass, size_changed),
-                             NULL, NULL,
-                             gl_marshal_VOID__VOID,
-                             G_TYPE_NONE,
-                             0);
-       signals[OBJECT_ADDED] =
-               g_signal_new ("object_added",
-                             G_OBJECT_CLASS_TYPE (object_class),
-                             G_SIGNAL_RUN_LAST,
-                             G_STRUCT_OFFSET (glLabelClass, object_added),
-                             NULL, NULL,
-                             gl_marshal_VOID__OBJECT,
-                             G_TYPE_NONE,
-                             1, G_TYPE_OBJECT);
-
-       gl_debug (DEBUG_LABEL, "END");
-}
-
-
-static void
-gl_label_init (glLabel *label)
-{
-       gl_debug (DEBUG_LABEL, "START");
-
-       label->template     = NULL;
-       label->rotate_flag  = FALSE;
-        label->objects      = NULL;
-
-       label->priv = g_new0 (glLabelPrivate, 1);
-
-       label->priv->filename     = NULL;
-       label->priv->merge        = NULL;
-       label->priv->pixbuf_cache = gl_pixbuf_cache_new ();
-
-       gl_debug (DEBUG_LABEL, "END");
-}
-
-
-static void
-gl_label_finalize (GObject *object)
-{
-       glLabel *label = GL_LABEL (object);
-       GList   *p, *p_next;
-
-       gl_debug (DEBUG_LABEL, "START");
-
-       g_return_if_fail (object && GL_IS_LABEL (object));
-
-       for (p = label->objects; p != NULL; p = p_next) {
-               p_next = p->next;       /* NOTE: p will be left dangling */
-               g_object_unref (G_OBJECT(p->data));
-       }
-
-       lgl_template_free (label->template);
-       g_free (label->priv->filename);
-       if (label->priv->merge != NULL) {
-               g_object_unref (G_OBJECT(label->priv->merge));
-       }
-       gl_pixbuf_cache_free (label->priv->pixbuf_cache);
-
-       g_free (label->priv);
-
-       G_OBJECT_CLASS (gl_label_parent_class)->finalize (object);
-
-       gl_debug (DEBUG_LABEL, "END");
-}
-
-
-GObject *
-gl_label_new (void)
-{
-       glLabel *label;
-
-       gl_debug (DEBUG_LABEL, "START");
-
-       label = g_object_new (gl_label_get_type(), NULL);
-
-       label->priv->compression = 9;
-
-       label->priv->modified_flag = FALSE;
-
-       gl_debug (DEBUG_LABEL, "END");
-
-       return G_OBJECT (label);
-}
-
-
-/*****************************************************************************/
-/* Add object to label.                                                      */
-/*****************************************************************************/
-void
-gl_label_add_object (glLabel       *label,
-                    glLabelObject *object)
-{
-       gl_debug (DEBUG_LABEL, "START");
-
-       g_return_if_fail (label && GL_IS_LABEL (label));
-       g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
-
-       object->parent = label;
-       label->objects = g_list_append (label->objects, g_object_ref (object));
-
-       label->priv->modified_flag = TRUE;
-
-       g_signal_emit (G_OBJECT(label), signals[OBJECT_ADDED], 0, object);
-       g_signal_emit (G_OBJECT(label), signals[CHANGED], 0);
-       g_signal_emit (G_OBJECT(label), signals[MODIFIED_CHANGED], 0);
-
-       g_signal_connect (G_OBJECT(object), "changed",
-                         G_CALLBACK(object_changed_cb), label);
-
-       g_signal_connect (G_OBJECT(object), "moved",
-                         G_CALLBACK(object_moved_cb), label);
-
-       gl_debug (DEBUG_LABEL, "END");
-}
-
-
-/*****************************************************************************/
-/* Remove object from label.                                                 */
-/*****************************************************************************/
-void
-gl_label_remove_object (glLabel       *label,
-                       glLabelObject *object)
-{
-       gl_debug (DEBUG_LABEL, "START");
-
-       g_return_if_fail (label && GL_IS_LABEL (label));
-       g_return_if_fail (GL_IS_LABEL_OBJECT (object));
-
-       object->parent = NULL;
-       label->objects = g_list_remove (label->objects, object);
-
-       if ( G_OBJECT(label)->ref_count /* not finalized */ ) {
-
-               g_signal_handlers_disconnect_by_func (object,
-                                                     G_CALLBACK(object_changed_cb),
-                                                     label);
-               g_signal_handlers_disconnect_by_func (object,
-                                                     G_CALLBACK(object_moved_cb),
-                                                     label);
-
-               label->priv->modified_flag = TRUE;
-
-               g_signal_emit (G_OBJECT(label), signals[CHANGED], 0);
-               g_signal_emit (G_OBJECT(label), signals[MODIFIED_CHANGED], 0);
-
-       }
-
-       gl_debug (DEBUG_LABEL, "END");
-}
-
-
-/*---------------------------------------------------------------------------*/
-/* PRIVATE.  Object changed callback.                                        */
-/*---------------------------------------------------------------------------*/
-static void
-object_changed_cb (glLabelObject *object,
-                  glLabel       *label)
-{
-
-       if ( !label->priv->modified_flag ) {
-
-               label->priv->modified_flag = TRUE;
-
-               g_signal_emit (G_OBJECT(label), signals[MODIFIED_CHANGED], 0);
-       }
-
-       g_signal_emit (G_OBJECT(label), signals[CHANGED], 0);
-}
-
-
-/*---------------------------------------------------------------------------*/
-/* PRIVATE.  Object moved callback.                                          */
-/*---------------------------------------------------------------------------*/
-static void
-object_moved_cb (glLabelObject *object,
-                gdouble        x,
-                gdouble        y,
-                glLabel       *label)
-{
-
-       if ( !label->priv->modified_flag ) {
-
-               label->priv->modified_flag = TRUE;
-
-               g_signal_emit (G_OBJECT(label), signals[MODIFIED_CHANGED], 0);
-       }
-
-       g_signal_emit (G_OBJECT(label), signals[CHANGED], 0);
-}
-
-
-/****************************************************************************/
-/* Bring label object to front/top.                                         */
-/****************************************************************************/
-void
-gl_label_raise_object_to_top (glLabel       *label,
-                             glLabelObject *object)
-{
-       gl_debug (DEBUG_LABEL, "START");
-
-       /* Move to end of list, representing front most object */
-       label->objects = g_list_remove (label->objects, object);
-       label->objects = g_list_append (label->objects, object);
-
-       label->priv->modified_flag = TRUE;
-
-       g_signal_emit (G_OBJECT(label), signals[MODIFIED_CHANGED], 0);
-       g_signal_emit (G_OBJECT(label), signals[CHANGED], 0);
-
-       gl_debug (DEBUG_LABEL, "END");
-}
-
-
-/****************************************************************************/
-/* Send label object to rear/bottom.                                        */
-/****************************************************************************/
-void
-gl_label_lower_object_to_bottom (glLabel       *label,
-                                glLabelObject *object)
-{
-       gl_debug (DEBUG_LABEL, "START");
-
-       /* Move to front of list, representing rear most object */
-       label->objects = g_list_remove (label->objects, object);
-       label->objects = g_list_prepend (label->objects, object);
-
-       label->priv->modified_flag = TRUE;
-
-       g_signal_emit (G_OBJECT(label), signals[MODIFIED_CHANGED], 0);
-       g_signal_emit (G_OBJECT(label), signals[CHANGED], 0);
-
-       gl_debug (DEBUG_LABEL, "END");
-}
-
-
-/****************************************************************************/
-/* set template.                                                            */
-/****************************************************************************/
-extern void
-gl_label_set_template (glLabel     *label,
-                      lglTemplate *template)
-{
-        gchar *name;
-
-       gl_debug (DEBUG_LABEL, "START");
-
-       g_return_if_fail (label && GL_IS_LABEL (label));
-       g_return_if_fail (template);
-
-       if ((label->template == NULL) ||
-            !lgl_template_do_templates_match (template, label->template)) {
-
-               lgl_template_free (label->template);
-               label->template = lgl_template_dup (template);
-
-               label->priv->modified_flag = TRUE;
-
-               g_signal_emit (G_OBJECT(label), signals[MODIFIED_CHANGED], 0);
-               g_signal_emit (G_OBJECT(label), signals[SIZE_CHANGED], 0);
-               g_signal_emit (G_OBJECT(label), signals[CHANGED], 0);
-
-                name = lgl_template_get_name (template);
-                gl_prefs_add_recent_template (name);
-                g_free (name);
-       }
-
-       gl_debug (DEBUG_LABEL, "END");
-}
-
-
-/****************************************************************************/
-/* set rotate flag.                                                         */
-/****************************************************************************/
-extern void
-gl_label_set_rotate_flag (glLabel *label,
-                         gboolean rotate_flag)
-{
-       gl_debug (DEBUG_LABEL, "START");
-
-       g_return_if_fail (label && GL_IS_LABEL (label));
-
-       if (rotate_flag != label->rotate_flag) {
-
-               label->rotate_flag = rotate_flag;
-
-               label->priv->modified_flag = TRUE;
-
-               g_signal_emit (G_OBJECT(label), signals[MODIFIED_CHANGED], 0);
-               g_signal_emit (G_OBJECT(label), signals[SIZE_CHANGED], 0);
-               g_signal_emit (G_OBJECT(label), signals[CHANGED], 0);
-
-       }
-
-       gl_debug (DEBUG_LABEL, "END");
-}
-
-
-/****************************************************************************/
-/* Get label size.                                                          */
-/****************************************************************************/
-void
-gl_label_get_size (glLabel *label,
-                  gdouble *w,
-                  gdouble *h)
-{
-       lglTemplate            *template;
-       const lglTemplateFrame *frame;
-
-       gl_debug (DEBUG_LABEL, "START");
-
-       g_return_if_fail (label && GL_IS_LABEL (label));
-
-       template = label->template;
-       if ( !template ) {
-               gl_debug (DEBUG_LABEL, "END -- template NULL");
-               *w = *h = 0;
-               return;
-       }
-        frame = (lglTemplateFrame *)template->frames->data;
-
-       if (!label->rotate_flag) {
-               lgl_template_frame_get_size (frame, w, h);
-       } else {
-               lgl_template_frame_get_size (frame, h, w);
-       }
-
-       gl_debug (DEBUG_LABEL, "END");
-}
-
-
-/****************************************************************************/
-/* set merge information structure.                                         */
-/****************************************************************************/
-extern void
-gl_label_set_merge (glLabel *label,
-                   glMerge *merge)
-{
-       gl_debug (DEBUG_LABEL, "START");
-
-       g_return_if_fail (label && GL_IS_LABEL (label));
-
-       if ( label->priv->merge != NULL ) {
-               g_object_unref (G_OBJECT(label->priv->merge));
-       }
-       label->priv->merge = gl_merge_dup (merge);
-
-       label->priv->modified_flag = TRUE;
-
-       g_signal_emit (G_OBJECT(label), signals[MERGE_CHANGED], 0);
-       g_signal_emit (G_OBJECT(label), signals[MODIFIED_CHANGED], 0);
-       g_signal_emit (G_OBJECT(label), signals[CHANGED], 0);
-
-       gl_debug (DEBUG_LABEL, "END");
-}
-
-
-/****************************************************************************/
-/* Get merge information structure.                                         */
-/****************************************************************************/
-glMerge *
-gl_label_get_merge (glLabel *label)
-{
-       gl_debug (DEBUG_LABEL, "START");
-
-       g_return_val_if_fail (label && GL_IS_LABEL (label), NULL);
-
-       gl_debug (DEBUG_LABEL, "END");
-
-       return gl_merge_dup (label->priv->merge);
-}
-
-
-/****************************************************************************/
-/* return filename.                                                         */
-/****************************************************************************/
-gchar *
-gl_label_get_filename (glLabel *label)
-{
-       gl_debug (DEBUG_LABEL, "");
-
-       return g_strdup ( label->priv->filename );
-}
-
-
-/****************************************************************************/
-/* return short filename.                                                   */
-/****************************************************************************/
-gchar *
-gl_label_get_short_name (glLabel *label)
-{
-       gl_debug (DEBUG_LABEL, "");
-
-       if ( label->priv->filename == NULL ) {
-
-               if ( label->priv->untitled_instance == 0 ) {
-                       label->priv->untitled_instance = ++untitled;
-               }
-
-               return g_strdup_printf ( "%s %d", _("Untitled"),
-                                        label->priv->untitled_instance );
-
-       } else {
-               gchar *temp_name, *short_name;
-
-               temp_name = g_path_get_basename ( label->priv->filename );
-               short_name = gl_file_util_remove_extension (temp_name);
-               g_free (temp_name);
-
-               return short_name;
-       }
-}
-
-
-/****************************************************************************/
-/* Get pixbuf cache.                                                        */
-/****************************************************************************/
-GHashTable *
-gl_label_get_pixbuf_cache (glLabel       *label)
-{
-       return label->priv->pixbuf_cache;
-}
-
-
-/****************************************************************************/
-/* Is label modified?                                                       */
-/****************************************************************************/
-gboolean
-gl_label_is_modified (glLabel *label)
-{
-       gl_debug (DEBUG_LABEL, "return %d", label->priv->modified_flag);
-       return label->priv->modified_flag;
-}
-
-
-/****************************************************************************/
-/* Is label untitled?                                                       */
-/****************************************************************************/
-gboolean
-gl_label_is_untitled (glLabel *label)
-{
-       gl_debug (DEBUG_LABEL, "return %d",(label->priv->filename == NULL));
-       return (label->priv->filename == NULL);
-}
-
-
-/****************************************************************************/
-/* Can undo?                                                                */
-/****************************************************************************/
-gboolean
-gl_label_can_undo (glLabel *label)
-{
-       return FALSE;
-}
-
-
-/****************************************************************************/
-/* Can redo?                                                                */
-/****************************************************************************/
-gboolean
-gl_label_can_redo (glLabel *label)
-{
-       return FALSE;
-}
-
-
-/****************************************************************************/
-/* Set filename.                                                            */
-/****************************************************************************/
-void
-gl_label_set_filename (glLabel     *label,
-                      const gchar *filename)
-{
-       label->priv->filename = g_strdup (filename);
-
-       g_signal_emit (G_OBJECT(label), signals[NAME_CHANGED], 0);
-}
-
-
-/****************************************************************************/
-/* Clear modified flag.                                                     */
-/****************************************************************************/
-void
-gl_label_clear_modified (glLabel *label)
-{
-
-       if ( label->priv->modified_flag ) {
-
-               label->priv->modified_flag = FALSE;
-
-               g_signal_emit (G_OBJECT(label), signals[MODIFIED_CHANGED], 0);
-       }
-
-}
-
-
-/****************************************************************************/
-/* Set compression level.                                                   */
-/****************************************************************************/
-void
-gl_label_set_compression (glLabel  *label,
-                         gint      compression)
-{
-       gl_debug (DEBUG_LABEL, "set %d", compression);
-
-       /* Older versions of libxml2 always return a -1 for documents "read in," so
-        * default to 9.  Also, default to 9 for anything else out of range. */
-       if ((compression < 0) || (compression >9)) {
-               compression = 9;
-       }
-
-       gl_debug (DEBUG_LABEL, "actual set %d", compression);
-       label->priv->compression = compression;
-}
-
-
-/****************************************************************************/
-/* Get compression level.                                                   */
-/****************************************************************************/
-gint
-gl_label_get_compression (glLabel *label)
-{
-       gl_debug (DEBUG_LABEL, "return %d", label->priv->compression);
-       return label->priv->compression;
-}
-
-
-/****************************************************************************/
-/* Draw label.                                                              */
-/****************************************************************************/
-void
-gl_label_draw (glLabel       *label,
-               cairo_t       *cr,
-               gboolean       screen_flag,
-               glMergeRecord *record)
-{
-       GList            *p_obj;
-       glLabelObject    *object;
-
-       g_return_if_fail (label && GL_IS_LABEL (label));
-
-       for (p_obj = label->objects; p_obj != NULL; p_obj = p_obj->next)
-        {
-               object = GL_LABEL_OBJECT (p_obj->data);
-
-                gl_label_object_draw (object, cr, screen_flag, record);
-       }
-}
-
-
-
-
-/*
- * Local Variables:       -- emacs
- * mode: C                -- emacs
- * c-basic-offset: 8      -- emacs
- * tab-width: 8           -- emacs
- * indent-tabs-mode: nil  -- emacs
- * End:                   -- emacs
- */