r5356 - developers/werner/fped
werner at docs.openmoko.org
werner at docs.openmoko.org
Sat Aug 1 01:24:00 CEST 2009
Author: werner
Date: 2009-08-01 01:24:00 +0200 (Sat, 01 Aug 2009)
New Revision: 5356
Modified:
developers/werner/fped/TODO
developers/werner/fped/error.c
developers/werner/fped/error.h
developers/werner/fped/expr.h
developers/werner/fped/gui.c
developers/werner/fped/gui_status.c
developers/werner/fped/gui_status.h
developers/werner/fped/gui_style.c
developers/werner/fped/gui_style.h
developers/werner/fped/util.c
developers/werner/fped/util.h
Log:
- frame color wasn't set back to "selected" when selecting an item while
editing the frame name
- added "extern" to all variable declarations in headers
- new functions stralloc_printf and stralloc_vprintf to printf into a malloc'ed
buffer
- errors during instantiation are now reported to the GUI
Modified: developers/werner/fped/TODO
===================================================================
--- developers/werner/fped/TODO 2009-07-31 22:16:10 UTC (rev 5355)
+++ developers/werner/fped/TODO 2009-07-31 23:24:00 UTC (rev 5356)
@@ -40,6 +40,7 @@
Future directions:
- future: consider using cairo instead of gdk
+- live update of value when entering strings and expressions ?
- advanced: non-standard solder mask
- advanced: solder paste exceptions (subtractive, additive)
- advanced: silk line width
Modified: developers/werner/fped/error.c
===================================================================
--- developers/werner/fped/error.c 2009-07-31 22:16:10 UTC (rev 5355)
+++ developers/werner/fped/error.c 2009-07-31 23:24:00 UTC (rev 5356)
@@ -15,14 +15,16 @@
#include <stdlib.h>
#include <stdio.h>
+#include "util.h"
#include "error.h"
+extern char *yytext;
+
int lineno = 1;
+void (*reporter)(const char *s) = report_to_stderr;
-extern char *yytext;
-
void __attribute__((noreturn)) yyerrorf(const char *fmt, ...)
{
va_list ap;
@@ -42,13 +44,20 @@
}
+void report_to_stderr(const char *s)
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+
void fail(const char *fmt, ...)
{
va_list ap;
+ char *s;
va_start(ap, fmt);
- vfprintf(stderr, fmt, ap);
+ s = stralloc_vprintf(fmt, ap);
va_end(ap);
- fprintf(stderr, "\n");
+ reporter(s);
+ free(s);
}
-
Modified: developers/werner/fped/error.h
===================================================================
--- developers/werner/fped/error.h 2009-07-31 22:16:10 UTC (rev 5355)
+++ developers/werner/fped/error.h 2009-07-31 23:24:00 UTC (rev 5356)
@@ -15,12 +15,15 @@
#define ERROR_H
-int lineno;
+extern int lineno;
+extern void (*reporter)(const char *s);
+
void __attribute__((noreturn)) yyerrorf(const char *fmt, ...);
void __attribute__((noreturn)) yyerror(const char *s);
+void report_to_stderr(const char *s);
void fail(const char *fmt, ...);
#endif /* !ERROR_H */
Modified: developers/werner/fped/expr.h
===================================================================
--- developers/werner/fped/expr.h 2009-07-31 22:16:10 UTC (rev 5355)
+++ developers/werner/fped/expr.h 2009-07-31 23:24:00 UTC (rev 5356)
@@ -52,7 +52,7 @@
};
-struct num undef;
+extern struct num undef;
#define is_undef(num) ((num).type == nt_none)
Modified: developers/werner/fped/gui.c
===================================================================
--- developers/werner/fped/gui.c 2009-07-31 22:16:10 UTC (rev 5355)
+++ developers/werner/fped/gui.c 2009-07-31 23:24:00 UTC (rev 5356)
@@ -371,9 +371,24 @@
}
+static void unselect_frame(void *data)
+{
+ struct frame *frame= data;
+
+ /*
+ * "unselect" means in this context that the selection has moved
+ * elsewhere. However, this does not necessarily change the frame.
+ * (And, in fact, since we rebuild the frame list anyway, the color
+ * change here doesn't matter if selecting a different frame.)
+ * So we revert from "editing" to "selected".
+ */
+ label_in_box_bg(frame->label, COLOR_FRAME_SELECTED);
+}
+
+
static void edit_frame(struct frame *frame)
{
- inst_select_outside(frame, NULL);
+ inst_select_outside(frame, unselect_frame);
label_in_box_bg(frame->label, COLOR_FRAME_EDITING);
status_set_name(frame->name);
edit_unique(&frame->name, validate_frame_name, frame);
@@ -480,6 +495,7 @@
void change_world(void)
{
+ status_begin_reporting();
instantiate();
label_in_box_bg(active_frame->label, COLOR_FRAME_SELECTED);
build_frames(frames_box);
Modified: developers/werner/fped/gui_status.c
===================================================================
--- developers/werner/fped/gui_status.c 2009-07-31 22:16:10 UTC (rev 5355)
+++ developers/werner/fped/gui_status.c 2009-07-31 23:24:00 UTC (rev 5356)
@@ -19,6 +19,7 @@
#include "util.h"
#include "coord.h"
+#include "error.h"
#include "unparse.h"
#include "gui_util.h"
#include "gui_style.h"
@@ -48,10 +49,11 @@
static void set_label(GtkWidget *label, const char *fmt, va_list ap)
{
- char buf[100]; /* @@@ enough :-) */
+ char *s;
- vsprintf(buf, fmt, ap);
- gtk_label_set_text(GTK_LABEL(label), buf);
+ s = stralloc_vprintf(fmt, ap);
+ gtk_label_set_text(GTK_LABEL(label), s);
+ free(s);
}
@@ -91,7 +93,8 @@
GdkColor col;
col = get_color(color);
- gtk_widget_modify_base(GTK_WIDGET(status_entry), GTK_STATE_NORMAL, &col);
+ gtk_widget_modify_base(GTK_WIDGET(status_entry),
+ GTK_STATE_NORMAL, &col);
}
@@ -299,6 +302,37 @@
}
+/* ----- status reports ---------------------------------------------------- */
+
+
+static gint context_id;
+static int have_msg = 0;
+
+
+static void clear_status_msg(void)
+{
+ if (have_msg) {
+ gtk_statusbar_pop(GTK_STATUSBAR(status_msg), context_id);
+ have_msg = 0;
+ }
+}
+
+
+static void report_to_gui(const char *s)
+{
+ if (!have_msg)
+ gtk_statusbar_push(GTK_STATUSBAR(status_msg), context_id, s);
+ have_msg = 1;
+}
+
+
+void status_begin_reporting(void)
+{
+ clear_status_msg();
+ reporter = report_to_gui;
+}
+
+
/* ----- setup ------------------------------------------------------------- */
@@ -368,4 +402,7 @@
status_msg = gtk_statusbar_new();
gtk_box_pack_start(GTK_BOX(vbox), status_msg, FALSE, FALSE, 0);
+
+ context_id = gtk_statusbar_get_context_id(GTK_STATUSBAR(status_msg),
+ "messages");
}
Modified: developers/werner/fped/gui_status.h
===================================================================
--- developers/werner/fped/gui_status.h 2009-07-31 22:16:10 UTC (rev 5355)
+++ developers/werner/fped/gui_status.h 2009-07-31 23:24:00 UTC (rev 5356)
@@ -38,6 +38,8 @@
void status_set_xy(struct coord coord);
+void status_begin_reporting(void);
+
void make_status_area(GtkWidget *vbox) ;
#endif /* !GUI_STATUS_H */
Modified: developers/werner/fped/gui_style.c
===================================================================
--- developers/werner/fped/gui_style.c 2009-07-31 22:16:10 UTC (rev 5355)
+++ developers/werner/fped/gui_style.c 2009-07-31 23:24:00 UTC (rev 5356)
@@ -22,6 +22,13 @@
#define INVALID "#00ffff"
+GdkGC *gc_bg;
+GdkGC *gc_vec[mode_n];
+GdkGC *gc_obj[mode_n];
+GdkGC *gc_pad[mode_n];
+GdkGC *gc_frame[mode_n];
+
+
static GdkGC *gc(const char *spec, int width)
{
GdkGCValues gc_values = {
Modified: developers/werner/fped/gui_style.h
===================================================================
--- developers/werner/fped/gui_style.h 2009-07-31 22:16:10 UTC (rev 5355)
+++ developers/werner/fped/gui_style.h 2009-07-31 23:24:00 UTC (rev 5356)
@@ -61,11 +61,11 @@
/* ----- canvas drawing styles --------------------------------------------- */
-GdkGC *gc_bg;
-GdkGC *gc_vec[mode_n];
-GdkGC *gc_obj[mode_n];
-GdkGC *gc_pad[mode_n];
-GdkGC *gc_frame[mode_n];
+extern GdkGC *gc_bg;
+extern GdkGC *gc_vec[mode_n];
+extern GdkGC *gc_obj[mode_n];
+extern GdkGC *gc_pad[mode_n];
+extern GdkGC *gc_frame[mode_n];
void gui_setup_style(GdkDrawable *drawable);
Modified: developers/werner/fped/util.c
===================================================================
--- developers/werner/fped/util.c 2009-07-31 22:16:10 UTC (rev 5355)
+++ developers/werner/fped/util.c 2009-07-31 23:24:00 UTC (rev 5356)
@@ -11,12 +11,44 @@
*/
+#include <stdarg.h>
+#include <stdio.h>
#include <string.h>
#include "util.h"
+/* ----- printf buffer allocation ------------------------------------------ */
+
+
+char *stralloc_vprintf(const char *fmt, va_list ap)
+{
+ char *buf;
+ int n;
+
+ n = snprintf(NULL, 0, fmt, ap);
+ buf = alloc_size(n+1);
+ vsnprintf(buf, n+1, fmt, ap);
+ return buf;
+}
+
+
+char *stralloc_printf(const char *fmt, ...)
+{
+ va_list ap;
+ char *s;
+
+ va_start(ap, fmt);
+ s = stralloc_vprintf(fmt, ap);
+ va_end(ap);
+ return s;
+}
+
+
+/* ----- identifier syntax check ------------------------------------------- */
+
+
int is_id(char c, int first)
{
if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c == '_')
Modified: developers/werner/fped/util.h
===================================================================
--- developers/werner/fped/util.h 2009-07-31 22:16:10 UTC (rev 5355)
+++ developers/werner/fped/util.h 2009-07-31 23:24:00 UTC (rev 5356)
@@ -14,6 +14,7 @@
#ifndef UTIL_H
#define UTIL_H
+#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
@@ -46,6 +47,9 @@
strnalloc_tmp; })
+char *stralloc_vprintf(const char *fmt, va_list ap);
+char *stralloc_printf(const char *fmt, ...);
+
int is_id(char c, int first);
const char *unique(const char *s);
More information about the commitlog
mailing list