use crate::*;
use crate::aegp::*;
define_suite!(
RenderQueueItemSuite,
AEGP_RQItemSuite4,
kAEGPRQItemSuite,
kAEGPRQItemSuiteVersion4
);
impl RenderQueueItemSuite {
pub fn new() -> Result<Self, Error> {
crate::Suite::new()
}
pub fn num_items(&self) -> Result<i32, Error> {
Ok(call_suite_fn_single!(self, AEGP_GetNumRQItems -> ae_sys::A_long)? as i32)
}
pub fn item_by_index(&self, index: i32) -> Result<RQItemRefHandle, Error> {
Ok(RQItemRefHandle::from_raw(
call_suite_fn_single!(self, AEGP_GetRQItemByIndex -> ae_sys::AEGP_RQItemRefH, index as ae_sys::A_long)?
))
}
pub fn next_item(&self, current_item: Option<RQItemRefHandle>) -> Result<Option<RQItemRefHandle>, Error> {
let current = current_item.map_or(std::ptr::null_mut(), |h| h.as_ptr());
let next = call_suite_fn_single!(self, AEGP_GetNextRQItem -> ae_sys::AEGP_RQItemRefH, current)?;
if next.is_null() {
Ok(None)
} else {
Ok(Some(RQItemRefHandle::from_raw(next)))
}
}
pub fn num_output_modules(&self, rq_item: impl AsPtr<ae_sys::AEGP_RQItemRefH>) -> Result<i32, Error> {
Ok(call_suite_fn_single!(self, AEGP_GetNumOutputModulesForRQItem -> ae_sys::A_long, rq_item.as_ptr())? as i32)
}
pub fn render_state(&self, rq_item: impl AsPtr<ae_sys::AEGP_RQItemRefH>) -> Result<RenderItemStatus, Error> {
Ok(
call_suite_fn_single!(self, AEGP_GetRenderState -> ae_sys::AEGP_RenderItemStatusType, rq_item.as_ptr())?
.into()
)
}
pub fn set_render_state(&self, rq_item: impl AsPtr<ae_sys::AEGP_RQItemRefH>, status: RenderItemStatus) -> Result<(), Error> {
call_suite_fn!(self, AEGP_SetRenderState, rq_item.as_ptr(), status.into())
}
pub fn started_time(&self, rq_item: impl AsPtr<ae_sys::AEGP_RQItemRefH>) -> Result<Time, Error> {
Ok(
call_suite_fn_single!(self, AEGP_GetStartedTime -> ae_sys::A_Time, rq_item.as_ptr())?
.into()
)
}
pub fn elapsed_time(&self, rq_item: impl AsPtr<ae_sys::AEGP_RQItemRefH>) -> Result<Time, Error> {
Ok(
call_suite_fn_single!(self, AEGP_GetElapsedTime -> ae_sys::A_Time, rq_item.as_ptr())?
.into()
)
}
pub fn log_type(&self, rq_item: impl AsPtr<ae_sys::AEGP_RQItemRefH>) -> Result<LogType, Error> {
Ok(
call_suite_fn_single!(self, AEGP_GetLogType -> ae_sys::AEGP_LogType, rq_item.as_ptr())?
.into()
)
}
pub fn set_log_type(&self, rq_item: impl AsPtr<ae_sys::AEGP_RQItemRefH>, log_type: LogType) -> Result<(), Error> {
call_suite_fn!(self, AEGP_SetLogType, rq_item.as_ptr(), log_type.into())
}
pub fn remove_output_module(
&self,
rq_item: impl AsPtr<ae_sys::AEGP_RQItemRefH>,
output_module: impl AsPtr<ae_sys::AEGP_OutputModuleRefH>,
) -> Result<(), Error> {
call_suite_fn!(self, AEGP_RemoveOutputModule, rq_item.as_ptr(), output_module.as_ptr())
}
pub fn comment(&self, rq_item: impl AsPtr<ae_sys::AEGP_RQItemRefH>) -> Result<String, Error> {
let mem_handle = call_suite_fn_single!(self, AEGP_GetComment -> ae_sys::AEGP_MemHandle, rq_item.as_ptr())?;
unsafe {
Ok(
U16CString::from_ptr_str(MemHandle::<u16>::from_raw(mem_handle)?.lock()?.as_ptr())
.to_string_lossy()
)
}
}
pub fn set_comment(&self, rq_item: impl AsPtr<ae_sys::AEGP_RQItemRefH>, comment: &str) -> Result<(), Error> {
let comment_utf16 = U16CString::from_str(comment).map_err(|_| Error::InvalidParms)?;
call_suite_fn!(self, AEGP_SetComment, rq_item.as_ptr(), comment_utf16.as_ptr())
}
pub fn comp(&self, rq_item: impl AsPtr<ae_sys::AEGP_RQItemRefH>) -> Result<CompHandle, Error> {
Ok(CompHandle::from_raw(
call_suite_fn_single!(self, AEGP_GetCompFromRQItem -> ae_sys::AEGP_CompH, rq_item.as_ptr())?
))
}
pub fn delete_item(&self, rq_item: impl AsPtr<ae_sys::AEGP_RQItemRefH>) -> Result<(), Error> {
call_suite_fn!(self, AEGP_DeleteRQItem, rq_item.as_ptr())
}
}
register_handle!(AEGP_RQItemRefH);
define_handle_wrapper!(RQItemRefHandle, AEGP_RQItemRefH);
register_handle!(AEGP_OutputModuleRefH);
define_handle_wrapper!(OutputModuleRefHandle, AEGP_OutputModuleRefH);
define_enum! {
ae_sys::AEGP_RenderItemStatusType,
RenderItemStatus {
None = ae_sys::AEGP_RenderItemStatus_NONE,
WillContinue = ae_sys::AEGP_RenderItemStatus_WILL_CONTINUE,
NeedsOutput = ae_sys::AEGP_RenderItemStatus_NEEDS_OUTPUT,
Unqueued = ae_sys::AEGP_RenderItemStatus_UNQUEUED,
Queued = ae_sys::AEGP_RenderItemStatus_QUEUED,
Rendering = ae_sys::AEGP_RenderItemStatus_RENDERING,
UserStopped = ae_sys::AEGP_RenderItemStatus_USER_STOPPED,
ErrStopped = ae_sys::AEGP_RenderItemStatus_ERR_STOPPED,
Done = ae_sys::AEGP_RenderItemStatus_DONE,
}
}
define_enum! {
ae_sys::AEGP_LogType,
LogType {
None = ae_sys::AEGP_LogType_NONE,
ErrorsOnly = ae_sys::AEGP_LogType_ERRORS_ONLY,
PlusSettings = ae_sys::AEGP_LogType_PLUS_SETTINGS,
PerFrameInfo = ae_sys::AEGP_LogType_PER_FRAME_INFO,
}
}