PluginHandler

Struct PluginHandler 

Source
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 PluginApp is reloaded with it, i.e. [arc_swap::ArcSwap]; or PluginApp is 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. But UnsafeCell to avoid cost.

Config lifetime:

Implementations§

Source§

impl<A: PluginApp> PluginHandler<A>

Source§

impl<A: PluginApp> PluginHandler<A>

Source

pub fn load_settings(&self, data: *mut c_void) -> Option<A::Config>

Source

pub fn save_settings(&self, data: *mut c_void) -> *mut c_void

Source§

impl<A: PluginApp> PluginHandler<A>

Source

pub fn add_options_pages(&self, data: *mut c_void) -> *mut c_void

Source

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

Source

pub fn load_options_page_winio<'a, T: OptionsPageComponent<'a>>( &self, data: *mut c_void, ) -> *mut c_void

Available on crate feature winio only.
Source

pub fn save_options_page(&self, data: *mut c_void) -> *mut c_void

Source

pub fn get_options_page_minmax(&self, _data: *mut c_void) -> *mut c_void

Source

pub fn size_options_page(&self, _data: *mut c_void) -> *mut c_void

Source

pub fn options_page_proc(&self, data: *mut c_void) -> *mut c_void

Source

pub fn kill_options_page(&self, data: *mut c_void) -> *mut c_void

Source§

impl<A: PluginApp> PluginHandler<A>

Source

pub fn builder() -> PluginHandlerBuilder<A>

Create an instance of PluginHandler using the builder syntax

Source§

impl<A: PluginApp> PluginHandler<A>

Source

pub fn init_start(&self)

Panics if already initialized.

Source

pub fn init_start_with_config(&self, config: A::Config)

Panics if already initialized.

Source

pub fn stop_kill(&self)

Panics if not initialized or already stopped.

Source

pub fn get_host(&self) -> Option<&PluginHost>

None before handling EVERYTHING_PLUGIN_PM_INIT

Source

pub fn host(&self) -> &PluginHost

Not available before handling EVERYTHING_PLUGIN_PM_INIT

Source

pub fn handle_init_i18n(_msg: u32, _data: *mut c_void)

Source

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.

Source

pub fn instance_name(&self) -> Option<&str>

Source

pub unsafe fn app(&self) -> &A

Not available during saving config and recreated afterwards. Use Self::with_app instead when possible.

Source

pub fn with_app<T>(&self, f: impl FnOnce(&A) -> T) -> T

Not available during saving config.

Examples found in repository?
examples/options/options.rs (lines 55-67)
35    fn init(mut init: Self::Init<'_>, sender: &ComponentSender<Self>) -> Self {
36        let mut window = init.window(sender);
37        // window.set_size(Size::new(800.0, 600.0));
38
39        let mut enabled = Child::<CheckBox>::init(&window);
40        enabled.set_text("Enable");
41
42        let mut b = Child::<CheckBox>::init(&window);
43        b.set_text("Switch");
44
45        let mut e_label = Child::<Label>::init(&window);
46        e_label.set_text("Mode:");
47        let mut e = Child::<ComboBox>::init(&window);
48        e.insert(0, "A");
49        e.insert(1, "B");
50
51        let mut s_label = Child::<Label>::init(&window);
52        s_label.set_text("Message:");
53        let mut s = Child::<Edit>::init(&window);
54
55        HANDLER.with_app(|a| {
56            let config = a.config();
57
58            enabled.set_checked(config.enabled);
59            b.set_checked(config.b);
60
61            e.set_selection(Some(match config.e {
62                Mode::A => 0,
63                Mode::B => 1,
64            }));
65
66            s.set_text(&config.s);
67        });
68
69        sender.post(MainMessage::EnabledClick);
70
71        window.show();
72
73        Self {
74            window,
75            enabled,
76            b,
77            s_label,
78            s,
79            e_label,
80            e,
81        }
82    }
More examples
Hide additional examples
examples/test/widgets.rs (line 128)
67    fn init(mut init: Self::Init<'_>, sender: &ComponentSender<Self>) -> Self {
68        // let mut window = Child::<Window>::init(init);
69        let mut window = init.window(sender);
70        window.set_text("Widgets example");
71        window.set_size(Size::new(800.0, 600.0));
72        init! {
73            canvas: Canvas = (&window),
74            ulabel: Label = (&window) => {
75                text: "Username:",
76                halign: HAlign::Right,
77            },
78            plabel: Label = (&window) => {
79                text: "Password:",
80                halign: HAlign::Right,
81            },
82            uentry: Edit = (&window) => {
83                text: "AAA",
84            },
85            pentry: Edit = (&window) => {
86                text: "123456",
87                password: true,
88            },
89            pcheck: CheckBox = (&window) => {
90                text: "Show",
91                checked: false,
92            },
93            combo: ComboBox = (&window),
94            list: ObservableVec<String> = (()) => {
95                // https://www.zhihu.com/question/23600507/answer/140640887
96                items: [
97                    "烫烫烫",
98                    "昍昍昍",
99                    "フフフフフフ",
100                    "쳌쳌쳌"
101                ],
102            },
103            r1: RadioButton = (&window) => {
104                text: "屯屯屯",
105                checked: true,
106            },
107            r2: RadioButton = (&window) => {
108                text: "锟斤拷",
109            },
110            r3: RadioButton = (&window) => {
111                text: "╠╠╠"
112            },
113            push_button: Button = (&window) => {
114                text: "Push",
115            },
116            pop_button: Button = (&window) => {
117                text: "Pop",
118            },
119            show_button: Button = (&window) => {
120                text: "Show",
121            },
122            progress: Progress = (&window) => {
123                indeterminate: true,
124            },
125            mltext: TextBox = (&window) => {
126            },
127        }
128        HANDLER.with_app(|a| mltext.set_text(&a.config().s));
129
130        window.show();
131
132        Self {
133            window,
134            ulabel,
135            plabel,
136            uentry,
137            pentry,
138            pcheck,
139            canvas,
140            combo,
141            list,
142            index: None,
143            r1,
144            r2,
145            r3,
146            rindex: 0,
147            push_button,
148            pop_button,
149            show_button,
150            progress,
151            mltext,
152        }
153    }

Trait Implementations§

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> !UnwindSafe for PluginHandler<A>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more