commit 6812a0e6ae1ec237236b174295b28d2324393be3
parent b139af475e966631ace0fb74a5a49887aaba0867
Author: William Casarin <jb55@jb55.com>
Date: Thu, 5 Jun 2025 15:21:08 -0700
dave: add chrome toggle button
We were missing this, which meant we could get stuck in
dave
Diffstat:
2 files changed, 48 insertions(+), 18 deletions(-)
diff --git a/crates/notedeck_dave/src/lib.rs b/crates/notedeck_dave/src/lib.rs
@@ -355,6 +355,9 @@ impl notedeck::App for Dave {
let should_send = self.process_events(ctx);
if let Some(action) = self.ui(ctx, ui).action {
match action {
+ DaveAction::ToggleChrome => {
+ app_action = Some(AppAction::ToggleChrome);
+ }
DaveAction::Note(n) => {
app_action = Some(AppAction::Note(n));
}
diff --git a/crates/notedeck_dave/src/ui/dave.rs b/crates/notedeck_dave/src/ui/dave.rs
@@ -4,8 +4,8 @@ use crate::{
};
use egui::{Align, Key, KeyboardShortcut, Layout, Modifiers};
use nostrdb::{Ndb, Transaction};
-use notedeck::{AppContext, NoteAction, NoteContext};
-use notedeck_ui::{NoteOptions, ProfilePic, icons::search_icon, jobs::JobsCache};
+use notedeck::{Accounts, AppContext, Images, NoteAction, NoteContext};
+use notedeck_ui::{icons::search_icon, jobs::JobsCache, NoteOptions, ProfilePic};
/// DaveUi holds all of the data it needs to render itself
pub struct DaveUi<'a> {
@@ -56,6 +56,7 @@ pub enum DaveAction {
/// The action generated when the user sends a message to dave
Send,
NewChat,
+ ToggleChrome,
Note(NoteAction),
}
@@ -89,7 +90,7 @@ impl<'a> DaveUi<'a> {
jobs: &mut JobsCache,
ui: &mut egui::Ui,
) -> DaveResponse {
- let action = new_chat_button_ui(ui);
+ let action = top_buttons_ui(app_ctx, ui);
egui::Frame::NONE
.show(ui, |ui| {
@@ -452,22 +453,48 @@ fn pill_label_ui(name: &str, mut value: impl FnMut(&mut egui::Ui), ui: &mut egui
});
}
-fn new_chat_button_ui(ui: &mut egui::Ui) -> Option<DaveAction> {
+fn top_buttons_ui(app_ctx: &mut AppContext, ui: &mut egui::Ui) -> Option<DaveAction> {
// Scroll area for chat messages
- let new_resp = {
- let mut rect = ui.available_rect_before_wrap();
- rect = rect.translate(egui::vec2(20.0, 20.0));
- rect.set_width(32.0);
- rect.set_height(32.0);
- ui.put(rect, new_chat_button())
- };
-
- if new_resp.clicked() {
- Some(DaveAction::NewChat)
- } else if new_resp.hovered() {
+ let mut action: Option<DaveAction> = None;
+ let mut rect = ui.available_rect_before_wrap();
+ rect = rect.translate(egui::vec2(20.0, 20.0));
+ rect.set_height(32.0);
+ rect.set_width(32.0);
+
+ let txn = Transaction::new(app_ctx.ndb).unwrap();
+ let r = ui.put(
+ rect,
+ &mut pfp_button(&txn, app_ctx.accounts, app_ctx.img_cache, app_ctx.ndb),
+ );
+
+ if r.clicked() {
+ action = Some(DaveAction::ToggleChrome);
+ } else if r.hovered() {
notedeck_ui::show_pointer(ui);
- None
- } else {
- None
}
+
+ rect = rect.translate(egui::vec2(30.0, 0.0));
+ let r = ui.put(rect, new_chat_button());
+
+ if r.clicked() {
+ action = Some(DaveAction::NewChat);
+ } else if r.hovered() {
+ notedeck_ui::show_pointer(ui);
+ }
+
+ action
+}
+
+fn pfp_button<'me, 'a>(
+ txn: &'a Transaction,
+ accounts: &Accounts,
+ img_cache: &'me mut Images,
+ ndb: &Ndb,
+) -> ProfilePic<'me, 'a> {
+ let account = accounts.get_selected_account();
+ let profile = account.and_then(|a| ndb.get_profile_by_pubkey(txn, a.key.pubkey.bytes()).ok());
+
+ ProfilePic::from_profile_or_default(img_cache, profile.as_ref())
+ .size(24.0)
+ .sense(egui::Sense::click())
}