aboutsummaryrefslogtreecommitdiff
path: root/libstorycode/presentation.c
diff options
context:
space:
mode:
authorThomas White <taw@bitwiz.me.uk>2019-03-30 17:32:24 +0100
committerThomas White <taw@bitwiz.me.uk>2019-03-30 17:32:24 +0100
commit5a1e588c3fbdce549e0b3c487e2671c679890675 (patch)
treece7f29799aa02cec088d2ec676069ae4ac9cac8d /libstorycode/presentation.c
parent96c903e0756e8a85649c1f7d8d6aa1b146b8c038 (diff)
Get rid of Presentation structure
It doesn't have any reason to exist. A Narrative defines the top-level object already. This is, after all, a narrative-based presentation system. This removes a lot of faff surrounding retrieving the Narrative from the Presentation. It also removes a gigantic place for bugs to hide in keeping the Presentation's view of the slides in sync with the Narrative's opinion. What was that quote? "Code is terrible, and we want as little of it as possible in our program."
Diffstat (limited to 'libstorycode/presentation.c')
-rw-r--r--libstorycode/presentation.c220
1 files changed, 0 insertions, 220 deletions
diff --git a/libstorycode/presentation.c b/libstorycode/presentation.c
deleted file mode 100644
index 925f011..0000000
--- a/libstorycode/presentation.c
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- * presentation.c
- *
- * Copyright © 2019 Thomas White <taw@bitwiz.org.uk>
- *
- * 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 <http://www.gnu.org/licenses/>.
- *
- */
-
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include <stdio.h>
-#include <gio/gio.h>
-
-#ifdef HAVE_PANGO
-#include <pango/pango.h>
-#endif
-
-#include "presentation.h"
-#include "stylesheet.h"
-#include "slide.h"
-#include "narrative.h"
-#include "imagestore.h"
-#include "storycode.h"
-
-struct _presentation
-{
- Stylesheet *stylesheet;
- Narrative *narrative;
- ImageStore *imagestore;
- int n_slides;
- Slide **slides;
- int max_slides;
- int saved;
- const char *language;
-};
-
-
-Presentation *presentation_new()
-{
- Presentation *p;
- p = malloc(sizeof(*p));
- if ( p == NULL ) return NULL;
- p->stylesheet = NULL;
- p->narrative = NULL;
- p->slides = NULL;
- p->n_slides = 0;
- p->max_slides = 0;
- p->imagestore = NULL;
- p->saved = 1;
-#ifdef HAVE_PANGO
- p->language = pango_language_to_string(pango_language_get_default());
-#else
- p->language = NULL;
-#endif
- return p;
-}
-
-
-Presentation *presentation_load(GFile *file)
-{
- GBytes *bytes;
- const char *text;
- size_t len;
- Presentation *p;
-
- bytes = g_file_load_bytes(file, NULL, NULL, NULL);
- if ( bytes == NULL ) return NULL;
-
- text = g_bytes_get_data(bytes, &len);
- p = storycode_parse_presentation(text);
- g_bytes_unref(bytes);
- if ( p == NULL ) return NULL;
-
- p->imagestore = imagestore_new("."); /* FIXME: From app config */
- imagestore_set_parent(p->imagestore, g_file_get_parent(file));
- return p;
-}
-
-
-int presentation_save(Presentation *p, GFile *file)
-{
- /* FIXME: Implementation */
- return 1;
-}
-
-
-void presentation_set_unsaved(Presentation *p)
-{
- p->saved = 0;
-}
-
-
-int presentation_get_unsaved(Presentation *p)
-{
- return !p->saved;
-}
-
-
-void presentation_free(Presentation *p)
-{
- /* FIXME: Free narrative, slides, imagestore */
- free(p);
-}
-
-
-void presentation_add_stylesheet(Presentation *p, Stylesheet *ss)
-{
- assert(p->stylesheet == NULL);
- p->stylesheet = ss;
-}
-
-
-void presentation_add_narrative(Presentation *p, Narrative *n)
-{
- assert(p->narrative == NULL);
- p->narrative = n;
-}
-
-
-void presentation_add_slide(Presentation *p, Slide *s)
-{
- assert(p->n_slides <= p->max_slides);
- if ( p->n_slides == p->max_slides ) {
- Slide **nslides = realloc(p->slides,
- (p->max_slides+8)*sizeof(Slide *));
- if ( nslides == NULL ) {
- fprintf(stderr, "Failed to allocate memory for slide\n");
- return;
- }
- p->slides = nslides;
- p->max_slides += 8;
- }
-
- p->slides[p->n_slides++] = s;
-}
-
-
-void presentation_insert_slide(Presentation *p, Slide *s, int pos)
-{
- int i;
- presentation_add_slide(p, NULL);
- assert(pos < p->n_slides);
- for ( i=p->n_slides-1; i>pos+1; i-- ) {
- p->slides[i] = p->slides[i-1];
- }
- p->slides[pos] = s;
-}
-
-
-int presentation_get_num_slides(Presentation *p)
-{
- return p->n_slides;
-}
-
-
-Slide *presentation_get_slide_by_number(Presentation *p, int i)
-{
- if ( i >= p->n_slides ) return NULL;
- if ( i < 0 ) return NULL;
- return p->slides[i];
-}
-
-
-signed int presentation_get_slide_number(Presentation *p, Slide *s)
-{
- int i;
- if ( p == NULL ) return -1;
- for ( i=0; i<p->n_slides; i++ ) {
- if ( s == p->slides[i] ) return i;
- }
- return -1;
-}
-
-
-Stylesheet *presentation_get_stylesheet(Presentation *p)
-{
- if ( p == NULL ) return NULL;
- return p->stylesheet;
-}
-
-
-Narrative *presentation_get_narrative(Presentation *p)
-{
- if ( p == NULL ) return NULL;
- return p->narrative;
-}
-
-
-const char *presentation_get_language(Presentation *p)
-{
- if ( p == NULL ) return NULL;
- return p->language;
-}
-
-
-ImageStore *presentation_get_imagestore(Presentation *p)
-{
- if ( p == NULL ) return NULL;
- return p->imagestore;
-}