Send commitlog mailing list submissions to
        commitlog@lists.openmoko.org

To subscribe or unsubscribe via the World Wide Web, visit
        http://lists.openmoko.org/mailman/listinfo/commitlog
or, via email, send a message with subject or body 'help' to
        commitlog-requ...@lists.openmoko.org

You can reach the person managing the list at
        commitlog-ow...@lists.openmoko.org

When replying, please edit your Subject line so it is more specific
than "Re: Contents of commitlog digest..."
Today's Topics:

   1. r5764 - trunk/eda/fped (wer...@docs.openmoko.org)
   2. r5765 - trunk/eda/fped (wer...@docs.openmoko.org)
   3. r5766 - trunk/eda/fped (wer...@docs.openmoko.org)
--- Begin Message ---
Author: werner
Date: 2009-12-31 16:11:47 +0100 (Thu, 31 Dec 2009)
New Revision: 5764

Modified:
   trunk/eda/fped/gui_frame.c
Log:
When deleting the locked frame, icon and internal reference weren't reset.

- gui_frame.c (popup_del_frame): when deleting a frame, notify the frame tool
  so that it can undo any locking



Modified: trunk/eda/fped/gui_frame.c
===================================================================
--- trunk/eda/fped/gui_frame.c  2009-12-31 09:34:17 UTC (rev 5763)
+++ trunk/eda/fped/gui_frame.c  2009-12-31 15:11:47 UTC (rev 5764)
@@ -77,6 +77,7 @@
        struct frame *frame = popup_data;
 
        assert(frame != root_frame);
+       tool_frame_deleted(frame);
        delete_frame(frame);
        if (active_frame == frame)
                select_frame(root_frame);




--- End Message ---
--- Begin Message ---
Author: werner
Date: 2009-12-31 17:13:49 +0100 (Thu, 31 Dec 2009)
New Revision: 5765

Modified:
   trunk/eda/fped/gui_frame.c
Log:
One could add a new frame if a frame with an underscore as its name already
existed, thus creating a structure that could be saved but no longer loaded.
Likewise, one could add new variables/loops/columns if there was already one
named "_", thus creating the same problem.

- gui_frame.c (pop_up_frame): disable "Add frame" if we already have a frame
  named "_"
- gui_frame.c (pop_up_frame): disable "Add variable" and "Add loop" if we 
  already have a variable or loop named "_"
- gui_frame.c (pop_up_single_var, pop_up_table_var): disable "Add column" if
  we already have a variable or loop named "_"



Modified: trunk/eda/fped/gui_frame.c
===================================================================
--- trunk/eda/fped/gui_frame.c  2009-12-31 15:11:47 UTC (rev 5764)
+++ trunk/eda/fped/gui_frame.c  2009-12-31 16:13:49 UTC (rev 5765)
@@ -139,11 +139,52 @@
 };
 
 
+static gboolean can_add_frame(void)
+{
+       const struct frame *frame;
+
+       for (frame = frames; frame; frame = frame->next)
+               if (frame->name && !strcmp(frame->name, "_"))
+                       return FALSE;
+       return TRUE;
+}
+
+
+static gboolean can_add_var(const struct frame *frame)
+{
+       const struct table *table;
+       const struct var *var;
+       const struct loop *loop;
+
+       for (table = frame->tables; table; table = table->next)
+               for (var = table->vars; var; var = var->next)
+                       if (!strcmp(var->name, "_"))
+                               return FALSE;
+       for (loop = frame->loops; loop; loop = loop->next)
+               if (!strcmp(loop->var.name, "_"))
+                       return FALSE;
+       return TRUE;
+}
+
+
 static void pop_up_frame(struct frame *frame, GdkEventButton *event)
 {
+       gboolean add_var;
+
        gtk_widget_set_sensitive(
            gtk_item_factory_get_item(factory_frame, "/Delete frame"),
            frame != root_frame);
+
+       gtk_widget_set_sensitive(
+           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);
+       
        pop_up(popup_frame_widget, event, frame);
 }
 
@@ -247,6 +288,9 @@
 
 static void pop_up_single_var(struct var *var, GdkEventButton *event)
 {
+       gtk_widget_set_sensitive(
+           gtk_item_factory_get_item(factory_single_var, "/Add column"),
+           can_add_var(var->frame));
        pop_up(popup_single_var_widget, event, var);
 }
 
@@ -288,6 +332,9 @@
        gtk_widget_set_sensitive(
            gtk_item_factory_get_item(factory_table_var, "/Delete column"),
            var->table->vars->next != NULL);
+       gtk_widget_set_sensitive(
+           gtk_item_factory_get_item(factory_table_var, "/Add column"),
+           can_add_var(var->frame));
        pop_up(popup_table_var_widget, event, var);
 }
 
@@ -388,7 +435,7 @@
 
 
 static GtkItemFactoryEntry popup_loop_var_entries[] = {
-       { "/Delete loop",       NULL,   popup_del_loop,         0, "<Item>" },
+       { "/Delete loop",       NULL,   popup_del_loop, 0, "<Item>" },
        { "/sep2",              NULL,   NULL,           0, "<Separator>" },
        { "/Close",             NULL,   NULL,           0, "<Item>" },
        { NULL }




--- End Message ---
--- Begin Message ---
Author: werner
Date: 2009-12-31 17:24:23 +0100 (Thu, 31 Dec 2009)
New Revision: 5766

Modified:
   trunk/eda/fped/fpd.y
Log:
The comment of the previous commit contained a slight exaggeration: we did 
in fact let duplicate variable names pass.

- fpd.y: report duplicate variable/loop/column names



Modified: trunk/eda/fped/fpd.y
===================================================================
--- trunk/eda/fped/fpd.y        2009-12-31 16:13:49 UTC (rev 5765)
+++ trunk/eda/fped/fpd.y        2009-12-31 16:24:23 UTC (rev 5766)
@@ -68,6 +68,23 @@
 }
 
 
+static struct var *find_var(const struct frame *frame, const char *name)
+{
+       const struct table *table;
+       struct var *var;
+       struct loop *loop;
+
+       for (table = frame->tables; table; table = table->next)
+               for (var = table->vars; var; var = var->next)
+                       if (var->name == name)
+                               return var;
+       for (loop = frame->loops; loop; loop = loop->next)
+               if (loop->var.name == name)
+                       return &loop->var;
+       return NULL;
+}
+
+
 static void set_frame(struct frame *frame)
 {
        curr_frame = frame;
@@ -289,10 +306,18 @@
        table
        | TOK_SET ID '=' expr
                {
+                       if (find_var(curr_frame, $2)) {
+                               yyerrorf("duplicate variable \"%s\"", $2);
+                               YYABORT;
+                       }
                        make_var($2, $4);
                }
        | TOK_LOOP ID '=' expr ',' expr
                {
+                       if (find_var(curr_frame, $2)) {
+                               yyerrorf("duplicate variable \"%s\"", $2);
+                               YYABORT;
+                       }
                        make_loop($2, $4, $6);
                }
        | vec
@@ -347,6 +372,10 @@
 var:
        ID
                {
+                       if (find_var(curr_frame, $1)) {
+                               yyerrorf("duplicate variable \"%s\"", $1);
+                               YYABORT;
+                       }
                        $$ = zalloc_type(struct var);
                        $$->name = $1;
                        $$->frame = curr_frame;




--- End Message ---
_______________________________________________
commitlog mailing list
commitlog@lists.openmoko.org
http://lists.openmoko.org/mailman/listinfo/commitlog

Reply via email to