feat(segmented_button): add on_middle_press
This commit is contained in:
parent
bfbff0773a
commit
41d1f4a7cd
2 changed files with 42 additions and 16 deletions
|
|
@ -101,6 +101,15 @@ impl<'a, Message: Clone + 'static> NavBar<'a, Message> {
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Emitted when the middle mouse button is pressed on a button.
|
||||||
|
pub fn on_middle_press<T>(mut self, on_middle_press: T) -> Self
|
||||||
|
where
|
||||||
|
T: Fn(Id) -> Message + 'static,
|
||||||
|
{
|
||||||
|
self.segmented_button = self.segmented_button.on_middle_press(on_middle_press);
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
/// Handle the dnd drop event.
|
/// Handle the dnd drop event.
|
||||||
pub fn on_dnd_drop<D: AllowedMimeTypes>(
|
pub fn on_dnd_drop<D: AllowedMimeTypes>(
|
||||||
mut self,
|
mut self,
|
||||||
|
|
|
||||||
|
|
@ -134,6 +134,8 @@ where
|
||||||
#[setters(skip)]
|
#[setters(skip)]
|
||||||
pub(super) on_context: Option<Box<dyn Fn(Entity) -> Message + 'static>>,
|
pub(super) on_context: Option<Box<dyn Fn(Entity) -> Message + 'static>>,
|
||||||
#[setters(skip)]
|
#[setters(skip)]
|
||||||
|
pub(super) on_middle_press: Option<Box<dyn Fn(Entity) -> Message + 'static>>,
|
||||||
|
#[setters(skip)]
|
||||||
pub(super) on_dnd_drop:
|
pub(super) on_dnd_drop:
|
||||||
Option<Box<dyn Fn(Entity, Vec<u8>, String, DndAction) -> Message + 'static>>,
|
Option<Box<dyn Fn(Entity, Vec<u8>, String, DndAction) -> Message + 'static>>,
|
||||||
pub(super) mimes: Vec<String>,
|
pub(super) mimes: Vec<String>,
|
||||||
|
|
@ -183,6 +185,7 @@ where
|
||||||
on_activate: None,
|
on_activate: None,
|
||||||
on_close: None,
|
on_close: None,
|
||||||
on_context: None,
|
on_context: None,
|
||||||
|
on_middle_press: None,
|
||||||
on_dnd_drop: None,
|
on_dnd_drop: None,
|
||||||
on_dnd_enter: None,
|
on_dnd_enter: None,
|
||||||
on_dnd_leave: None,
|
on_dnd_leave: None,
|
||||||
|
|
@ -237,6 +240,15 @@ where
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Emitted when the middle mouse button is pressed on a button.
|
||||||
|
pub fn on_middle_press<T>(mut self, on_middle_press: T) -> Self
|
||||||
|
where
|
||||||
|
T: Fn(Entity) -> Message + 'static,
|
||||||
|
{
|
||||||
|
self.on_middle_press = Some(Box::new(on_middle_press));
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
/// Check if an item is enabled.
|
/// Check if an item is enabled.
|
||||||
fn is_enabled(&self, key: Entity) -> bool {
|
fn is_enabled(&self, key: Entity) -> bool {
|
||||||
self.model.items.get(key).map_or(false, |item| item.enabled)
|
self.model.items.get(key).map_or(false, |item| item.enabled)
|
||||||
|
|
@ -878,24 +890,19 @@ where
|
||||||
return event::Status::Captured;
|
return event::Status::Captured;
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Event::Mouse(mouse::Event::ButtonPressed(
|
if self.on_middle_press.is_none() {
|
||||||
mouse::Button::Middle,
|
// Emit close message if the tab is middle clicked.
|
||||||
)) = event
|
if let Event::Mouse(mouse::Event::ButtonReleased(
|
||||||
{
|
mouse::Button::Middle,
|
||||||
state.middle_clicked = Some(Item::Tab(key));
|
)) = event
|
||||||
}
|
{
|
||||||
|
if state.middle_clicked == Some(Item::Tab(key)) {
|
||||||
|
shell.publish(on_close(key));
|
||||||
|
return event::Status::Captured;
|
||||||
|
}
|
||||||
|
|
||||||
// Emit close message if the tab is middle clicked.
|
state.middle_clicked = None;
|
||||||
if let Event::Mouse(mouse::Event::ButtonReleased(
|
|
||||||
mouse::Button::Middle,
|
|
||||||
)) = event
|
|
||||||
{
|
|
||||||
if state.middle_clicked == Some(Item::Tab(key)) {
|
|
||||||
shell.publish(on_close(key));
|
|
||||||
return event::Status::Captured;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
state.middle_clicked = None;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -931,6 +938,16 @@ where
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if let Event::Mouse(mouse::Event::ButtonPressed(mouse::Button::Middle)) =
|
||||||
|
event
|
||||||
|
{
|
||||||
|
state.middle_clicked = Some(Item::Tab(key));
|
||||||
|
if let Some(on_middle_press) = self.on_middle_press.as_ref() {
|
||||||
|
shell.publish(on_middle_press(key));
|
||||||
|
return event::Status::Captured;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue