Split out Interactive<T> into Toggle<T> and Interactive<T>

This commit is contained in:
Piotr Osiewicz 2023-06-14 14:02:32 +02:00 committed by Mikayla Maki
parent 6ed86781b2
commit e92015b12f
No known key found for this signature in database
35 changed files with 223 additions and 144 deletions

View file

@ -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(