From 66c8973edf1c1afde05d84775148dbf4d6d276b3 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Tue, 16 Jul 2024 12:41:45 -0700 Subject: [PATCH] actionbar: move BarAction and add execute method We will be executing baractions in multiple places, so factor this out. Signed-off-by: William Casarin --- src/actionbar.rs | 30 ++++++++++++++++++++++++++++++ src/lib.rs | 1 + src/timeline.rs | 16 ++++------------ src/ui/mod.rs | 2 +- src/ui/note/mod.rs | 7 +------ 5 files changed, 37 insertions(+), 19 deletions(-) create mode 100644 src/actionbar.rs diff --git a/src/actionbar.rs b/src/actionbar.rs new file mode 100644 index 00000000..8fc20209 --- /dev/null +++ b/src/actionbar.rs @@ -0,0 +1,30 @@ +use crate::{route::Route, Damus}; +use enostr::NoteId; + +#[derive(Debug, Eq, PartialEq, Copy, Clone)] +pub enum BarAction { + Reply, + OpenThread, +} + +impl BarAction { + pub fn execute(self, app: &mut Damus, timeline: usize, replying_to: &[u8; 32]) { + match self { + BarAction::Reply => { + let timeline = &mut app.timelines[timeline]; + timeline + .routes + .push(Route::Reply(NoteId::new(replying_to.to_owned()))); + timeline.navigating = true; + } + + BarAction::OpenThread => { + let timeline = &mut app.timelines[timeline]; + timeline + .routes + .push(Route::Thread(NoteId::new(replying_to.to_owned()))); + timeline.navigating = true; + } + } + } +} diff --git a/src/lib.rs b/src/lib.rs index 109f8b04..1abd35c1 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -5,6 +5,7 @@ mod error; //mod block; mod abbrev; pub mod account_manager; +mod actionbar; pub mod app_creation; mod app_style; mod colors; diff --git a/src/timeline.rs b/src/timeline.rs index a31d6789..678e06a0 100644 --- a/src/timeline.rs +++ b/src/timeline.rs @@ -8,10 +8,9 @@ use crate::route::Route; use egui::containers::scroll_area::ScrollBarVisibility; use egui::{Direction, Layout}; -use crate::ui::BarAction; use egui_tabs::TabColor; use egui_virtual_list::VirtualList; -use enostr::{Filter, NoteId}; +use enostr::Filter; use nostrdb::{Note, Subscription, Transaction}; use std::cell::RefCell; use std::rc::Rc; @@ -332,16 +331,9 @@ pub fn timeline_view(ui: &mut egui::Ui, app: &mut Damus, timeline: usize) { .show(ui); if let Some(action) = resp.action { - debug!("bar action: {:?}", action); - match action { - BarAction::Reply => { - let timeline = &mut app.timelines[timeline]; - timeline - .routes - .push(Route::Reply(NoteId::new(note.id().to_owned()))); - timeline.navigating = true; - } - } + action.execute(app, timeline, note.id()); + } else if resp.response.clicked() { + debug!("clicked note"); } }); diff --git a/src/ui/mod.rs b/src/ui/mod.rs index cffe7927..9c185bfc 100644 --- a/src/ui/mod.rs +++ b/src/ui/mod.rs @@ -17,7 +17,7 @@ pub use account_switcher::AccountSelectionWidget; pub use fixed_window::{FixedWindow, FixedWindowResponse}; pub use global_popup::DesktopGlobalPopup; pub use mention::Mention; -pub use note::{BarAction, NoteResponse, NoteView, PostReplyView, PostView}; +pub use note::{NoteResponse, NoteView, PostReplyView, PostView}; pub use preview::{Preview, PreviewApp, PreviewConfig}; pub use profile::{profile_preview_controller, ProfilePic, ProfilePreview}; pub use relay::RelayView; diff --git a/src/ui/note/mod.rs b/src/ui/note/mod.rs index 1fc75403..dfd2ed90 100644 --- a/src/ui/note/mod.rs +++ b/src/ui/note/mod.rs @@ -8,7 +8,7 @@ pub use options::NoteOptions; pub use post::{PostAction, PostResponse, PostView}; pub use reply::PostReplyView; -use crate::{colors, notecache::CachedNote, ui, ui::View, Damus}; +use crate::{actionbar::BarAction, colors, notecache::CachedNote, ui, ui::View, Damus}; use egui::{Label, RichText, Sense}; use nostrdb::{Note, NoteKey, NoteReply, Transaction}; @@ -368,11 +368,6 @@ impl<'a> NoteView<'a> { } } -#[derive(Debug, Eq, PartialEq, Copy, Clone)] -pub enum BarAction { - Reply, -} - fn render_note_actionbar( ui: &mut egui::Ui, note_key: NoteKey,