File: progress.h

package info (click to toggle)
nip2 8.9.1-2
  • links: PTS
  • area: main
  • in suites: forky, sid
  • size: 23,404 kB
  • sloc: ansic: 64,076; sh: 4,681; yacc: 1,133; makefile: 927; lex: 386; xml: 40; perl: 17
file content (100 lines) | stat: -rw-r--r-- 2,802 bytes parent folder | download | duplicates (7)
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.,
    51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  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 );