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 );
|