diff options
author | Kévin Dietrich <kevin.dietrich@mailoo.org> | 2016-01-18 03:39:09 +0300 |
---|---|---|
committer | Kévin Dietrich <kevin.dietrich@mailoo.org> | 2016-01-18 03:39:09 +0300 |
commit | c6bc2363e5ec96d1aba36f1e7b4d321076d3f465 (patch) | |
tree | a09fa844a679328a72c3dc3e00d8a1a9bf26a6cd /source/blender/windowmanager | |
parent | c4c2bd1350a52e18f973bba7e52e929f94ff6496 (diff) |
UI: redesign of the progress bar.
A picture is worth a thousand words: http://wiki.blender.org/index.php/
File:UI_progress_bar.png
Reviewers: #user_interface, brecht, dingto
Reviewed by: brecht, dingto
Differential Revision: https://developer.blender.org/D1727
Diffstat (limited to 'source/blender/windowmanager')
-rw-r--r-- | source/blender/windowmanager/WM_api.h | 4 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_jobs.c | 46 |
2 files changed, 47 insertions, 3 deletions
diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h index 62ac4b27915..b9e4f19c806 100644 --- a/source/blender/windowmanager/WM_api.h +++ b/source/blender/windowmanager/WM_api.h @@ -453,10 +453,14 @@ struct wmJob *WM_jobs_get(struct wmWindowManager *wm, struct wmWindow *win, void bool WM_jobs_test(struct wmWindowManager *wm, void *owner, int job_type); float WM_jobs_progress(struct wmWindowManager *wm, void *owner); char *WM_jobs_name(struct wmWindowManager *wm, void *owner); +double WM_jobs_starttime(struct wmWindowManager *wm, void *owner); +char *WM_jobs_tooltip(struct wmWindowManager *wm, void *owner); +void WM_jobs_set_tooltip(struct wmWindowManager *wm, void *owner, char *text); void *WM_jobs_customdata(struct wmWindowManager *wm, void *owner); void *WM_jobs_customdata_from_type(struct wmWindowManager *wm, int job_type); bool WM_jobs_is_running(struct wmJob *); +bool WM_jobs_is_stopped(wmWindowManager *wm, void *owner); void *WM_jobs_customdata_get(struct wmJob *); void WM_jobs_customdata_set(struct wmJob *, void *customdata, void (*free)(void *)); void WM_jobs_timer(struct wmJob *, double timestep, unsigned int note, unsigned int endnote); diff --git a/source/blender/windowmanager/intern/wm_jobs.c b/source/blender/windowmanager/intern/wm_jobs.c index f8258d18c1a..72941d1b1da 100644 --- a/source/blender/windowmanager/intern/wm_jobs.c +++ b/source/blender/windowmanager/intern/wm_jobs.c @@ -103,7 +103,7 @@ struct wmJob { unsigned int note, endnote; -/* internal */ + /* internal */ void *owner; int flag; short suspended, running, ready, do_update, stop, job_type; @@ -112,6 +112,9 @@ struct wmJob { /* for display in header, identification */ char name[128]; + /* for other text display in progress bar */ + char text[128]; + /* once running, we store this separately */ void *run_customdata; void (*run_free)(void *); @@ -245,6 +248,38 @@ float WM_jobs_progress(wmWindowManager *wm, void *owner) return 0.0; } +/* time that job started */ +double WM_jobs_starttime(wmWindowManager *wm, void *owner) +{ + wmJob *wm_job = wm_job_find(wm, owner, WM_JOB_TYPE_ANY); + + if (wm_job && wm_job->flag & WM_JOB_PROGRESS) + return wm_job->start_time; + + return 0; +} + +/* get progress bar tooltip text */ +char *WM_jobs_tooltip(wmWindowManager *wm, void *owner) +{ + wmJob *wm_job = wm_job_find(wm, owner, WM_JOB_TYPE_ANY); + + if (wm_job && wm_job->flag & WM_JOB_PROGRESS) + return wm_job->text; + + return NULL; +} + +/* set progress bar text (e.g. tooltip, UI label, eta...) */ +void WM_jobs_set_tooltip(wmWindowManager *wm, void *owner, char *text) +{ + wmJob *wm_job = wm_job_find(wm, owner, WM_JOB_TYPE_ANY); + + if (wm_job && wm_job->flag & WM_JOB_PROGRESS) { + BLI_strncpy(wm_job->text, text, sizeof(wm_job->text)); + } +} + char *WM_jobs_name(wmWindowManager *wm, void *owner) { wmJob *wm_job = wm_job_find(wm, owner, WM_JOB_TYPE_ANY); @@ -280,6 +315,12 @@ bool WM_jobs_is_running(wmJob *wm_job) return wm_job->running; } +bool WM_jobs_is_stopped(wmWindowManager *wm, void *owner) +{ + wmJob *wm_job = wm_job_find(wm, owner, WM_JOB_TYPE_ANY); + return wm_job->stop; +} + void *WM_jobs_customdata_get(wmJob *wm_job) { if (!wm_job->customdata) { @@ -420,8 +461,7 @@ void WM_jobs_start(wmWindowManager *wm, wmJob *wm_job) if (wm_job->wt == NULL) wm_job->wt = WM_event_add_timer(wm, wm_job->win, TIMERJOBS, wm_job->timestep); - if (G.debug & G_DEBUG_JOBS) - wm_job->start_time = PIL_check_seconds_timer(); + wm_job->start_time = PIL_check_seconds_timer(); } else { printf("job fails, not initialized\n"); |