void *WM_jobs_customdata(wmWindowManager *wm, void *owner) { wmJob *wm_job = wm_job_find(wm, owner, WM_JOB_TYPE_ANY); if (wm_job) return WM_jobs_customdata_get(wm_job); return NULL; }
void *WM_jobs_customdata_from_type(wmWindowManager *wm, int job_type) { wmJob *wm_job = wm_job_find(wm, NULL, job_type); if (wm_job) return WM_jobs_customdata_get(wm_job); return NULL; }
/* 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; }
char *WM_jobs_name(wmWindowManager *wm, void *owner) { wmJob *wm_job = wm_job_find(wm, owner, WM_JOB_TYPE_ANY); if (wm_job) return wm_job->name; return NULL; }
float WM_jobs_progress(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->progress; return 0.0; }
char *WM_jobs_name(wmWindowManager *wm, void *owner) { wmJob *steve= wm_job_find(wm, owner, NULL); if (steve) return steve->name; return NULL; }
float WM_jobs_progress(wmWindowManager *wm, void *owner) { wmJob *steve= wm_job_find(wm, owner, NULL); if (steve && steve->flag & WM_JOB_PROGRESS) return steve->progress; return 0.0; }
/* every owner only gets a single job, adding a new one will stop running stop and when stopped it starts the new one */ wmJob *WM_jobs_get(wmWindowManager *wm, wmWindow *win, void *owner, const char *name, int flag) { wmJob *steve= wm_job_find(wm, owner, name); if(steve==NULL) { steve= MEM_callocN(sizeof(wmJob), "new job"); BLI_addtail(&wm->jobs, steve); steve->win= win; steve->owner= owner; steve->flag= flag; BLI_strncpy(steve->name, name, sizeof(steve->name)); } return steve; }
/** * \return current job or adds new job, but doesn't run it. * * \note every owner only gets a single job, * adding a new one will stop running job and when stopped it starts the new one. */ wmJob *WM_jobs_get(wmWindowManager *wm, wmWindow *win, void *owner, const char *name, int flag, int job_type) { wmJob *wm_job = wm_job_find(wm, owner, job_type); if (wm_job == NULL) { wm_job = MEM_callocN(sizeof(wmJob), "new job"); BLI_addtail(&wm->jobs, wm_job); wm_job->win = win; wm_job->owner = owner; wm_job->flag = flag; wm_job->job_type = job_type; BLI_strncpy(wm_job->name, name, sizeof(wm_job->name)); wm_job->main_thread_mutex = BLI_ticket_mutex_alloc(); WM_job_main_thread_lock_acquire(wm_job); } /* else: a running job, be careful */ /* prevent creating a job with an invalid type */ BLI_assert(wm_job->job_type != WM_JOB_TYPE_ANY); return wm_job; }
bool WM_jobs_is_stopped(wmWindowManager *wm, void *owner) { wmJob *wm_job = wm_job_find(wm, owner, WM_JOB_TYPE_ANY); return wm_job ? wm_job->stop : true; /* XXX to be redesigned properly. */ }