pub type ToggleButtonCreate = fn(*const UiObject, *const UiToggleArgs) -> *mut c_void;
impl<T> toolkit::UiObject<T> {
- widget_fn!(button, button_builder, ButtonBuilder, Button);
- widget_fn!(togglebutton, togglebutton_builder, ToggleBuilder, ToggleButton);
- widget_fn!(checkbox, checkbox_builder, ToggleBuilder, ToggleButton);
- widget_fn!(switch, switch_builder, ToggleBuilder, ToggleButton);
- widget_fn!(radiobutton, radiobutton_builder, ToggleBuilder, ToggleButton);
-
pub fn button_builder<'a>(&'a mut self) -> ButtonBuilder<'a, T> {
unsafe {
let args = ui_button_args_new();
use std::ffi::{c_char, c_int, c_void, CString};
use crate::ui::{ffi, toolkit, Button, ButtonBuilder};
use crate::ui::ffi::{UiButtonArgs, UiLabelArgs, UiObject, UiString, UiToggleArgs};
-use crate::ui::widget::{widget_fn, Widget};
+use crate::ui::widget::{Widget};
#[macro_export]
}
impl<T> toolkit::UiObject<T> {
- widget_fn!(label, label_builder, LabelBuilder, Label);
- widget_fn!(llabel, llabel_builder, LabelBuilder, Label);
- widget_fn!(rlabel, rlabel_builder, LabelBuilder, Label);
-
pub fn label_builder<'a>(&'a mut self) -> LabelBuilder<'a, T> {
unsafe {
let args = ui_label_args_new();
use std::ffi::CString;
use std::marker::PhantomData;
use std::mem;
-use crate::ui::widget::{widget_typed_fn, Widget};
+use crate::ui::widget::{Widget};
#[macro_export]
macro_rules! listview {
pub type ListBuilderCreate = fn(*const UiObject, *const UiListArgs) -> ListView;
impl<T> toolkit::UiObject<T> {
- widget_typed_fn!(listview, listview_builder, ListViewBuilder);
- widget_typed_fn!(tableview, tableview_builder, TableViewBuilder);
- widget_typed_fn!(sourcelist, sourcelist_builder, SourceListBuilder);
-
pub fn listview_builder<'a, E>(&'a mut self) -> ListViewBuilder<'a, T, E> {
unsafe {
let args = ui_list_args_new();
use std::ffi::CString;
use crate::ui::{event, toolkit, EventWrapper};
use crate::ui::ffi::*;
-use crate::ui::widget::{widget_fn, Widget};
+use crate::ui::widget::{Widget};
#[macro_export]
}
impl<T> toolkit::UiObject<T> {
- widget_fn!(textarea, textarea_builder, TextAreaBuilder, TextArea);
-
pub fn textarea_builder<'a>(&'a mut self) -> TextAreaBuilder<'a, T> {
unsafe {
let args = ui_textarea_args_new();
}
impl<T> toolkit::UiObject<T> {
- widget_fn!(textfield, textfield_builder, TextFieldBuilder, TextField);
- widget_fn!(passwordfield, passwordfield_builder, TextFieldBuilder, TextField);
- widget_fn!(frameless_textfield, frameless_textfield_builder, TextFieldBuilder, TextField);
-
pub fn textfield_builder<'a>(&'a mut self) -> TextFieldBuilder<'a, T> {
unsafe {
let args = ui_textfield_args_new();
#![allow(dead_code)]
+use std::ffi::{c_int, c_void};
+
pub trait Widget {
fn get_widget(&self) -> *mut c_void;
fn ui_widget_set_visible(widget: *mut c_void, enable: c_int);
}
-/* ------------------------ internal helper macros ------------------------ */
-
-///
-/// Create a closure-based widget creation function
-///
-/// # Example:
-///
-/// pub fn button_builder(&self) -> ButtonBuilder { ... }
-/// widget_fn!(button, button_builder, ButtonBuilder);
-///
-/// This creates a function
-///
-/// pub fn button(&self, build: F)
-///
-/// That can be used like:
-///
-/// obj.button(|b| {
-/// b.label("Hello");
-/// }
-///
-macro_rules! widget_fn {
- ($fn_name:ident, $builder_fn:ident, $builder_ty:ident, $widget:ident) => {
- pub fn $fn_name<F>(&mut self, build: F) -> $widget
- where
- F: Fn(&mut $builder_ty<T>),
- {
- let mut builder = self.$builder_fn();
- build(&mut builder);
- builder.create()
- }
- };
-}
-
-macro_rules! widget_typed_fn {
- ($fn_name:ident, $builder_fn:ident, $builder_ty:ident) => {
- pub fn $fn_name<F, E>(&mut self, build: F)
- where
- F: Fn(&mut $builder_ty<T, E>),
- {
- let mut builder = self.$builder_fn();
- build(&mut builder);
- builder.create();
- }
- };
-}
-
-use std::ffi::{c_int, c_void};
-pub(super) use widget_fn;
-pub(super) use widget_typed_fn;
use std::marker::PhantomData;
use crate::ui::{destroy_boxed, event, event_wrapper_oneshot, ffi, toolkit, ui_object_ref, ui_update_action_bindings, AppContext, EventWrapper, NoAppData, UiActions, UiModel};
use crate::ui::ffi::{UiButtonArgs, UiCallback, UiContext, UiDestructor, UiDialogArgs, UiDialogWindowArgs, UiObject};
-use crate::ui::widget::widget_fn;
impl<T> toolkit::UiObject<T> {
pub fn show(&self) {