r5411 - in trunk/eda/fped: . icons
werner at docs.openmoko.org
werner at docs.openmoko.org
Sat Aug 8 23:59:33 CEST 2009
Author: werner
Date: 2009-08-08 23:59:33 +0200 (Sat, 08 Aug 2009)
New Revision: 5411
Added:
trunk/eda/fped/icons/meas_off.fig
trunk/eda/fped/icons/stuff.fig
trunk/eda/fped/icons/stuff_off.fig
Modified:
trunk/eda/fped/Makefile
trunk/eda/fped/gui.c
trunk/eda/fped/gui.h
trunk/eda/fped/gui_meas.c
trunk/eda/fped/gui_tool.c
trunk/eda/fped/gui_util.c
trunk/eda/fped/gui_util.h
trunk/eda/fped/inst.c
Log:
- simplified tool_button and moved it from gui_tool.c to into gui_util.c
- moved make_image from gui_tool.c to into gui_util.c as well
- generalized set_frame_image and moved it to gui_util.c as set_image
- tool_button_press_event didn't check which button was pressed
- added buttons to switch visibility of frames, vectors, and measurements
- when creating a measurement through the GUI, don't invert if both points are
minima (otherwise, one could never get the text point the other way)
Modified: trunk/eda/fped/Makefile
===================================================================
--- trunk/eda/fped/Makefile 2009-08-08 19:44:17 UTC (rev 5410)
+++ trunk/eda/fped/Makefile 2009-08-08 21:59:33 UTC (rev 5411)
@@ -17,7 +17,8 @@
gui_tool.o gui_over.o gui_meas.o gui_frame.o
XPMS = point.xpm delete.xpm vec.xpm frame.xpm frame_locked.xpm frame_ready.xpm \
- line.xpm rect.xpm pad.xpm circ.xpm meas.xpm meas_x.xpm meas_y.xpm
+ line.xpm rect.xpm pad.xpm circ.xpm meas.xpm meas_x.xpm meas_y.xpm \
+ stuff.xpm stuff_off.xpm meas_off.xpm
CFLAGS_GTK = `pkg-config --cflags gtk+-2.0`
LIBS_GTK = `pkg-config --libs gtk+-2.0`
@@ -95,7 +96,7 @@
y.tab.o: y.tab.c
$(CC) -c $(CFLAGS) $(SLOPPY) y.tab.c
-gui_tool.o: $(XPMS:%=icons/%)
+gui_tool.o gui.o: $(XPMS:%=icons/%)
# ----- Dependencies ----------------------------------------------------------
Modified: trunk/eda/fped/gui.c
===================================================================
--- trunk/eda/fped/gui.c 2009-08-08 19:44:17 UTC (rev 5410)
+++ trunk/eda/fped/gui.c 2009-08-08 21:59:33 UTC (rev 5411)
@@ -24,10 +24,20 @@
#include "gui_frame.h"
#include "gui.h"
+#include "icons/stuff.xpm"
+#include "icons/stuff_off.xpm"
+#include "icons/meas.xpm"
+#include "icons/meas_off.xpm"
+
GtkWidget *root;
+int show_stuff = 1;
+int show_meas = 1;
+
static GtkWidget *frames_box;
+static GtkWidget *ev_stuff, *ev_meas;
+static GtkWidget *stuff_image[2], *meas_image[2];
/* ----- menu bar ---------------------------------------------------------- */
@@ -39,13 +49,13 @@
}
-static void make_menu_bar(GtkWidget *vbox)
+static void make_menu_bar(GtkWidget *hbox)
{
GtkWidget *bar;
GtkWidget *file_menu, *file, *quit, *save;
bar = gtk_menu_bar_new();
- gtk_box_pack_start(GTK_BOX(vbox), bar, FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(hbox), bar, TRUE, TRUE, 0);
file_menu = gtk_menu_new();
@@ -65,6 +75,67 @@
}
+static gboolean toggle_stuff(GtkWidget *widget, GdkEventButton *event,
+ gpointer data)
+{
+ switch (event->button) {
+ case 1:
+ show_stuff = !show_stuff;
+ set_image(ev_stuff, stuff_image[show_stuff]);
+ redraw();
+ break;
+ }
+ return TRUE;
+}
+
+
+static gboolean toggle_meas(GtkWidget *widget, GdkEventButton *event,
+ gpointer data)
+{
+ switch (event->button) {
+ case 1:
+ show_meas = !show_meas;
+ set_image(ev_meas, meas_image[show_meas]);
+ redraw();
+ break;
+ }
+ return TRUE;
+}
+
+
+static void make_tool_bar(GtkWidget *hbox, GdkDrawable *drawable)
+{
+ GtkWidget *bar;
+
+ bar = gtk_toolbar_new();
+ gtk_box_pack_end(GTK_BOX(hbox), bar, TRUE, TRUE, 0);
+ //gtk_box_pack_end(GTK_BOX(hbox), bar, FALSE, FALSE, 0);
+ gtk_toolbar_set_style(GTK_TOOLBAR(bar), GTK_TOOLBAR_ICONS);
+
+ ev_stuff = tool_button(bar, drawable, NULL, toggle_stuff, NULL);
+ ev_meas = tool_button(bar, drawable, NULL, toggle_meas, NULL);
+
+ stuff_image[0] = gtk_widget_ref(make_image(drawable, xpm_stuff_off));
+ stuff_image[1] = gtk_widget_ref(make_image(drawable, xpm_stuff));
+ meas_image[0] = gtk_widget_ref(make_image(drawable, xpm_meas_off));
+ meas_image[1] = gtk_widget_ref(make_image(drawable, xpm_meas));
+
+ set_image(ev_stuff, stuff_image[show_stuff]);
+ set_image(ev_meas, meas_image[show_meas]);
+}
+
+
+static void make_top_bar(GtkWidget *vbox)
+{
+ GtkWidget *hbox;
+
+ hbox = gtk_hbox_new(FALSE, 0);
+ make_menu_bar(hbox);
+ make_tool_bar(hbox, root->window);
+ gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
+}
+
+
/* ----- central screen area ----------------------------------------------- */
@@ -125,7 +196,7 @@
vbox = gtk_vbox_new(FALSE, 0);
gtk_container_add(GTK_CONTAINER(window), vbox);
- make_menu_bar(vbox);
+ make_top_bar(vbox);
make_center_area(vbox);
make_status_area(vbox);
}
Modified: trunk/eda/fped/gui.h
===================================================================
--- trunk/eda/fped/gui.h 2009-08-08 19:44:17 UTC (rev 5410)
+++ trunk/eda/fped/gui.h 2009-08-08 21:59:33 UTC (rev 5411)
@@ -18,6 +18,8 @@
extern GtkWidget *root;
+extern int show_stuff;
+extern int show_meas;
/* update everything after a model change */
Modified: trunk/eda/fped/gui_meas.c
===================================================================
--- trunk/eda/fped/gui_meas.c 2009-08-08 19:44:17 UTC (rev 5410)
+++ trunk/eda/fped/gui_meas.c 2009-08-08 21:59:33 UTC (rev 5411)
@@ -286,8 +286,10 @@
default:
abort();
}
- meas->inverted = meas_dsc->lt(from->u.rect.end, to->u.rect.end) !=
- (mode == min_to_next_or_max);
+ meas->inverted =
+ mode == min_to_next_or_max && is_min(meas_dsc->lt, to) ? 0 :
+ meas_dsc->lt(from->u.rect.end, to->u.rect.end) !=
+ (mode == min_to_next_or_max);
{
char *sm[] = { "min_to", "max_to", "next_to" };
char *st[] = { "nxy", "nx", "ny", "mxy", "mx", "my" };
Modified: trunk/eda/fped/gui_tool.c
===================================================================
--- trunk/eda/fped/gui_tool.c 2009-08-08 19:44:17 UTC (rev 5410)
+++ trunk/eda/fped/gui_tool.c 2009-08-08 21:59:33 UTC (rev 5411)
@@ -510,17 +510,9 @@
static struct frame *locked_frame = NULL;
-static void remove_child(GtkWidget *widget, gpointer data)
-{
- gtk_container_remove(GTK_CONTAINER(data), widget);
-}
-
-
static void set_frame_image(GtkWidget *image)
{
- gtk_container_foreach(GTK_CONTAINER(ev_frame), remove_child, ev_frame);
- gtk_container_add(GTK_CONTAINER(ev_frame), image);
- gtk_widget_show_all(ev_frame);
+ set_image(ev_frame, image);
}
@@ -851,66 +843,15 @@
static gboolean tool_button_press_event(GtkWidget *widget,
GdkEventButton *event, gpointer data)
{
- tool_select(widget, data);
+ switch (event->button) {
+ case 1:
+ tool_select(widget, data);
+ break;
+ }
return TRUE;
}
-static GtkWidget *make_image(GdkDrawable *drawable, char **xpm)
-{
- GdkPixmap *pixmap;
- GtkWidget *image;
-
- pixmap = gdk_pixmap_create_from_xpm_d(drawable, NULL, NULL, xpm);
- image = gtk_image_new_from_pixmap(pixmap, NULL);
- gtk_misc_set_padding(GTK_MISC(image), 1, 1);
- return image;
-}
-
-
-static GtkWidget *tool_button(GtkWidget *bar, GdkDrawable *drawable,
- char **xpm, GtkWidget *last_evbox, struct tool_ops *ops)
-{
- GtkWidget *image, *evbox;
- GtkToolItem *item;
- GtkToolItem *last = NULL;
-
- if (last_evbox)
- last = GTK_TOOL_ITEM(gtk_widget_get_ancestor(last_evbox,
- GTK_TYPE_TOOL_ITEM));
-
-/*
- * gtk_radio_tool_button_new_from_widget is *huge*. we try to do things in a
- * more compact way.
- */
-#if 0
- if (last)
- item = gtk_radio_tool_button_new_from_widget(
- GTK_RADIO_TOOL_BUTTON(last));
- else
- item = gtk_radio_tool_button_new(NULL);
- gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(item), image);
-#else
- evbox = gtk_event_box_new();
- if (xpm) {
- image = make_image(drawable, xpm);
- gtk_container_add(GTK_CONTAINER(evbox), image);
- }
- g_signal_connect(G_OBJECT(evbox), "button_press_event",
- G_CALLBACK(tool_button_press_event), ops);
-
- item = gtk_tool_item_new();
- gtk_container_add(GTK_CONTAINER(item), evbox);
-
- gtk_container_set_border_width(GTK_CONTAINER(item), 0);
-#endif
-
- gtk_toolbar_insert(GTK_TOOLBAR(bar), item, -1);
-
- return evbox;
-}
-
-
static void tool_separator(GtkWidget *bar)
{
GtkToolItem *item;
@@ -924,27 +865,36 @@
GtkWidget *gui_setup_tools(GdkDrawable *drawable)
{
GtkWidget *bar;
- GtkWidget *last;
bar = gtk_toolbar_new();
gtk_toolbar_set_style(GTK_TOOLBAR(bar), GTK_TOOLBAR_ICONS);
gtk_toolbar_set_orientation(GTK_TOOLBAR(bar),
GTK_ORIENTATION_VERTICAL);
- ev_point = tool_button(bar, drawable, xpm_point, NULL, NULL);
- last = tool_button(bar, drawable, xpm_delete, ev_point, &delete_ops);
+ ev_point = tool_button(bar, drawable, xpm_point,
+ tool_button_press_event, NULL);
+ tool_button(bar, drawable, xpm_delete,
+ tool_button_press_event, &delete_ops);
tool_separator(bar);
- last = tool_button(bar, drawable, xpm_vec, last, &vec_ops);
- ev_frame = tool_button(bar, drawable, NULL, last, &frame_ops);
- last = ev_frame;
- last = tool_button(bar, drawable, xpm_pad, last, &pad_ops);
- last = tool_button(bar, drawable, xpm_line, last, &line_ops);
- last = tool_button(bar, drawable, xpm_rect, last, &rect_ops);
- last = tool_button(bar, drawable, xpm_circ, last, &circ_ops);
+ tool_button(bar, drawable, xpm_vec,
+ tool_button_press_event, &vec_ops);
+ ev_frame = tool_button(bar, drawable, NULL,
+ tool_button_press_event, &frame_ops);
+ tool_button(bar, drawable, xpm_pad,
+ tool_button_press_event, &pad_ops);
+ tool_button(bar, drawable, xpm_line,
+ tool_button_press_event, &line_ops);
+ tool_button(bar, drawable, xpm_rect,
+ tool_button_press_event, &rect_ops);
+ tool_button(bar, drawable, xpm_circ,
+ tool_button_press_event, &circ_ops);
tool_separator(bar);
- last = tool_button(bar, drawable, xpm_meas, last, &meas_ops);
- last = tool_button(bar, drawable, xpm_meas_x, last, &meas_ops_x);
- last = tool_button(bar, drawable, xpm_meas_y, last, &meas_ops_y);
+ tool_button(bar, drawable, xpm_meas,
+ tool_button_press_event, &meas_ops);
+ tool_button(bar, drawable, xpm_meas_x,
+ tool_button_press_event, &meas_ops_x);
+ tool_button(bar, drawable, xpm_meas_y,
+ tool_button_press_event, &meas_ops_y);
frame_image = gtk_widget_ref(make_image(drawable, xpm_frame));
frame_image_locked =
Modified: trunk/eda/fped/gui_util.c
===================================================================
--- trunk/eda/fped/gui_util.c 2009-08-08 19:44:17 UTC (rev 5410)
+++ trunk/eda/fped/gui_util.c 2009-08-08 21:59:33 UTC (rev 5411)
@@ -161,6 +161,67 @@
}
+/* ----- generate a tool button with an XPM image -------------------------- */
+
+
+GtkWidget *make_image(GdkDrawable *drawable, char **xpm)
+{
+ GdkPixmap *pixmap;
+ GtkWidget *image;
+
+ pixmap = gdk_pixmap_create_from_xpm_d(drawable, NULL, NULL, xpm);
+ image = gtk_image_new_from_pixmap(pixmap, NULL);
+ gtk_misc_set_padding(GTK_MISC(image), 1, 1);
+ return image;
+}
+
+
+static void remove_child(GtkWidget *widget, gpointer data)
+{
+ gtk_container_remove(GTK_CONTAINER(data), widget);
+}
+
+
+void set_image(GtkWidget *widget, GtkWidget *image)
+{
+ gtk_container_foreach(GTK_CONTAINER(widget), remove_child, widget);
+ gtk_container_add(GTK_CONTAINER(widget), image);
+ gtk_widget_show_all(widget);
+}
+
+
+GtkWidget *tool_button(GtkWidget *bar, GdkDrawable *drawable, char **xpm,
+ gboolean (*cb)(GtkWidget *widget, GdkEventButton *event, gpointer data),
+ gpointer data)
+{
+ GtkWidget *image, *evbox;
+ GtkToolItem *item;
+
+ /*
+ * gtk_radio_tool_button_new_from_widget is *huge*. We try to do things
+ * in a
+ * more compact way.
+ */
+
+ evbox = gtk_event_box_new();
+ if (xpm) {
+ image = make_image(drawable, xpm);
+ gtk_container_add(GTK_CONTAINER(evbox), image);
+ }
+ g_signal_connect(G_OBJECT(evbox), "button_press_event",
+ G_CALLBACK(cb), data);
+
+ item = gtk_tool_item_new();
+ gtk_container_add(GTK_CONTAINER(item), evbox);
+
+ gtk_container_set_border_width(GTK_CONTAINER(item), 0);
+
+ gtk_toolbar_insert(GTK_TOOLBAR(bar), item, -1);
+
+ return evbox;
+}
+
+
/* ----- render a text string ---------------------------------------------- */
Modified: trunk/eda/fped/gui_util.h
===================================================================
--- trunk/eda/fped/gui_util.h 2009-08-08 19:44:17 UTC (rev 5410)
+++ trunk/eda/fped/gui_util.h 2009-08-08 21:59:33 UTC (rev 5411)
@@ -56,6 +56,12 @@
GtkWidget *box_of_label(GtkWidget *label);
void label_in_box_bg(GtkWidget *box, const char *color);
+GtkWidget *make_image(GdkDrawable *drawable, char **xpm);
+void set_image(GtkWidget *widget, GtkWidget *image);
+GtkWidget *tool_button(GtkWidget *bar, GdkDrawable *drawable, char **xpm,
+ gboolean (*cb)(GtkWidget *widget, GdkEventButton *event, gpointer data),
+ gpointer data);
+
void render_text(GdkDrawable *da, GdkGC *gc, int x, int y, double angle,
const char *s, const char *font, double xalign, double yalign,
int xmax, int ymax);
Added: trunk/eda/fped/icons/meas_off.fig
===================================================================
--- trunk/eda/fped/icons/meas_off.fig (rev 0)
+++ trunk/eda/fped/icons/meas_off.fig 2009-08-08 21:59:33 UTC (rev 5411)
@@ -0,0 +1,19 @@
+#FIG 3.2 Produced by xfig version 3.2.5a
+Landscape
+Center
+Inches
+A4
+100.00
+Single
+-2
+1200 2
+2 2 0 1 0 7 50 -1 10 0.000 0 0 -1 0 0 5
+ 3600 2400 6000 2400 6000 4800 3600 4800 3600 2400
+2 1 0 10 0 7 40 -1 -1 0.000 0 0 -1 0 0 2
+ 3900 3600 4200 4200
+2 1 0 10 0 7 40 -1 -1 0.000 0 0 -1 1 1 2
+ 0 0 10.00 450.00 450.00
+ 0 0 10.00 450.00 450.00
+ 4050 3900 5550 3150
+2 1 0 10 0 7 40 -1 -1 0.000 0 0 -1 0 0 2
+ 5400 2850 5700 3450
Added: trunk/eda/fped/icons/stuff.fig
===================================================================
--- trunk/eda/fped/icons/stuff.fig (rev 0)
+++ trunk/eda/fped/icons/stuff.fig 2009-08-08 21:59:33 UTC (rev 5411)
@@ -0,0 +1,17 @@
+#FIG 3.2 Produced by xfig version 3.2.5a
+Landscape
+Center
+Inches
+A4
+100.00
+Single
+-2
+1200 2
+0 32 #c0c000
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+ 3600 2400 6000 2400 6000 4800 3600 4800 3600 2400
+2 1 0 10 32 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 1 1 10.00 300.00 300.00
+ 3900 4515 5700 3315
+2 1 0 10 12 7 50 -1 -1 0.000 0 1 -1 0 0 3
+ 3900 3600 3900 2760 5700 2760
Added: trunk/eda/fped/icons/stuff_off.fig
===================================================================
--- trunk/eda/fped/icons/stuff_off.fig (rev 0)
+++ trunk/eda/fped/icons/stuff_off.fig 2009-08-08 21:59:33 UTC (rev 5411)
@@ -0,0 +1,17 @@
+#FIG 3.2 Produced by xfig version 3.2.5a
+Landscape
+Center
+Inches
+A4
+100.00
+Single
+-2
+1200 2
+0 32 #c0c000
+2 1 0 10 0 7 40 -1 -1 0.000 0 0 -1 1 0 2
+ 1 1 10.00 300.00 300.00
+ 3900 4515 5700 3315
+2 1 0 10 0 7 40 -1 -1 0.000 0 1 -1 0 0 3
+ 3900 3600 3900 2760 5700 2760
+2 2 0 1 0 7 50 -1 10 0.000 0 0 -1 0 0 5
+ 3600 2400 6000 2400 6000 4800 3600 4800 3600 2400
Modified: trunk/eda/fped/inst.c
===================================================================
--- trunk/eda/fped/inst.c 2009-08-08 19:44:17 UTC (rev 5410)
+++ trunk/eda/fped/inst.c 2009-08-08 21:59:33 UTC (rev 5411)
@@ -24,6 +24,7 @@
#include "gui_status.h"
#include "gui_tool.h"
#include "gui_inst.h"
+#include "gui.h"
#include "inst.h"
@@ -83,6 +84,23 @@
#define IS_ACTIVE ((active_set & 1))
+/* ----- selective visibility ---------------------------------------------- */
+
+
+static int show(enum inst_prio prio)
+{
+ switch (prio) {
+ case ip_vec:
+ case ip_frame:
+ return show_stuff;
+ case ip_meas:
+ return show_meas;
+ default:
+ return 1;
+ }
+}
+
+
/* ----- selection of items not on the canvas ------------------------------ */
@@ -142,6 +160,8 @@
edit_nothing();
selected_inst = NULL;
FOR_INST_PRIOS_DOWN(prio) {
+ if (!show(prio))
+ continue;
for (inst = insts[prio]; inst; inst = inst->next) {
if (!inst->active || !inst->ops->distance)
continue;
@@ -155,6 +175,9 @@
goto selected;
}
+ if (!show_stuff)
+ return 0;
+
/* give vectors a second chance */
for (inst = insts[ip_vec]; inst; inst = inst->next) {
@@ -828,15 +851,17 @@
struct inst *inst;
FOR_INSTS_UP(prio, inst)
- if (!inst->active && inst->ops->draw)
+ if (show(prio) && !inst->active && inst->ops->draw)
inst->ops->draw(inst);
FOR_INSTS_UP(prio, inst)
- if (prio != ip_frame && inst->active &&
+ if (show(prio) && prio != ip_frame && inst->active &&
inst != selected_inst && inst->ops->draw)
inst->ops->draw(inst);
- for (inst = insts[ip_frame]; inst; inst = inst->next)
- if (inst->active && inst != selected_inst && inst->ops->draw)
- inst->ops->draw(inst);
+ if (show_stuff)
+ for (inst = insts[ip_frame]; inst; inst = inst->next)
+ if (inst->active && inst != selected_inst &&
+ inst->ops->draw)
+ inst->ops->draw(inst);
if (selected_inst && selected_inst->ops->draw)
selected_inst->ops->draw(selected_inst);
}
More information about the commitlog
mailing list