r5843 - trunk/eda/fped
werner at docs.openmoko.org
werner at docs.openmoko.org
Thu Feb 18 12:35:13 CET 2010
Author: werner
Date: 2010-02-18 12:35:12 +0100 (Thu, 18 Feb 2010)
New Revision: 5843
Modified:
trunk/eda/fped/gui_frame.c
Log:
Variables and loops can now be added from the variable/loop pop-ups, without
having to go all the way up to the frame.
- gui_frame.c: factory tables had very ragged indentation
- gui_frame.c: added "Add variable" and "Add loop" to variable, table, and loop
pop-up
Modified: trunk/eda/fped/gui_frame.c
===================================================================
--- trunk/eda/fped/gui_frame.c 2010-02-09 01:46:48 UTC (rev 5842)
+++ trunk/eda/fped/gui_frame.c 2010-02-18 11:35:12 UTC (rev 5843)
@@ -33,6 +33,58 @@
int show_vars = 1;
+/* ----- add elements, shared ---------------------------------------------- */
+
+
+/* @@@ merge with fpd.y */
+
+static void add_table(struct frame *frame, struct table **anchor)
+{
+ struct table *table, **walk;
+
+ table = zalloc_type(struct table);
+ table->vars = zalloc_type(struct var);
+ table->vars->name = unique("_");
+ table->vars->frame = frame;
+ table->vars->table = table;
+ table->rows = zalloc_type(struct row);
+ table->rows->table = table;
+ table->rows->values = zalloc_type(struct value);
+ table->rows->values->expr = parse_expr("0");
+ table->rows->values->row = table->rows;
+ table->active_row = table->rows;
+ if (anchor) {
+ table->next = *anchor;
+ *anchor = table;
+ } else {
+ for (walk = &frame->tables; *walk; walk = &(*walk)->next);
+ *walk = table;
+ }
+ change_world();
+}
+
+
+static void add_loop(struct frame *frame, struct loop **anchor)
+{
+ struct loop *loop, **walk;
+
+ loop = zalloc_type(struct loop);
+ loop->var.name = unique("_");
+ loop->var.frame = frame;
+ loop->from.expr = parse_expr("0");
+ loop->to.expr = parse_expr("0");
+ if (anchor) {
+ loop->next = *anchor;
+ *anchor = loop;
+ } else {
+ loop->next = NULL;
+ for (walk = &frame->loops; *walk; walk = &(*walk)->next);
+ *walk = loop;
+ }
+ change_world();
+}
+
+
/* ----- popup dispatcher -------------------------------------------------- */
@@ -85,54 +137,25 @@
}
-/* @@@ merge with fpd.y */
-
static void popup_add_table(void)
{
- struct frame *frame = popup_data;
- struct table *table, **walk;
-
- table = zalloc_type(struct table);
- table->vars = zalloc_type(struct var);
- table->vars->name = unique("_");
- table->vars->frame = frame;
- table->vars->table = table;
- table->rows = zalloc_type(struct row);
- table->rows->table = table;
- table->rows->values = zalloc_type(struct value);
- table->rows->values->expr = parse_expr("0");
- table->rows->values->row = table->rows;
- table->active_row = table->rows;
- for (walk = &frame->tables; *walk; walk = &(*walk)->next);
- *walk = table;
- change_world();
+ add_table(popup_data, NULL);
}
static void popup_add_loop(void)
{
- struct frame *frame = popup_data;
- struct loop *loop, **walk;
-
- loop = zalloc_type(struct loop);
- loop->var.name = unique("_");
- loop->var.frame = frame;
- loop->from.expr = parse_expr("0");
- loop->to.expr = parse_expr("0");
- loop->next = NULL;
- for (walk = &frame->loops; *walk; walk = &(*walk)->next);
- *walk = loop;
- change_world();
+ add_loop(popup_data, NULL);
}
static GtkItemFactoryEntry popup_frame_entries[] = {
- { "/Add frame", NULL, popup_add_frame, 0, "<Item>" },
+ { "/Add frame", NULL, popup_add_frame,0, "<Item>" },
{ "/sep0", NULL, NULL, 0, "<Separator>" },
- { "/Add variable", NULL, popup_add_table, 0, "<Item>" },
- { "/Add loop", NULL, popup_add_loop, 0, "<Item>" },
+ { "/Add variable", NULL, popup_add_table,0, "<Item>" },
+ { "/Add loop", NULL, popup_add_loop, 0, "<Item>" },
{ "/sep1", NULL, NULL, 0, "<Separator>" },
- { "/Delete frame", NULL, popup_del_frame, 0, "<Item>" },
+ { "/Delete frame", NULL, popup_del_frame,0, "<Item>" },
{ "/sep2", NULL, NULL, 0, "<Separator>" },
{ "/Close", NULL, NULL, 0, "<Item>" },
{ NULL }
@@ -167,11 +190,21 @@
}
-static void pop_up_frame(struct frame *frame, GdkEventButton *event)
+static void enable_add_var(struct frame *frame, GtkItemFactory *factory)
{
gboolean add_var;
+ add_var = can_add_var(frame);
gtk_widget_set_sensitive(
+ gtk_item_factory_get_item(factory, "/Add variable"), add_var);
+ gtk_widget_set_sensitive(
+ gtk_item_factory_get_item(factory, "/Add loop"), add_var);
+}
+
+
+static void pop_up_frame(struct frame *frame, GdkEventButton *event)
+{
+ gtk_widget_set_sensitive(
gtk_item_factory_get_item(factory_frame, "/Delete frame"),
frame != root_frame);
@@ -179,11 +212,7 @@
gtk_item_factory_get_item(factory_frame, "/Add frame"),
can_add_frame());
- add_var = can_add_var(frame);
- gtk_widget_set_sensitive(
- gtk_item_factory_get_item(factory_frame, "/Add variable"), add_var);
- gtk_widget_set_sensitive(
- gtk_item_factory_get_item(factory_frame, "/Add loop"), add_var);
+ enable_add_var(frame, factory_frame);
pop_up(popup_frame_widget, event, frame);
}
@@ -275,13 +304,34 @@
}
+static void popup_add_table_from_var(void)
+{
+ struct var *var = popup_data;
+
+ add_table(var->frame, &var->table->next);
+}
+
+
+static void popup_add_loop_from_var(void)
+{
+ struct var *var = popup_data;
+
+ add_loop(var->frame, NULL);
+}
+
+
static GtkItemFactoryEntry popup_single_var_entries[] = {
- { "/Add row", NULL, popup_add_row, 0, "<Item>" },
+ { "/Add row", NULL, popup_add_row, 0, "<Item>" },
{ "/Add column", NULL, popup_add_column, 0, "<Item>" },
{ "/sep1", NULL, NULL, 0, "<Separator>" },
- { "/Delete variable", NULL, popup_del_table, 0, "<Item>" },
+ { "/Delete variable", NULL, popup_del_table,0, "<Item>" },
{ "/sep2", NULL, NULL, 0, "<Separator>" },
- { "/Close", NULL, NULL, 0, "<Item>" },
+ { "/Add variable", NULL, popup_add_table_from_var,
+ 0, "<Item>" },
+ { "/Add loop", NULL, popup_add_loop_from_var,
+ 0, "<Item>" },
+ { "/sep3", NULL, NULL, 0, "<Separator>" },
+ { "/Close", NULL, NULL, 0, "<Item>" },
{ NULL }
};
@@ -291,6 +341,7 @@
gtk_widget_set_sensitive(
gtk_item_factory_get_item(factory_single_var, "/Add column"),
can_add_var(var->frame));
+ enable_add_var(var->frame, factory_single_var);
pop_up(popup_single_var_widget, event, var);
}
@@ -316,12 +367,17 @@
static GtkItemFactoryEntry popup_table_var_entries[] = {
- { "/Add row", NULL, popup_add_row, 0, "<Item>" },
+ { "/Add row", NULL, popup_add_row, 0, "<Item>" },
{ "/Add column", NULL, popup_add_column, 0, "<Item>" },
{ "/sep1", NULL, NULL, 0, "<Separator>" },
- { "/Delete table", NULL, popup_del_table, 0, "<Item>" },
+ { "/Delete table", NULL, popup_del_table,0, "<Item>" },
{ "/Delete column", NULL, popup_del_column, 0, "<Item>" },
{ "/sep2", NULL, NULL, 0, "<Separator>" },
+ { "/Add variable", NULL, popup_add_table_from_var,
+ 0, "<Item>" },
+ { "/Add loop", NULL, popup_add_loop_from_var,
+ 0, "<Item>" },
+ { "/sep3", NULL, NULL, 0, "<Separator>" },
{ "/Close", NULL, NULL, 0, "<Item>" },
{ NULL }
};
@@ -335,6 +391,7 @@
gtk_widget_set_sensitive(
gtk_item_factory_get_item(factory_table_var, "/Add column"),
can_add_var(var->frame));
+ enable_add_var(var->frame, factory_table_var);
pop_up(popup_table_var_widget, event, var);
}
@@ -397,9 +454,9 @@
{ "/Add column", NULL, popup_add_column_by_value,
0, "<Item>" },
{ "/sep1", NULL, NULL, 0, "<Separator>" },
- { "/Delete row", NULL, popup_del_row, 0, "<Item>" },
+ { "/Delete row", NULL, popup_del_row, 0, "<Item>" },
{ "/Delete column", NULL, popup_del_column_by_value,
- 0, "<Item>" },
+ 0, "<Item>" },
{ "/sep2", NULL, NULL, 0, "<Separator>" },
{ "/Close", NULL, NULL, 0, "<Item>" },
{ NULL }
@@ -434,8 +491,29 @@
}
+static void popup_add_table_from_loop(void)
+{
+ struct loop *loop = popup_data;
+
+ add_table(loop->var.frame, NULL);
+}
+
+
+static void popup_add_loop_from_loop(void)
+{
+ struct loop *loop = popup_data;
+
+ add_loop(loop->var.frame, &loop->next);
+}
+
+
static GtkItemFactoryEntry popup_loop_var_entries[] = {
{ "/Delete loop", NULL, popup_del_loop, 0, "<Item>" },
+ { "/sep1", NULL, NULL, 0, "<Separator>" },
+ { "/Add variable", NULL, popup_add_table_from_loop,
+ 0, "<Item>" },
+ { "/Add loop", NULL, popup_add_loop_from_loop,
+ 0, "<Item>" },
{ "/sep2", NULL, NULL, 0, "<Separator>" },
{ "/Close", NULL, NULL, 0, "<Item>" },
{ NULL }
@@ -444,6 +522,7 @@
static void pop_up_loop_var(struct loop *loop, GdkEventButton *event)
{
+ enable_add_var(loop->var.frame, factory_loop_var);
pop_up(popup_loop_var_widget, event, loop);
}
More information about the commitlog
mailing list