summaryrefslogtreecommitdiffabout

Gtk+ Validation

This is a couple hour hack to come up with a way to do form validation with gtk+. The idea would be to add support in GtkBuilder to do entire forms within the designer.

However, to do the same thing from code, here is a quick example.

#include <gtk/gtk.h>
#include "gtk-range-validator.h"
#include "gtk-bg-style-modifier.h"
#include "utils.h"

int main (int argc, char *argv[])
{
        GtkBuilder       *builder;
        GtkWidget        *dialog,
                         *apply,
                         *spinbutton,
                         *entry;
        GtkValidator     *range, *range2;
        GtkStyleModifier *bg_modifier;

        gtk_init (&argc, &argv);

        builder = gtk_builder_new ();
        gtk_builder_add_file_or_exit (builder, "test.ui");
        gtk_builder_get_objects_ex (builder,
                                    "dialog", &dialog,
                                    "apply", &apply,
                                    "spinbutton", &spinbutton,
                                    "entry", &entry,
                                    NULL);

        bg_modifier = gtk_bg_style_modifier_new ();
        g_object_set (bg_modifier, "color", "#f84848", NULL);

        range = gtk_range_validator_new ();
        g_object_set (range,
                      "widget", spinbutton,
                      "modifier", bg_modifier,
                      "prop-name", "value",
                      "lower", 0.0,
                      "upper", 10.0,
                      NULL);

        range2 = gtk_range_validator_new ();
        g_object_set (range2,
                      "widget", entry,
                      "prop-name", "text",
                      "lower", 0.0,
                      "upper", 10.0,
                      "modifier", bg_modifier,
                      NULL);

        g_signal_connect (dialog, "destroy", gtk_main_quit, NULL);
        g_signal_connect_swapped (apply, "clicked", G_CALLBACK (gtk_validator_validate), range);
        g_signal_connect_swapped (apply, "clicked", G_CALLBACK (gtk_validator_validate), range2);
        //g_signal_connect_swapped (apply, "clicked", G_CALLBACK (gtk_widget_hide), dialog);
        gtk_widget_show (dialog);
        gtk_main ();

        return 0;
}