summaryrefslogtreecommitdiff
path: root/gui/common.h
blob: 789f5278ad2636bdeb1b49b8a76b05c9e3495707 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
/*
 * gui/common.h - Common data structures and declarations
 *
 * Written 2016 by Werner Almesberger
 * Copyright 2016 by Werner Almesberger
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 */

#ifndef GUI_COMMON_H
#define	GUI_COMMON_H

#include <stdbool.h>

#include <gtk/gtk.h>

#include "gfx/cro.h"
#include "file/git-hist.h"
#include "kicad/lib.h"
#include "kicad/sch.h"
#include "gui/aoi.h"
#include "gui/over.h"


struct gui_ctx;

struct gui_sheet {
	const struct sheet *sch;
	struct gui_ctx *ctx;	/* back link */
	struct cro_ctx *gfx_ctx;

	int w, h;		/* in eeschema coordinates */
	int xmin, ymin;

	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 */

	/* caching support */
	void **oids;		/* file object IDs */
	int libs_open;
	struct sch_ctx sch_ctx;
	struct lib lib;		/* combined library */
	bool identical;		/* identical with previous entry */

	struct gui_hist *next;
};

struct gui_ctx {
	GtkWidget *da;

	unsigned zoom;		/* scale by 1.0 / (1 << zoom) */
	int x, y;		/* center, in eeschema coordinates */

	struct gui_hist *hist;	/* revision history; NULL if none */
	struct hist *vcs_hist;	/* underlying VCS data; NULL if none */

	bool showing_history;
	enum selecting {
		sel_only,	/* select the only revision we show */
		sel_new,	/* select the new revision */
		sel_old,	/* select the old revision */
	} selecting;

	struct overlay *sheet_overlays;
	struct overlay *hist_overlays;
	struct overlay *pop_overlays; /* pop-up dialogs */
	int pop_x, pop_y;
	struct aoi *aois;	/* areas of interest; in canvas coord  */

	struct gui_sheet delta_a;
	struct gui_sheet delta_b;
	struct gui_sheet delta_ab;

	struct gui_sheet *curr_sheet;
				/* current sheet, always on new_hist */
	struct gui_hist *new_hist;
	struct gui_hist *old_hist;	/* NULL if not comparing */

	int hist_y_offset;	/* history list y offset */

	/* progress bar */
	int hist_size;		/* total number of revisions */
	unsigned progress;	/* progress counter */
	unsigned progress_scale;/* right-shift by this value */
};



/* progress.c */

void setup_progress_bar(struct gui_ctx *ctx, GtkWidget *window);
void progress_update(struct gui_ctx *ctx);

/* glabel.c */

void dehover_glabel(struct gui_ctx *ctx);
void add_glabel_aoi(struct gui_sheet *sheet, const struct sch_obj *obj);

/* gui.c */

void redraw(const struct gui_ctx *ctx);
void eeschema_coord(const struct gui_ctx *ctx, int x, int y, int *rx, int *ry);
void go_to_sheet(struct gui_ctx *ctx, struct gui_sheet *sheet);

#endif /* !GUI_COMMON_H */