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