1 /* Monolith vertical layout class.
2 * - by Richard W.M. Jones <rich@annexia.org>
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Library General Public License for more details.
14 * You should have received a copy of the GNU Library General Public
15 * License along with this library; if not, write to the Free
16 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18 * $Id: ml_vertical_layout.c,v 1.2 2003/01/12 22:12:42 rich Exp $
23 #include <pthr_iolib.h>
25 #include "ml_widget.h"
27 #include "ml_vertical_layout.h"
29 static void repaint (void *, ml_session, const char *, io_handle);
30 static struct ml_widget_property properties[];
32 struct ml_widget_operations vertical_layout_ops =
35 properties: properties
38 struct ml_vertical_layout
40 struct ml_widget_operations *ops;
41 pool pool; /* Pool for allocations. */
42 const char *clazz; /* Stylesheet class. */
43 vector v; /* Vector of widgets. */
46 static struct ml_widget_property properties[] =
49 offset: ml_offsetof (struct ml_vertical_layout, clazz),
50 type: ML_PROP_STRING },
55 new_ml_vertical_layout (pool pool)
57 ml_vertical_layout w = pmalloc (pool, sizeof *w);
59 w->ops = &vertical_layout_ops;
62 w->v = new_vector (pool, ml_widget);
68 ml_vertical_layout_push_back (ml_vertical_layout w, ml_widget _w)
70 vector_push_back (w->v, _w);
74 ml_vertical_layout_pack (ml_vertical_layout w, ml_widget _w)
76 vector_push_back (w->v, _w);
80 ml_vertical_layout_pop_back (ml_vertical_layout w)
84 vector_pop_back (w->v, _w);
89 ml_vertical_layout_push_front (ml_vertical_layout w, ml_widget _w)
91 vector_push_front (w->v, _w);
95 ml_vertical_layout_pop_front (ml_vertical_layout w)
99 vector_pop_front (w->v, _w);
104 ml_vertical_layout_get (ml_vertical_layout w, int i)
108 vector_get (w->v, i, _w);
113 ml_vertical_layout_insert (ml_vertical_layout w, int i, ml_widget _w)
115 vector_insert (w->v, i, _w);
119 ml_vertical_layout_replace (ml_vertical_layout w, int i, ml_widget _w)
121 vector_replace (w->v, i, _w);
125 ml_vertical_layout_erase (ml_vertical_layout w, int i)
127 vector_erase (w->v, i);
131 ml_vertical_layout_clear (ml_vertical_layout w)
137 ml_vertical_layout_size (ml_vertical_layout w)
139 return vector_size (w->v);
143 repaint (void *vw, ml_session session, const char *windowid, io_handle io)
145 ml_vertical_layout w = (ml_vertical_layout) vw;
148 for (i = 0; i < vector_size (w->v); ++i)
152 vector_get (w->v, i, _w);
153 io_fputs ("<div", io);
154 if (w->clazz) io_fprintf (io, " class=\"%s\"", w->clazz);
156 ml_widget_repaint (_w, session, windowid, io);
157 io_fputs ("</div>\n", io);