1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
4 * (LIBGLABELS) Template library for GLABELS
6 * template.h: template module header file
8 * Copyright (C) 2001-2006 Jim Evins <evins@snaught.com>.
10 * This file is part of the LIBGLABELS library.
12 * This library is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU Library General Public
14 * License as published by the Free Software Foundation; either
15 * version 2 of the License, or (at your option) any later version.
17 * This library is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 * Library General Public License for more details.
22 * You should have received a copy of the GNU Library General Public
23 * License along with this library; if not, write to the Free
24 * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
28 #ifndef __TEMPLATE_H__
29 #define __TEMPLATE_H__
31 #include <glib/gtypes.h>
32 #include <glib/glist.h>
36 typedef struct _lglTemplate lglTemplate;
38 typedef union _lglTemplateFrame lglTemplateFrame;
39 typedef struct _lglTemplateFrameAll lglTemplateFrameAll;
40 typedef struct _lglTemplateFrameRect lglTemplateFrameRect;
41 typedef struct _lglTemplateFrameRound lglTemplateFrameRound;
42 typedef struct _lglTemplateFrameCD lglTemplateFrameCD;
44 typedef struct _lglTemplateLayout lglTemplateLayout;
46 typedef union _lglTemplateMarkup lglTemplateMarkup;
47 typedef struct _lglTemplateMarkupMargin lglTemplateMarkupMargin;
48 typedef struct _lglTemplateMarkupLine lglTemplateMarkupLine;
49 typedef struct _lglTemplateMarkupCircle lglTemplateMarkupCircle;
50 typedef struct _lglTemplateMarkupRect lglTemplateMarkupRect;
52 typedef struct _lglTemplateOrigin lglTemplateOrigin;
55 * Top-level Template Structure
65 /* List of (gchar *) category ids. */
68 /* List of (lglTemplateFrame *) label frame structures.
69 * Currently glabels only supports a single label frame per
73 /* List of (gchar *) aliases. */
80 * Possible Frame Shapes
83 LGL_TEMPLATE_FRAME_SHAPE_RECT,
84 LGL_TEMPLATE_FRAME_SHAPE_ROUND,
85 LGL_TEMPLATE_FRAME_SHAPE_CD,
86 } lglTemplateFrameShape;
92 struct _lglTemplateFrameAll {
94 /* Begin Common Fields */
95 lglTemplateFrameShape shape;
97 gchar *id; /* Id, currently always "0" */
98 GList *layouts; /* List of lglTemplateLayouts */
99 GList *markups; /* List of lglTemplateMarkups */
100 /* End Common Fields */
103 struct _lglTemplateFrameRect {
105 /* Begin Common Fields */
106 lglTemplateFrameShape shape; /* Always LGL_TEMPLATE_FRAME_SHAPE_RECT. */
108 gchar *id; /* Id, currently always "0" */
109 GList *layouts; /* List of lglTemplateLayouts */
110 GList *markups; /* List of lglTemplateMarkups */
111 /* End Common Fields */
113 gdouble w; /* Width */
114 gdouble h; /* Height */
115 gdouble r; /* Corner radius */
116 gdouble x_waste; /* Amount of horiz overprint allowed. */
117 gdouble y_waste; /* Amount of vert overprint allowed. */
120 struct _lglTemplateFrameRound {
122 /* Begin Common Fields */
123 lglTemplateFrameShape shape; /* Always LGL_TEMPLATE_FRAME_SHAPE_ROUND. */
125 gchar *id; /* Id, currently always "0" */
126 GList *layouts; /* List of lglTemplateLayouts */
127 GList *markups; /* List of lglTemplateMarkups */
128 /* End Common Fields */
130 gdouble r; /* Radius */
131 gdouble waste; /* Amount of overprint allowed. */
134 struct _lglTemplateFrameCD {
136 /* Begin Common Fields */
137 lglTemplateFrameShape shape; /* Always LGL_TEMPLATE_FRAME_SHAPE_CD. */
139 gchar *id; /* Id, currently always "0" */
140 GList *layouts; /* List of lglTemplateLayouts */
141 GList *markups; /* List of lglTemplateMarkups */
142 /* End Common Fields */
144 gdouble r1; /* Outer radius */
145 gdouble r2; /* Inner radius (hole) */
146 gdouble w; /* Clip width, business card CDs */
147 gdouble h; /* Clip height, business card CDs */
148 gdouble waste; /* Amount of overprint allowed. */
151 union _lglTemplateFrame{
153 lglTemplateFrameShape shape;
155 lglTemplateFrameAll all;
156 lglTemplateFrameRect rect;
157 lglTemplateFrameRound round;
158 lglTemplateFrameCD cd;
163 * Label Layout Structure
165 struct _lglTemplateLayout {
167 gint nx; /* Number of labels across */
168 gint ny; /* Number of labels up and down */
170 gdouble x0; /* Left of grid from left edge of paper */
171 gdouble y0; /* Top of grid from top edge of paper */
173 gdouble dx; /* Horizontal pitch of grid */
174 gdouble dy; /* Vertical pitch of grid */
180 * Possible Markup Types
183 LGL_TEMPLATE_MARKUP_MARGIN,
184 LGL_TEMPLATE_MARKUP_LINE,
185 LGL_TEMPLATE_MARKUP_CIRCLE,
186 LGL_TEMPLATE_MARKUP_RECT,
187 } lglTemplateMarkupType;
191 * Label Markup Structure (Helpful lines drawn in glabels to help locate objects)
193 struct _lglTemplateMarkupMargin {
195 lglTemplateMarkupType type; /* Always LGL_TEMPLATE_MARKUP_MARGIN */
197 gdouble size; /* Margin size */
200 struct _lglTemplateMarkupLine {
202 lglTemplateMarkupType type; /* Always LGL_TEMPLATE_MARKUP_LINE */
204 gdouble x1, y1; /* 1st endpoint */
205 gdouble x2, y2; /* 2nd endpoint */
208 struct _lglTemplateMarkupCircle {
210 lglTemplateMarkupType type; /* Always LGL_TEMPLATE_MARKUP_CIRCLE */
212 gdouble x0, y0; /* Center of circle */
213 gdouble r; /* Radius of circle */
216 struct _lglTemplateMarkupRect {
218 lglTemplateMarkupType type; /* Always LGL_TEMPLATE_MARKUP_RECT */
220 gdouble x1, y1; /* Upper left corner */
221 gdouble w, h; /* Width and height. */
222 gdouble r; /* Radius of corners. */
225 union _lglTemplateMarkup {
227 lglTemplateMarkupType type;
229 lglTemplateMarkupMargin margin;
230 lglTemplateMarkupLine line;
231 lglTemplateMarkupCircle circle;
232 lglTemplateMarkupRect rect;
239 struct _lglTemplateOrigin {
241 gdouble x, y; /* Label origin relative to upper
242 * upper left hand corner of paper */
249 * Template registration
251 void lgl_template_register (const lglTemplate *template);
254 * Known templates query functions
256 GList *lgl_template_get_name_list_unique (const gchar *page_size,
257 const gchar *category);
259 GList *lgl_template_get_name_list_all (const gchar *page_size,
260 const gchar *category);
262 void lgl_template_free_name_list (GList *names);
264 lglTemplate *lgl_template_from_name (const gchar *name);
268 * Template query functions
270 const lglTemplateFrame *lgl_template_get_first_frame (const lglTemplate *template);
272 gboolean lgl_template_does_page_size_match (const lglTemplate *template,
273 const gchar *page_size);
275 gboolean lgl_template_does_category_match (const lglTemplate *template,
276 const gchar *category);
280 * Frame query functions
282 void lgl_template_frame_get_size (const lglTemplateFrame *frame,
286 gint lgl_template_frame_get_n_labels (const lglTemplateFrame *frame);
288 lglTemplateOrigin *lgl_template_frame_get_origins (const lglTemplateFrame *frame);
292 * Template Construction
294 lglTemplate *lgl_template_new (const gchar *name,
295 const gchar *description,
296 const gchar *page_size,
298 gdouble page_height);
300 void lgl_template_add_category (lglTemplate *template,
301 const gchar *category);
303 void lgl_template_add_frame (lglTemplate *template,
304 lglTemplateFrame *frame);
306 void lgl_template_add_alias (lglTemplate *template,
309 lglTemplateFrame *lgl_template_frame_rect_new (const gchar *id,
316 lglTemplateFrame *lgl_template_frame_round_new (const gchar *id,
320 lglTemplateFrame *lgl_template_frame_cd_new (const gchar *id,
327 void lgl_template_frame_add_layout (lglTemplateFrame *frame,
328 lglTemplateLayout *layout);
330 void lgl_template_frame_add_markup (lglTemplateFrame *frame,
331 lglTemplateMarkup *markup);
333 lglTemplateLayout *lgl_template_layout_new (gint nx,
340 lglTemplateMarkup *lgl_template_markup_margin_new (gdouble size);
342 lglTemplateMarkup *lgl_template_markup_line_new (gdouble x1,
347 lglTemplateMarkup *lgl_template_markup_circle_new (gdouble x0,
351 lglTemplateMarkup *lgl_template_markup_rect_new (gdouble x1,
357 lglTemplate *lgl_template_dup (const lglTemplate *orig_template);
359 void lgl_template_free (lglTemplate *template);
361 lglTemplateFrame *lgl_template_frame_dup (const lglTemplateFrame *orig_frame);
362 void lgl_template_frame_free (lglTemplateFrame *frame);
364 lglTemplateLayout *lgl_template_layout_dup (const lglTemplateLayout *orig_layout);
365 void lgl_template_layout_free (lglTemplateLayout *layout);
367 lglTemplateMarkup *lgl_template_markup_dup (const lglTemplateMarkup *orig_markup);
368 void lgl_template_markup_free (lglTemplateMarkup *markup);
372 * Debugging functions
374 void lgl_template_print_known_templates (void);
375 void lgl_template_print_aliases (const lglTemplate *template);