r5336 - developers/werner/fped

werner at docs.openmoko.org werner at docs.openmoko.org
Wed Jul 29 20:59:27 CEST 2009


Author: werner
Date: 2009-07-29 20:59:26 +0200 (Wed, 29 Jul 2009)
New Revision: 5336

Added:
   developers/werner/fped/gui_util.c
   developers/werner/fped/gui_util.h
Modified:
   developers/werner/fped/Makefile
   developers/werner/fped/fped.c
   developers/werner/fped/gui.c
   developers/werner/fped/gui.h
   developers/werner/fped/gui_status.c
   developers/werner/fped/gui_style.c
   developers/werner/fped/gui_style.h
   developers/werner/fped/qfn.fpd
Log:
- slight Makefile cleanup
- cleaned up variable display (on-going)



Modified: developers/werner/fped/Makefile
===================================================================
--- developers/werner/fped/Makefile	2009-07-29 10:59:02 UTC (rev 5335)
+++ developers/werner/fped/Makefile	2009-07-29 18:59:26 UTC (rev 5336)
@@ -13,7 +13,7 @@
 OBJS = fped.o expr.o coord.o obj.o inst.o util.o error.o \
        unparse.o \
        cpp.o lex.yy.o y.tab.o \
-       gui.o gui_style.o gui_inst.o gui_status.o gui_canvas.o
+       gui.o gui_util.o gui_style.o gui_inst.o gui_status.o gui_canvas.o
 
 CFLAGS_GTK = `pkg-config --cflags gtk+-2.0`
 LIBS_GTK = `pkg-config --libs gtk+-2.0`
@@ -60,6 +60,8 @@
 
 # ----- Rules -----------------------------------------------------------------
 
+.PHONY:		all dep depend clean
+
 all:		fped
 
 fped:		$(OBJS)
@@ -89,4 +91,4 @@
 # ----- Cleanup ---------------------------------------------------------------
 
 clean:
-		rm -f $(OBJS) lex.yy.c y.tab.c y.tab.h y.output
+		rm -f $(OBJS) lex.yy.c y.tab.c y.tab.h y.output .depend

Modified: developers/werner/fped/fped.c
===================================================================
--- developers/werner/fped/fped.c	2009-07-29 10:59:02 UTC (rev 5335)
+++ developers/werner/fped/fped.c	2009-07-29 18:59:26 UTC (rev 5336)
@@ -42,7 +42,7 @@
 	}
 	if (!instantiate())
 		return 1;
-	inst_debug();
+//	inst_debug();
 	error = gui_main(argc, argv);
 	if (error)
 		return error;

Modified: developers/werner/fped/gui.c
===================================================================
--- developers/werner/fped/gui.c	2009-07-29 10:59:02 UTC (rev 5335)
+++ developers/werner/fped/gui.c	2009-07-29 18:59:26 UTC (rev 5336)
@@ -17,11 +17,17 @@
 
 #include "obj.h"
 #include "unparse.h"
+#include "gui_util.h"
 #include "gui_status.h"
 #include "gui_canvas.h"
 #include "gui.h"
 
 
+GtkWidget *root;
+
+static GtkWidget *vars_box;
+
+
 static void make_menu_bar(GtkWidget *vbox)
 {
 	GtkWidget *bar;
@@ -80,6 +86,30 @@
 }
 
 
+static void build_assignment(GtkWidget *vbox, struct frame *frame,
+     struct table *table)
+{
+	GtkWidget *hbox;
+	char *expr;
+
+	if (!table->vars || table->vars->next)
+		return;
+	if (!table->rows || table->rows->next)
+		return;
+
+	hbox = gtk_hbox_new(FALSE, 0);
+	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
+	gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new(table->vars->name),
+	    FALSE, FALSE, 0);
+	gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new(" = "),
+	    FALSE, FALSE, 0);
+	expr = unparse(table->rows->values->expr);
+	gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new(expr),
+	    FALSE, FALSE, 0);
+	free(expr);
+}
+
+
 static void build_table(GtkWidget *vbox, struct frame *frame,
      struct table *table)
 {
@@ -95,15 +125,20 @@
 	for (row = table->rows; row; row = row->next)
 		n_rows++;
 
+	if (n_vars == 1 && n_rows == 1)
+		return;
+
 	tab = gtk_table_new(n_rows+1, n_vars, FALSE);
+//	gtk_misc_set_alignment(GTK_MISC(tab), 0, 0);
 	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,
+		field = label_in_box_new(var->name);
+		label_in_box_bg(field, "pink");
+		gtk_table_attach_defaults(GTK_TABLE(tab), box_of_label(field),
 		    n_vars, n_vars+1, 0, 1);
 		n_vars++;
 	}
@@ -112,9 +147,10 @@
 		n_vars = 0;
 		for (value = row->values; value; value = value->next) {
 			expr = unparse(value->expr);
-			field = gtk_label_new(expr);
+			field = label_in_box_new(expr);
 			free(expr);
-			gtk_table_attach_defaults(GTK_TABLE(tab), field,
+			gtk_table_attach_defaults(GTK_TABLE(tab),
+			    box_of_label(field),
 			    n_vars, n_vars+1,
 			    n_rows+1, n_rows+2);
 			n_vars++;
@@ -127,8 +163,25 @@
 static void build_loop(GtkWidget *vbox, struct frame *frame,
      struct loop *loop)
 {
-	gtk_box_pack_start(GTK_BOX(vbox), gtk_label_new(loop->var),
+	GtkWidget *hbox;
+	char *expr;
+
+	hbox = gtk_hbox_new(FALSE, 0);
+	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
+	gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new(loop->var),
 	    FALSE, FALSE, 0);
+	gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new(" = "),
+	    FALSE, FALSE, 0);
+	expr = unparse(loop->from);
+	gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new(expr),
+	    FALSE, FALSE, 0);
+	free(expr);
+	gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new(" ... "),
+	    FALSE, FALSE, 0);
+	expr = unparse(loop->to);
+	gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new(expr),
+	    FALSE, FALSE, 0);
+	free(expr);
 }
 
 
@@ -137,20 +190,23 @@
 	struct table *table;
 	struct loop *loop;
 
+	destroy_all_children(GTK_CONTAINER(vbox));
 	for (table = frame->tables; table; table = table->next) {
 		add_sep(vbox, 3);
+		build_assignment(vbox, frame, table);
 		build_table(vbox, frame, table);
 	}
 	for (loop = frame->loops; loop; loop = loop->next) {
 		add_sep(vbox, 3);
 		build_loop(vbox, frame, loop);
 	}
+	gtk_widget_show_all(vbox);
 }
 
 
 static void make_center_area(GtkWidget *vbox)
 {
-	GtkWidget *hbox, *vars, *paned, *v2box;
+	GtkWidget *hbox, *vars, *paned;
 	GtkWidget *frame_list;
 	GtkTreeSelection *sel;
 
@@ -178,23 +234,26 @@
 
 	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);
+	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(vars),
+	    GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+	gtk_widget_set_size_request(vars, 150, 100);
+	vars_box = gtk_vbox_new(FALSE, 0);
 
+	gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(vars),
+	    vars_box);
+
 	/* Canvas */
 
 	gtk_paned_add2(GTK_PANED(paned), make_canvas());
 }
 
 
-static void make_screen(GtkWidget *root)
+static void make_screen(GtkWidget *window)
 {
 	GtkWidget *vbox;
 
 	vbox = gtk_vbox_new(FALSE, 0);
-	gtk_container_add(GTK_CONTAINER(root), vbox);
+	gtk_container_add(GTK_CONTAINER(window), vbox);
 
 	make_menu_bar(vbox);
 	make_center_area(vbox);
@@ -211,20 +270,23 @@
 
 int gui_main(int argc, char **argv)
 {
-	GtkWidget *root;
-
 	root = gtk_window_new(GTK_WINDOW_TOPLEVEL);
 	gtk_window_set_position(GTK_WINDOW(root), GTK_WIN_POS_CENTER);
 	gtk_window_set_default_size(GTK_WINDOW(root), 600, 400);
 	gtk_window_set_title(GTK_WINDOW(root), "fped");
 
+	/* get root->window */
+	gtk_widget_show_all(root);
+
 	g_signal_connect_swapped(G_OBJECT(root), "destroy",
 	    G_CALLBACK(gtk_main_quit), NULL);
 
 	make_screen(root);
+	build_vars(vars_box, frames);
 
 	gtk_widget_show_all(root);
 
+
 	gtk_main();
 
 	return 0;

Modified: developers/werner/fped/gui.h
===================================================================
--- developers/werner/fped/gui.h	2009-07-29 10:59:02 UTC (rev 5335)
+++ developers/werner/fped/gui.h	2009-07-29 18:59:26 UTC (rev 5336)
@@ -17,6 +17,8 @@
 #include <gtk/gtk.h>
 
 
+extern GtkWidget *root;
+
 int gui_init(int *argc, char ***argv);
 int gui_main(int argc, char **argv);
 

Modified: developers/werner/fped/gui_status.c
===================================================================
--- developers/werner/fped/gui_status.c	2009-07-29 10:59:02 UTC (rev 5335)
+++ developers/werner/fped/gui_status.c	2009-07-29 18:59:26 UTC (rev 5336)
@@ -15,6 +15,7 @@
 #include <stdio.h>
 #include <gtk/gtk.h>
 
+#include "gui_util.h"
 #include "gui_status.h"
 
 
@@ -68,10 +69,11 @@
 	v2box = gtk_vbox_new(FALSE, 0);
 	gtk_box_pack_start(GTK_BOX(hbox), v2box, TRUE, TRUE, 1);
 
-	status_name = gtk_label_new("<name>");
-	gtk_box_pack_start(GTK_BOX(v2box), status_name, FALSE, FALSE, 1);
-	/* @@@ how to make label fill the space on the right - add a hbox ? */
-//	gtk_label_set_justify(GTK_LABEL(status_name), GTK_JUSTIFY_LEFT);
+	status_name = label_in_box_new("<name>");
+	gtk_box_pack_start(GTK_BOX(v2box), box_of_label(status_name),
+	    FALSE, FALSE, 1);
+
+	gtk_misc_set_alignment(GTK_MISC(status_name), 0, 0);
 	gtk_label_set_selectable(GTK_LABEL(status_name), TRUE);
 
 	status_entry = gtk_entry_new();

Modified: developers/werner/fped/gui_style.c
===================================================================
--- developers/werner/fped/gui_style.c	2009-07-29 10:59:02 UTC (rev 5335)
+++ developers/werner/fped/gui_style.c	2009-07-29 18:59:26 UTC (rev 5336)
@@ -11,54 +11,38 @@
  */
 
 
-#include <stdlib.h>
 #include <gtk/gtk.h>
 
+#include "gui_util.h"
+#include "gui.h"
 #include "gui_style.h"
 
 
-#define	GC(spec)	gc(drawable, (spec))
-
-
-static GdkColor get_color(GdkColormap *cmap, const char *spec)
+static GdkGC *gc(const char *spec)
 {
-	GdkColor color;
-
-	if (!gdk_color_parse(spec, &color))
-		abort();
-	if (!gdk_colormap_alloc_color(cmap, &color, FALSE, TRUE))
-		abort();
-	return color;
-}
-
-
-static GdkGC *gc(GdkDrawable *drawable, const char *spec)
-{
 	GdkGCValues gc_values = {
-		.background = get_color(gdk_drawable_get_colormap(drawable),
-		    "black"),
-		.foreground = get_color(gdk_drawable_get_colormap(drawable),
-		    spec),
+		.background = get_color("black"),
+		.foreground = get_color(spec),
 	};
 
-	return gdk_gc_new_with_values(drawable, &gc_values,
+	return gdk_gc_new_with_values(root->window, &gc_values,
 	     GDK_GC_FOREGROUND | GDK_GC_BACKGROUND);
 }
 
 
 void gui_setup_style(GdkDrawable *drawable)
 {
-	gc_bg = GC("#000000");
-	gc_vec_bg = GC("#ffff00");
-	gc_vec_fg = GC("#ffff00");
-	gc_line_bg = GC("#ffffff");
-	gc_line_fg = GC("#ffffff");
+	gc_bg = gc("#000000");
+	gc_vec_bg = gc("#ffff00");
+	gc_vec_fg = gc("#ffff00");
+	gc_line_bg = gc("#ffffff");
+	gc_line_fg = gc("#ffffff");
 	gc_rect_bg = gc_line_bg;
 	gc_rect_fg = gc_line_fg;
-	gc_pad_bg = GC("#ff0000");
-	gc_pad_fg = GC("#ff0000");
+	gc_pad_bg = gc("#ff0000");
+	gc_pad_fg = gc("#ff0000");
 	gc_arc_bg = gc_line_bg;
 	gc_arc_fg = gc_line_fg;
-	gc_frame_bg = GC("#00ff00");
-	gc_frame_fg = GC("#00ff00");
+	gc_frame_bg = gc("#00ff00");
+	gc_frame_fg = gc("#00ff00");
 }

Modified: developers/werner/fped/gui_style.h
===================================================================
--- developers/werner/fped/gui_style.h	2009-07-29 10:59:02 UTC (rev 5335)
+++ developers/werner/fped/gui_style.h	2009-07-29 18:59:26 UTC (rev 5336)
@@ -14,6 +14,9 @@
 #ifndef GUI_STYLE_H
 #define	GUI_STYLE_H
 
+#include <gtk/gtk.h>
+
+
 #define	CANVAS_CLEARANCE	10
 
 #define	VEC_ARROW_LEN		10
@@ -33,6 +36,7 @@
 GdkGC *gc_arc_bg, *gc_arc_fg;
 GdkGC *gc_frame_bg, *gc_frame_fg;
 
+
 void gui_setup_style(GdkDrawable *drawable);
 
 #endif /* !GUI_STYLE_H */

Added: developers/werner/fped/gui_util.c
===================================================================
--- developers/werner/fped/gui_util.c	                        (rev 0)
+++ developers/werner/fped/gui_util.c	2009-07-29 18:59:26 UTC (rev 5336)
@@ -0,0 +1,72 @@
+/*
+ * gui_util.c - GUI helper functions
+ *
+ * Written 2009 by Werner Almesberger
+ * Copyright 2009 by Werner Almesberger
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ */
+
+
+#include <stdlib.h>
+#include <gtk/gtk.h>
+
+#include "gui.h"
+#include "gui_util.h"
+
+
+GdkColor get_color(const char *spec)
+{
+	GdkColormap *cmap;
+	GdkColor color;
+
+	cmap = gdk_drawable_get_colormap(root->window);
+	if (!gdk_color_parse(spec, &color))
+		abort();
+	if (!gdk_colormap_alloc_color(cmap, &color, FALSE, TRUE))
+		abort();
+	return color;
+}
+
+
+GtkWidget *label_in_box_new(const char *s)
+{
+	GtkWidget *evbox, *label;
+
+	evbox = gtk_event_box_new();
+	label = gtk_label_new(s);
+	gtk_misc_set_padding(GTK_MISC(label), 1, 1);
+	gtk_container_add(GTK_CONTAINER(evbox), label);
+	return label;
+}
+
+
+GtkWidget *box_of_label(GtkWidget *label)
+{
+	return gtk_widget_get_ancestor(label, GTK_TYPE_EVENT_BOX);
+}
+
+
+void label_in_box_bg(GtkWidget *label, const char *color)
+{
+	GtkWidget *box;
+	GdkColor col = get_color(color);
+
+	box = box_of_label(label);
+	gtk_widget_modify_bg(box, GTK_STATE_NORMAL, &col);
+}
+
+
+static void destroy_callback(GtkWidget *widget, gpointer data)
+{
+	gtk_widget_destroy(widget);
+}
+
+
+void destroy_all_children(GtkContainer *container)
+{
+	gtk_container_foreach(container, destroy_callback, NULL);
+}

Added: developers/werner/fped/gui_util.h
===================================================================
--- developers/werner/fped/gui_util.h	                        (rev 0)
+++ developers/werner/fped/gui_util.h	2009-07-29 18:59:26 UTC (rev 5336)
@@ -0,0 +1,26 @@
+/*
+ * gui_util.h - GUI helper functions
+ *
+ * Written 2009 by Werner Almesberger
+ * Copyright 2009 by Werner Almesberger
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ */
+
+
+#ifndef GUI_UTIL_H
+#define	GUI_UTIL_H
+
+#include <gtk/gtk.h>
+
+
+GdkColor get_color(const char *spec);
+GtkWidget *label_in_box_new(const char *s);
+GtkWidget *box_of_label(GtkWidget *label);
+void label_in_box_bg(GtkWidget *box, const char *color);
+void destroy_all_children(GtkContainer *container);
+
+#endif /* !GUI_UTIL_H */

Modified: developers/werner/fped/qfn.fpd
===================================================================
--- developers/werner/fped/qfn.fpd	2009-07-29 10:59:02 UTC (rev 5335)
+++ developers/werner/fped/qfn.fpd	2009-07-29 18:59:26 UTC (rev 5336)
@@ -1,4 +1,11 @@
-// http://www.nxp.com/acrobat/packages/footprint/SOT616-1_fp_reflow.pdf
+/*
+ * Example of a QFN package (and general construction site to experiment with
+ * fped features during development)
+ *
+ * Everything you see here is likely to change sooner or later.
+ */
+ * http://www.nxp.com/acrobat/packages/footprint/SOT616-1_fp_reflow.pdf
+ */
 
 .frame pad_up {
 	c = .vec @ -D/2, 0mm
@@ -9,6 +16,12 @@
 
 N = 24
 
+/*
+ * Note that this table is not a great example because it contains lots of
+ * fields we don't really need for iterations. But it's useful for driving
+ * the GUI to extremes.
+ */
+
 .table
     { P, Ax, Ay, Bx, By, C, D, SLx, SLy, SPx_tot, SPy_tot, SPx, SPy, Gx, Gy, Hx, Hy }
     { 0.5mm, 5mm, 5mm, 3.2mm, 3.2mm, 0.9mm, 0.24mm, 2.1mm, 2.1mm, 1.2mm,




More information about the commitlog mailing list