Improve context menu operation
This commit is contained in:
parent
5806c420a8
commit
40ee305eb2
3 changed files with 69 additions and 34 deletions
|
|
@ -416,6 +416,8 @@ impl Application for App {
|
||||||
}
|
}
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
|
// Disable side context page
|
||||||
|
self.core.window.show_context = false;
|
||||||
}
|
}
|
||||||
Message::TabMessage(entity, tab_message) => {
|
Message::TabMessage(entity, tab_message) => {
|
||||||
let mut update_opt = None;
|
let mut update_opt = None;
|
||||||
|
|
@ -451,6 +453,7 @@ impl Application for App {
|
||||||
},
|
},
|
||||||
//TODO: TABRELOAD
|
//TODO: TABRELOAD
|
||||||
Message::ToggleContextPage(context_page) => {
|
Message::ToggleContextPage(context_page) => {
|
||||||
|
//TODO: ensure context menus are closed
|
||||||
if self.context_page == context_page {
|
if self.context_page == context_page {
|
||||||
self.core.window.show_context = !self.core.window.show_context;
|
self.core.window.show_context = !self.core.window.show_context;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ pub struct MouseArea<'a, Message, Renderer> {
|
||||||
on_press: Option<Box<dyn Fn(Option<Point>) -> Message + 'a>>,
|
on_press: Option<Box<dyn Fn(Option<Point>) -> Message + 'a>>,
|
||||||
on_release: Option<Box<dyn Fn(Option<Point>) -> Message + 'a>>,
|
on_release: Option<Box<dyn Fn(Option<Point>) -> Message + 'a>>,
|
||||||
on_right_press: Option<Box<dyn Fn(Option<Point>) -> Message + 'a>>,
|
on_right_press: Option<Box<dyn Fn(Option<Point>) -> Message + 'a>>,
|
||||||
|
on_right_press_no_capture: Option<Box<dyn Fn(Option<Point>) -> Message + 'a>>,
|
||||||
on_right_release: Option<Box<dyn Fn(Option<Point>) -> Message + 'a>>,
|
on_right_release: Option<Box<dyn Fn(Option<Point>) -> Message + 'a>>,
|
||||||
on_middle_press: Option<Box<dyn Fn(Option<Point>) -> Message + 'a>>,
|
on_middle_press: Option<Box<dyn Fn(Option<Point>) -> Message + 'a>>,
|
||||||
on_middle_release: Option<Box<dyn Fn(Option<Point>) -> Message + 'a>>,
|
on_middle_release: Option<Box<dyn Fn(Option<Point>) -> Message + 'a>>,
|
||||||
|
|
@ -49,6 +50,16 @@ impl<'a, Message, Renderer> MouseArea<'a, Message, Renderer> {
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// The message to emit on a right button press without capturing.
|
||||||
|
#[must_use]
|
||||||
|
pub fn on_right_press_no_capture(
|
||||||
|
mut self,
|
||||||
|
message: impl Fn(Option<Point>) -> Message + 'a,
|
||||||
|
) -> Self {
|
||||||
|
self.on_right_press_no_capture = Some(Box::new(message));
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
/// The message to emit on a right button release.
|
/// The message to emit on a right button release.
|
||||||
#[must_use]
|
#[must_use]
|
||||||
pub fn on_right_release(mut self, message: impl Fn(Option<Point>) -> Message + 'a) -> Self {
|
pub fn on_right_release(mut self, message: impl Fn(Option<Point>) -> Message + 'a) -> Self {
|
||||||
|
|
@ -87,6 +98,7 @@ impl<'a, Message, Renderer> MouseArea<'a, Message, Renderer> {
|
||||||
on_press: None,
|
on_press: None,
|
||||||
on_release: None,
|
on_release: None,
|
||||||
on_right_press: None,
|
on_right_press: None,
|
||||||
|
on_right_press_no_capture: None,
|
||||||
on_right_release: None,
|
on_right_release: None,
|
||||||
on_middle_press: None,
|
on_middle_press: None,
|
||||||
on_middle_release: None,
|
on_middle_release: None,
|
||||||
|
|
@ -285,6 +297,14 @@ fn update<Message: Clone, Renderer>(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if let Some(message) = widget.on_right_press_no_capture.as_ref() {
|
||||||
|
if let Event::Mouse(mouse::Event::ButtonPressed(mouse::Button::Right)) = event {
|
||||||
|
shell.publish(message(cursor.position_in(layout.bounds())));
|
||||||
|
|
||||||
|
return event::Status::Ignored;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if let Some(message) = widget.on_right_release.as_ref() {
|
if let Some(message) = widget.on_right_release.as_ref() {
|
||||||
if let Event::Mouse(mouse::Event::ButtonReleased(mouse::Button::Right)) = event {
|
if let Event::Mouse(mouse::Event::ButtonReleased(mouse::Button::Right)) = event {
|
||||||
shell.publish(message(cursor.position_in(layout.bounds())));
|
shell.publish(message(cursor.position_in(layout.bounds())));
|
||||||
|
|
|
||||||
80
src/tab.rs
80
src/tab.rs
|
|
@ -447,24 +447,30 @@ impl Tab {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
children.push(
|
let button = widget::button(
|
||||||
widget::button(
|
widget::column::with_children(vec![
|
||||||
widget::column::with_children(vec![
|
widget::icon::icon(item.icon_handle_grid.clone())
|
||||||
widget::icon::icon(item.icon_handle_grid.clone())
|
.size(ICON_SIZE_GRID)
|
||||||
.size(ICON_SIZE_GRID)
|
.into(),
|
||||||
.into(),
|
widget::text(item.name.clone()).into(),
|
||||||
widget::text(item.name.clone()).into(),
|
])
|
||||||
])
|
.align_items(Alignment::Center)
|
||||||
.align_items(Alignment::Center)
|
.spacing(space_xxs)
|
||||||
.spacing(space_xxs)
|
//TODO: get from config
|
||||||
//TODO: get from config
|
.height(Length::Fixed(128.0))
|
||||||
.height(Length::Fixed(128.0))
|
.width(Length::Fixed(128.0)),
|
||||||
.width(Length::Fixed(128.0)),
|
)
|
||||||
)
|
.style(button_style(item.select_time.is_some()))
|
||||||
.style(button_style(item.select_time.is_some()))
|
.on_press(Message::Click(Some(i)));
|
||||||
.on_press(Message::Click(Some(i)))
|
if self.context_menu.is_some() {
|
||||||
.into(),
|
children.push(button.into());
|
||||||
);
|
} else {
|
||||||
|
children.push(
|
||||||
|
crate::mouse_area::MouseArea::new(button)
|
||||||
|
.on_right_press_no_capture(move |_point_opt| Message::Click(Some(i)))
|
||||||
|
.into(),
|
||||||
|
);
|
||||||
|
}
|
||||||
count += 1;
|
count += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -489,22 +495,28 @@ impl Tab {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
children.push(
|
let button = widget::button(
|
||||||
widget::button(
|
widget::row::with_children(vec![
|
||||||
widget::row::with_children(vec![
|
widget::icon::icon(item.icon_handle_list.clone())
|
||||||
widget::icon::icon(item.icon_handle_list.clone())
|
.size(ICON_SIZE_LIST)
|
||||||
.size(ICON_SIZE_LIST)
|
.into(),
|
||||||
.into(),
|
widget::text(item.name.clone()).into(),
|
||||||
widget::text(item.name.clone()).into(),
|
])
|
||||||
])
|
.align_items(Alignment::Center)
|
||||||
.align_items(Alignment::Center)
|
.spacing(space_xxs),
|
||||||
.spacing(space_xxs),
|
)
|
||||||
)
|
.style(button_style(item.select_time.is_some()))
|
||||||
.style(button_style(item.select_time.is_some()))
|
.width(Length::Fill)
|
||||||
.width(Length::Fill)
|
.on_press(Message::Click(Some(i)));
|
||||||
.on_press(Message::Click(Some(i)))
|
if self.context_menu.is_some() {
|
||||||
.into(),
|
children.push(button.into());
|
||||||
);
|
} else {
|
||||||
|
children.push(
|
||||||
|
crate::mouse_area::MouseArea::new(button)
|
||||||
|
.on_right_press_no_capture(move |_point_opt| Message::Click(Some(i)))
|
||||||
|
.into(),
|
||||||
|
);
|
||||||
|
}
|
||||||
count += 1;
|
count += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue