Commit 69e2a15e authored by Cedric Roux's avatar Cedric Roux

prepare container to deal with growable children

parent 53fd31ef
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
#include "gui_defs.h" #include "gui_defs.h"
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h>
#define MAX(a, b) ((a)>(b)?(a):(b)) #define MAX(a, b) ((a)>(b)?(a):(b))
...@@ -19,6 +20,19 @@ printf("ADD_CHILD container\n"); ...@@ -19,6 +20,19 @@ printf("ADD_CHILD container\n");
struct container_widget *this = _this; struct container_widget *this = _this;
this->hints_are_valid = 0; this->hints_are_valid = 0;
widget_add_child_internal(g, this, child, position); widget_add_child_internal(g, this, child, position);
/* initially not growable */
this->growable = realloc(this->growable, (this->nchildren+1)*sizeof(int));
if (this->growable == NULL) abort();
if (position == -1) position = this->nchildren;
memmove(this->growable + position+1, this->growable + position,
(this->nchildren - position) * sizeof(int));
this->growable[position] = 0;
this->nchildren++;
} }
static void compute_vertical_hints(struct gui *g, static void compute_vertical_hints(struct gui *g,
...@@ -246,3 +260,33 @@ widget *new_container(gui *_gui, int vertical) ...@@ -246,3 +260,33 @@ widget *new_container(gui *_gui, int vertical)
return w; return w;
} }
/*************************************************************************/
/* public functions */
/*************************************************************************/
void container_set_child_growable(gui *_gui, widget *_this,
widget *child, int growable)
{
gui *g = _gui;
struct container_widget *this = _this;
struct widget_list *lcur;
int i;
glock(g);
lcur = this->common.children;
i = 0;
while (lcur) {
if (lcur->item == child) break;
lcur = lcur->next;
i++;
}
if (lcur == NULL) ERR("%s:%d: child not found\n", __FILE__, __LINE__);
this->growable[i] = growable;
send_event(g, DIRTY, this->common.id);
gunlock(g);
}
...@@ -24,6 +24,9 @@ widget *new_xy_plot(gui *gui, int width, int height, char *label, ...@@ -24,6 +24,9 @@ widget *new_xy_plot(gui *gui, int width, int height, char *label,
int vruler_width); int vruler_width);
widget *new_text_list(gui *_gui, int width, int nlines, int background_color); widget *new_text_list(gui *_gui, int width, int nlines, int background_color);
void container_set_child_growable(gui *_gui, widget *_this,
widget *child, int growable);
void xy_plot_set_range(gui *gui, widget *this, void xy_plot_set_range(gui *gui, widget *this,
float xmin, float xmax, float ymin, float ymax); float xmin, float xmax, float ymin, float ymax);
void xy_plot_set_points(gui *gui, widget *this, void xy_plot_set_points(gui *gui, widget *this,
......
...@@ -69,6 +69,8 @@ struct container_widget { ...@@ -69,6 +69,8 @@ struct container_widget {
int hints_are_valid; /* used to cache hints values */ int hints_are_valid; /* used to cache hints values */
int hint_width; /* cached hint values - invalid if */ int hint_width; /* cached hint values - invalid if */
int hint_height; /* repack_was_called == 1 */ int hint_height; /* repack_was_called == 1 */
int *growable;
int nchildren;
}; };
struct text_list_widget { struct text_list_widget {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment