pub struct Group { /* private fields */ }
Expand description
Creates a group widget
Implementations§
Source§impl Group
impl Group
Sourcepub fn new<'a, T: Into<Option<&'a str>>>(
x: i32,
y: i32,
width: i32,
height: i32,
title: T,
) -> Group
pub fn new<'a, T: Into<Option<&'a str>>>( x: i32, y: i32, width: i32, height: i32, title: T, ) -> Group
Creates a new widget, takes an x, y coordinates, as well as a width and height, plus a title
§Arguments
x
- The x coordinate in the screeny
- The y coordinate in the screenwidth
- The width of the widgetheigth
- The height of the widgettitle
- The title or label of the widget
To use dynamic strings use with_label(self, &str)
or set_label(&mut self, &str)
.
labels support special symbols preceded by an @
sign
and for the associated formatting.
Examples found in repository?
examples/closable_tabs2.rs (line 21)
20 fn create_tab_button(label: &str) -> group::Group {
21 let mut grp = group::Group::new(0, 0, 150, 40, None);
22 grp.set_align(Align::Left | Align::Inside);
23 let mut but_handle = button::Button::new(grp.x() + 5, grp.y() + 5, 110, 30, "");
24 but_handle.set_align(Align::Left | Align::Inside);
25 but_handle.set_label(label);
26 let mut but_close = button::Button::new(grp.x() + 120, grp.y() + 10, 20, 20, "@1+");
27 but_handle.set_frame(FrameType::FlatBox);
28 but_handle.clear_visible_focus();
29 but_close.set_frame(FrameType::FlatBox);
30 grp.end();
31 grp.set_frame(FrameType::UpFrame);
32 grp
33 }
34
35 // Public
36 pub struct ClosableTab<'a> {
37 current: Option<i32>, // The tab which is visible on the foreground
38 snd: &'a app::Sender<Message>,
39 contents: group::Group,
40 tab_labels: group::Pack,
41 }
42
43 impl<'a> ClosableTab<'a> {
44 pub fn new(x: i32, y: i32, w: i32, h: i32, snd: &'a app::Sender<Message>) -> Self {
45 let current = None;
46 let parent_grp = group::Group::new(x, y, w, h, None);
47 let mut tab_labels = group::Pack::new(x + 5, y, w - 10, 40, None);
48 tab_labels.set_spacing(3);
49 tab_labels.set_type(group::PackType::Horizontal);
50 tab_labels.end();
51 let mut contents = group::Group::new(x, y + 40, w, h - 40, None);
52 contents.set_frame(FrameType::NoBox);
53 contents.end();
54 parent_grp.end();
55 Self {
56 current,
57 snd,
58 contents,
59 tab_labels,
60 }
61 }
62
63 pub fn add(&mut self, child: &mut group::Group, label: &str) {
64 child.resize(
65 self.contents.x(),
66 self.contents.y(),
67 self.contents.w(),
68 self.contents.h(),
69 );
70 self.contents.add(child);
71 let but = create_tab_button(label);
72 self.tab_labels.add(&but);
73 but.child(1).unwrap().set_callback({
74 let curr_child = child.clone();
75 let contents = self.contents.clone();
76 let sndb = *self.snd;
77 move |_| {
78 let idx = contents.find(&curr_child);
79 sndb.send(Message::Delete(idx));
80 app::redraw();
81 }
82 });
83 but.child(0).unwrap().set_callback({
84 let curr_child = child.clone();
85 let contents = self.contents.clone();
86 let sndb = *self.snd;
87 move |_| {
88 let idx = contents.find(&curr_child);
89 sndb.send(Message::Foreground(idx));
90 app::redraw();
91 }
92 });
93 }
94
95 pub fn remove(&mut self, idx: i32) {
96 self.contents.remove_by_index(idx);
97 self.tab_labels.remove_by_index(idx);
98 if self.current == Some(idx) {
99 if idx > 1 {
100 self.set_foreground(idx - 1);
101 } else if self.contents.children() > 0 {
102 self.set_foreground(0);
103 }
104 }
105 }
106
107 /** No return variable, fails silently */
108 pub fn set_foreground(&mut self, fg_idx: i32) {
109 for idx in 0..self.contents.children() {
110 if idx != fg_idx {
111 self.contents.child(idx).unwrap().hide();
112 self.tab_labels
113 .child(idx)
114 .unwrap()
115 .set_label_color(fltk::enums::Color::Inactive);
116 self.tab_labels
117 .child(idx)
118 .unwrap()
119 .set_color(fltk::enums::Color::Inactive);
120 self.tab_labels
121 .child(idx)
122 .unwrap()
123 .set_frame(FrameType::DownFrame);
124 } else {
125 self.contents.child(idx).unwrap().show();
126 self.tab_labels
127 .child(idx)
128 .unwrap()
129 .set_label_color(Color::Selection);
130 self.tab_labels
131 .child(idx)
132 .unwrap()
133 .set_color(fltk::enums::Color::Selection);
134 self.tab_labels
135 .child(idx)
136 .unwrap()
137 .set_frame(FrameType::NoBox);
138 }
139 self.tab_labels.child(idx).unwrap().set_damage(true);
140 self.tab_labels.child(idx).unwrap().redraw();
141 self.current = Some(fg_idx);
142 }
143 }
144
145 /** Report which tab index is visible on foreground */
146 pub fn get_foreground(&self) -> Option<i32> {
147 self.current
148 }
149 }
150}
151
152fn main() {
153 use fltk::{prelude::*, *};
154 // Create groups to be used as content for tabs
155 pub fn create_tab(from: i32, to: i32) -> group::Group {
156 let grp = group::Group::new(0, 0, 800, 600, None);
157 for idx in from..to {
158 button::Button::new(
159 idx * 10 + (idx - from) * 42,
160 idx * 10 + (idx - from) * 42,
161 80,
162 40,
163 None,
164 )
165 .with_label(&format!("button {idx}"));
166 }
167 grp.end();
168 grp
169 }
More examples
examples/composite_widgets.rs (line 10)
9 pub fn new(w: i32, h: i32) -> MyButton {
10 let mut grp = group::Group::new(0, 0, w, h, None);
11 grp.set_frame(enums::FrameType::RFlatBox);
12 grp.set_color(enums::Color::from_u32(0x01579b));
13 grp.set_align(enums::Align::Center);
14 let mut btn = button::Button::new(grp.x() + 420, grp.y() + 35, 30, 25, "@1+");
15 btn.set_frame(enums::FrameType::OFlatBox);
16 btn.set_color(enums::Color::from_u32(0xf49da9));
17 btn.set_callback(move |b| b.parent().unwrap().hide());
18 grp.end();
19 grp.handle(|g, ev| match ev {
20 enums::Event::Push => {
21 g.do_callback();
22 true
23 }
24 _ => false,
25 });
26 MyButton { grp }
27 }
examples/custom_choice.rs (line 109)
108 pub fn new<S: Into<Option<&'static str>>>(x: i32, y: i32, w: i32, h: i32, label: S) -> Self {
109 let grp = group::Group::new(x, y, w, h, label).with_align(Align::Left);
110 let mut frame = frame::Frame::new(x, y, w - w / 4, h, None);
111 frame.set_frame(FrameType::DownBox);
112 frame.set_color(Color::Background2);
113 let mut btn = button::Button::new(x + w - w / 4, y, w / 4, h, "@2>");
114 btn.clear_visible_focus();
115 grp.end();
116 let choices = Rc::from(RefCell::from(vec![]));
117 btn.set_callback({
118 let c = choices.clone();
119 let mut f = frame.clone();
120 let btn_win = btn.window().unwrap();
121 move |b| {
122 let mut menu = MyPopup::new(&c.borrow());
123 let s = menu.popup(b.x() + btn_win.x() - f.w(), b.y() + btn_win.y() + b.h());
124 f.set_label(&s.0);
125 }
126 });
127 Self {
128 grp,
129 frame,
130 btn,
131 choices,
132 }
133 }
examples/custom_dial.rs (line 15)
13 pub fn new(x: i32, y: i32, w: i32, h: i32, label: &str) -> Self {
14 let value = Rc::from(RefCell::from(0));
15 let mut main_wid = group::Group::new(x, y, w, h, None)
16 .with_label(label)
17 .with_align(Align::Top);
18 let mut value_frame =
19 frame::Frame::new(main_wid.x(), main_wid.y() + 80, main_wid.w(), 40, "0");
20 value_frame.set_label_size(26);
21 main_wid.end();
22 let value_c = value.clone();
23 main_wid.draw(move |w| {
24 draw::set_draw_rgb_color(230, 230, 230);
25 draw::draw_pie(w.x(), w.y(), w.w(), w.h(), 0., 180.);
26 draw::set_draw_hex_color(0xb0bf1a);
27 draw::draw_pie(
28 w.x(),
29 w.y(),
30 w.w(),
31 w.h(),
32 (100 - *value_c.borrow()) as f64 * 1.8,
33 180.,
34 );
35 draw::set_draw_color(Color::White);
36 draw::draw_pie(
37 w.x() - 50 + w.w() / 2,
38 w.y() - 50 + w.h() / 2,
39 100,
40 100,
41 0.,
42 360.,
43 );
44 w.draw_children();
45 });
46 Self {
47 main_wid,
48 value,
49 value_frame,
50 }
51 }
Sourcepub fn default_fill() -> Self
pub fn default_fill() -> Self
Constructs a widget with the size of its parent
Trait Implementations§
Source§impl GroupExt for Group
impl GroupExt for Group
Source§fn find<W: WidgetExt>(&self, widget: &W) -> i32
fn find<W: WidgetExt>(&self, widget: &W) -> i32
Find a widget within a group and return its index
Source§fn insert<W: WidgetExt>(&mut self, widget: &W, index: i32)
fn insert<W: WidgetExt>(&mut self, widget: &W, index: i32)
Insert a widget to a group at a certain index
Source§fn remove<W: WidgetExt>(&mut self, widget: &W)
fn remove<W: WidgetExt>(&mut self, widget: &W)
Remove a widget from a group, but does not delete it
Source§fn remove_by_index(&mut self, idx: i32)
fn remove_by_index(&mut self, idx: i32)
Remove a child widget by its index
Source§fn resizable<W: WidgetExt>(&self, widget: &W)
fn resizable<W: WidgetExt>(&self, widget: &W)
The resizable widget defines both the resizing frame and the resizing behavior of the group and its children.
Source§fn make_resizable(&mut self, val: bool)
fn make_resizable(&mut self, val: bool)
Make the group itself resizable, should be called before the widget is shown
Source§fn add_resizable<W: WidgetExt>(&mut self, widget: &W)
fn add_resizable<W: WidgetExt>(&mut self, widget: &W)
Adds a widget to the group and makes it the resizable widget
Source§fn set_clip_children(&mut self, flag: bool)
fn set_clip_children(&mut self, flag: bool)
Clips children outside the group boundaries
Source§fn clip_children(&self) -> bool
fn clip_children(&self) -> bool
Get whether
clip_children
is setSource§fn draw_child<W: WidgetExt>(&self, w: &mut W)
fn draw_child<W: WidgetExt>(&self, w: &mut W)
Draw a child widget, the call should be in a
WidgetBase::draw
methodSource§fn update_child<W: WidgetExt>(&self, w: &mut W)
fn update_child<W: WidgetExt>(&self, w: &mut W)
Update a child widget, the call should be in a
WidgetBase::draw
methodSource§fn draw_outside_label<W: WidgetExt>(&self, w: &mut W)
fn draw_outside_label<W: WidgetExt>(&self, w: &mut W)
Draw the outside label, the call should be in a
WidgetBase::draw
methodSource§fn draw_children(&mut self)
fn draw_children(&mut self)
Draw children, the call should be in a
WidgetBase::draw
methodSource§fn init_sizes(&mut self)
fn init_sizes(&mut self)
Resets the internal array of widget sizes and positions
Source§impl IntoIterator for Group
impl IntoIterator for Group
Source§impl WidgetBase for Group
impl WidgetBase for Group
Source§unsafe fn from_widget_ptr(ptr: *mut Fl_Widget) -> Self
unsafe fn from_widget_ptr(ptr: *mut Fl_Widget) -> Self
transforms a widget pointer to a Widget, for internal use Read more
Source§unsafe fn from_widget<W: WidgetExt>(w: W) -> Self
unsafe fn from_widget<W: WidgetExt>(w: W) -> Self
Get a widget from base widget Read more
Source§fn handle<F: FnMut(&mut Self, Event) -> bool + 'static>(&mut self, cb: F)
fn handle<F: FnMut(&mut Self, Event) -> bool + 'static>(&mut self, cb: F)
Set a custom handler, where events are managed manually, akin to
Fl_Widget::handle(int)
.
Handled or ignored events should return true, unhandled events should return false.
takes the widget as a closure argument.
The ability to handle an event might depend on handling other events, as explained hereSource§fn draw<F: FnMut(&mut Self) + 'static>(&mut self, cb: F)
fn draw<F: FnMut(&mut Self) + 'static>(&mut self, cb: F)
Set a custom draw method.
takes the widget as a closure argument.
macOS requires that
WidgetBase::draw
actually calls drawing functionsSource§fn resize_callback<F: FnMut(&mut Self, i32, i32, i32, i32) + 'static>(
&mut self,
cb: F,
)
fn resize_callback<F: FnMut(&mut Self, i32, i32, i32, i32) + 'static>( &mut self, cb: F, )
Perform a callback on resize.
Avoid resizing the parent or the same widget to avoid infinite recursion
Source§unsafe fn assume_derived(&mut self)
unsafe fn assume_derived(&mut self)
Makes the widget derived Read more
Source§impl WidgetExt for Group
impl WidgetExt for Group
Source§fn set_label(&mut self, title: &str)
fn set_label(&mut self, title: &str)
Sets the widget’s label.
labels support special symbols preceded by an
@
sign.
and for the associated formatting.Source§fn unset_label(&mut self)
fn unset_label(&mut self)
Unset a widget’s label
Source§fn measure_label(&self) -> (i32, i32)
fn measure_label(&self) -> (i32, i32)
Measures the label’s width and height
Source§fn as_widget_ptr(&self) -> *mut Fl_Widget
fn as_widget_ptr(&self) -> *mut Fl_Widget
transforms a widget to a base
Fl_Widget
, for internal useSource§fn deactivate(&mut self)
fn deactivate(&mut self)
Deactivates the widget
Source§fn redraw_label(&mut self)
fn redraw_label(&mut self)
Redraws the label of the widget
Source§fn resize(&mut self, x: i32, y: i32, width: i32, height: i32)
fn resize(&mut self, x: i32, y: i32, width: i32, height: i32)
Resizes and/or moves the widget, takes x, y, width and height
Source§fn widget_resize(&mut self, x: i32, y: i32, width: i32, height: i32)
fn widget_resize(&mut self, x: i32, y: i32, width: i32, height: i32)
Does a simple resize ignoring class-specific resize functionality
Source§fn set_tooltip(&mut self, txt: &str)
fn set_tooltip(&mut self, txt: &str)
Sets the tooltip text
Source§fn label_color(&self) -> Color
fn label_color(&self) -> Color
Returns the widget label’s color
Source§fn set_label_color(&mut self, color: Color)
fn set_label_color(&mut self, color: Color)
Sets the widget label’s color
Source§fn label_font(&self) -> Font
fn label_font(&self) -> Font
Returns the widget label’s font
Source§fn set_label_font(&mut self, font: Font)
fn set_label_font(&mut self, font: Font)
Sets the widget label’s font
Source§fn label_size(&self) -> i32
fn label_size(&self) -> i32
Returns the widget label’s size
Source§fn set_label_size(&mut self, sz: i32)
fn set_label_size(&mut self, sz: i32)
Sets the widget label’s size
Source§fn label_type(&self) -> LabelType
fn label_type(&self) -> LabelType
Returns the widget label’s type
Source§fn set_label_type(&mut self, typ: LabelType)
fn set_label_type(&mut self, typ: LabelType)
Sets the widget label’s type
Source§fn set_changed(&mut self)
fn set_changed(&mut self)
Mark the widget as changed
Source§fn clear_changed(&mut self)
fn clear_changed(&mut self)
Clears the changed status of the widget
Source§fn set_when(&mut self, trigger: When)
fn set_when(&mut self, trigger: When)
Sets the default callback trigger for a widget, equivalent to
when()
Source§fn selection_color(&self) -> Color
fn selection_color(&self) -> Color
Gets the selection color of the widget
Source§fn set_selection_color(&mut self, color: Color)
fn set_selection_color(&mut self, color: Color)
Sets the selection color of the widget
Source§fn do_callback(&mut self)
fn do_callback(&mut self)
Runs the already registered callback
Source§fn top_window(&self) -> Option<Box<dyn WindowExt>>
fn top_window(&self) -> Option<Box<dyn WindowExt>>
Returns the topmost window holding the widget
Source§fn takes_events(&self) -> bool
fn takes_events(&self) -> bool
Checks whether a widget is capable of taking events
Source§fn set_visible_focus(&mut self)
fn set_visible_focus(&mut self)
Set the widget to have visible focus
Source§fn clear_visible_focus(&mut self)
fn clear_visible_focus(&mut self)
Clear visible focus
Source§fn visible_focus(&mut self, v: bool)
fn visible_focus(&mut self, v: bool)
Set the visible focus using a flag
Source§fn has_visible_focus(&self) -> bool
fn has_visible_focus(&self) -> bool
Return whether the widget has visible focus
Source§fn was_deleted(&self) -> bool
fn was_deleted(&self) -> bool
Check if a widget was deleted
Source§fn set_damage(&mut self, flag: bool)
fn set_damage(&mut self, flag: bool)
Signal the widget as damaged and it should be redrawn in the next event loop cycle
Source§fn damage_type(&self) -> Damage
fn damage_type(&self) -> Damage
Return the damage mask
Source§fn set_damage_type(&mut self, mask: Damage)
fn set_damage_type(&mut self, mask: Damage)
Signal the type of damage a widget received
Source§fn set_damage_area(&mut self, mask: Damage, x: i32, y: i32, w: i32, h: i32)
fn set_damage_area(&mut self, mask: Damage, x: i32, y: i32, w: i32, h: i32)
Signal damage for an area inside the widget
Source§fn clear_damage(&mut self)
fn clear_damage(&mut self)
Clear the damaged flag
Source§fn as_window(&self) -> Option<Box<dyn WindowExt>>
fn as_window(&self) -> Option<Box<dyn WindowExt>>
Return the widget as a window if it’s a window
Source§fn as_group(&self) -> Option<Group>
fn as_group(&self) -> Option<Group>
Return the widget as a group widget if it’s a group widget
Source§fn inside<W: WidgetExt>(&self, wid: &W) -> bool
fn inside<W: WidgetExt>(&self, wid: &W) -> bool
Checks whether the self widget is inside another widget
Source§fn get_type<T: WidgetType>(&self) -> T
fn get_type<T: WidgetType>(&self) -> T
Returns the widget type when applicable
Source§fn set_type<T: WidgetType>(&mut self, typ: T)
fn set_type<T: WidgetType>(&mut self, typ: T)
Sets the widget type
Source§fn set_image_scaled<I: ImageExt>(&mut self, image: Option<I>)
fn set_image_scaled<I: ImageExt>(&mut self, image: Option<I>)
Sets the image of the widget scaled to the widget’s size
Source§fn set_deimage<I: ImageExt>(&mut self, image: Option<I>)
fn set_deimage<I: ImageExt>(&mut self, image: Option<I>)
Sets the deactivated image of the widget
Source§fn set_deimage_scaled<I: ImageExt>(&mut self, image: Option<I>)
fn set_deimage_scaled<I: ImageExt>(&mut self, image: Option<I>)
Sets the deactivated image of the widget scaled to the widget’s size
Source§fn deimage(&self) -> Option<Box<dyn ImageExt>>
fn deimage(&self) -> Option<Box<dyn ImageExt>>
Gets the deactivated image associated with the widget
Source§fn set_callback<F: FnMut(&mut Self) + 'static>(&mut self, cb: F)
fn set_callback<F: FnMut(&mut Self) + 'static>(&mut self, cb: F)
Sets the callback when the widget is triggered (clicks for example)
takes the widget as a closure argument
Source§fn emit<T: 'static + Clone + Send + Sync>(&mut self, sender: Sender<T>, msg: T)
fn emit<T: 'static + Clone + Send + Sync>(&mut self, sender: Sender<T>, msg: T)
Emits a message on callback using a sender
Source§unsafe fn as_widget<W: WidgetBase>(&self) -> W
unsafe fn as_widget<W: WidgetBase>(&self) -> W
Upcast a
WidgetExt
to some widget type Read moreSource§fn visible_r(&self) -> bool
fn visible_r(&self) -> bool
Returns whether a widget or any of its parents are visible (recursively)
Source§fn is_same<W: WidgetExt>(&self, other: &W) -> bool
fn is_same<W: WidgetExt>(&self, other: &W) -> bool
Return whether two widgets object point to the same widget
Source§fn active_r(&self) -> bool
fn active_r(&self) -> bool
Returns whether a widget or any of its parents are active (recursively)
Source§fn handle_event(&mut self, event: Event) -> bool
fn handle_event(&mut self, event: Event) -> bool
Handle a specific event
Source§fn is_derived(&self) -> bool
fn is_derived(&self) -> bool
Check whether a widget is derived
Source§fn as_base_widget(&self) -> Widgetwhere
Self: Sized,
fn as_base_widget(&self) -> Widgetwhere
Self: Sized,
Upcast a
WidgetExt
to a WidgetSource§impl WidgetProps for Group
impl WidgetProps for Group
Source§fn with_label(self, title: &str) -> Self
fn with_label(self, title: &str) -> Self
Initialize with a label
Source§fn with_align(self, align: Align) -> Self
fn with_align(self, align: Align) -> Self
Initialize with alignment
Source§fn with_type<T: WidgetType>(self, typ: T) -> Self
fn with_type<T: WidgetType>(self, typ: T) -> Self
Initialize with type
Source§fn below_of<W: WidgetExt>(self, wid: &W, padding: i32) -> Self
fn below_of<W: WidgetExt>(self, wid: &W, padding: i32) -> Self
Initialize at bottom of another widget
Source§fn above_of<W: WidgetExt>(self, wid: &W, padding: i32) -> Self
fn above_of<W: WidgetExt>(self, wid: &W, padding: i32) -> Self
Initialize above of another widget
Source§fn right_of<W: WidgetExt>(self, wid: &W, padding: i32) -> Self
fn right_of<W: WidgetExt>(self, wid: &W, padding: i32) -> Self
Initialize right of another widget
Source§fn left_of<W: WidgetExt>(self, wid: &W, padding: i32) -> Self
fn left_of<W: WidgetExt>(self, wid: &W, padding: i32) -> Self
Initialize left of another widget
Source§fn center_x<W: WidgetExt>(self, w: &W) -> Self
fn center_x<W: WidgetExt>(self, w: &W) -> Self
Initialize center of another widget on the x axis
Source§fn center_y<W: WidgetExt>(self, w: &W) -> Self
fn center_y<W: WidgetExt>(self, w: &W) -> Self
Initialize center of another widget on the y axis
Source§fn center_of_parent(self) -> Self
fn center_of_parent(self) -> Self
Initialize center of parent
Source§fn size_of_parent(self) -> Self
fn size_of_parent(self) -> Self
Initialize to the size of the parent
impl Eq for Group
impl Send for Group
Available on non-crate feature
single-threaded
only.impl Sync for Group
Available on non-crate feature
single-threaded
only.Auto Trait Implementations§
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