From 035bd214662da184bad83f6d7d5125582c756f71 Mon Sep 17 00:00:00 2001 From: Oliver Atkinson Date: Fri, 16 May 2025 09:43:49 -0600 Subject: [PATCH] closes #7 --- src/main.rs | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/src/main.rs b/src/main.rs index 63eb488..35dd29b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,7 +2,7 @@ use iced::keyboard::key::Named; use iced::keyboard::{Key, Modifiers}; use iced::{event, Event, Subscription}; -use iced::widget::scrollable; +use iced::widget::{scrollable, text_editor}; use iced::{ Element, Length, Task, Theme, clipboard, color, widget::{ @@ -68,6 +68,7 @@ enum Message { DeleteColumn(usize), SetErrorMessage(usize, String), RecievedEvent(Event), + NoteInput(usize, text_editor::Action), } impl Message { @@ -82,7 +83,8 @@ impl Message { Message::WordSearchInput(i, _) | Message::SubmitWordSearch(i) | Message::QuickSearch(i, _, _) | - Message::DeleteColumn(i) + Message::DeleteColumn(i) | + Message::NoteInput(i, _) => { Some(*i) }, @@ -101,6 +103,8 @@ struct ColState { word_search: String, word_search_results: Option>, + notes: text_editor::Content, + error: Option, } @@ -116,6 +120,8 @@ impl Default for ColState { word_search: String::new(), word_search_results: None, + notes: text_editor::Content::new(), + error: None, } } @@ -191,6 +197,10 @@ impl State { } // match normal messages match msg { + Message::NoteInput(i, action) => { + let notes = &mut self.states[i].notes; + notes.perform(action); + } Message::CycleTheme => { let len = self.themes.len(); let i = &mut self.theme_idx; @@ -332,7 +342,7 @@ impl State { } fn view(&self) -> Element { - //TODO error message + // Header bar, static, doesn't scroll column![ button("Cycle Themes") .on_press(Message::CycleTheme) @@ -341,7 +351,7 @@ impl State { row![ row((0..self.states.len()).map(|col_index| { column![ - // header + // Top of Column, text entry boxes combo_box( &self.files, "Select Bible", @@ -360,6 +370,8 @@ impl State { .id(format!("tabId-{}", (col_index*2)+1)) .on_input(move |s| Message::WordSearchInput(col_index, s)) .on_submit(Message::SubmitWordSearch(col_index)), + + // Horizontal Row just above scripture row![ button("Clear All") .on_press_with(move || Message::Clear(col_index)) @@ -374,6 +386,7 @@ impl State { .style(text::danger), ] .spacing(5), + // Body row![ // Word search results scrollable( @@ -403,10 +416,11 @@ impl State { .padding([5, 5]) ) .spacing(5), - // Body + // Scripture scrollable( if let Some(body) = &self.states[col_index].scripture_body { column(body.split("\n").enumerate().map(|(i, msg)| { + // Color every other verse slightly differently let msg = parse(msg); if i & 1 == 0 { text(msg.to_owned()).color(color![0xFFFFFF]).into() @@ -422,13 +436,22 @@ impl State { ) } ) + // TODO make this dynamic + .height(600) .spacing(5) ], + // Notes + text_editor(&self.states[col_index].notes) + .placeholder("Notes...") + .on_action(move |a| Message::NoteInput(col_index, a)) + .height(100) + // .id(format!("tabId-{}", (col_index*2)+2)) ] .spacing(5) .width(800.) .into() })), + // Right most vertical buttons button(text("+").center()) .height(Length::Fixed(200.)) .style(button::primary)