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