[Bf-blender-cvs] [b4146a0] master: UI: use a callback for the progress tooltip
Campbell Barton
noreply at git.blender.org
Mon Jan 18 04:08:38 CET 2016
Commit: b4146a04bc385a30ca9d02d89068671f48ca2233
Author: Campbell Barton
Date: Mon Jan 18 13:53:38 2016 +1100
Branches: master
https://developer.blender.org/rBb4146a04bc385a30ca9d02d89068671f48ca2233
UI: use a callback for the progress tooltip
Avoids constructing tip text and storing it when its not used.
Also quiet divide by zero warning when no progress was made.
===================================================================
M source/blender/editors/interface/interface_templates.c
M source/blender/windowmanager/WM_api.h
M source/blender/windowmanager/intern/wm_jobs.c
===================================================================
diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c
index a97f55d..a404cde 100644
--- a/source/blender/editors/interface/interface_templates.c
+++ b/source/blender/editors/interface/interface_templates.c
@@ -3379,6 +3379,36 @@ static void do_running_jobs(bContext *C, void *UNUSED(arg), int event)
}
}
+struct ProgressTooltip_Store {
+ wmWindowManager *wm;
+ void *owner;
+};
+
+static char *progress_tooltip_func(bContext *UNUSED(C), void *argN, const char *UNUSED(tip))
+{
+ struct ProgressTooltip_Store *arg = argN;
+ wmWindowManager *wm = arg->wm;
+ void *owner = arg->owner;
+
+ const float progress = WM_jobs_progress(wm, owner);
+
+ /* create tooltip text and associate it with the job */
+ char elapsed_str[32];
+ char remaining_str[32] = "Unknown";
+ const double elapsed = PIL_check_seconds_timer() - WM_jobs_starttime(wm, owner);
+ BLI_timecode_string_from_time_simple(elapsed_str, sizeof(elapsed_str), elapsed);
+
+ if (progress) {
+ const double remaining = (elapsed / progress) - elapsed;
+ BLI_timecode_string_from_time_simple(remaining_str, sizeof(remaining_str), remaining);
+ }
+
+ return BLI_sprintfN(
+ "Time Remaining: %s\n"
+ "Time Elapsed: %s",
+ remaining_str, elapsed_str);
+}
+
void uiTemplateRunningJobs(uiLayout *layout, bContext *C)
{
bScreen *screen = CTX_wm_screen(C);
@@ -3470,7 +3500,7 @@ void uiTemplateRunningJobs(uiLayout *layout, bContext *C)
if (owner) {
const uiFontStyle *fstyle = UI_FSTYLE_WIDGET;
- bool active = !(WM_jobs_is_stopped(wm, owner) || G.is_break);
+ bool active = !(G.is_break || WM_jobs_is_stopped(wm, owner));
uiLayout *row = uiLayoutRow(layout, false);
block = uiLayoutGetBlock(row);
@@ -3479,20 +3509,6 @@ void uiTemplateRunningJobs(uiLayout *layout, bContext *C)
const float progress = WM_jobs_progress(wm, owner);
char text[8];
BLI_snprintf(text, 8, "%d%%", (int)(progress * 100));
-
- /* create tooltip text and associate it with the job */
-
- const double elapsed = PIL_check_seconds_timer() - WM_jobs_starttime(wm, owner);
- const double remaining = (elapsed / progress) - elapsed;
-
- char remaining_str[32], elapsed_str[32];
- BLI_timecode_string_from_time_simple(remaining_str, sizeof(remaining_str), remaining);
- BLI_timecode_string_from_time_simple(elapsed_str, sizeof(remaining_str), elapsed);
-
- char tooltip[128];
- BLI_snprintf(tooltip, sizeof(tooltip), "Time Remaining: %s\nTime Elapsed: %s", remaining_str, elapsed_str);
-
- WM_jobs_set_tooltip(wm, owner, tooltip);
const char *name = active ? WM_jobs_name(wm, owner) : "Canceling...";
@@ -3506,9 +3522,16 @@ void uiTemplateRunningJobs(uiLayout *layout, bContext *C)
uiLayoutSetActive(row, active);
block = uiLayoutGetBlock(row);
- uiDefIconTextBut(block, UI_BTYPE_PROGRESS_BAR, 0, 0, text,
- UI_UNIT_X, 0, UI_UNIT_X * 6.0f, UI_UNIT_Y, NULL, 0.0f, 0.0f,
- progress, 0, WM_jobs_tooltip(wm, owner));
+ {
+ struct ProgressTooltip_Store *tip_arg = MEM_mallocN(sizeof(*tip_arg), __func__);
+ tip_arg->wm = wm;
+ tip_arg->owner = owner;
+ uiBut *but_progress = uiDefIconTextBut(
+ block, UI_BTYPE_PROGRESS_BAR, 0, 0, text,
+ UI_UNIT_X, 0, UI_UNIT_X * 6.0f, UI_UNIT_Y, NULL, 0.0f, 0.0f,
+ progress, 0, NULL);
+ UI_but_func_tooltip_set(but_progress, progress_tooltip_func, tip_arg);
+ }
uiDefIconTextBut(block, UI_BTYPE_BUT, handle_event, ICON_PANEL_CLOSE,
"", 0, 0, UI_UNIT_X, UI_UNIT_Y,
diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h
index b9e4f19..fc0a3a6 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -454,8 +454,6 @@ 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);
diff --git a/source/blender/windowmanager/intern/wm_jobs.c b/source/blender/windowmanager/intern/wm_jobs.c
index 72941d1..19b393b 100644
--- a/source/blender/windowmanager/intern/wm_jobs.c
+++ b/source/blender/windowmanager/intern/wm_jobs.c
@@ -111,9 +111,6 @@ 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;
@@ -259,27 +256,6 @@ double WM_jobs_starttime(wmWindowManager *wm, void *owner)
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);
More information about the Bf-blender-cvs
mailing list