/* This file is part of darktable, copyright (c) 2014 tobias ellinghaus. darktable 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 3 of the License, or (at your option) any later version. darktable 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 darktable. If not, see . */ #ifndef __CONTROL_JOBS_H__ #define __CONTROL_JOBS_H__ #include struct dt_control_t; struct _dt_job_t; struct _dt_progress_t; typedef struct _dt_progress_t dt_progress_t; typedef void (*dt_progress_cancel_callback_t)(dt_progress_t *progress, void *data); /** create a new progress object and add it to the gui. pass it to dt_control_progress_destroy() to free the * resources. */ dt_progress_t *dt_control_progress_create(struct dt_control_t *control, gboolean has_progress_bar, const gchar *message); /** free the resources and remove the gui. */ void dt_control_progress_destroy(struct dt_control_t *control, dt_progress_t *progress); /** set a callback to be executed when the progress is being cancelled. */ void dt_control_progress_make_cancellable(struct dt_control_t *control, dt_progress_t *progress, dt_progress_cancel_callback_t cancel, void *data); /** convenience function to cancel a job when the progress gets cancelled. */ void dt_control_progress_attach_job(struct dt_control_t *control, dt_progress_t *progress, struct _dt_job_t *job); /** cancel the job linked to with dt_control_progress_attach_job(). don't forget to call * dt_control_progress_destroy() afterwards. */ void dt_control_progress_cancel(struct dt_control_t *control, dt_progress_t *progress); /** update the progress of the progress object. the range should be [0.0, 1.0] to make progress bars work. */ void dt_control_progress_set_progress(struct dt_control_t *control, dt_progress_t *progress, double value); /** return the last set progress value. */ double dt_control_progress_get_progress(dt_progress_t *progress); /** get the message passed during construction. */ const gchar *dt_control_progress_get_message(dt_progress_t *progress); /** these functions are to be used by lib/backgroundjobs.c only. */ void dt_control_progress_set_gui_data(dt_progress_t *progress, void *data); void *dt_control_progress_get_gui_data(dt_progress_t *progress); /** does the progress object have a progress bar in its gui? */ gboolean dt_control_progress_has_progress_bar(dt_progress_t *progress); /** has a job been linked to the progress object? */ gboolean dt_control_progress_cancellable(dt_progress_t *progress); #endif // __CONTROL_JOBS_H__ // modelines: These editor modelines have been set for all relevant files by tools/update_modelines.sh // vim: shiftwidth=2 expandtab tabstop=2 cindent // kate: tab-indents: off; indent-width 2; replace-tabs on; indent-mode cstyle; remove-trailing-spaces modified;