Adjust icon color based on whether the various components are open

This commit is contained in:
Marshall Bowers 2023-10-11 12:09:08 -04:00
parent acf2c2c6a5
commit 382693a199

View file

@ -101,16 +101,19 @@ impl<S: 'static + Send + Sync + Clone> StatusBar<S> {
} }
fn left_tools(&self, theme: &Theme) -> impl Element<State = S> { fn left_tools(&self, theme: &Theme) -> impl Element<State = S> {
let workspace_state = get_workspace_state();
div() div()
.flex() .flex()
.items_center() .items_center()
.gap_1() .gap_1()
.child( .child(
IconButton::new(Icon::FileTree) IconButton::new(Icon::FileTree)
.color(IconColor::Accent) .when(
workspace_state.show_project_panel.load(Ordering::SeqCst),
|this| this.color(IconColor::Accent),
)
.on_click(|_, cx| { .on_click(|_, cx| {
let workspace_state = get_workspace_state();
let is_showing_project_panel = let is_showing_project_panel =
workspace_state.show_project_panel.load(Ordering::SeqCst); workspace_state.show_project_panel.load(Ordering::SeqCst);
@ -133,6 +136,8 @@ impl<S: 'static + Send + Sync + Clone> StatusBar<S> {
} }
fn right_tools(&self, theme: &Theme) -> impl Element<State = S> { fn right_tools(&self, theme: &Theme) -> impl Element<State = S> {
let workspace_state = get_workspace_state();
div() div()
.flex() .flex()
.items_center() .items_center()
@ -166,42 +171,52 @@ impl<S: 'static + Send + Sync + Clone> StatusBar<S> {
.flex() .flex()
.items_center() .items_center()
.gap_1() .gap_1()
.child(IconButton::new(Icon::Terminal).on_click(|_, cx| { .child(
let workspace_state = get_workspace_state(); IconButton::new(Icon::Terminal)
.when(
let is_showing_terminal = workspace_state.show_terminal.load(Ordering::SeqCst),
workspace_state.show_terminal.load(Ordering::SeqCst); |this| this.color(IconColor::Accent),
workspace_state
.show_terminal
.compare_exchange(
is_showing_terminal,
!is_showing_terminal,
Ordering::SeqCst,
Ordering::SeqCst,
) )
.unwrap(); .on_click(|_, cx| {
let is_showing_terminal =
workspace_state.show_terminal.load(Ordering::SeqCst);
cx.notify(); workspace_state
})) .show_terminal
.child(IconButton::new(Icon::MessageBubbles).on_click(|_, cx| { .compare_exchange(
let workspace_state = get_workspace_state(); is_showing_terminal,
!is_showing_terminal,
Ordering::SeqCst,
Ordering::SeqCst,
)
.unwrap();
let is_showing_chat_panel = cx.notify();
workspace_state.show_chat_panel.load(Ordering::SeqCst); }),
)
workspace_state .child(
.show_chat_panel IconButton::new(Icon::MessageBubbles)
.compare_exchange( .when(
is_showing_chat_panel, workspace_state.show_chat_panel.load(Ordering::SeqCst),
!is_showing_chat_panel, |this| this.color(IconColor::Accent),
Ordering::SeqCst,
Ordering::SeqCst,
) )
.unwrap(); .on_click(|_, cx| {
let is_showing_chat_panel =
workspace_state.show_chat_panel.load(Ordering::SeqCst);
cx.notify(); workspace_state
})) .show_chat_panel
.compare_exchange(
is_showing_chat_panel,
!is_showing_chat_panel,
Ordering::SeqCst,
Ordering::SeqCst,
)
.unwrap();
cx.notify();
}),
)
.child(IconButton::new(Icon::Ai)), .child(IconButton::new(Icon::Ai)),
) )
} }