summaryrefslogtreecommitdiffstats
path: root/src/eulogium.h
blob: ea16cbd6bf301ede129dd45132d3eaad33b1f4bd (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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/*
 * eulogium main header
 *
 * Copyright (c) 2015 Ultimaker B.V.
 * Author: Olliver Schinagl <o.schinagl@ultimaker.com>
 *
 * SPDX-License-Identifier:	AGPL-3.0+
 */

#ifndef _EULOGIUM_H
#define _EULOGIUM_H

#include <Eeze_Disk.h>
#include <Eldbus.h>
#include <Evas.h>
#include <stdint.h>

#include "eulogium_item_list.h"
#include "procedures.h"

#define IPV4_MAX_LEN 16 /* 255.255.255.255\0 */
#define IPV6_MAX_LEN 40 /* ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff\0 */
#define SSID_MAX_LEN 33 /* Section 7.3.2.1 SSID element of IEE802.11-2007 + \0 */
#include "ui_widgets.h"

enum screen_type {
	NONE,
	FUNC,
	MATERIAL,
	PROGRESS,
	END, /* sentinel */
};

struct printer_data {
	enum printer_status status;
	char **file_handlers;
	uint_fast8_t hotend_count;
	double *hotend_temp;
	double *hotend_target_temp;
	double bed_temp;
	double bed_target_temp;
};

enum proxy_idx {
	PRINTER,
	NETWORK,
	LED,
	LAST /* sentinel */
};

struct dbus_data {
	Eldbus_Connection *conn;
	Eldbus_Pending *pending;
	Eldbus_Proxy *proxy[LAST];
};

struct mount_data {
	char *id;
	Eldbus_Proxy *proxy;
	Eeze_Disk *disk;
	Eina_List **mounts;
};

#define _TECH_ETHERNET "ethernet"
#define _TECH_WIFI "wifi"

enum network_tech {
	ETHERNET,
	WIFI,
};

struct network_data {
	char *obj_path;
	enum network_tech tech;
	char ipv4[IPV4_MAX_LEN];
	char ipv6[IPV6_MAX_LEN];
	char ssid[SSID_MAX_LEN];
};

struct eulogium_data {
	Evas_Object *navi;
	Evas_Object *time;
	Evas_Object *name;
	Evas_Object *status;
	Evas_Object *progress;
	Ecore_Timer *progress_data_refresh;
	Evas_Object *footer; /* XXX this really shows why we need per window persistent data */
	struct printer_data printer;
	struct print_data print;
	struct dbus_data dbus;
	Eina_List *mounts;
	void *data;
	struct network_data *networks;
	struct procedure_data *procedures;
};

struct multi_text {
	uint_fast8_t count;
	const char *button_text;
	const char *text[];
};

struct multi_screen {
	enum screen_type type;
	char *text;
	void (*func)(void *data);
	void *data;
	char *prev_button;
	char *next_button;
	/* TODO consider adding a button_def for the buttons */
};

struct multi_screen_data {
	uint_fast8_t count;
	struct multi_screen *screen;
};

Evas_Object *eulogium_generic_error(struct eulogium_data *eulogium, uint8_t eulogium_error);

void eulogium_print_data_set(struct eulogium_data *eulogium, char *filepath);

Evas_Object *eulogium_main_menu(Evas_Object *window, struct eulogium_data *eulogium);
Evas_Object *eulogium_split_screen(Evas_Object *parent, Evas_Object *top, Evas_Object *bottom);
Evas_Object *eulogium_tripple_button_menu(Evas_Object *parent, const struct button_def *left, const struct button_def *right, const struct button_def *bottom);
Evas_Object *eulogium_dual_button_add(Evas_Object *parent, const struct button_def *left, const struct button_def *right);
Evas_Object *eulogium_print_menu(struct eulogium_data *eulogium, char *filepath);
Evas_Object *eulogium_print_ignore(struct eulogium_data *eulogium);
Evas_Object *eulogium_print_progress(struct eulogium_data *eulogium);
Evas_Object *eulogium_multi_text_menu(struct eulogium_data *eulogium, Evas_Object *parent, struct button_def *button, struct multi_text *data, const uint_fast8_t pagenum, Eina_Bool pageindex);
Evas_Object *menu_widget_list(struct eulogium_data *eulogium, Evas_Object *parent, struct menu_def *menu);
Evas_Object *eulogium_multi_screen_menu(struct eulogium_data *eulogium, Evas_Object *parent, struct multi_screen_data *screen_data, const uint_fast8_t pagenum, Eina_Bool pageindex);
Evas_Object *eulogium_menu_confirm(Evas_Object *parent, const char *msg, const char *prev, const struct button_def *next);

#endif /* _EULOGIUM_H */