#![allow(non_upper_case_globals)]
#![allow(non_camel_case_types)]
#![allow(non_snake_case)]
use super::{firewall, raw::MediaTrack};
use crate::raw;
use std::fmt::Debug;
use std::os::raw::c_void;
use std::panic::RefUnwindSafe;
use std::ptr::{null, null_mut, NonNull};
pub trait IReaperControlSurface: RefUnwindSafe + Debug {
fn GetTypeString(&self) -> *const ::std::os::raw::c_char {
null()
}
fn GetDescString(&self) -> *const ::std::os::raw::c_char {
null()
}
fn GetConfigString(&self) -> *const ::std::os::raw::c_char {
null()
}
fn CloseNoReset(&self) {}
fn Run(&mut self) {}
fn SetTrackListChange(&self) {}
fn SetSurfaceVolume(&self, _trackid: *mut MediaTrack, _volume: f64) {}
fn SetSurfacePan(&self, _trackid: *mut MediaTrack, _pan: f64) {}
fn SetSurfaceMute(&self, _trackid: *mut MediaTrack, _mute: bool) {}
fn SetSurfaceSelected(&self, _trackid: *mut MediaTrack, _selected: bool) {}
fn SetSurfaceSolo(&self, _trackid: *mut MediaTrack, _solo: bool) {}
fn SetSurfaceRecArm(&self, _trackid: *mut MediaTrack, _recarm: bool) {}
fn SetPlayState(&self, _play: bool, _pause: bool, _rec: bool) {}
fn SetRepeatState(&self, _rep: bool) {}
fn SetTrackTitle(&self, _trackid: *mut MediaTrack, _title: *const ::std::os::raw::c_char) {}
fn GetTouchState(&self, _trackid: *mut MediaTrack, _isPan: ::std::os::raw::c_int) -> bool {
false
}
fn SetAutoMode(&self, _mode: ::std::os::raw::c_int) {}
fn ResetCachedVolPanStates(&self) {}
fn OnTrackSelection(&self, _trackid: *mut MediaTrack) {}
fn IsKeyDown(&self, _key: ::std::os::raw::c_int) -> bool {
false
}
fn Extended(
&self,
_call: ::std::os::raw::c_int,
_parm1: *mut ::std::os::raw::c_void,
_parm2: *mut ::std::os::raw::c_void,
_parm3: *mut ::std::os::raw::c_void,
) -> ::std::os::raw::c_int {
0
}
}
pub unsafe fn add_cpp_control_surface(
callback_target: NonNull<Box<dyn IReaperControlSurface>>,
) -> NonNull<raw::IReaperControlSurface> {
let instance = crate::bindings::root::reaper_control_surface::add_control_surface(
callback_target.as_ptr() as *mut c_void,
);
NonNull::new_unchecked(instance)
}
pub unsafe fn remove_cpp_control_surface(surface: NonNull<raw::IReaperControlSurface>) {
crate::bindings::root::reaper_control_surface::remove_control_surface(surface.as_ptr());
}
#[no_mangle]
extern "C" fn GetTypeString(
callback_target: *mut Box<dyn IReaperControlSurface>,
) -> *const ::std::os::raw::c_char {
firewall(|| unsafe { &*callback_target }.GetTypeString()).unwrap_or(null_mut())
}
#[no_mangle]
extern "C" fn GetDescString(
callback_target: *mut Box<dyn IReaperControlSurface>,
) -> *const ::std::os::raw::c_char {
firewall(|| unsafe { &*callback_target }.GetDescString()).unwrap_or(null_mut())
}
#[no_mangle]
extern "C" fn GetConfigString(
callback_target: *mut Box<dyn IReaperControlSurface>,
) -> *const ::std::os::raw::c_char {
firewall(|| unsafe { &*callback_target }.GetConfigString()).unwrap_or(null_mut())
}
#[no_mangle]
extern "C" fn CloseNoReset(callback_target: *mut Box<dyn IReaperControlSurface>) {
firewall(|| unsafe { &*callback_target }.CloseNoReset());
}
#[no_mangle]
extern "C" fn Run(callback_target: *mut Box<dyn IReaperControlSurface>) {
firewall(|| unsafe { &mut *callback_target }.Run());
}
#[no_mangle]
extern "C" fn SetTrackListChange(callback_target: *mut Box<dyn IReaperControlSurface>) {
firewall(|| unsafe { &*callback_target }.SetTrackListChange());
}
#[no_mangle]
extern "C" fn SetSurfaceVolume(
callback_target: *mut Box<dyn IReaperControlSurface>,
trackid: *mut MediaTrack,
volume: f64,
) {
firewall(|| unsafe { &*callback_target }.SetSurfaceVolume(trackid, volume));
}
#[no_mangle]
extern "C" fn SetSurfacePan(
callback_target: *mut Box<dyn IReaperControlSurface>,
trackid: *mut MediaTrack,
pan: f64,
) {
firewall(|| unsafe { &*callback_target }.SetSurfacePan(trackid, pan));
}
#[no_mangle]
extern "C" fn SetSurfaceMute(
callback_target: *mut Box<dyn IReaperControlSurface>,
trackid: *mut MediaTrack,
mute: bool,
) {
firewall(|| unsafe { &*callback_target }.SetSurfaceMute(trackid, mute));
}
#[no_mangle]
extern "C" fn SetSurfaceSelected(
callback_target: *mut Box<dyn IReaperControlSurface>,
trackid: *mut MediaTrack,
selected: bool,
) {
firewall(|| unsafe { &*callback_target }.SetSurfaceSelected(trackid, selected));
}
#[no_mangle]
extern "C" fn SetSurfaceSolo(
callback_target: *mut Box<dyn IReaperControlSurface>,
trackid: *mut MediaTrack,
solo: bool,
) {
firewall(|| unsafe { &*callback_target }.SetSurfaceSolo(trackid, solo));
}
#[no_mangle]
extern "C" fn SetSurfaceRecArm(
callback_target: *mut Box<dyn IReaperControlSurface>,
trackid: *mut MediaTrack,
recarm: bool,
) {
firewall(|| unsafe { &*callback_target }.SetSurfaceRecArm(trackid, recarm));
}
#[no_mangle]
extern "C" fn SetPlayState(
callback_target: *mut Box<dyn IReaperControlSurface>,
play: bool,
pause: bool,
rec: bool,
) {
firewall(|| unsafe { &*callback_target }.SetPlayState(play, pause, rec));
}
#[no_mangle]
extern "C" fn SetRepeatState(callback_target: *mut Box<dyn IReaperControlSurface>, rep: bool) {
firewall(|| unsafe { &*callback_target }.SetRepeatState(rep));
}
#[no_mangle]
extern "C" fn SetTrackTitle(
callback_target: *mut Box<dyn IReaperControlSurface>,
trackid: *mut MediaTrack,
title: *const ::std::os::raw::c_char,
) {
firewall(|| unsafe { &*callback_target }.SetTrackTitle(trackid, title));
}
#[no_mangle]
extern "C" fn GetTouchState(
callback_target: *mut Box<dyn IReaperControlSurface>,
trackid: *mut MediaTrack,
isPan: ::std::os::raw::c_int,
) -> bool {
firewall(|| unsafe { &*callback_target }.GetTouchState(trackid, isPan)).unwrap_or(false)
}
#[no_mangle]
extern "C" fn SetAutoMode(
callback_target: *mut Box<dyn IReaperControlSurface>,
mode: ::std::os::raw::c_int,
) {
firewall(|| unsafe { &*callback_target }.SetAutoMode(mode));
}
#[no_mangle]
extern "C" fn ResetCachedVolPanStates(callback_target: *mut Box<dyn IReaperControlSurface>) {
firewall(|| unsafe { &*callback_target }.ResetCachedVolPanStates());
}
#[no_mangle]
extern "C" fn OnTrackSelection(
callback_target: *mut Box<dyn IReaperControlSurface>,
trackid: *mut MediaTrack,
) {
firewall(|| unsafe { &*callback_target }.OnTrackSelection(trackid));
}
#[no_mangle]
extern "C" fn IsKeyDown(
callback_target: *mut Box<dyn IReaperControlSurface>,
key: ::std::os::raw::c_int,
) -> bool {
firewall(|| unsafe { &*callback_target }.IsKeyDown(key)).unwrap_or(false)
}
#[no_mangle]
extern "C" fn Extended(
callback_target: *mut Box<dyn IReaperControlSurface>,
call: ::std::os::raw::c_int,
parm1: *mut ::std::os::raw::c_void,
parm2: *mut ::std::os::raw::c_void,
parm3: *mut ::std::os::raw::c_void,
) -> ::std::os::raw::c_int {
firewall(|| unsafe { &*callback_target }.Extended(call, parm1, parm2, parm3)).unwrap_or(0)
}