mirror of
https://github.com/aljazceru/notedeck.git
synced 2026-01-09 11:24:19 +01:00
side_panel: return more detailed side panel responses
We should be treating all ui widgets as pure functions that do not mutate anything. This will make testing easier, as well as avoiding shared mutable references. Signed-off-by: William Casarin <jb55@jb55.com>
This commit is contained in:
10
src/app.rs
10
src/app.rs
@@ -867,16 +867,16 @@ fn timelines_view(ui: &mut egui::Ui, sizes: Size, app: &mut Damus, timelines: us
|
||||
.clip(true)
|
||||
.horizontal(|mut strip| {
|
||||
strip.cell(|ui| {
|
||||
if DesktopSidePanel::new(
|
||||
let side_panel = DesktopSidePanel::new(
|
||||
app.account_manager
|
||||
.get_selected_account()
|
||||
.map(|a| a.pubkey.bytes()),
|
||||
SimpleProfilePreviewController::new(&app.ndb, &mut app.img_cache),
|
||||
)
|
||||
.show(ui)
|
||||
.clicked()
|
||||
{
|
||||
// clicked pfp
|
||||
.show(ui);
|
||||
|
||||
if side_panel.response.clicked() {
|
||||
info!("clicked {:?}", side_panel.action);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -9,9 +9,28 @@ pub struct DesktopSidePanel<'a> {
|
||||
simple_preview_controller: SimpleProfilePreviewController<'a>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Eq, PartialEq, Clone, Copy)]
|
||||
pub enum SidePanelAction {
|
||||
Panel,
|
||||
Account,
|
||||
Settings,
|
||||
Columns,
|
||||
}
|
||||
|
||||
pub struct SidePanelResponse {
|
||||
pub response: egui::Response,
|
||||
pub action: SidePanelAction,
|
||||
}
|
||||
|
||||
impl SidePanelResponse {
|
||||
fn new(action: SidePanelAction, response: egui::Response) -> Self {
|
||||
SidePanelResponse { action, response }
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> Widget for DesktopSidePanel<'a> {
|
||||
fn ui(self, ui: &mut egui::Ui) -> egui::Response {
|
||||
self.show(ui)
|
||||
self.show(ui).response
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,7 +51,7 @@ impl<'a> DesktopSidePanel<'a> {
|
||||
.exact_width(40.0)
|
||||
}
|
||||
|
||||
pub fn show(self, ui: &mut egui::Ui) -> egui::Response {
|
||||
pub fn show(self, ui: &mut egui::Ui) -> SidePanelResponse {
|
||||
let dark_mode = ui.ctx().style().visuals.dark_mode;
|
||||
let spacing_amt = 16.0;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user