mirror of
git://projects.qi-hardware.com/eda-tools.git
synced 2024-11-23 02:30:36 +02:00
eeshow/gui/: difference display can now be switched with New/Old/Diff
Still need a GUI way to do the same.
This commit is contained in:
parent
6ff7d63312
commit
006d83057b
@ -174,4 +174,7 @@ Delete or Backspace go to the next higher sheet in hierarchy
|
|||||||
PgUp go to the previous sheet in sequence
|
PgUp go to the previous sheet in sequence
|
||||||
PgDn go to the next sheet in sequence
|
PgDn go to the next sheet in sequence
|
||||||
Up or Down invoke the revision history (WIP)
|
Up or Down invoke the revision history (WIP)
|
||||||
|
D when comparing revisions, show difference (default)
|
||||||
|
N show newer sheet
|
||||||
|
O show older sheet
|
||||||
Q quit the viewer
|
Q quit the viewer
|
||||||
|
@ -94,6 +94,12 @@ struct gui_ctx {
|
|||||||
|
|
||||||
struct gui_sheet *curr_sheet;
|
struct gui_sheet *curr_sheet;
|
||||||
/* current sheet, always on new_hist */
|
/* current sheet, always on new_hist */
|
||||||
|
|
||||||
|
enum {
|
||||||
|
diff_new, /* show only new sheet */
|
||||||
|
diff_old, /* show only old sheet */
|
||||||
|
diff_delta, /* show delta */
|
||||||
|
} diff_mode;
|
||||||
struct gui_hist *new_hist;
|
struct gui_hist *new_hist;
|
||||||
struct gui_hist *old_hist; /* NULL if not comparing */
|
struct gui_hist *old_hist; /* NULL if not comparing */
|
||||||
|
|
||||||
|
@ -378,6 +378,7 @@ int gui(unsigned n_args, char **args, bool recurse, int limit)
|
|||||||
.pop_origin = NULL,
|
.pop_origin = NULL,
|
||||||
.glabel = NULL,
|
.glabel = NULL,
|
||||||
.aois = NULL,
|
.aois = NULL,
|
||||||
|
.diff_mode = diff_delta,
|
||||||
.old_hist = NULL,
|
.old_hist = NULL,
|
||||||
.hist_y_offset = 0,
|
.hist_y_offset = 0,
|
||||||
.hist_size = 0,
|
.hist_size = 0,
|
||||||
|
@ -130,6 +130,8 @@ static void click_history(void *user)
|
|||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ctx->diff_mode = diff_delta;
|
||||||
|
|
||||||
if (ctx->new_hist->age > ctx->old_hist->age) {
|
if (ctx->new_hist->age > ctx->old_hist->age) {
|
||||||
swap(ctx->new_hist, ctx->old_hist);
|
swap(ctx->new_hist, ctx->old_hist);
|
||||||
if (ctx->selecting == sel_old)
|
if (ctx->selecting == sel_old)
|
||||||
|
@ -72,15 +72,15 @@ static inline int cy(int y, int yo, float scale)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void highlight_glabel(const struct gui_ctx *ctx, cairo_t *cr,
|
static void highlight_glabel(const struct gui_ctx *ctx,
|
||||||
int x, int y, float f)
|
const struct gui_sheet *sheet, cairo_t *cr, int x, int y, float f)
|
||||||
{
|
{
|
||||||
const struct sch_obj *obj;
|
const struct sch_obj *obj;
|
||||||
|
|
||||||
if (!ctx->glabel)
|
if (!ctx->glabel)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (obj = ctx->curr_sheet->sch->objs; obj; obj = obj->next) {
|
for (obj = sheet->sch->objs; obj; obj = obj->next) {
|
||||||
const struct dwg_bbox *bbox = &obj->u.text.bbox;
|
const struct dwg_bbox *bbox = &obj->u.text.bbox;
|
||||||
|
|
||||||
if (obj->type != sch_obj_glabel)
|
if (obj->type != sch_obj_glabel)
|
||||||
@ -127,8 +127,13 @@ static gboolean on_draw_event(GtkWidget *widget, cairo_t *cr,
|
|||||||
y = -(sheet->ymin + ctx->y) * f + alloc.height / 2;
|
y = -(sheet->ymin + ctx->y) * f + alloc.height / 2;
|
||||||
|
|
||||||
cro_canvas_prepare(cr);
|
cro_canvas_prepare(cr);
|
||||||
if (!ctx->old_hist) {
|
if (!ctx->old_hist || ctx->diff_mode == diff_new) {
|
||||||
highlight_glabel(ctx, cr, x, y, f);
|
highlight_glabel(ctx, sheet, cr, x, y, f);
|
||||||
|
cro_canvas_draw(sheet->gfx_ctx, cr, x, y, f);
|
||||||
|
} else if (ctx->diff_mode == diff_old) {
|
||||||
|
sheet = find_corresponding_sheet(ctx->old_hist->sheets,
|
||||||
|
ctx->new_hist->sheets, ctx->curr_sheet);
|
||||||
|
highlight_glabel(ctx, sheet, cr, x, y, f);
|
||||||
cro_canvas_draw(sheet->gfx_ctx, cr, x, y, f);
|
cro_canvas_draw(sheet->gfx_ctx, cr, x, y, f);
|
||||||
} else {
|
} else {
|
||||||
#if 0
|
#if 0
|
||||||
|
@ -414,6 +414,7 @@ static void sheet_key(void *user, int x, int y, int keyval)
|
|||||||
case '*':
|
case '*':
|
||||||
zoom_to_extents(ctx);
|
zoom_to_extents(ctx);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GDK_KEY_Home:
|
case GDK_KEY_Home:
|
||||||
if (sheet != ctx->new_hist->sheets)
|
if (sheet != ctx->new_hist->sheets)
|
||||||
go_to_sheet(ctx, ctx->new_hist->sheets);
|
go_to_sheet(ctx, ctx->new_hist->sheets);
|
||||||
@ -438,6 +439,20 @@ static void sheet_key(void *user, int x, int y, int keyval)
|
|||||||
case GDK_KEY_KP_Down:
|
case GDK_KEY_KP_Down:
|
||||||
show_history(ctx, sel_old);
|
show_history(ctx, sel_old);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case GDK_KEY_n:
|
||||||
|
ctx->diff_mode = diff_new;
|
||||||
|
redraw(ctx);
|
||||||
|
break;
|
||||||
|
case GDK_KEY_o:
|
||||||
|
ctx->diff_mode = diff_old;
|
||||||
|
redraw(ctx);
|
||||||
|
break;
|
||||||
|
case GDK_KEY_d:
|
||||||
|
ctx->diff_mode = diff_delta;
|
||||||
|
redraw(ctx);
|
||||||
|
break;
|
||||||
|
|
||||||
case GDK_KEY_q:
|
case GDK_KEY_q:
|
||||||
gtk_main_quit();
|
gtk_main_quit();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user