From 24c20239779d0ec616adde651c594c7bf08d58c7 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Tue, 19 Feb 2019 18:17:56 +0100 Subject: WIP --- src/stylesheet_editor.c | 794 ------------------------------------------------ 1 file changed, 794 deletions(-) delete mode 100644 src/stylesheet_editor.c (limited to 'src/stylesheet_editor.c') diff --git a/src/stylesheet_editor.c b/src/stylesheet_editor.c deleted file mode 100644 index 292bbf1..0000000 --- a/src/stylesheet_editor.c +++ /dev/null @@ -1,794 +0,0 @@ -/* - * stylesheet_editor.c - * - * Copyright © 2013-2018 Thomas White - * - * This file is part of Colloquium. - * - * Colloquium 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. - * - * 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, see . - * - */ - - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include -#include -#include - -#include "stylesheet_editor.h" -#include "presentation.h" -#include "sc_interp.h" -#include "stylesheet.h" -#include "utils.h" - - -G_DEFINE_TYPE_WITH_CODE(StylesheetEditor, stylesheet_editor, - GTK_TYPE_DIALOG, NULL) - - -struct _sspriv -{ - struct presentation *p; - const gchar *furniture; - char *ssdata; -}; - - -static void set_font_from_ss(Stylesheet *ss, const char *path, GtkWidget *w) -{ - char *result = stylesheet_lookup(ss, path, "font"); - if ( result != NULL ) { - gtk_font_button_set_font_name(GTK_FONT_BUTTON(w), result); - } -} - - -static void set_col_from_ss(Stylesheet *ss, const char *path, GtkWidget *w) -{ - char *result = stylesheet_lookup(ss, path, "fgcol"); - if ( result != NULL ) { - GdkRGBA rgba; - if ( gdk_rgba_parse(&rgba, result) == TRUE ) { - gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(w), &rgba); - } - } -} - - -static void set_vals_from_ss(Stylesheet *ss, const char *path, const char *key, - GtkWidget *wl, GtkWidget *wr, - GtkWidget *wt, GtkWidget *wb) -{ - char *result = stylesheet_lookup(ss, path, key); - if ( result != NULL ) { - float v[4]; - if ( parse_tuple(result, v) == 0 ) { - gtk_spin_button_set_value(GTK_SPIN_BUTTON(wl), v[0]); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(wr), v[1]); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(wt), v[2]); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(wb), v[3]); - } else { - fprintf(stderr, _("Failed to parse quad: %s\n"), result); - } - } else { - printf("Not found %s.%s\n", path, key); - } -} - - -static void set_geom_from_ss(Stylesheet *ss, const char *path, const char *key, - GtkWidget *ww, GtkWidget *wh, - GtkWidget *wx, GtkWidget *wy, - GtkWidget *wwu, GtkWidget *whu) -{ - char *result = stylesheet_lookup(ss, path, key); - if ( result != NULL ) { - double x, y, w, h; - LengthUnits wu, hu; - if ( parse_dims(result, &w, &h, &wu, &hu, &x, &y) == 0 ) { - if ( wu == UNITS_FRAC ) { - w *= 100; - gtk_combo_box_set_active_id(GTK_COMBO_BOX(wwu), "percent"); - } else { - gtk_combo_box_set_active_id(GTK_COMBO_BOX(wwu), "units"); - } - if ( hu == UNITS_FRAC ) { - h *= 100; - gtk_combo_box_set_active_id(GTK_COMBO_BOX(whu), "percent"); - } else { - gtk_combo_box_set_active_id(GTK_COMBO_BOX(whu), "units"); - } - gtk_spin_button_set_value(GTK_SPIN_BUTTON(ww), w); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(wh), h); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(wx), x); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(wy), y); - } else { - fprintf(stderr, _("Failed to parse dims: %s\n"), result); - } - } else { - printf("Not found %s.%s\n", path, key); - } -} - -static void set_size_from_ss(Stylesheet *ss, const char *path, - GtkWidget *ww, GtkWidget *wh) -{ - char *result = stylesheet_lookup(ss, path, "size"); - if ( result != NULL ) { - float v[2]; - if ( parse_double(result, v) == 0 ) { - gtk_spin_button_set_value(GTK_SPIN_BUTTON(ww), v[0]); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(wh), v[1]); - } else { - fprintf(stderr, _("Failed to parse double: %s\n"), result); - } - } else { - printf("Not found %s.size\n", path); - } -} - - -static int alignment_ok(const char *a) -{ - if ( a == NULL ) return 0; - if ( strcmp(a, "left") == 0 ) return 1; - if ( strcmp(a, "center") == 0 ) return 1; - if ( strcmp(a, "right") == 0 ) return 1; - return 0; -} - - -static void set_alignment_from_ss(Stylesheet *ss, const char *path, - GtkWidget *d) -{ - char *result = stylesheet_lookup(ss, path, "alignment"); - if ( alignment_ok(result) ) { - gtk_combo_box_set_active_id(GTK_COMBO_BOX(d), result); - } -} - - -static void set_bg_from_ss(Stylesheet *ss, const char *path, GtkWidget *wcol, - GtkWidget *wcol2, GtkWidget *wgrad) -{ - char *result; - int found = 0; - - result = stylesheet_lookup(ss, path, "bgcol"); - if ( result != NULL ) { - GdkRGBA rgba; - found = 1; - if ( gdk_rgba_parse(&rgba, result) == TRUE ) { - gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(wcol), &rgba); - gtk_combo_box_set_active_id(GTK_COMBO_BOX(wgrad), "flat"); - gtk_widget_set_sensitive(wcol, TRUE); - gtk_widget_set_sensitive(wcol2, FALSE); - } else { - fprintf(stderr, _("Failed to parse colour: %s\n"), result); - } - } - - result = stylesheet_lookup(ss, path, "bggradv"); - if ( result != NULL ) { - GdkRGBA rgba1, rgba2; - found = 1; - if ( parse_colour_duo(result, &rgba1, &rgba2) == 0 ) { - gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(wcol), &rgba1); - gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(wcol2), &rgba2); - gtk_combo_box_set_active_id(GTK_COMBO_BOX(wgrad), "vert"); - gtk_widget_set_sensitive(wcol, TRUE); - gtk_widget_set_sensitive(wcol2, TRUE); - } - } - - result = stylesheet_lookup(ss, path, "bggradh"); - if ( result != NULL ) { - GdkRGBA rgba1, rgba2; - found = 1; - if ( parse_colour_duo(result, &rgba1, &rgba2) == 0 ) { - gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(wcol), &rgba1); - gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(wcol2), &rgba2); - gtk_combo_box_set_active_id(GTK_COMBO_BOX(wgrad), "horiz"); - gtk_widget_set_sensitive(wcol, TRUE); - gtk_widget_set_sensitive(wcol2, TRUE); - } - } - - if ( !found ) { - GdkRGBA rgba; - rgba.red = 1.0; - rgba.green = 1.0; - rgba.blue = 1.0; - rgba.alpha = 0.0; - gtk_combo_box_set_active_id(GTK_COMBO_BOX(wgrad), "flat"); - gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(wcol), &rgba); - gtk_widget_set_sensitive(wcol, TRUE); - gtk_widget_set_sensitive(wcol2, FALSE); - } -} - - -static void set_furniture(StylesheetEditor *se, const char *furniture) -{ - set_geom_from_ss(se->priv->p->stylesheet, furniture, "geometry", - se->furniture_w, - se->furniture_h, - se->furniture_x, - se->furniture_y, - se->furniture_w_units, - se->furniture_h_units); - - set_vals_from_ss(se->priv->p->stylesheet, furniture, "pad", - se->furniture_padding_l, - se->furniture_padding_r, - se->furniture_padding_t, - se->furniture_padding_b); - - set_vals_from_ss(se->priv->p->stylesheet, furniture, "paraspace", - se->furniture_paraspace_l, - se->furniture_paraspace_r, - se->furniture_paraspace_t, - se->furniture_paraspace_b); - - set_font_from_ss(se->priv->p->stylesheet, furniture, se->furniture_font); - set_col_from_ss(se->priv->p->stylesheet, furniture, se->furniture_fgcol); - set_alignment_from_ss(se->priv->p->stylesheet, furniture, - se->furniture_alignment); - set_bg_from_ss(se->priv->p->stylesheet, furniture, se->furniture_bgcol, - se->furniture_bgcol2, se->furniture_bggrad); -} - - -static void set_values_from_presentation(StylesheetEditor *se) -{ - Stylesheet *ss = se->priv->p->stylesheet; - - /* Narrative */ - set_font_from_ss(ss, "$.narrative", se->narrative_style_font); - set_col_from_ss(ss, "$.narrative", se->narrative_style_fgcol); - set_alignment_from_ss(ss, "$.narrative", se->narrative_style_alignment); - set_bg_from_ss(ss, "$.narrative", se->narrative_style_bgcol, - se->narrative_style_bgcol2, - se->narrative_style_bggrad); - set_vals_from_ss(ss, "$.narrative", "pad", se->narrative_style_padding_l, - se->narrative_style_padding_r, - se->narrative_style_padding_t, - se->narrative_style_padding_b); - set_vals_from_ss(ss, "$.narrative", "paraspace", se->narrative_style_paraspace_l, - se->narrative_style_paraspace_r, - se->narrative_style_paraspace_t, - se->narrative_style_paraspace_b); - - /* Slides */ - set_size_from_ss(ss, "$.slide", se->slide_size_w, se->slide_size_h); - set_bg_from_ss(ss, "$.slide", se->slide_style_bgcol, - se->slide_style_bgcol2, - se->slide_style_bggrad); - - - /* Frames */ - set_font_from_ss(ss, "$.slide.frame", se->frame_style_font); - set_col_from_ss(ss, "$.slide.frame", se->frame_style_fgcol); - set_alignment_from_ss(ss, "$.slide.frame", se->frame_style_alignment); - set_bg_from_ss(ss, "$.slide.frame", se->frame_style_bgcol, - se->frame_style_bgcol2, - se->frame_style_bggrad); - set_vals_from_ss(ss, "$.slide.frame", "pad", se->frame_style_padding_l, - se->frame_style_padding_r, - se->frame_style_padding_t, - se->frame_style_padding_b); - set_vals_from_ss(ss, "$.slide.frame", "paraspace", se->frame_style_paraspace_l, - se->frame_style_paraspace_r, - se->frame_style_paraspace_t, - se->frame_style_paraspace_b); - - set_furniture(se, se->priv->furniture); -} - - -static GradientType id_to_gradtype(const gchar *id) -{ - assert(id != NULL); - if ( strcmp(id, "flat") == 0 ) return GRAD_NONE; - if ( strcmp(id, "horiz") == 0 ) return GRAD_HORIZ; - if ( strcmp(id, "vert") == 0 ) return GRAD_VERT; - return GRAD_NONE; -} - - -static void update_bg(struct presentation *p, const char *style_name, - GtkWidget *bggradw, GtkWidget *col1w, GtkWidget*col2w) -{ - GradientType g; - const gchar *id; - GdkRGBA rgba; - gchar *col1; - gchar *col2; - gchar *gradient; - - id = gtk_combo_box_get_active_id(GTK_COMBO_BOX(bggradw)); - g = id_to_gradtype(id); - - gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(col1w), &rgba); - if ( rgba.alpha < 0.000001 ) rgba.alpha = 0.0; - col1 = gdk_rgba_to_string(&rgba); - - gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(col2w), &rgba); - col2 = gdk_rgba_to_string(&rgba); - - gradient = g_strconcat(col1, ",", col2, NULL); - - switch ( g ) { - - case GRAD_NONE : - stylesheet_set(p->stylesheet, style_name, "bgcol", - col1); - stylesheet_delete(p->stylesheet, style_name, "bggradv"); - stylesheet_delete(p->stylesheet, style_name, "bggradh"); - break; - - case GRAD_HORIZ : - stylesheet_set(p->stylesheet, style_name, "bggradh", - gradient); - stylesheet_delete(p->stylesheet, style_name, "bggradv"); - stylesheet_delete(p->stylesheet, style_name, "bgcol"); - break; - - case GRAD_VERT : - stylesheet_set(p->stylesheet, style_name, "bggradv", - gradient); - stylesheet_delete(p->stylesheet, style_name, "bggradh"); - stylesheet_delete(p->stylesheet, style_name, "bgcol"); - break; - - } - - g_free(gradient); - g_free(col1); - g_free(col2); -} - - -static void update_spacing(struct presentation *p, const char *style_name, - const char *key, GtkWidget *wl, GtkWidget *wr, - GtkWidget *wt, GtkWidget *wb) -{ - int v[4]; - char tmp[256]; - - v[0] = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(wl)); - v[1] = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(wr)); - v[2] = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(wt)); - v[3] = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(wb)); - - if ( snprintf(tmp, 256, "%i,%i,%i,%i", v[0], v[1], v[2], v[3]) >= 256 ) { - fprintf(stderr, "Spacing too long\n"); - } else { - stylesheet_set(p->stylesheet, style_name, key, tmp); - } -} - - -static char units_id_to_char(const char *id) -{ - if ( strcmp(id, "units") == 0 ) return 'u'; - if ( strcmp(id, "percent") == 0 ) return 'f'; - return 'u'; -} - - -static void update_ss_dims(struct presentation *p, const char *style_name, - const char *key, GtkWidget *ww, GtkWidget *wh, - GtkWidget *wx, GtkWidget *wy, - GtkWidget *wwu, GtkWidget *whu) -{ - float w, h, x, y; - char w_units, h_units; - const gchar *uid; - char tmp[256]; - - w = gtk_spin_button_get_value(GTK_SPIN_BUTTON(ww)); - h = gtk_spin_button_get_value(GTK_SPIN_BUTTON(wh)); - x = gtk_spin_button_get_value(GTK_SPIN_BUTTON(wx)); - y = gtk_spin_button_get_value(GTK_SPIN_BUTTON(wy)); - uid = gtk_combo_box_get_active_id(GTK_COMBO_BOX(wwu)); - w_units = units_id_to_char(uid); - uid = gtk_combo_box_get_active_id(GTK_COMBO_BOX(whu)); - h_units = units_id_to_char(uid); - - if ( w_units == 'f' ) w /= 100.0; - if ( h_units == 'f' ) h /= 100.0; - - if ( snprintf(tmp, 256, "%.2f%cx%.2f%c+%.0f+%0.f", - w, w_units, h, h_units, x, y) >= 256 ) - { - fprintf(stderr, "Spacing too long\n"); - } else { - stylesheet_set(p->stylesheet, style_name, key, tmp); - } -} - - -static void revert_sig(GtkButton *button, StylesheetEditor *se) -{ - stylesheet_set_data(se->priv->p->stylesheet, - se->priv->ssdata); - set_values_from_presentation(se); - g_signal_emit_by_name(se, "changed"); -} - - -static void set_font(GtkFontButton *widget, StylesheetEditor *se, - const char *style_name) -{ - const gchar *font; - font = gtk_font_button_get_font_name(GTK_FONT_BUTTON(widget)); - - stylesheet_set(se->priv->p->stylesheet, style_name, "font", font); - set_values_from_presentation(se); - g_signal_emit_by_name(se, "changed"); -} - - -static void set_col(GtkColorButton *widget, StylesheetEditor *se, - const char *style_name, const char *col_name) -{ - GdkRGBA rgba; - gchar *col; - gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(widget), &rgba); - col = gdk_rgba_to_string(&rgba); - stylesheet_set(se->priv->p->stylesheet, style_name, "fgcol", col); - g_free(col); - set_values_from_presentation(se); - g_signal_emit_by_name(se, "changed"); -} - - -static void narrative_font_sig(GtkFontButton *widget, StylesheetEditor *se) -{ - set_font(widget, se, "$.narrative"); -} - - -static void narrative_fgcol_sig(GtkColorButton *widget, StylesheetEditor *se) -{ - set_col(widget, se, "$.narrative", "fgcol"); -} - - -static void narrative_bg_sig(GtkColorButton *widget, StylesheetEditor *se) -{ - update_bg(se->priv->p, "$.narrative", - se->narrative_style_bggrad, - se->narrative_style_bgcol, - se->narrative_style_bgcol2); - set_values_from_presentation(se); - g_signal_emit_by_name(se, "changed"); -} - - -static void narrative_alignment_sig(GtkComboBoxText *widget, StylesheetEditor *se) -{ - const gchar *id = gtk_combo_box_get_active_id(GTK_COMBO_BOX(widget)); - stylesheet_set(se->priv->p->stylesheet, "$.narrative", "alignment", id); - set_values_from_presentation(se); - g_signal_emit_by_name(se, "changed"); -} - - -static void slide_size_sig(GtkSpinButton *widget, StylesheetEditor *se) -{ - int w, h; - char tmp[256]; - - w = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(se->slide_size_w)); - h = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(se->slide_size_h)); - - if ( snprintf(tmp, 256, "%ix%i", w, h) >= 256 ) { - fprintf(stderr, _("Slide size too long\n")); - } else { - stylesheet_set(se->priv->p->stylesheet, "$.slide", "size", tmp); - se->priv->p->slide_width = w; - se->priv->p->slide_height = h; - } - - set_values_from_presentation(se); - g_signal_emit_by_name(se, "changed"); -} - - -static void slide_bg_sig(GtkColorButton *widget, StylesheetEditor *se) -{ - update_bg(se->priv->p, "$.slide", - se->slide_style_bggrad, - se->slide_style_bgcol, - se->slide_style_bgcol2); - set_values_from_presentation(se); - g_signal_emit_by_name(se, "changed"); -} - - -static void frame_font_sig(GtkFontButton *widget, StylesheetEditor *se) -{ - set_font(widget, se, "$.slide.frame"); -} - - -static void frame_fgcol_sig(GtkColorButton *widget, StylesheetEditor *se) -{ - set_col(widget, se, "$.slide.frame", "fgcol"); -} - - -static void frame_bg_sig(GtkColorButton *widget, StylesheetEditor *se) -{ - update_bg(se->priv->p, "$.slide.frame", - se->frame_style_bggrad, - se->frame_style_bgcol, - se->frame_style_bgcol2); - set_values_from_presentation(se); - g_signal_emit_by_name(se, "changed"); -} - - -static void frame_padding_sig(GtkSpinButton *widget, StylesheetEditor *se) -{ - update_spacing(se->priv->p, "$.slide.frame", "pad", - se->frame_style_padding_l, - se->frame_style_padding_r, - se->frame_style_padding_t, - se->frame_style_padding_b); - set_values_from_presentation(se); - g_signal_emit_by_name(se, "changed"); -} - - -static void frame_paraspace_sig(GtkSpinButton *widget, StylesheetEditor *se) -{ - update_spacing(se->priv->p, "$.slide.frame", "paraspace", - se->frame_style_paraspace_l, - se->frame_style_paraspace_r, - se->frame_style_paraspace_t, - se->frame_style_paraspace_b); - set_values_from_presentation(se); - g_signal_emit_by_name(se, "changed"); -} - - -static void frame_alignment_sig(GtkComboBoxText *widget, StylesheetEditor *se) -{ - const gchar *id = gtk_combo_box_get_active_id(GTK_COMBO_BOX(widget)); - stylesheet_set(se->priv->p->stylesheet, "$.slide.frame", "alignment", id); - set_values_from_presentation(se); - g_signal_emit_by_name(se, "changed"); -} - - -static void narrative_padding_sig(GtkSpinButton *widget, StylesheetEditor *se) -{ - update_spacing(se->priv->p, "$.narrative", "pad", - se->narrative_style_padding_l, - se->narrative_style_padding_r, - se->narrative_style_padding_t, - se->narrative_style_padding_b); - set_values_from_presentation(se); - g_signal_emit_by_name(se, "changed"); -} - - -static void narrative_paraspace_sig(GtkSpinButton *widget, StylesheetEditor *se) -{ - update_spacing(se->priv->p, "$.narrative", "paraspace", - se->narrative_style_paraspace_l, - se->narrative_style_paraspace_r, - se->narrative_style_paraspace_t, - se->narrative_style_paraspace_b); - set_values_from_presentation(se); - g_signal_emit_by_name(se, "changed"); -} - - -static void furniture_selector_change_sig(GtkComboBoxText *widget, StylesheetEditor *se) -{ - se->priv->furniture = gtk_combo_box_get_active_id(GTK_COMBO_BOX(widget)); - set_furniture(se, se->priv->furniture); -} - - -static void furniture_font_sig(GtkFontButton *widget, StylesheetEditor *se) -{ - set_font(widget, se, se->priv->furniture); -} - - -static void furniture_fgcol_sig(GtkColorButton *widget, StylesheetEditor *se) -{ - set_col(widget, se,se->priv->furniture, "fgcol"); -} - - -static void furniture_bg_sig(GtkColorButton *widget, StylesheetEditor *se) -{ - update_bg(se->priv->p, se->priv->furniture, se->furniture_bggrad, - se->furniture_bgcol, se->furniture_bgcol2); - set_values_from_presentation(se); - g_signal_emit_by_name(se, "changed"); -} - - -static void furniture_paraspace_sig(GtkSpinButton *widget, StylesheetEditor *se) -{ - update_spacing(se->priv->p, se->priv->furniture, "pad", - se->furniture_padding_l, - se->furniture_padding_r, - se->furniture_padding_t, - se->furniture_padding_b); - set_values_from_presentation(se); - g_signal_emit_by_name(se, "changed"); -} - - -static void furniture_padding_sig(GtkSpinButton *widget, StylesheetEditor *se) -{ - update_spacing(se->priv->p, se->priv->furniture, "pad", - se->furniture_padding_l, - se->furniture_padding_r, - se->furniture_padding_t, - se->furniture_padding_b); - set_values_from_presentation(se); - g_signal_emit_by_name(se, "changed"); -} - - -static void furniture_alignment_sig(GtkComboBoxText *widget, StylesheetEditor *se) -{ - const gchar *id = gtk_combo_box_get_active_id(GTK_COMBO_BOX(widget)); - stylesheet_set(se->priv->p->stylesheet, se->priv->furniture, - "alignment", id); - set_values_from_presentation(se); - g_signal_emit_by_name(se, "changed"); -} - - -static void furniture_dims_sig(GtkSpinButton *widget, StylesheetEditor *se) -{ - update_ss_dims(se->priv->p, se->priv->furniture, "geometry", - se->furniture_w, se->furniture_h, - se->furniture_x, se->furniture_y, - se->furniture_w_units, se->furniture_h_units); - set_values_from_presentation(se); - g_signal_emit_by_name(se, "changed"); -} - - -static void stylesheet_editor_finalize(GObject *obj) -{ - StylesheetEditor *se = COLLOQUIUM_STYLESHEET_EDITOR(obj); - free(se->priv->ssdata); - G_OBJECT_CLASS(stylesheet_editor_parent_class)->finalize(obj); -} - - -static void stylesheet_editor_init(StylesheetEditor *se) -{ - se->priv = G_TYPE_INSTANCE_GET_PRIVATE(se, COLLOQUIUM_TYPE_STYLESHEET_EDITOR, - StylesheetEditorPrivate); - gtk_widget_init_template(GTK_WIDGET(se)); -} - - -#define SE_BIND_CHILD(a, b) \ - gtk_widget_class_bind_template_child(widget_class, StylesheetEditor, a); \ - gtk_widget_class_bind_template_callback(widget_class, b); - -void stylesheet_editor_class_init(StylesheetEditorClass *klass) -{ - GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass); - GObjectClass *gobject_class = G_OBJECT_CLASS(klass); - - gtk_widget_class_set_template_from_resource(widget_class, - "/uk/me/bitwiz/Colloquium/stylesheeteditor.ui"); - - g_type_class_add_private(gobject_class, sizeof(StylesheetEditorPrivate)); - gobject_class->finalize = stylesheet_editor_finalize; - - /* Narrative style */ - SE_BIND_CHILD(narrative_style_font, narrative_font_sig); - SE_BIND_CHILD(narrative_style_fgcol, narrative_fgcol_sig); - SE_BIND_CHILD(narrative_style_bgcol, narrative_bg_sig); - SE_BIND_CHILD(narrative_style_bgcol2, narrative_bg_sig); - SE_BIND_CHILD(narrative_style_bggrad, narrative_bg_sig); - SE_BIND_CHILD(narrative_style_paraspace_l, narrative_paraspace_sig); - SE_BIND_CHILD(narrative_style_paraspace_r, narrative_paraspace_sig); - SE_BIND_CHILD(narrative_style_paraspace_t, narrative_paraspace_sig); - SE_BIND_CHILD(narrative_style_paraspace_b, narrative_paraspace_sig); - SE_BIND_CHILD(narrative_style_padding_l, narrative_padding_sig); - SE_BIND_CHILD(narrative_style_padding_r, narrative_padding_sig); - SE_BIND_CHILD(narrative_style_padding_t, narrative_padding_sig); - SE_BIND_CHILD(narrative_style_padding_b, narrative_padding_sig); - SE_BIND_CHILD(narrative_style_alignment, narrative_alignment_sig); - - /* Slide style */ - SE_BIND_CHILD(slide_size_w, slide_size_sig); - SE_BIND_CHILD(slide_size_h, slide_size_sig); - SE_BIND_CHILD(slide_style_bgcol, slide_bg_sig); - SE_BIND_CHILD(slide_style_bgcol2, slide_bg_sig); - SE_BIND_CHILD(slide_style_bggrad, slide_bg_sig); - - /* Slide->frame style */ - SE_BIND_CHILD(frame_style_font, frame_font_sig); - SE_BIND_CHILD(frame_style_fgcol, frame_fgcol_sig); - SE_BIND_CHILD(frame_style_bgcol, frame_bg_sig); - SE_BIND_CHILD(frame_style_bgcol2, frame_bg_sig); - SE_BIND_CHILD(frame_style_bggrad, frame_bg_sig); - SE_BIND_CHILD(frame_style_paraspace_l, frame_paraspace_sig); - SE_BIND_CHILD(frame_style_paraspace_r, frame_paraspace_sig); - SE_BIND_CHILD(frame_style_paraspace_t, frame_paraspace_sig); - SE_BIND_CHILD(frame_style_paraspace_b, frame_paraspace_sig); - SE_BIND_CHILD(frame_style_padding_l, frame_padding_sig); - SE_BIND_CHILD(frame_style_padding_r, frame_padding_sig); - SE_BIND_CHILD(frame_style_padding_t, frame_padding_sig); - SE_BIND_CHILD(frame_style_padding_b, frame_padding_sig); - SE_BIND_CHILD(frame_style_alignment, frame_alignment_sig); - - /* Furniture */ - SE_BIND_CHILD(furniture_selector, furniture_selector_change_sig); - SE_BIND_CHILD(furniture_paraspace_l, furniture_paraspace_sig); - SE_BIND_CHILD(furniture_paraspace_r, furniture_paraspace_sig); - SE_BIND_CHILD(furniture_paraspace_t, furniture_paraspace_sig); - SE_BIND_CHILD(furniture_paraspace_b, furniture_paraspace_sig); - SE_BIND_CHILD(furniture_padding_l, furniture_padding_sig); - SE_BIND_CHILD(furniture_padding_r, furniture_padding_sig); - SE_BIND_CHILD(furniture_padding_t, furniture_padding_sig); - SE_BIND_CHILD(furniture_padding_b, furniture_padding_sig); - SE_BIND_CHILD(furniture_font, furniture_font_sig); - SE_BIND_CHILD(furniture_fgcol, furniture_fgcol_sig); - SE_BIND_CHILD(furniture_bgcol, furniture_bg_sig); - SE_BIND_CHILD(furniture_bgcol2, furniture_bg_sig); - SE_BIND_CHILD(furniture_bggrad, furniture_bg_sig); - SE_BIND_CHILD(furniture_alignment, furniture_alignment_sig); - SE_BIND_CHILD(furniture_w, furniture_dims_sig); - SE_BIND_CHILD(furniture_h, furniture_dims_sig); - SE_BIND_CHILD(furniture_x, furniture_dims_sig); - SE_BIND_CHILD(furniture_y, furniture_dims_sig); - SE_BIND_CHILD(furniture_w_units, furniture_dims_sig); - SE_BIND_CHILD(furniture_h_units, furniture_dims_sig); - - gtk_widget_class_bind_template_callback(widget_class, revert_sig); - - g_signal_new("changed", COLLOQUIUM_TYPE_STYLESHEET_EDITOR, - G_SIGNAL_RUN_LAST, 0, NULL, NULL, NULL, G_TYPE_NONE, 0); -} - - -StylesheetEditor *stylesheet_editor_new(struct presentation *p) -{ - StylesheetEditor *se; - - se = g_object_new(COLLOQUIUM_TYPE_STYLESHEET_EDITOR, NULL); - if ( se == NULL ) return NULL; - - se->priv->p = p; - se->priv->furniture = gtk_combo_box_get_active_id(GTK_COMBO_BOX(se->furniture_selector)); - set_values_from_presentation(se); - - se->priv->ssdata = stylesheet_data(p->stylesheet); - - return se; -} - -- cgit v1.2.3