1
0
mirror of git://projects.qi-hardware.com/eda-tools.git synced 2024-11-04 23:29:42 +02: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 ?
- glabels: on hover, show clickable list of sheets where else label is used
- highlight nets ?
- we use find_corresponding_sheet way too often. Consider changing curr_sheet
to new_sheet and old_sheet.
GUI/history
- revision selection is still a bit inconvenient and lacks quick way for
@ -56,6 +58,5 @@ GUI/history
is not very clear.
GUI/sheets:
- show sheet number (e.g., on hover)
- need a way to change new/old sheet association, in case automatic selection
fails (reserved hotkeys: Left/Rigth)

View File

@ -45,7 +45,7 @@ struct gui_ctx;
struct gui_sheet {
const struct sheet *sch;
struct gui_ctx *ctx; /* back link */
struct gui_ctx *ctx; /* back link */
struct cro_ctx *gfx_ctx;
int w, h; /* in eeschema coordinates */
@ -53,22 +53,23 @@ struct gui_sheet {
bool rendered; /* 0 if still have to render it */
struct overlay *over; /* current overlay */
struct aoi *aois; /* areas of interest; in schematics coord */
struct gui_sheet *next;
};
struct gui_hist {
struct gui_ctx *ctx; /* back link */
struct hist *vcs_hist; /* NULL if not from repo */
struct overlay *over; /* current overlay */
struct gui_sheet *sheets; /* NULL if failed */
unsigned age; /* 0-based; uncommitted or HEAD = 0 */
struct gui_ctx *ctx; /* back link */
struct hist *vcs_hist; /* NULL if not from repo */
struct overlay *over; /* current overlay */
struct gui_sheet *sheets; /* NULL if failed */
unsigned age; /* 0-based; uncommitted or HEAD = 0 */
/* caching support */
void **oids; /* file object IDs */
void **oids; /* file object IDs */
struct sch_ctx sch_ctx;
struct lib lib; /* combined library */
struct lib lib; /* combined library */
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)
{
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)
{
struct gui_sheet *parent;
const char *title;
struct overlay *over;
parent = find_parent_sheet(ctx->new_hist->sheets, sheet);
if (parent)
sheet_selector_recurse(ctx, parent);
title = sheet->sch->title;
if (!title)
title = "(unnamed)";
over = overlay_add(&ctx->sheet_overlays, &ctx->aois,
NULL, close_subsheet, sheet);
overlay_text(over, "<b>%s</b>", title);
sheet->over = overlay_add(&ctx->sheet_overlays, &ctx->aois,
hover_sheet, close_subsheet, sheet);
hover_sheet(sheet, 0);
}