1
0
mirror of git://projects.qi-hardware.com/eda-tools.git synced 2024-09-30 07:29:27 +03:00

eeshow/gui.c: show sheet number on hover

This commit is contained in:
Werner Almesberger 2016-08-10 20:41:33 -03:00
parent 8a0a79e461
commit d63b534fb3
2 changed files with 41 additions and 17 deletions

View File

@ -42,6 +42,8 @@ GUI:
will help ? will help ?
- glabels: on hover, show clickable list of sheets where else label is used - glabels: on hover, show clickable list of sheets where else label is used
- highlight nets ? - highlight nets ?
- we use find_corresponding_sheet way too often. Consider changing curr_sheet
to new_sheet and old_sheet.
GUI/history GUI/history
- revision selection is still a bit inconvenient and lacks quick way for - revision selection is still a bit inconvenient and lacks quick way for
@ -56,6 +58,5 @@ GUI/history
is not very clear. is not very clear.
GUI/sheets: GUI/sheets:
- show sheet number (e.g., on hover)
- need a way to change new/old sheet association, in case automatic selection - need a way to change new/old sheet association, in case automatic selection
fails (reserved hotkeys: Left/Rigth) fails (reserved hotkeys: Left/Rigth)

View File

@ -45,7 +45,7 @@ struct gui_ctx;
struct gui_sheet { struct gui_sheet {
const struct sheet *sch; const struct sheet *sch;
struct gui_ctx *ctx; /* back link */ struct gui_ctx *ctx; /* back link */
struct cro_ctx *gfx_ctx; struct cro_ctx *gfx_ctx;
int w, h; /* in eeschema coordinates */ int w, h; /* in eeschema coordinates */
@ -53,22 +53,23 @@ struct gui_sheet {
bool rendered; /* 0 if still have to render it */ bool rendered; /* 0 if still have to render it */
struct overlay *over; /* current overlay */
struct aoi *aois; /* areas of interest; in schematics coord */ struct aoi *aois; /* areas of interest; in schematics coord */
struct gui_sheet *next; struct gui_sheet *next;
}; };
struct gui_hist { struct gui_hist {
struct gui_ctx *ctx; /* back link */ struct gui_ctx *ctx; /* back link */
struct hist *vcs_hist; /* NULL if not from repo */ struct hist *vcs_hist; /* NULL if not from repo */
struct overlay *over; /* current overlay */ struct overlay *over; /* current overlay */
struct gui_sheet *sheets; /* NULL if failed */ struct gui_sheet *sheets; /* NULL if failed */
unsigned age; /* 0-based; uncommitted or HEAD = 0 */ unsigned age; /* 0-based; uncommitted or HEAD = 0 */
/* caching support */ /* caching support */
void **oids; /* file object IDs */ void **oids; /* file object IDs */
struct sch_ctx sch_ctx; struct sch_ctx sch_ctx;
struct lib lib; /* combined library */ struct lib lib; /* combined library */
struct gui_hist *next; struct gui_hist *next;
}; };
@ -562,6 +563,33 @@ static void close_subsheet(void *user)
} }
static bool hover_sheet(void *user, bool on)
{
struct gui_sheet *sheet = user;
struct gui_ctx *ctx = sheet->ctx;
const char *title = sheet->sch->title;
if (!title)
title = "(unnamed)";
if (on) {
const struct gui_sheet *s;
int n = 0, this = -1;
for (s = ctx->new_hist->sheets; s; s = s->next) {
n++;
if (s == sheet)
this = n;
}
overlay_text(sheet->over, "<b>%s</b>\n<big>%d / %d</big>",
title, this, n);
} else {
overlay_text(sheet->over, "<b>%s</b>", title);
}
redraw(ctx);
return 1;
}
static bool show_history_details(void *user, bool on) static bool show_history_details(void *user, bool on)
{ {
struct gui_hist *h = user; struct gui_hist *h = user;
@ -631,18 +659,13 @@ static struct gui_sheet *find_parent_sheet(struct gui_sheet *sheets,
static void sheet_selector_recurse(struct gui_ctx *ctx, struct gui_sheet *sheet) static void sheet_selector_recurse(struct gui_ctx *ctx, struct gui_sheet *sheet)
{ {
struct gui_sheet *parent; struct gui_sheet *parent;
const char *title;
struct overlay *over;
parent = find_parent_sheet(ctx->new_hist->sheets, sheet); parent = find_parent_sheet(ctx->new_hist->sheets, sheet);
if (parent) if (parent)
sheet_selector_recurse(ctx, parent); sheet_selector_recurse(ctx, parent);
title = sheet->sch->title; sheet->over = overlay_add(&ctx->sheet_overlays, &ctx->aois,
if (!title) hover_sheet, close_subsheet, sheet);
title = "(unnamed)"; hover_sheet(sheet, 0);
over = overlay_add(&ctx->sheet_overlays, &ctx->aois,
NULL, close_subsheet, sheet);
overlay_text(over, "<b>%s</b>", title);
} }