]> git.sur5r.net Git - glabels/blobdiff - src/object-editor-data-page.c
Organized master branch to be top-level directory for glabels, instead of
[glabels] / src / object-editor-data-page.c
diff --git a/src/object-editor-data-page.c b/src/object-editor-data-page.c
new file mode 100644 (file)
index 0000000..728a36d
--- /dev/null
@@ -0,0 +1,242 @@
+/*
+ *  object-editor-data-page.c
+ *  Copyright (C) 2003-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 "object-editor.h"
+
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <string.h>
+#include <math.h>
+
+#include "prefs.h"
+#include "combo-util.h"
+#include "builder-util.h"
+
+#include "object-editor-private.h"
+
+#include "debug.h"
+
+
+/*===========================================*/
+/* Private macros                            */
+/*===========================================*/
+
+
+/*===========================================*/
+/* Private data types                        */
+/*===========================================*/
+
+
+/*===========================================*/
+/* Private globals                           */
+/*===========================================*/
+
+
+/*===========================================*/
+/* Local function prototypes                 */
+/*===========================================*/
+
+static void data_radio_toggled_cb                (glObjectEditor        *editor);
+
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Prepare data page.                                             */
+/*--------------------------------------------------------------------------*/
+void
+gl_object_editor_prepare_data_page (glObjectEditor *editor)
+{
+       gl_debug (DEBUG_EDITOR, "START");
+
+       /* Extract widgets from XML tree. */
+        gl_builder_util_get_widgets (editor->priv->builder,
+                                     "data_page_vbox",     &editor->priv->data_page_vbox,
+                                     "data_literal_radio", &editor->priv->data_literal_radio,
+                                     "data_key_radio",     &editor->priv->data_key_radio,
+                                     "data_text_entry",    &editor->priv->data_text_entry,
+                                     "data_key_combo",     &editor->priv->data_key_combo,
+                                     NULL);
+
+       gl_combo_util_add_text_model ( GTK_COMBO_BOX(editor->priv->data_key_combo));
+
+       /* Un-hide */
+       gtk_widget_show_all (editor->priv->data_page_vbox);
+
+       /* Connect signals */
+       g_signal_connect_swapped (G_OBJECT (editor->priv->data_text_entry),
+                                 "changed",
+                                 G_CALLBACK (gl_object_editor_changed_cb),
+                                 G_OBJECT (editor));
+       g_signal_connect_swapped (G_OBJECT (editor->priv->data_key_combo),
+                                 "changed",
+                                 G_CALLBACK (gl_object_editor_changed_cb),
+                                 G_OBJECT (editor));
+       g_signal_connect_swapped (G_OBJECT (editor->priv->data_literal_radio),
+                                 "toggled",
+                                 G_CALLBACK (data_radio_toggled_cb),
+                                 G_OBJECT (editor));
+       g_signal_connect_swapped (G_OBJECT (editor->priv->data_key_radio),
+                                 "toggled",
+                                 G_CALLBACK (data_radio_toggled_cb),
+                                 G_OBJECT (editor));
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  data radio callback.                                           */
+/*--------------------------------------------------------------------------*/
+static void
+data_radio_toggled_cb (glObjectEditor *editor)
+{
+        if (editor->priv->stop_signals) return;
+
+        gl_debug (DEBUG_WDGT, "START");
+       if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (editor->priv->data_literal_radio))) {
+                gtk_widget_set_sensitive (editor->priv->data_text_entry, TRUE);
+                gtk_widget_set_sensitive (editor->priv->data_key_combo, FALSE);
+               gtk_widget_set_sensitive (editor->priv->data_format_label, FALSE);
+               gtk_widget_set_sensitive (editor->priv->data_ex_label, FALSE);
+               gtk_widget_set_sensitive (editor->priv->data_digits_label, FALSE);
+               gtk_widget_set_sensitive (editor->priv->data_digits_spin, FALSE);
+        } else {
+                gtk_widget_set_sensitive (editor->priv->data_text_entry, FALSE);
+                gtk_widget_set_sensitive (editor->priv->data_key_combo, TRUE);
+               gtk_widget_set_sensitive (editor->priv->data_format_label, TRUE);
+               gtk_widget_set_sensitive (editor->priv->data_ex_label, TRUE);
+               gtk_widget_set_sensitive (editor->priv->data_digits_label,
+                                         !editor->priv->data_format_fixed_flag);
+               gtk_widget_set_sensitive (editor->priv->data_digits_spin,
+                                         !editor->priv->data_format_fixed_flag);
+       }
+        /* Emit our "changed" signal */
+        g_signal_emit (G_OBJECT (editor), gl_object_editor_signals[CHANGED], 0);
+        gl_debug (DEBUG_WDGT, "END");
+}
+
+
+/*****************************************************************************/
+/* Set data.                                                                 */
+/*****************************************************************************/
+void
+gl_object_editor_set_data (glObjectEditor      *editor,
+                           gboolean            merge_flag,
+                           glTextNode         *text_node)
+{
+        gint pos;
+        gl_debug (DEBUG_EDITOR, "START");
+        editor->priv->stop_signals = TRUE;
+
+        gtk_widget_set_sensitive (editor->priv->data_key_radio, merge_flag);
+        if (!text_node->field_flag) {
+                gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
+                                              (editor->priv->data_literal_radio), TRUE); 
+                gtk_widget_set_sensitive (editor->priv->data_text_entry, TRUE);
+                gtk_widget_set_sensitive (editor->priv->data_key_combo, FALSE);
+               gtk_widget_set_sensitive (editor->priv->data_format_label, FALSE);
+               gtk_widget_set_sensitive (editor->priv->data_ex_label, FALSE);
+               gtk_widget_set_sensitive (editor->priv->data_digits_spin, FALSE);
+               gtk_widget_set_sensitive (editor->priv->data_digits_label, FALSE);
+                gtk_editable_delete_text (GTK_EDITABLE (editor->priv->data_text_entry), 0, -1);
+                pos = 0;
+                if (text_node->data != NULL ) {
+                       gtk_editable_insert_text (GTK_EDITABLE (editor->priv->data_text_entry),
+                                                 text_node->data,
+                                                 strlen (text_node->data),
+                                                 &pos);
+                }
+
+        } else {
+                                                                                
+                gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
+                                              (editor->priv->data_key_radio), TRUE);
+                                                                                
+                gtk_widget_set_sensitive (editor->priv->data_text_entry, FALSE);
+                gtk_widget_set_sensitive (editor->priv->data_key_combo, TRUE);
+               gtk_widget_set_sensitive (editor->priv->data_format_label, TRUE);
+               gtk_widget_set_sensitive (editor->priv->data_ex_label, TRUE);
+               gtk_widget_set_sensitive (editor->priv->data_digits_label,
+                                         !editor->priv->data_format_fixed_flag);
+               gtk_widget_set_sensitive (editor->priv->data_digits_spin,
+                                         !editor->priv->data_format_fixed_flag);
+                                                                                
+
+               gl_combo_util_set_active_text (GTK_COMBO_BOX (editor->priv->data_key_combo),
+                                               text_node->data);
+        }
+                                                                                
+
+        editor->priv->stop_signals = FALSE;
+
+        gl_debug (DEBUG_EDITOR, "END");
+}
+
+
+/*****************************************************************************/
+/* Query data.                                                              */
+/*****************************************************************************/
+glTextNode *
+gl_object_editor_get_data (glObjectEditor      *editor)
+{
+        glTextNode *text_node;
+        gl_debug (DEBUG_EDITOR, "START");
+        text_node = g_new0(glTextNode,1);
+        if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (editor->priv->data_literal_radio))) {
+                text_node->field_flag = FALSE;
+                text_node->data =
+                    gtk_editable_get_chars (GTK_EDITABLE (editor->priv->data_text_entry),
+                                            0, -1);
+        } else {
+                text_node->field_flag = TRUE;
+                text_node->data =
+                       gtk_combo_box_get_active_text (GTK_COMBO_BOX (editor->priv->data_key_combo));
+        }
+       gl_debug (DEBUG_EDITOR, "text_node: field_flag=%d, data=%s",
+                 text_node->field_flag, text_node->data);
+
+        gl_debug (DEBUG_EDITOR, "END");
+        return text_node;
+}
+
+
+
+/*
+ * Local Variables:       -- emacs
+ * mode: C                -- emacs
+ * c-basic-offset: 8      -- emacs
+ * tab-width: 8           -- emacs
+ * indent-tabs-mode: nil  -- emacs
+ * End:                   -- emacs
+ */