Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKévin Dietrich <kevin.dietrich@mailoo.org>2016-01-18 03:39:09 +0300
committerKévin Dietrich <kevin.dietrich@mailoo.org>2016-01-18 03:39:09 +0300
commitc6bc2363e5ec96d1aba36f1e7b4d321076d3f465 (patch)
treea09fa844a679328a72c3dc3e00d8a1a9bf26a6cd /source/blender/windowmanager
parentc4c2bd1350a52e18f973bba7e52e929f94ff6496 (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.h4
-rw-r--r--source/blender/windowmanager/intern/wm_jobs.c46
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");