mirror of
git://projects.qi-hardware.com/fped.git
synced 2024-11-22 18:28:26 +02:00
- fixed stupid realloc(..., len) error
- rearranged input area and added vector component edit capability git-svn-id: http://svn.openmoko.org/trunk/eda/fped@5381 99fdad57-331a-0410-800a-d7fa5415bdb3
This commit is contained in:
parent
0ff7a6a3ab
commit
7674be9b10
3
TODO
3
TODO
@ -1,7 +1,5 @@
|
|||||||
Missing features:
|
Missing features:
|
||||||
- populate input area (still needed: mm/mil, rezoom)
|
- populate input area (still needed: mm/mil, rezoom)
|
||||||
- add vec editor (need to be able to edit name, x, and y)
|
|
||||||
- add obj editor
|
|
||||||
- add table/var/loop editor (missing: add col/row, add/del var/table/loop)
|
- add table/var/loop editor (missing: add col/row, add/del var/table/loop)
|
||||||
- add default unit (combine with grid unit selection ?)
|
- add default unit (combine with grid unit selection ?)
|
||||||
- consider adding auto/mm/mil selection for each dimension
|
- consider adding auto/mm/mil selection for each dimension
|
||||||
@ -16,6 +14,7 @@ Error detection:
|
|||||||
|
|
||||||
Style:
|
Style:
|
||||||
- make column of entry field greedily consume all unallocated space
|
- make column of entry field greedily consume all unallocated space
|
||||||
|
- status area looks awful
|
||||||
|
|
||||||
Bugs:
|
Bugs:
|
||||||
- default silk width has no business being hard-coded in obj.c
|
- default silk width has no business being hard-coded in obj.c
|
||||||
|
2
expr.c
2
expr.c
@ -365,7 +365,7 @@ char *expand(const char *name, const struct frame *frame)
|
|||||||
value_len = snprintf(num_buf, sizeof(num_buf), "%lg%s",
|
value_len = snprintf(num_buf, sizeof(num_buf), "%lg%s",
|
||||||
value.n, str_unit(value));
|
value.n, str_unit(value));
|
||||||
len += value_len;
|
len += value_len;
|
||||||
buf = realloc(buf, len);
|
buf = realloc(buf, len+1);
|
||||||
if (!buf)
|
if (!buf)
|
||||||
abort();
|
abort();
|
||||||
strcpy(buf+i, num_buf);
|
strcpy(buf+i, num_buf);
|
||||||
|
2
gui.c
2
gui.c
@ -114,6 +114,7 @@ static void edit_var(struct var *var)
|
|||||||
{
|
{
|
||||||
inst_select_outside(var, unselect_var);
|
inst_select_outside(var, unselect_var);
|
||||||
label_in_box_bg(var->widget, COLOR_VAR_EDITING);
|
label_in_box_bg(var->widget, COLOR_VAR_EDITING);
|
||||||
|
status_set_type_entry("name =");
|
||||||
status_set_name(var->name);
|
status_set_name(var->name);
|
||||||
edit_unique(&var->name, validate_var_name, var);
|
edit_unique(&var->name, validate_var_name, var);
|
||||||
}
|
}
|
||||||
@ -491,6 +492,7 @@ static void edit_frame(struct frame *frame)
|
|||||||
{
|
{
|
||||||
inst_select_outside(frame, unselect_frame);
|
inst_select_outside(frame, unselect_frame);
|
||||||
label_in_box_bg(frame->label, COLOR_FRAME_EDITING);
|
label_in_box_bg(frame->label, COLOR_FRAME_EDITING);
|
||||||
|
status_set_type_entry("name =");
|
||||||
status_set_name(frame->name);
|
status_set_name(frame->name);
|
||||||
edit_unique(&frame->name, validate_frame_name, frame);
|
edit_unique(&frame->name, validate_frame_name, frame);
|
||||||
}
|
}
|
||||||
|
@ -39,10 +39,10 @@ static void update_zoom(void)
|
|||||||
|
|
||||||
static void update_pos(struct coord pos)
|
static void update_pos(struct coord pos)
|
||||||
{
|
{
|
||||||
status_set_sys_pos("X %5.2lf Y %5.2lf mm",
|
status_set_sys_x("X %5.2lf" , units_to_mm(pos.x));
|
||||||
units_to_mm(pos.x), units_to_mm(pos.y));
|
status_set_sys_y("Y %5.2lf" , units_to_mm(pos.y));
|
||||||
status_set_user_pos("x %5.2lf y %5.2lf mm",
|
status_set_user_x("x %5.2lf", units_to_mm(pos.x-user_origin.x));
|
||||||
units_to_mm(pos.x-user_origin.x), units_to_mm(pos.y-user_origin.y));
|
status_set_user_y("y %5.2lf", units_to_mm(pos.y-user_origin.y));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
205
gui_status.c
205
gui_status.c
@ -32,17 +32,17 @@ struct edit_ops {
|
|||||||
int (*activate)(GtkWidget *widget, const char *s, void *ctx);
|
int (*activate)(GtkWidget *widget, const char *s, void *ctx);
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct edit_ops *edit_ops = NULL;
|
|
||||||
static void *edit_ctx;
|
|
||||||
|
|
||||||
|
|
||||||
/* ----- setter functions -------------------------------------------------- */
|
/* ----- setter functions -------------------------------------------------- */
|
||||||
|
|
||||||
|
|
||||||
static GtkWidget *status_name, *status_entry;
|
static GtkWidget *status_name, *status_entry;
|
||||||
|
static GtkWidget *status_type_x, *status_type_y, *status_type_entry;
|
||||||
|
static GtkWidget *status_entry_x, *status_entry_y;
|
||||||
static GtkWidget *status_x, *status_y;
|
static GtkWidget *status_x, *status_y;
|
||||||
static GtkWidget *status_r, *status_angle;
|
static GtkWidget *status_r, *status_angle;
|
||||||
static GtkWidget *status_sys_pos, *status_user_pos;
|
static GtkWidget *status_sys_x, *status_sys_y;
|
||||||
|
static GtkWidget *status_user_x, *status_user_y;
|
||||||
static GtkWidget *status_zoom, *status_grid;
|
static GtkWidget *status_zoom, *status_grid;
|
||||||
static GtkWidget *status_msg;
|
static GtkWidget *status_msg;
|
||||||
|
|
||||||
@ -67,13 +67,18 @@ static void set_label(GtkWidget *label, const char *fmt, va_list ap)
|
|||||||
va_end(ap); \
|
va_end(ap); \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SETTER(type_x)
|
||||||
|
SETTER(type_y)
|
||||||
|
SETTER(type_entry)
|
||||||
SETTER(name)
|
SETTER(name)
|
||||||
SETTER(x)
|
SETTER(x)
|
||||||
SETTER(y)
|
SETTER(y)
|
||||||
SETTER(r)
|
SETTER(r)
|
||||||
SETTER(angle)
|
SETTER(angle)
|
||||||
SETTER(sys_pos)
|
SETTER(sys_x)
|
||||||
SETTER(user_pos)
|
SETTER(sys_y)
|
||||||
|
SETTER(user_x)
|
||||||
|
SETTER(user_y)
|
||||||
SETTER(zoom)
|
SETTER(zoom)
|
||||||
SETTER(grid)
|
SETTER(grid)
|
||||||
|
|
||||||
@ -83,18 +88,35 @@ SETTER(grid)
|
|||||||
|
|
||||||
void status_set_xy(struct coord coord)
|
void status_set_xy(struct coord coord)
|
||||||
{
|
{
|
||||||
status_set_x("x = %5.2f mm", units_to_mm(coord.x));
|
/* do dX/dY etc. stuff later */
|
||||||
status_set_y("y = %5.2f mm", units_to_mm(coord.y));
|
status_set_type_x("X =");
|
||||||
|
status_set_type_y("Y =");
|
||||||
|
|
||||||
|
status_set_x("%5.2f mm", units_to_mm(coord.x));
|
||||||
|
status_set_y("%5.2f mm", units_to_mm(coord.y));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void entry_color(const char *color)
|
static void entry_color(GtkWidget *widget, const char *color)
|
||||||
{
|
{
|
||||||
GdkColor col;
|
GdkColor col;
|
||||||
|
|
||||||
col = get_color(color);
|
col = get_color(color);
|
||||||
gtk_widget_modify_base(GTK_WIDGET(status_entry),
|
gtk_widget_modify_base(widget, GTK_STATE_NORMAL, &col);
|
||||||
GTK_STATE_NORMAL, &col);
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ----- helper functions -------------------------------------------------- */
|
||||||
|
|
||||||
|
|
||||||
|
static void setup_edit(GtkWidget *widget, const char *s,
|
||||||
|
struct edit_ops *ops, void *ctx)
|
||||||
|
{
|
||||||
|
gtk_entry_set_text(GTK_ENTRY(widget), s);
|
||||||
|
entry_color(widget, COLOR_EDIT_ASIS);
|
||||||
|
gtk_widget_show(widget);
|
||||||
|
gtk_object_set_data(GTK_OBJECT(widget), "edit-ops", ops);
|
||||||
|
gtk_object_set_data(GTK_OBJECT(widget), "edit-ctx", ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -114,11 +136,11 @@ static int unique_changed(GtkWidget *widget, const char *s, void *ctx)
|
|||||||
int ok;
|
int ok;
|
||||||
|
|
||||||
if (!strcmp(s, *unique_ctx->s)) {
|
if (!strcmp(s, *unique_ctx->s)) {
|
||||||
entry_color(COLOR_EDIT_ASIS);
|
entry_color(widget, COLOR_EDIT_ASIS);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
ok = !unique_ctx->validate || unique_ctx->validate(s, unique_ctx->ctx);
|
ok = !unique_ctx->validate || unique_ctx->validate(s, unique_ctx->ctx);
|
||||||
entry_color(ok ? COLOR_EDIT_GOOD : COLOR_EDIT_BAD);
|
entry_color(widget, ok ? COLOR_EDIT_GOOD : COLOR_EDIT_BAD);
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -131,7 +153,7 @@ static int unique_activate(GtkWidget *widget, const char *s, void *ctx)
|
|||||||
unique_ctx->validate && !unique_ctx->validate(s, unique_ctx->ctx))
|
unique_ctx->validate && !unique_ctx->validate(s, unique_ctx->ctx))
|
||||||
return 0;
|
return 0;
|
||||||
*unique_ctx->s = unique(s);
|
*unique_ctx->s = unique(s);
|
||||||
entry_color(COLOR_EDIT_ASIS);
|
entry_color(widget, COLOR_EDIT_ASIS);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -150,11 +172,7 @@ void edit_unique(const char **s, int (*validate)(const char *s, void *ctx),
|
|||||||
unique_ctx.s = s;
|
unique_ctx.s = s;
|
||||||
unique_ctx.validate = validate;
|
unique_ctx.validate = validate;
|
||||||
unique_ctx.ctx = ctx;
|
unique_ctx.ctx = ctx;
|
||||||
edit_ops = &edit_ops_unique;
|
setup_edit(status_entry, *s, &edit_ops_unique, &unique_ctx);
|
||||||
edit_ctx = &unique_ctx;
|
|
||||||
gtk_entry_set_text(GTK_ENTRY(status_entry), *s);
|
|
||||||
entry_color(COLOR_EDIT_ASIS);
|
|
||||||
gtk_widget_show(status_entry);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -167,14 +185,14 @@ static int unique_null_changed(GtkWidget *widget, const char *s, void *ctx)
|
|||||||
int ok;
|
int ok;
|
||||||
|
|
||||||
if (!strcmp(s, *unique_ctx->s ? *unique_ctx->s : "")) {
|
if (!strcmp(s, *unique_ctx->s ? *unique_ctx->s : "")) {
|
||||||
entry_color(COLOR_EDIT_ASIS);
|
entry_color(widget, COLOR_EDIT_ASIS);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
ok = !*s;
|
ok = !*s;
|
||||||
if (!ok)
|
if (!ok)
|
||||||
ok = !unique_ctx->validate ||
|
ok = !unique_ctx->validate ||
|
||||||
unique_ctx->validate(s, unique_ctx->ctx);
|
unique_ctx->validate(s, unique_ctx->ctx);
|
||||||
entry_color(ok ? COLOR_EDIT_GOOD : COLOR_EDIT_BAD);
|
entry_color(widget, ok ? COLOR_EDIT_GOOD : COLOR_EDIT_BAD);
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -191,7 +209,7 @@ static int unique_null_activate(GtkWidget *widget, const char *s, void *ctx)
|
|||||||
return 0;
|
return 0;
|
||||||
*unique_ctx->s = unique(s);
|
*unique_ctx->s = unique(s);
|
||||||
}
|
}
|
||||||
entry_color(COLOR_EDIT_ASIS);
|
entry_color(widget, COLOR_EDIT_ASIS);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -210,11 +228,8 @@ void edit_unique_null(const char **s,
|
|||||||
unique_ctx.s = s;
|
unique_ctx.s = s;
|
||||||
unique_ctx.validate = validate;
|
unique_ctx.validate = validate;
|
||||||
unique_ctx.ctx = ctx;
|
unique_ctx.ctx = ctx;
|
||||||
edit_ops = &edit_ops_null_unique;
|
setup_edit(status_entry, *s ? *s : "",
|
||||||
edit_ctx = &unique_ctx;
|
&edit_ops_null_unique, &unique_ctx);
|
||||||
gtk_entry_set_text(GTK_ENTRY(status_entry), *s ? *s : "");
|
|
||||||
entry_color(COLOR_EDIT_ASIS);
|
|
||||||
gtk_widget_show(status_entry);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -234,11 +249,11 @@ static int name_changed(GtkWidget *widget, const char *s, void *ctx)
|
|||||||
int ok;
|
int ok;
|
||||||
|
|
||||||
if (!strcmp(s, *name_ctx->s)) {
|
if (!strcmp(s, *name_ctx->s)) {
|
||||||
entry_color(COLOR_EDIT_ASIS);
|
entry_color(widget, COLOR_EDIT_ASIS);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
ok = !name_ctx->validate || name_ctx->validate(s, name_ctx->ctx);
|
ok = !name_ctx->validate || name_ctx->validate(s, name_ctx->ctx);
|
||||||
entry_color(ok ? COLOR_EDIT_GOOD : COLOR_EDIT_BAD);
|
entry_color(widget, ok ? COLOR_EDIT_GOOD : COLOR_EDIT_BAD);
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -251,7 +266,7 @@ static int name_activate(GtkWidget *widget, const char *s, void *ctx)
|
|||||||
return 0;
|
return 0;
|
||||||
free(*name_ctx->s);
|
free(*name_ctx->s);
|
||||||
*name_ctx->s = stralloc(s);
|
*name_ctx->s = stralloc(s);
|
||||||
entry_color(COLOR_EDIT_ASIS);
|
entry_color(widget, COLOR_EDIT_ASIS);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -269,11 +284,7 @@ void edit_name(char **s, int (*validate)(const char *s, void *ctx), void *ctx)
|
|||||||
name_ctx.s = s;
|
name_ctx.s = s;
|
||||||
name_ctx.validate = validate;
|
name_ctx.validate = validate;
|
||||||
name_ctx.ctx = ctx;
|
name_ctx.ctx = ctx;
|
||||||
edit_ops = &edit_ops_name;
|
setup_edit(status_entry, *s, &edit_ops_name, &name_ctx);
|
||||||
edit_ctx = &name_ctx;
|
|
||||||
gtk_entry_set_text(GTK_ENTRY(status_entry), *s);
|
|
||||||
entry_color(COLOR_EDIT_ASIS);
|
|
||||||
gtk_widget_show(status_entry);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -293,10 +304,10 @@ static int expr_changed(GtkWidget *widget, const char *s, void *ctx)
|
|||||||
|
|
||||||
expr = try_parse_expr(s);
|
expr = try_parse_expr(s);
|
||||||
if (!expr) {
|
if (!expr) {
|
||||||
entry_color(COLOR_EDIT_BAD);
|
entry_color(widget, COLOR_EDIT_BAD);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
entry_color(COLOR_EDIT_GOOD);
|
entry_color(widget, COLOR_EDIT_GOOD);
|
||||||
free_expr(expr);
|
free_expr(expr);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -313,7 +324,7 @@ static int expr_activate(GtkWidget *widget, const char *s, void *ctx)
|
|||||||
if (*anchor)
|
if (*anchor)
|
||||||
free_expr(*anchor);
|
free_expr(*anchor);
|
||||||
*anchor = expr;
|
*anchor = expr;
|
||||||
entry_color(COLOR_EDIT_ASIS);
|
entry_color(widget, COLOR_EDIT_ASIS);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -324,17 +335,31 @@ static struct edit_ops edit_ops_expr = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
void edit_expr(struct expr **expr)
|
static void edit_any_expr(GtkWidget *widget, struct expr **expr)
|
||||||
{
|
{
|
||||||
char *s;
|
char *s;
|
||||||
|
|
||||||
edit_ops = &edit_ops_expr;
|
|
||||||
edit_ctx = expr;
|
|
||||||
s = unparse(*expr);
|
s = unparse(*expr);
|
||||||
gtk_entry_set_text(GTK_ENTRY(status_entry), s);
|
setup_edit(widget, s, &edit_ops_expr, expr);
|
||||||
free(s);
|
free(s);
|
||||||
entry_color(COLOR_EDIT_ASIS);
|
}
|
||||||
gtk_widget_show(status_entry);
|
|
||||||
|
|
||||||
|
void edit_expr(struct expr **expr)
|
||||||
|
{
|
||||||
|
edit_any_expr(status_entry, expr);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void edit_x(struct expr **expr)
|
||||||
|
{
|
||||||
|
edit_any_expr(status_entry_x, expr);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void edit_y(struct expr **expr)
|
||||||
|
{
|
||||||
|
edit_any_expr(status_entry_y, expr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -344,9 +369,13 @@ void edit_expr(struct expr **expr)
|
|||||||
static gboolean changed(GtkWidget *widget, GdkEventMotion *event,
|
static gboolean changed(GtkWidget *widget, GdkEventMotion *event,
|
||||||
gpointer data)
|
gpointer data)
|
||||||
{
|
{
|
||||||
if (edit_ops && edit_ops->changed)
|
struct edit_ops *ops =
|
||||||
edit_ops->changed(widget,
|
gtk_object_get_data(GTK_OBJECT(widget), "edit-ops");
|
||||||
gtk_entry_get_text(GTK_ENTRY(widget)), edit_ctx);
|
void *ctx = gtk_object_get_data(GTK_OBJECT(widget), "edit-ctx");
|
||||||
|
|
||||||
|
if (ops && ops->changed)
|
||||||
|
ops->changed(widget, gtk_entry_get_text(GTK_ENTRY(widget)),
|
||||||
|
ctx);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -354,9 +383,13 @@ static gboolean changed(GtkWidget *widget, GdkEventMotion *event,
|
|||||||
static gboolean activate(GtkWidget *widget, GdkEventMotion *event,
|
static gboolean activate(GtkWidget *widget, GdkEventMotion *event,
|
||||||
gpointer data)
|
gpointer data)
|
||||||
{
|
{
|
||||||
if (edit_ops && edit_ops->activate)
|
struct edit_ops *ops =
|
||||||
if (edit_ops->activate(widget,
|
gtk_object_get_data(GTK_OBJECT(widget), "edit-ops");
|
||||||
gtk_entry_get_text(GTK_ENTRY(widget)), edit_ctx)) {
|
void *ctx = gtk_object_get_data(GTK_OBJECT(widget), "edit-ctx");
|
||||||
|
|
||||||
|
if (ops && ops->activate)
|
||||||
|
if (ops->activate(widget,
|
||||||
|
gtk_entry_get_text(GTK_ENTRY(widget)), ctx)) {
|
||||||
inst_deselect();
|
inst_deselect();
|
||||||
change_world();
|
change_world();
|
||||||
}
|
}
|
||||||
@ -366,8 +399,9 @@ static gboolean activate(GtkWidget *widget, GdkEventMotion *event,
|
|||||||
|
|
||||||
void edit_nothing(void)
|
void edit_nothing(void)
|
||||||
{
|
{
|
||||||
edit_ops = NULL;
|
|
||||||
gtk_widget_hide(status_entry);
|
gtk_widget_hide(status_entry);
|
||||||
|
gtk_widget_hide(status_entry_x);
|
||||||
|
gtk_widget_hide(status_entry_y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -418,54 +452,65 @@ static GtkWidget *add_label(GtkWidget *tab, int col, int row)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static GtkWidget *add_entry(GtkWidget *tab, int col, int row)
|
||||||
|
{
|
||||||
|
GtkWidget *entry;
|
||||||
|
|
||||||
|
entry = gtk_entry_new();
|
||||||
|
gtk_entry_set_has_frame(GTK_ENTRY(entry), FALSE);
|
||||||
|
gtk_table_attach_defaults(GTK_TABLE(tab), entry,
|
||||||
|
col, col+1, row, row+1);
|
||||||
|
|
||||||
|
g_signal_connect(G_OBJECT(entry), "changed",
|
||||||
|
G_CALLBACK(changed), entry);
|
||||||
|
g_signal_connect(G_OBJECT(entry), "activate",
|
||||||
|
G_CALLBACK(activate), entry);
|
||||||
|
|
||||||
|
return entry;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void make_status_area(GtkWidget *vbox)
|
void make_status_area(GtkWidget *vbox)
|
||||||
{
|
{
|
||||||
GtkWidget *tab, *hbox;
|
GtkWidget *tab;
|
||||||
|
|
||||||
tab = gtk_table_new(5, 2, FALSE);
|
tab = gtk_table_new(6, 3, FALSE);
|
||||||
gtk_box_pack_start(GTK_BOX(vbox), tab, FALSE, TRUE, 0);
|
gtk_box_pack_start(GTK_BOX(vbox), tab, FALSE, TRUE, 0);
|
||||||
|
|
||||||
/* name and input */
|
/* types */
|
||||||
|
|
||||||
status_name = add_label(tab, 0, 0);
|
status_type_x = add_label(tab, 0, 0);
|
||||||
|
status_type_y = add_label(tab, 0, 1);
|
||||||
/*
|
status_type_entry = add_label(tab, 0, 2);
|
||||||
* @@@ this should make the entry consume all available space. alas, it
|
|
||||||
* doesn't work like that :-(
|
|
||||||
*/
|
|
||||||
hbox = gtk_hbox_new(TRUE, 0);
|
|
||||||
gtk_table_attach_defaults(GTK_TABLE(tab), hbox,
|
|
||||||
0, 1, 1, 2);
|
|
||||||
|
|
||||||
status_entry = gtk_entry_new();
|
|
||||||
gtk_box_pack_start(GTK_BOX(hbox), status_entry, TRUE, TRUE, 0);
|
|
||||||
|
|
||||||
gtk_entry_set_has_frame(GTK_ENTRY(status_entry), FALSE);
|
|
||||||
|
|
||||||
g_signal_connect(G_OBJECT(status_entry), "changed",
|
|
||||||
G_CALLBACK(changed), status_entry);
|
|
||||||
g_signal_connect(G_OBJECT(status_entry), "activate",
|
|
||||||
G_CALLBACK(activate), status_entry);
|
|
||||||
|
|
||||||
/* x / y */
|
/* x / y */
|
||||||
|
|
||||||
status_x = add_label(tab, 1, 0);
|
status_x = add_label(tab, 1, 0);
|
||||||
|
status_entry_x = add_entry(tab, 2, 0);
|
||||||
status_y = add_label(tab, 1, 1);
|
status_y = add_label(tab, 1, 1);
|
||||||
|
status_entry_y = add_entry(tab, 2, 1);
|
||||||
|
|
||||||
/* r / angle */
|
/* name and input */
|
||||||
|
|
||||||
status_r = add_label(tab, 2, 0);
|
status_name = add_label(tab, 1, 2);
|
||||||
status_angle = add_label(tab, 2, 1);
|
status_entry = add_entry(tab, 2, 2);
|
||||||
|
|
||||||
/* sys / user pos */
|
/* sys / user pos */
|
||||||
|
|
||||||
status_sys_pos = add_label(tab, 3, 0);
|
status_sys_x = add_label(tab, 3, 0);
|
||||||
status_user_pos = add_label(tab, 3, 1);
|
status_sys_y = add_label(tab, 3, 1);
|
||||||
|
status_user_x = add_label(tab, 4, 0);
|
||||||
|
status_user_y = add_label(tab, 4, 1);
|
||||||
|
|
||||||
|
/* r / angle */
|
||||||
|
|
||||||
|
status_r = add_label(tab, 3, 2);
|
||||||
|
status_angle = add_label(tab, 4, 2);
|
||||||
|
|
||||||
/* zoom / grid */
|
/* zoom / grid */
|
||||||
|
|
||||||
status_zoom = add_label(tab, 4, 0);
|
status_zoom = add_label(tab, 5, 0);
|
||||||
status_grid = add_label(tab, 4, 1);
|
status_grid = add_label(tab, 5, 1);
|
||||||
|
|
||||||
/* message bar */
|
/* message bar */
|
||||||
|
|
||||||
|
11
gui_status.h
11
gui_status.h
@ -26,15 +26,22 @@ void edit_unique_null(const char **s, int (*validate)(const char *s, void *ctx),
|
|||||||
void *ctx);
|
void *ctx);
|
||||||
void edit_name(char **s, int (*validate)(const char *s, void *ctx), void *ctx);
|
void edit_name(char **s, int (*validate)(const char *s, void *ctx), void *ctx);
|
||||||
void edit_expr(struct expr **expr);
|
void edit_expr(struct expr **expr);
|
||||||
|
void edit_x(struct expr **expr);
|
||||||
|
void edit_y(struct expr **expr);
|
||||||
void edit_nothing(void);
|
void edit_nothing(void);
|
||||||
|
|
||||||
|
void status_set_type_x(const char *fmt, ...);
|
||||||
|
void status_set_type_y(const char *fmt, ...);
|
||||||
|
void status_set_type_entry(const char *fmt, ...);
|
||||||
void status_set_name(const char *fmt, ...);
|
void status_set_name(const char *fmt, ...);
|
||||||
void status_set_x(const char *fmt, ...);
|
void status_set_x(const char *fmt, ...);
|
||||||
void status_set_y(const char *fmt, ...);
|
void status_set_y(const char *fmt, ...);
|
||||||
void status_set_r(const char *fmt, ...);
|
void status_set_r(const char *fmt, ...);
|
||||||
void status_set_angle(const char *fmt, ...);
|
void status_set_angle(const char *fmt, ...);
|
||||||
void status_set_sys_pos(const char *fmt, ...);
|
void status_set_sys_x(const char *fmt, ...);
|
||||||
void status_set_user_pos(const char *fmt, ...);
|
void status_set_sys_y(const char *fmt, ...);
|
||||||
|
void status_set_user_x(const char *fmt, ...);
|
||||||
|
void status_set_user_y(const char *fmt, ...);
|
||||||
void status_set_zoom(const char *fmt, ...);
|
void status_set_zoom(const char *fmt, ...);
|
||||||
void status_set_grid(const char *fmt, ...);
|
void status_set_grid(const char *fmt, ...);
|
||||||
|
|
||||||
|
19
inst.c
19
inst.c
@ -173,6 +173,9 @@ void inst_deselect(void)
|
|||||||
if (selected_inst)
|
if (selected_inst)
|
||||||
set_path(0);
|
set_path(0);
|
||||||
deselect_outside();
|
deselect_outside();
|
||||||
|
status_set_type_x("");
|
||||||
|
status_set_type_y("");
|
||||||
|
status_set_type_entry("");
|
||||||
status_set_name("");
|
status_set_name("");
|
||||||
status_set_x("");
|
status_set_x("");
|
||||||
status_set_y("");
|
status_set_y("");
|
||||||
@ -198,8 +201,10 @@ static void rect_status(struct coord a, struct coord b, unit_type width)
|
|||||||
status_set_angle("a = %3.1f deg", angle);
|
status_set_angle("a = %3.1f deg", angle);
|
||||||
}
|
}
|
||||||
status_set_r("r = %5.2f mm", hypot(units_to_mm(d.x), units_to_mm(d.y)));
|
status_set_r("r = %5.2f mm", hypot(units_to_mm(d.x), units_to_mm(d.y)));
|
||||||
if (width != -1)
|
if (width != -1) {
|
||||||
status_set_name("width = %5.2f mm", units_to_mm(width));
|
status_set_type_entry("width =");
|
||||||
|
status_set_name("%5.2f mm", units_to_mm(width));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -280,9 +285,12 @@ static int validate_vec_name(const char *s, void *ctx)
|
|||||||
|
|
||||||
static void vec_op_select(struct inst *self)
|
static void vec_op_select(struct inst *self)
|
||||||
{
|
{
|
||||||
|
status_set_type_entry("ref =");
|
||||||
status_set_name(self->vec->name ? self->vec->name : "");
|
status_set_name(self->vec->name ? self->vec->name : "");
|
||||||
rect_status(self->base, self->u.rect.end, -1);
|
rect_status(self->base, self->u.rect.end, -1);
|
||||||
edit_unique_null(&self->vec->name, validate_vec_name, self->vec);
|
edit_unique_null(&self->vec->name, validate_vec_name, self->vec);
|
||||||
|
edit_x(&self->vec->x);
|
||||||
|
edit_y(&self->vec->y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -414,6 +422,7 @@ static int validate_pad_name(const char *s, void *ctx)
|
|||||||
|
|
||||||
static void pad_op_select(struct inst *self)
|
static void pad_op_select(struct inst *self)
|
||||||
{
|
{
|
||||||
|
status_set_type_entry("label =");
|
||||||
status_set_name(self->u.name);
|
status_set_name(self->u.name);
|
||||||
rect_status(self->bbox.min, self->bbox.max, -1);
|
rect_status(self->bbox.min, self->bbox.max, -1);
|
||||||
edit_name(&self->obj->u.pad.name, validate_pad_name, NULL);
|
edit_name(&self->obj->u.pad.name, validate_pad_name, NULL);
|
||||||
@ -459,7 +468,8 @@ static void arc_op_select(struct inst *self)
|
|||||||
self->u.arc.a1 == self->u.arc.a2 ? 360 :
|
self->u.arc.a1 == self->u.arc.a2 ? 360 :
|
||||||
self->u.arc.a2-self->u.arc.a1);
|
self->u.arc.a2-self->u.arc.a1);
|
||||||
status_set_r("r = %5.2f mm", units_to_mm(self->u.arc.r));
|
status_set_r("r = %5.2f mm", units_to_mm(self->u.arc.r));
|
||||||
status_set_name("width = %5.2f mm", units_to_mm(self->u.arc.width));
|
status_set_type_entry("width =");
|
||||||
|
status_set_name("%5.2f mm", units_to_mm(self->u.arc.width));
|
||||||
edit_expr(&self->obj->u.arc.width);
|
edit_expr(&self->obj->u.arc.width);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -516,7 +526,8 @@ static void meas_op_debug(struct inst *self)
|
|||||||
static void meas_op_select(struct inst *self)
|
static void meas_op_select(struct inst *self)
|
||||||
{
|
{
|
||||||
rect_status(self->bbox.min, self->bbox.max, -1);
|
rect_status(self->bbox.min, self->bbox.max, -1);
|
||||||
status_set_name("offset = %5.2f mm", units_to_mm(self->u.meas.offset));
|
status_set_type_entry("width =");
|
||||||
|
status_set_name("%5.2f mm", units_to_mm(self->u.meas.offset));
|
||||||
edit_expr(&self->obj->u.meas.offset);
|
edit_expr(&self->obj->u.meas.offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user