Implement "revert" button for stylesheet editor
authorThomas White <taw@bitwiz.me.uk>
Thu, 2 May 2019 19:29:40 +0000 (21:29 +0200)
committerThomas White <taw@bitwiz.me.uk>
Thu, 2 May 2019 21:02:40 +0000 (23:02 +0200)
libstorycode/stylesheet.c
libstorycode/stylesheet.h
src/stylesheet_editor.c

index 3bbddb3..be4db9b 100644 (file)
@@ -568,3 +568,23 @@ const char *stylesheet_get_friendly_name(const char *in)
        if ( strcmp(in, "FOOTER") == 0 ) return "Footer";
        return in;
 }
+
+
+int stylesheet_set_from_storycode(Stylesheet *ss, const char *sc)
+{
+       Stylesheet *ssnew;
+       Narrative *n;
+
+       n = storycode_parse_presentation(sc);
+       if ( n == NULL ) return 1;
+
+       ssnew = narrative_get_stylesheet(n);
+       if ( ssnew == NULL ) return 1;
+
+       narrative_free(n);
+
+       free_style_contents(&ss->top);
+       ss->top = ssnew->top;
+
+       return 0;
+}
index 0a38477..0b994da 100644 (file)
@@ -79,6 +79,7 @@ enum gradient
 
 extern Stylesheet *stylesheet_new(void);
 extern void stylesheet_free(Stylesheet *s);
+extern int stylesheet_set_from_storycode(Stylesheet *ss, const char *sc);
 
 extern int stylesheet_get_slide_default_size(Stylesheet *s, double *w, double *h);
 
index c70b678..1cff58a 100644 (file)
@@ -38,6 +38,7 @@
 struct _sspriv
 {
        Stylesheet *stylesheet;
+       char *orig_ss;
        char *style_name;
 };
 
@@ -379,7 +380,7 @@ static void element_changed(GtkTreeSelection *sel, StylesheetEditor *se)
 
 static void revert_sig(GtkButton *button, StylesheetEditor *se)
 {
-       /* FIXME: implement */
+       stylesheet_set_from_storycode(se->priv->stylesheet, se->priv->orig_ss);
        set_values_from_presentation(se);
        g_signal_emit_by_name(se, "changed");
 }
@@ -545,6 +546,7 @@ static void bg_sig(GtkColorButton *widget, StylesheetEditor *se)
 
 static void stylesheet_editor_finalize(GObject *obj)
 {
+       free(COLLOQUIUM_STYLESHEET_EDITOR(obj)->priv->orig_ss);
        G_OBJECT_CLASS(stylesheet_editor_parent_class)->finalize(obj);
 }
 
@@ -614,6 +616,7 @@ StylesheetEditor *stylesheet_editor_new(Stylesheet *ss)
 
        se->priv->stylesheet = ss;
        se->priv->style_name = NULL;
+       se->priv->orig_ss = stylesheet_serialise(ss);
 
        renderer = gtk_cell_renderer_text_new();
        column = gtk_tree_view_column_new_with_attributes("Element", renderer,