r5333 - developers/werner/fped

werner at docs.openmoko.org werner at docs.openmoko.org
Wed Jul 29 03:53:02 CEST 2009


Author: werner
Date: 2009-07-29 03:53:01 +0200 (Wed, 29 Jul 2009)
New Revision: 5333

Modified:
   developers/werner/fped/gui.c
   developers/werner/fped/gui_canvas.c
   developers/werner/fped/gui_canvas.h
   developers/werner/fped/inst.c
   developers/werner/fped/inst.h
   developers/werner/fped/obj.c
Log:
- store pointer to object of model in instances
- added area for operating on variables (on-going)



Modified: developers/werner/fped/gui.c
===================================================================
--- developers/werner/fped/gui.c	2009-07-28 21:50:48 UTC (rev 5332)
+++ developers/werner/fped/gui.c	2009-07-29 01:53:01 UTC (rev 5333)
@@ -67,36 +67,92 @@
 }
 
 
-static void show_vars(GtkWidget *var_list)
+static void add_sep(GtkWidget *box, int size)
 {
-	GtkListStore *list;
+	GtkWidget *sep;
+	GdkColor black = { 0, 0, 0, 0 };
 
-	list = gtk_list_store_new(1, G_TYPE_STRING);
+	sep = gtk_drawing_area_new();
+	gtk_box_pack_start(GTK_BOX(box), sep, FALSE, TRUE, size);
+	gtk_widget_modify_bg(sep, GTK_STATE_NORMAL, &black);
+}
 
-	gtk_tree_view_set_model(GTK_TREE_VIEW(var_list),
-	    GTK_TREE_MODEL(list));
-	g_object_unref(list);
+
+/*static*/ GdkColor get_color(GdkColormap *cmap, const char *spec)
+;
+static void build_table(GtkWidget *vbox, struct frame *frame,
+     struct table *table)
+{
+	GtkWidget *tab, *field;
+	struct var *var;
+	struct row *row;
+	struct value *value;
+	int n_vars = 0, n_rows = 0;
+
+	for (var = table->vars; var; var = var->next)
+		n_vars++;
+	for (row = table->rows; row; row = row->next)
+		n_rows++;
+
+	tab = gtk_table_new(n_rows+1, n_vars, FALSE);
+	gtk_table_set_row_spacings(GTK_TABLE(tab), 1);
+	gtk_table_set_col_spacings(GTK_TABLE(tab), 1);
+	gtk_box_pack_start(GTK_BOX(vbox), tab, FALSE, FALSE, 0);
+
+	n_vars = 0;
+	for (var = table->vars; var; var = var->next) {
+		field = gtk_label_new(var->name);
+		gtk_table_attach_defaults(GTK_TABLE(tab), field,
+		    n_vars, n_vars+1, 0, 1);
+		n_vars++;
+	}
+	n_rows = 0;
+	for (row = table->rows; row; row = row->next) {
+		n_vars = 0;
+		for (value = row->values; value; value = value->next) {
+			field = gtk_label_new("???");
+			gtk_table_attach_defaults(GTK_TABLE(tab), field,
+			    n_vars, n_vars+1,
+			    n_rows+1, n_rows+2);
+			n_vars++;
+		}
+		n_rows++;
+	}
 }
 
 
-static void show_rows(GtkWidget *row_list)
+static void build_loop(GtkWidget *vbox, struct frame *frame,
+     struct loop *loop)
 {
-	GtkListStore *list;
+}
 
-	list = gtk_list_store_new(1, G_TYPE_STRING);
 
-	gtk_tree_view_set_model(GTK_TREE_VIEW(row_list),
-	    GTK_TREE_MODEL(list));
-	g_object_unref(list);
+static void build_vars(GtkWidget *vbox, struct frame *frame)
+{
+	struct table *table;
+	struct loop *loop;
+
+{
+	GtkWidget *field;
+			field = gtk_label_new("XXX");
+	gtk_box_pack_start(GTK_BOX(vbox), field, FALSE, FALSE, 0);
 }
+	for (table = frame->tables; table; table = table->next) {
+		add_sep(vbox, 3);
+		build_table(vbox, frame, table);
+	}
+	for (loop = frame->loops; loop; loop = loop->next) {
+		add_sep(vbox, 3);
+		build_loop(vbox, frame, loop);
+	}
+}
 
 
 static void make_center_area(GtkWidget *vbox)
 {
-	GtkWidget *hbox;
-	GtkWidget *frame_list, *var_list, *row_list;
-	GtkWidget *sep;
-	GdkColor black = { 0, 0, 0, 0 };
+	GtkWidget *hbox, *vars, *paned, *v2box;
+	GtkWidget *frame_list;
+	GtkTreeSelection *sel;
 
 	hbox = gtk_hbox_new(FALSE, 0);
 	gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
@@ -106,54 +162,30 @@
 	frame_list = gtk_tree_view_new();
 	gtk_box_pack_start(GTK_BOX(hbox), frame_list, FALSE, TRUE, 0);
 
+	sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(frame_list));
+	gtk_tree_selection_set_mode(sel, GTK_SELECTION_BROWSE);
 	gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(frame_list),
 	    -1, "Frame", gtk_cell_renderer_text_new(), "text", 0, NULL);
 
 	show_frames(frame_list);
 
-	sep = gtk_drawing_area_new();
-	gtk_box_pack_start(GTK_BOX(hbox), sep, FALSE, TRUE, 2);
-	gtk_widget_modify_bg(sep, GTK_STATE_NORMAL, &black);
+	add_sep(hbox, 2);
 
-	/*
-	 * @@@ is this really a good way to present variables ?
-	 *
-	 * a way to show entire tables may be preferable. also, showing all
-	 * tables of a frame at the same time may be more convenient than such
-	 * a "peephole" access.
-	 */
+	paned = gtk_hpaned_new();
+	gtk_box_pack_start(GTK_BOX(hbox), paned, TRUE, TRUE, 0);
+	
+	/* Variables */
 
-	/* Variable list */
+	vars = gtk_scrolled_window_new(NULL, NULL);
+	gtk_paned_add1(GTK_PANED(paned), vars);
+	gtk_widget_set_size_request(vars, 100, 100);
+	v2box = gtk_vbox_new(FALSE, 0);
+	gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(vars), v2box);
+	build_vars(v2box, frames);
 
-	var_list = gtk_tree_view_new();
-	gtk_box_pack_start(GTK_BOX(hbox), var_list, FALSE, TRUE, 0);
-
-	gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(var_list),
-	    -1, "Variable", gtk_cell_renderer_text_new(), "text", 0, NULL);
-
-	show_vars(var_list);
-
-	sep = gtk_drawing_area_new();
-	gtk_box_pack_start(GTK_BOX(hbox), sep, FALSE, TRUE, 2);
-	gtk_widget_modify_bg(sep, GTK_STATE_NORMAL, &black);
-
-	/* Row list */
-
-	row_list = gtk_tree_view_new();
-	gtk_box_pack_start(GTK_BOX(hbox), row_list, FALSE, TRUE, 0);
-
-	gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(row_list),
-	    -1, "Row", gtk_cell_renderer_text_new(), "text", 0, NULL);
-
-	show_rows(row_list);
-
-	sep = gtk_drawing_area_new();
-	gtk_box_pack_start(GTK_BOX(hbox), sep, FALSE, TRUE, 2);
-	gtk_widget_modify_bg(sep, GTK_STATE_NORMAL, &black);
-
 	/* Canvas */
 
-	make_canvas(hbox);
+	gtk_paned_add2(GTK_PANED(paned), make_canvas());
 }
 
 

Modified: developers/werner/fped/gui_canvas.c
===================================================================
--- developers/werner/fped/gui_canvas.c	2009-07-28 21:50:48 UTC (rev 5332)
+++ developers/werner/fped/gui_canvas.c	2009-07-29 01:53:01 UTC (rev 5333)
@@ -270,7 +270,7 @@
 /* ----- canvas setup ------------------------------------------------------ */
 
 
-void make_canvas(GtkWidget *hbox)
+GtkWidget *make_canvas(void)
 {
 	GtkWidget *canvas;
 	GdkColor black = { 0, 0, 0, 0 };
@@ -278,7 +278,6 @@
 	/* Canvas */
 
 	canvas = gtk_drawing_area_new();
-	gtk_box_pack_start(GTK_BOX(hbox), canvas, TRUE, TRUE, 0);
 	gtk_widget_modify_bg(canvas, GTK_STATE_NORMAL, &black);
 
 	g_signal_connect(G_OBJECT(canvas), "motion_notify_event",
@@ -310,4 +309,6 @@
 	    GDK_POINTER_MOTION_MASK);
 
 	ctx.widget = canvas;
+
+	return canvas;
 }

Modified: developers/werner/fped/gui_canvas.h
===================================================================
--- developers/werner/fped/gui_canvas.h	2009-07-28 21:50:48 UTC (rev 5332)
+++ developers/werner/fped/gui_canvas.h	2009-07-29 01:53:01 UTC (rev 5333)
@@ -17,6 +17,6 @@
 #include <gtk/gtk.h>
 
 
-void make_canvas(GtkWidget *vbox) ;
+GtkWidget *make_canvas(void);
 
 #endif /* !GUI_CANVAS_H */

Modified: developers/werner/fped/inst.c
===================================================================
--- developers/werner/fped/inst.c	2009-07-28 21:50:48 UTC (rev 5332)
+++ developers/werner/fped/inst.c	2009-07-29 01:53:01 UTC (rev 5333)
@@ -53,6 +53,7 @@
 	inst = alloc_type(struct inst);
 	inst->ops = ops;
 	inst->base = inst->bbox.min = inst->bbox.max = base;
+	inst->outer = curr_frame;
 	inst->next = NULL;
 	*next_inst = inst;
 	next_inst = &inst->next;
@@ -82,6 +83,7 @@
 	struct inst *inst;
 
 	inst = add_inst(&vec_ops, base);
+	inst->vec = vec;
 	inst->u.end = vec->pos;
 	update_bbox(&inst->bbox, vec->pos);
 	propagate_bbox(inst);
@@ -106,11 +108,12 @@
 };
 
 
-int inst_line(struct coord a, struct coord b)
+int inst_line(struct obj *obj, struct coord a, struct coord b)
 {
 	struct inst *inst;
 
 	inst = add_inst(&line_ops, a);
+	inst->obj = obj;
 	inst->u.end = b;
 	update_bbox(&inst->bbox, b);
 	propagate_bbox(inst);
@@ -135,11 +138,12 @@
 };
 
 
-int inst_rect(struct coord a, struct coord b)
+int inst_rect(struct obj *obj, struct coord a, struct coord b)
 {
 	struct inst *inst;
 
 	inst = add_inst(&rect_ops, a);
+	inst->obj = obj;
 	inst->u.end = b;
 	update_bbox(&inst->bbox, b);
 	propagate_bbox(inst);
@@ -164,11 +168,12 @@
 };
 
 
-int inst_pad(const char *name, struct coord a, struct coord b)
+int inst_pad(struct obj *obj, const char *name, struct coord a, struct coord b)
 {
 	struct inst *inst;
 
 	inst = add_inst(&pad_ops, a);
+	inst->obj = obj;
 	inst->u.name = stralloc(name);
 	update_bbox(&inst->bbox, b);
 	propagate_bbox(inst);
@@ -193,12 +198,14 @@
 };
 
 
-int inst_arc(struct coord center, struct coord start, struct coord end)
+int inst_arc(struct obj *obj, struct coord center, struct coord start,
+    struct coord end)
 {
 	struct inst *inst;
 	double r, a1, a2;
 
 	inst = add_inst(&arc_ops, center);
+	inst->obj = obj;
 	r = hypot(start.x-center.x, start.y-center.y);
 	a1 = atan2(start.y-center.y, start.x-center.x)/M_PI*180.0;
 	a2 = atan2(end.y-center.y, end.x-center.x)/M_PI*180.0;
@@ -241,7 +248,6 @@
 
 	inst = add_inst(&frame_ops, base);
 	inst->u.frame.ref = frame;
-	inst->u.frame.outer = curr_frame;
 	curr_frame = inst;
 }
 
@@ -250,7 +256,7 @@
 {
 	struct inst *inst = curr_frame;
 
-	curr_frame = curr_frame->u.frame.outer;
+	curr_frame = curr_frame->outer;
 	if (curr_frame)
 		propagate_bbox(inst);
 }

Modified: developers/werner/fped/inst.h
===================================================================
--- developers/werner/fped/inst.h	2009-07-28 21:50:48 UTC (rev 5332)
+++ developers/werner/fped/inst.h	2009-07-29 01:53:01 UTC (rev 5333)
@@ -38,10 +38,12 @@
 	const struct inst_ops *ops;
 	struct coord base;
 	struct bbox bbox;
+	struct vec *vec; /* undefined if not vector */
+	struct obj *obj; /* undefined if not object */
+	struct inst *outer; /* frame containing this item */
 	union {
 		struct {
 			const struct frame *ref;
-			struct inst *outer;
 		} frame;
 		const char *name;
 		struct coord end;
@@ -55,13 +57,17 @@
 
 
 int inst_vec(struct vec *vec, struct coord base);
-int inst_line(struct coord a, struct coord b);
-int inst_rect(struct coord a, struct coord b);
-int inst_pad(const char *name, struct coord a, struct coord b);
-int inst_arc(struct coord center, struct coord start, struct coord stop);
+int inst_line(struct obj *obj, struct coord a, struct coord b);
+int inst_rect(struct obj *obj, struct coord a, struct coord b);
+int inst_pad(struct obj *obj, const char *name, struct coord a, struct coord b);
+int inst_arc(struct obj *obj, struct coord center, struct coord start,
+    struct coord stop);
+
 void inst_begin_frame(const struct frame *frame, struct coord base); 
 void inst_end_frame(const struct frame *frame);
+
 struct bbox inst_get_bbox(void);
+
 void inst_reset(void);
 void inst_draw(struct draw_ctx *ctx);
 void inst_debug(void);

Modified: developers/werner/fped/obj.c
===================================================================
--- developers/werner/fped/obj.c	2009-07-28 21:50:48 UTC (rev 5332)
+++ developers/werner/fped/obj.c	2009-07-29 01:53:01 UTC (rev 5333)
@@ -131,12 +131,12 @@
 				return 0;
 			break;
 		case ot_line:
-			if (!inst_line(obj->base ? obj->base->pos : base,
+			if (!inst_line(obj, obj->base ? obj->base->pos : base,
 			    obj->u.line.other ? obj->u.line.other->pos : base))
 				return 0;
 			break;
 		case ot_rect:
-			if (!inst_rect(obj->base ? obj->base->pos : base,
+			if (!inst_rect(obj, obj->base ? obj->base->pos : base,
 			    obj->u.rect.other ? obj->u.rect.other->pos : base))
 				return 0;
 			break;
@@ -144,7 +144,7 @@
 			name = expand(obj->u.pad.name, frame);
 			if (!name)
 				return 0;
-			res = inst_pad(name,
+			res = inst_pad(obj, name,
 			    obj->base ? obj->base->pos : base,
 			    obj->u.pad.other ? obj->u.pad.other->pos : base);
 			free(name);
@@ -152,7 +152,7 @@
 				return 0;
 			break;
 		case ot_arc:
-			if (!inst_arc(obj->base ? obj->base->pos : base,
+			if (!inst_arc(obj, obj->base ? obj->base->pos : base,
 			    obj->u.arc.start ? obj->u.arc.start->pos : base,
 			    obj->u.arc.end ? obj->u.arc.end->pos : base))
 				return 0;




More information about the commitlog mailing list