/
progress.h
100 lines (77 loc) · 2.73 KB
/
progress.h
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
/* Handle feedback about eval progress.
*/
/*
Copyright (C) 1991-2003 The National Gallery
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 watch) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/*
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
*/
/* The max size of the feedback message.
*/
#define PROGRESS_FEEDBACK_SIZE (100)
#define TYPE_PROGRESS (progress_get_type())
#define PROGRESS( obj ) \
(G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_PROGRESS, Progress ))
#define PROGRESS_CLASS( klass ) \
(G_TYPE_CHECK_CLASS_CAST( (klass), TYPE_PROGRESS, ProgressClass))
#define IS_PROGRESS( obj ) \
(G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_PROGRESS ))
#define IS_PROGRESS_CLASS( klass ) \
(G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_PROGRESS ))
#define PROGRESS_GET_CLASS( obj ) \
(G_TYPE_INSTANCE_GET_CLASS( (obj), TYPE_PROGRESS, ProgressClass ))
typedef struct _Progress {
iObject parent_object;
/* Nest progress_begin() calls with this.
*/
int count;
/* How long we've been busy, time since last update.
*/
GTimer *busy_timer;
GTimer *update_timer;
/* Trying to cancel.
*/
gboolean cancel;
/* In the "busy" state, ie. we've emitted "begin" and so we need to
* emit "end" on progress_end().
*/
gboolean busy;
/* The feedback message we suggest, percent for progress bar.
*/
VipsBuf feedback;
char buf[PROGRESS_FEEDBACK_SIZE];
int percent;
} Progress;
typedef struct _ProgressClass {
iObjectClass parent_class;
/* Entering busy state: display progress bar, change cursor, etc.
*/
void (*begin)( Progress * );
/* Progress update. Set cancel to cancel computation.
*/
void (*update)( Progress *, gboolean *cancel );
/* End busy state. Restore screen.
*/
void (*end)( Progress * );
} ProgressClass;
/* Called from all over nip2 as computation proceeds.
*/
void progress_begin( void );
gboolean progress_update_percent( int percent, int eta );
gboolean progress_update_expr( Expr *expr );
gboolean progress_update_loading( int percent, const char *filename );
gboolean progress_update_tick( void );
void progress_end( void );
GType progress_get_type( void );
Progress *progress_get( void );