pub struct PluginHandler<A: PluginApp> { /* private fields */ }Expand description
§Example
ⓘ
PluginHandler::builder()
.name("Test Plugin")
.description("A test plugin for Everything")
.author("Chaoses-Ib")
.version("0.1.0")
.link("https://github.com/Chaoses-Ib/IbEverythingLib")
.options_pages(vec![
OptionsPage::builder()
.name("Test Plugin")
.load(ui::winio::spawn::<options::MainModel>)
.build(),
])
.build()§Design
- Config may be accessed from multiple threads, and options pages need to modify it. To avoid race conditions, either config is cloned when modifying, and then
PluginAppis reloaded with it, i.e. [arc_swap::ArcSwap]; orPluginAppis shutdown before modifying and then restarted. - User defined static to work around generic static limit.
- Interior mutability to make it easy to use with
static. ButUnsafeCellto avoid cost.
- Interior mutability to make it easy to use with
Config lifetime:
- May be set with
PluginHandler::builder()(as default value) - May be loaded when
sys::EVERYTHING_PLUGIN_PM_START - Be read when start
- Be read when loading (and rendering) options pages (
sys::EVERYTHING_PLUGIN_PM_LOAD_OPTIONS_PAGE) - Be written/applied when
sys::EVERYTHING_PLUGIN_PM_SAVE_OPTIONS_PAGE, zero, one or multiple times- TODO: Defer
- Be saved when
sys::EVERYTHING_PLUGIN_PM_SAVE_SETTINGS(can occur without priorsys::EVERYTHING_PLUGIN_PM_SAVE_OPTIONS_PAGE)
Implementations§
Source§impl<A: PluginApp> PluginHandler<A>
impl<A: PluginApp> PluginHandler<A>
pub fn get_language_name(&self) -> String
Source§impl<A: PluginApp> PluginHandler<A>
impl<A: PluginApp> PluginHandler<A>
Source§impl<A: PluginApp> PluginHandler<A>
impl<A: PluginApp> PluginHandler<A>
pub fn add_options_pages(&self, data: *mut c_void) -> *mut c_void
Sourcepub fn load_options_page(&self, data: *mut c_void) -> *mut c_void
pub fn load_options_page(&self, data: *mut c_void) -> *mut c_void
Evertyhing only loads a options page when the user selects it
TODO: tooltip_hwnd
pub fn load_options_page_winio<'a, T: OptionsPageComponent<'a>>( &self, data: *mut c_void, ) -> *mut c_void
Available on crate feature
winio only.pub fn save_options_page(&self, data: *mut c_void) -> *mut c_void
pub fn get_options_page_minmax(&self, _data: *mut c_void) -> *mut c_void
pub fn size_options_page(&self, _data: *mut c_void) -> *mut c_void
pub fn options_page_proc(&self, data: *mut c_void) -> *mut c_void
pub fn kill_options_page(&self, data: *mut c_void) -> *mut c_void
Source§impl<A: PluginApp> PluginHandler<A>
impl<A: PluginApp> PluginHandler<A>
Sourcepub fn builder() -> PluginHandlerBuilder<A>
pub fn builder() -> PluginHandlerBuilder<A>
Create an instance of PluginHandler using the builder syntax
Source§impl<A: PluginApp> PluginHandler<A>
impl<A: PluginApp> PluginHandler<A>
Sourcepub fn init_start(&self)
pub fn init_start(&self)
Panics if already initialized.
Sourcepub fn init_start_with_config(&self, config: A::Config)
pub fn init_start_with_config(&self, config: A::Config)
Panics if already initialized.
Sourcepub fn get_host(&self) -> Option<&PluginHost>
pub fn get_host(&self) -> Option<&PluginHost>
None before handling EVERYTHING_PLUGIN_PM_INIT
Sourcepub fn host(&self) -> &PluginHost
pub fn host(&self) -> &PluginHost
Not available before handling EVERYTHING_PLUGIN_PM_INIT
Sourcepub fn handle_init_i18n(_msg: u32, _data: *mut c_void)
pub fn handle_init_i18n(_msg: u32, _data: *mut c_void)
Should be called before PluginHandler is created, as some fields may depend on the locale.
Already called in the plugin_main! macro. (Requiring manually calling is a footgun: IbEverythingExt #100)
Sourcepub fn handle(&self, msg: u32, data: *mut c_void) -> *mut c_void
pub fn handle(&self, msg: u32, data: *mut c_void) -> *mut c_void
You shouldn’t and unlikely need to call this function from multiple threads.
pub fn instance_name(&self) -> Option<&str>
Sourcepub unsafe fn app(&self) -> &A
pub unsafe fn app(&self) -> &A
Not available during saving config and recreated afterwards. Use Self::with_app instead when possible.
Trait Implementations§
impl<A: PluginApp> Send for PluginHandler<A>
impl<A: PluginApp> Sync for PluginHandler<A>
Auto Trait Implementations§
impl<A> !Freeze for PluginHandler<A>
impl<A> !RefUnwindSafe for PluginHandler<A>
impl<A> Unpin for PluginHandler<A>where
A: Unpin,
impl<A> UnsafeUnpin for PluginHandler<A>where
A: UnsafeUnpin,
impl<A> !UnwindSafe for PluginHandler<A>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more