Split out Interactive<T> into Toggle<T> and Interactive<T>
This commit is contained in:
parent
6ed86781b2
commit
e92015b12f
35 changed files with 223 additions and 144 deletions
|
@ -9,6 +9,7 @@ use gpui::{
|
|||
};
|
||||
use menu::*;
|
||||
use std::{any::TypeId, borrow::Cow, sync::Arc, time::Duration};
|
||||
use theme::ToggleState;
|
||||
|
||||
pub fn init(cx: &mut AppContext) {
|
||||
cx.add_action(ContextMenu::select_first);
|
||||
|
@ -328,10 +329,13 @@ impl ContextMenu {
|
|||
Flex::column().with_children(self.items.iter().enumerate().map(|(ix, item)| {
|
||||
match item {
|
||||
ContextMenuItem::Item { label, .. } => {
|
||||
let style = style.item.style_for(
|
||||
&mut Default::default(),
|
||||
Some(ix) == self.selected_index,
|
||||
);
|
||||
let toggle_state = if Some(ix) == self.selected_index {
|
||||
ToggleState::On
|
||||
} else {
|
||||
ToggleState::Off
|
||||
};
|
||||
let style = style.item.in_state(toggle_state);
|
||||
let style = style.style_for(&mut Default::default());
|
||||
|
||||
match label {
|
||||
ContextMenuItemLabel::String(label) => {
|
||||
|
@ -363,10 +367,13 @@ impl ContextMenu {
|
|||
.with_children(self.items.iter().enumerate().map(|(ix, item)| {
|
||||
match item {
|
||||
ContextMenuItem::Item { action, .. } => {
|
||||
let style = style.item.style_for(
|
||||
&mut Default::default(),
|
||||
Some(ix) == self.selected_index,
|
||||
);
|
||||
let toggle_state = if Some(ix) == self.selected_index {
|
||||
ToggleState::On
|
||||
} else {
|
||||
ToggleState::Off
|
||||
};
|
||||
let style = style.item.in_state(toggle_state);
|
||||
let style = style.style_for(&mut Default::default());
|
||||
|
||||
match action {
|
||||
ContextMenuItemAction::Action(action) => KeystrokeLabel::new(
|
||||
|
@ -412,8 +419,13 @@ impl ContextMenu {
|
|||
let action = action.clone();
|
||||
let view_id = self.parent_view_id;
|
||||
MouseEventHandler::<MenuItem, ContextMenu>::new(ix, cx, |state, _| {
|
||||
let style =
|
||||
style.item.style_for(state, Some(ix) == self.selected_index);
|
||||
let toggle_state = if Some(ix) == self.selected_index {
|
||||
ToggleState::On
|
||||
} else {
|
||||
ToggleState::Off
|
||||
};
|
||||
let style = style.item.in_state(toggle_state);
|
||||
let style = style.style_for(state);
|
||||
let keystroke = match &action {
|
||||
ContextMenuItemAction::Action(action) => Some(
|
||||
KeystrokeLabel::new(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue