commit 66c8973edf1c1afde05d84775148dbf4d6d276b3
parent 758de6b024e1d68360df0b75dfd20c45fb208b6f
Author: William Casarin <jb55@jb55.com>
Date: Tue, 16 Jul 2024 12:41:45 -0700
actionbar: move BarAction and add execute method
We will be executing baractions in multiple places, so factor this
out.
Signed-off-by: William Casarin <jb55@jb55.com>
Diffstat:
5 files changed, 37 insertions(+), 19 deletions(-)
diff --git a/src/actionbar.rs 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
@@ -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
@@ -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
@@ -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
@@ -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,