5 #include <glib/gi18n.h>
10 #include "tbo-window.h"
12 #include "comic-load.h"
13 #include "tbo-utils.h"
16 tbo_comic_new (const char *title, int width, int height)
20 new_comic = malloc(sizeof(Comic));
21 snprintf (new_comic->title, 255, "%s", title);
22 new_comic->width = width;
23 new_comic->height = height;
24 new_comic->pages = NULL;
25 tbo_comic_new_page (new_comic);
31 tbo_comic_free (Comic *comic)
35 for (p=g_list_first (comic->pages); p; p = g_list_next(p))
37 tbo_page_free ((Page *) p->data);
40 g_list_free (g_list_first (comic->pages));
45 tbo_comic_new_page (Comic *comic){
48 page = tbo_page_new (comic);
49 comic->pages = g_list_append (comic->pages, page);
55 tbo_comic_del_page (Comic *comic, int nth)
59 page = (Page *) g_list_nth_data (g_list_first (comic->pages), nth);
60 comic->pages = g_list_remove (g_list_first (comic->pages), page);
65 tbo_comic_len (Comic *comic)
67 return g_list_length (g_list_first (comic->pages));
71 tbo_comic_page_index (Comic *comic)
73 return g_list_position ( g_list_first (comic->pages), comic->pages);
77 tbo_comic_page_nth (Comic *comic, Page *page)
79 return g_list_index (g_list_first (comic->pages), page);
83 tbo_comic_next_page (Comic *comic)
85 if (comic->pages->next)
87 comic->pages = comic->pages->next;
88 return tbo_comic_get_current_page (comic);
94 tbo_comic_prev_page (Comic *comic)
96 if (comic->pages->prev)
98 comic->pages = comic->pages->prev;
99 return tbo_comic_get_current_page (comic);
105 tbo_comic_get_current_page (Comic *comic)
107 return (Page *)comic->pages->data;
111 tbo_comic_set_current_page (Comic *comic, Page *page)
113 comic->pages = g_list_find (g_list_first (comic->pages), page);
117 tbo_comic_set_current_page_nth (Comic *comic, int nth)
119 comic->pages = g_list_nth (g_list_first (comic->pages), nth);
123 tbo_comic_page_first (Comic *comic)
125 if (tbo_comic_page_index (comic) == 0)
131 tbo_comic_page_last (Comic *comic)
133 if (tbo_comic_page_index (comic) == tbo_comic_len (comic) - 1)
139 tbo_comic_del_current_page (Comic *comic)
144 if (tbo_comic_len (comic) == 1)
146 nth = tbo_comic_page_index (comic);
148 page = tbo_comic_next_page (comic);
150 page = tbo_comic_prev_page (comic);
151 tbo_comic_del_page (comic, nth);
152 tbo_comic_set_current_page (comic, page);
157 tbo_comic_save (TboWindow *tbo, char *filename)
161 FILE *file = fopen (filename, "w");
162 Comic *comic = tbo->comic;
166 snprintf (buffer, 255, _("Failed saving: %s"), strerror (errno));
167 GtkWidget *dialog = gtk_message_dialog_new (NULL,
172 perror (_("failed saving"));
173 gtk_dialog_run (GTK_DIALOG (dialog));
174 gtk_widget_destroy ((GtkWidget *) dialog);
177 get_base_name (filename, comic->title, 255);
178 gtk_window_set_title (GTK_WINDOW (tbo->window), comic->title);
180 snprintf (buffer, 255, "<tbo width=\"%d\" height=\"%d\">\n",
183 fwrite (buffer, sizeof (char), strlen (buffer), file);
185 for (p=g_list_first (comic->pages); p; p = g_list_next(p))
187 tbo_page_save ((Page *) p->data, file);
190 snprintf (buffer, 255, "</tbo>\n");
191 fwrite (buffer, sizeof (char), strlen (buffer), file);
196 tbo_comic_open (TboWindow *window, char *filename)
198 Comic *newcomic = tbo_comic_load (filename);
201 tbo_comic_free (window->comic);
202 window->comic = newcomic;
203 gtk_window_set_title (GTK_WINDOW (window->window), window->comic->title);