ui: add initial Profile hover previews

The idea with these is that on notedeck you can just hover your cursor
over a profile link to see the profile. I just have a stub for now, but
full design coming soon after.

Also simplify the preview system even further with a macro. In the
future I imagine we can grep every preview in the codebase, and then
include this as a string inside this macro. This is some kind of
template metaprogramming insanity but in theory it could work.

Signed-off-by: William Casarin <jb55@jb55.com>
This commit is contained in:
William Casarin
2024-04-19 22:00:19 -07:00
parent 2d566cc637
commit 05fe164a49
13 changed files with 148 additions and 28 deletions

3
src/ui/profile/mod.rs Normal file
View File

@@ -0,0 +1,3 @@
pub mod preview;
pub use preview::ProfilePreview;

65
src/ui/profile/preview.rs Normal file
View File

@@ -0,0 +1,65 @@
use nostrdb::ProfileRecord;
pub struct ProfilePreview<'a> {
profile: &'a ProfileRecord<'a>,
}
impl<'a> ProfilePreview<'a> {
pub fn new(profile: &'a ProfileRecord<'a>) -> Self {
ProfilePreview { profile }
}
}
impl<'a> egui::Widget for ProfilePreview<'a> {
fn ui(self, ui: &mut egui::Ui) -> egui::Response {
ui.horizontal(|ui| {
ui.label("Profile");
let name = if let Some(name) = crate::profile::get_profile_name(self.profile) {
name
} else {
"nostrich"
};
ui.label(name);
})
.response
}
}
mod previews {
use super::*;
use crate::test_data::test_profile_record;
use crate::ui::{Preview, View};
use egui::Widget;
pub struct ProfilePreviewPreview<'a> {
profile: ProfileRecord<'a>,
}
impl<'a> ProfilePreviewPreview<'a> {
pub fn new() -> Self {
let profile = test_profile_record();
ProfilePreviewPreview { profile }
}
}
impl<'a> Default for ProfilePreviewPreview<'a> {
fn default() -> Self {
ProfilePreviewPreview::new()
}
}
impl<'a> View for ProfilePreviewPreview<'a> {
fn ui(&mut self, ui: &mut egui::Ui) {
ProfilePreview::new(&self.profile).ui(ui);
}
}
impl<'a> Preview for ProfilePreview<'a> {
/// A preview of the profile preview :D
type Prev = ProfilePreviewPreview<'a>;
fn preview() -> Self::Prev {
ProfilePreviewPreview::new()
}
}
}