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