r5424 - trunk/eda/fped

werner at docs.openmoko.org werner at docs.openmoko.org
Wed Aug 12 13:26:59 CEST 2009


Author: werner
Date: 2009-08-12 13:26:59 +0200 (Wed, 12 Aug 2009)
New Revision: 5424

Modified:
   trunk/eda/fped/gui_frame.c
   trunk/eda/fped/gui_style.h
   trunk/eda/fped/inst.c
   trunk/eda/fped/inst.h
Log:
- changed item list font to Courier, which looks a lot tidier
- active items can now be selected from the item list (selecting inactive items
  will be a little harder)



Modified: trunk/eda/fped/gui_frame.c
===================================================================
--- trunk/eda/fped/gui_frame.c	2009-08-12 10:45:52 UTC (rev 5423)
+++ trunk/eda/fped/gui_frame.c	2009-08-12 11:26:59 UTC (rev 5424)
@@ -25,6 +25,7 @@
 #include "gui_style.h"
 #include "gui_status.h"
 #include "gui_tool.h"
+#include "gui_canvas.h"
 #include "gui.h"
 #include "gui_frame.h"
 
@@ -948,8 +949,40 @@
 }
 
 
-static GtkWidget *item_label(GtkWidget *tab, char *s, int col, int row)
+static gboolean item_select_vec(GtkWidget *widget, GdkEventButton *event,
+     gpointer data)
 {
+	const struct vec *vec = data;
+
+	switch (event->button) {
+	case 1:
+		inst_select_vec(vec);
+		redraw();
+		break;
+	}
+	return TRUE;
+}
+
+
+static gboolean item_select_obj(GtkWidget *widget, GdkEventButton *event,
+     gpointer data)
+{
+	const struct obj *obj = data;
+
+	switch (event->button) {
+	case 1:
+		inst_select_obj(obj);
+		redraw();
+		break;
+	}
+	return TRUE;
+}
+
+
+static GtkWidget *item_label(GtkWidget *tab, char *s, int col, int row,
+    gboolean (*cb)(GtkWidget *widget, GdkEventButton *event, gpointer data),
+    gpointer data)
+{
 	GtkWidget *label;
 
 	label = label_in_box_new(s);
@@ -958,6 +991,11 @@
 	gtk_table_attach_defaults(GTK_TABLE(tab), box_of_label(label),
 	    col, col+1, row, row+1);
 	label_in_box_bg(box_of_label(label), COLOR_ITEM_NORMAL);
+
+	if (cb)
+		g_signal_connect(G_OBJECT(box_of_label(label)),
+		    "button_press_event", G_CALLBACK(cb), data);
+
 	free(s);
 	return label;
 }
@@ -989,15 +1027,17 @@
 	for (item = order; item->vec || item->obj; item++) {
 		if (item->obj) {
 			s = print_obj(item->obj, item->vec);
-			item->obj->list_widget = item_label(tab, s, 1, n);
+			item->obj->list_widget = item_label(tab, s, 1, n,
+			    item_select_obj, item->obj);
 		} else {
 			s = print_label(item->vec);
 			t = stralloc_printf("%s: ", s);
 			free(s);
-			item_label(tab, t, 0, n);
+			item_label(tab, t, 0, n, NULL, NULL);
 
 			s = print_vec(item->vec);
-			item->vec->list_widget = item_label(tab, s, 1, n);
+			item->vec->list_widget = item_label(tab, s, 1, n,
+			    item_select_vec, item->vec);
 		}
 		n++;
         }
@@ -1029,7 +1069,8 @@
 		if (obj->type != ot_meas)
 			continue;
 		s = print_meas(obj);
-		obj->list_widget = item_label(tab, s, 0, n);
+		obj->list_widget = item_label(tab, s, 0, n,
+		    item_select_obj, obj);
 		n++;
         }
 

Modified: trunk/eda/fped/gui_style.h
===================================================================
--- trunk/eda/fped/gui_style.h	2009-08-12 10:45:52 UTC (rev 5423)
+++ trunk/eda/fped/gui_style.h	2009-08-12 11:26:59 UTC (rev 5424)
@@ -47,7 +47,7 @@
 #define	FRAME_EYE_R1		3
 #define	FRAME_EYE_R2		5
 
-#define	ITEM_LIST_FONT		"Sans 8"
+#define	ITEM_LIST_FONT		"Courier Bold 8"
 
 #define	SELECT_R		6	/* pixels within which we select */
 

Modified: trunk/eda/fped/inst.c
===================================================================
--- trunk/eda/fped/inst.c	2009-08-12 10:45:52 UTC (rev 5423)
+++ trunk/eda/fped/inst.c	2009-08-12 11:26:59 UTC (rev 5424)
@@ -109,6 +109,17 @@
 }
 
 
+static void inst_select_inst(struct inst *inst)
+{
+	selected_inst = inst;
+	set_path(1);
+	tool_selected_inst(inst);
+	gui_frame_select_inst(inst);
+	if (inst->ops->select)
+		selected_inst->ops->select(inst);
+}
+
+
 int inst_select(struct coord pos)
 {
 	enum inst_prio prio;
@@ -158,11 +169,7 @@
 		return 0;
 
 selected:
-	set_path(1);
-	tool_selected_inst(selected_inst);
-	gui_frame_select_inst(selected_inst);
-	if (selected_inst->ops->select)
-		selected_inst->ops->select(selected_inst);
+	inst_select_inst(selected_inst);
 	return 1;
 }
 
@@ -289,6 +296,40 @@
 }
 
 
+/* ----- select instance by vector/object ---------------------------------- */
+
+
+void inst_select_vec(const struct vec *vec)
+{
+	struct inst *inst;
+
+	for (inst = insts[ip_vec]; inst; inst = inst->next)
+		if (inst->vec == vec && inst->active) {
+			inst_deselect();
+			inst_select_inst(inst);
+			return;
+		}
+	
+}
+
+
+void inst_select_obj(const struct obj *obj)
+{
+	enum inst_prio prio;
+	struct inst *inst;
+
+	FOR_INSTS_DOWN(prio, inst)
+		if (inst->obj && inst->obj == obj && inst->active) {
+			inst_deselect();
+			inst_select_inst(inst);
+			return;
+		}
+}
+
+
+/* ----- common status reporting ------------------------------------------- */
+
+
 static void rect_status(struct coord a, struct coord b, unit_type width)
 {
 	struct coord d = sub_vec(b, a);

Modified: trunk/eda/fped/inst.h
===================================================================
--- trunk/eda/fped/inst.h	2009-08-12 10:45:52 UTC (rev 5423)
+++ trunk/eda/fped/inst.h	2009-08-12 11:26:59 UTC (rev 5424)
@@ -133,6 +133,9 @@
 int inst_select(struct coord pos);
 void inst_deselect(void);
 
+void inst_select_vec(const struct vec *vec);
+void inst_select_obj(const struct obj *obj);
+
 struct inst *inst_find_point(struct coord pos);
 int inst_find_point_selected(struct coord pos, struct inst **res);
 struct coord inst_get_point(const struct inst *inst);




More information about the commitlog mailing list