mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-08 12:46:42 +01:00
wip: refactor pt.14: 138 errors
This commit is contained in:
parent
fbf217e108
commit
8b68a993bc
9 changed files with 95 additions and 100 deletions
|
|
@ -2,7 +2,7 @@ use crate::*;
|
|||
|
||||
pub struct PhrasePoolView<E: Engine> {
|
||||
_engine: PhantomData<E>,
|
||||
pub state: PhrasePool,
|
||||
pub model: PhrasePool,
|
||||
/// Selected phrase
|
||||
pub phrase: usize,
|
||||
/// Scroll offset
|
||||
|
|
@ -24,7 +24,7 @@ pub enum PhrasePoolMode {
|
|||
}
|
||||
|
||||
impl<E: Engine> PhrasePoolView<E> {
|
||||
pub fn new (state: PhrasePool) -> Self {
|
||||
pub fn new (model: PhrasePool) -> Self {
|
||||
Self {
|
||||
_engine: Default::default(),
|
||||
scroll: 0,
|
||||
|
|
@ -32,14 +32,14 @@ impl<E: Engine> PhrasePoolView<E> {
|
|||
mode: None,
|
||||
focused: false,
|
||||
entered: false,
|
||||
state,
|
||||
model,
|
||||
}
|
||||
}
|
||||
pub fn len (&self) -> usize {
|
||||
self.state.phrases.len()
|
||||
self.model.phrases.len()
|
||||
}
|
||||
pub fn phrase (&self) -> &Arc<RwLock<Phrase>> {
|
||||
&self.state.phrases[self.phrase]
|
||||
&self.model.phrases[self.phrase]
|
||||
}
|
||||
pub fn index_before (&self, index: usize) -> usize {
|
||||
index.overflowing_sub(1).0.min(self.len() - 1)
|
||||
|
|
@ -48,8 +48,8 @@ impl<E: Engine> PhrasePoolView<E> {
|
|||
(index + 1) % self.len()
|
||||
}
|
||||
pub fn index_of (&self, phrase: &Phrase) -> Option<usize> {
|
||||
for i in 0..self.state.phrases.len() {
|
||||
if *self.state.phrases[i].read().unwrap() == *phrase { return Some(i) }
|
||||
for i in 0..self.model.phrases.len() {
|
||||
if *self.model.phrases[i].read().unwrap() == *phrase { return Some(i) }
|
||||
}
|
||||
return None
|
||||
}
|
||||
|
|
@ -60,46 +60,46 @@ impl<E: Engine> PhrasePoolView<E> {
|
|||
}
|
||||
pub fn delete_selected (&mut self) {
|
||||
if self.phrase > 0 {
|
||||
self.state.phrases.remove(self.phrase);
|
||||
self.phrase = self.phrase.min(self.state.phrases.len().saturating_sub(1));
|
||||
self.model.phrases.remove(self.phrase);
|
||||
self.phrase = self.phrase.min(self.model.phrases.len().saturating_sub(1));
|
||||
}
|
||||
}
|
||||
pub fn append_new (&mut self, name: Option<&str>, color: Option<ItemColorTriplet>) {
|
||||
self.state.phrases.push(Self::new_phrase(name, color));
|
||||
self.phrase = self.state.phrases.len() - 1;
|
||||
self.model.phrases.push(Self::new_phrase(name, color));
|
||||
self.phrase = self.model.phrases.len() - 1;
|
||||
}
|
||||
pub fn insert_new (&mut self, name: Option<&str>, color: Option<ItemColorTriplet>) {
|
||||
self.state.phrases.insert(self.phrase + 1, Self::new_phrase(name, color));
|
||||
self.model.phrases.insert(self.phrase + 1, Self::new_phrase(name, color));
|
||||
self.phrase += 1;
|
||||
}
|
||||
pub fn insert_dup (&mut self) {
|
||||
let mut phrase = self.state.phrases[self.phrase].read().unwrap().duplicate();
|
||||
let mut phrase = self.model.phrases[self.phrase].read().unwrap().duplicate();
|
||||
phrase.color = ItemColorTriplet::random_near(phrase.color, 0.25);
|
||||
self.state.phrases.insert(self.phrase + 1, Arc::new(RwLock::new(phrase)));
|
||||
self.model.phrases.insert(self.phrase + 1, Arc::new(RwLock::new(phrase)));
|
||||
self.phrase += 1;
|
||||
}
|
||||
pub fn begin_rename (&mut self) {
|
||||
self.mode = Some(PhrasePoolMode::Rename(
|
||||
self.phrase,
|
||||
self.state.phrases[self.phrase].read().unwrap().name.clone()
|
||||
self.model.phrases[self.phrase].read().unwrap().name.clone()
|
||||
));
|
||||
}
|
||||
pub fn begin_length (&mut self) {
|
||||
self.mode = Some(PhrasePoolMode::Length(
|
||||
self.phrase,
|
||||
self.state.phrases[self.phrase].read().unwrap().length,
|
||||
self.model.phrases[self.phrase].read().unwrap().length,
|
||||
PhraseLengthFocus::Bar
|
||||
));
|
||||
}
|
||||
pub fn move_up (&mut self) {
|
||||
if self.phrase > 1 {
|
||||
self.state.phrases.swap(self.phrase - 1, self.phrase);
|
||||
self.model.phrases.swap(self.phrase - 1, self.phrase);
|
||||
self.phrase -= 1;
|
||||
}
|
||||
}
|
||||
pub fn move_down (&mut self) {
|
||||
if self.phrase < self.state.phrases.len().saturating_sub(1) {
|
||||
self.state.phrases.swap(self.phrase + 1, self.phrase);
|
||||
if self.phrase < self.model.phrases.len().saturating_sub(1) {
|
||||
self.model.phrases.swap(self.phrase + 1, self.phrase);
|
||||
self.phrase += 1;
|
||||
}
|
||||
}
|
||||
|
|
@ -109,9 +109,9 @@ impl<E: Engine> PhrasePoolView<E> {
|
|||
impl Content for PhrasePoolView<Tui> {
|
||||
type Engine = Tui;
|
||||
fn content (&self) -> impl Widget<Engine = Tui> {
|
||||
let Self { focused, state, mode, .. } = self;
|
||||
let Self { focused, model, mode, .. } = self;
|
||||
let content = col!(
|
||||
(i, phrase) in state.iter().enumerate() => Layers::new(|add|{
|
||||
(i, phrase) in model.phrases.iter().enumerate() => Layers::new(|add|{
|
||||
let Phrase { ref name, color, length, .. } = *phrase.read().unwrap();
|
||||
let mut length = PhraseLength::new(length, None);
|
||||
if let Some(PhrasePoolMode::Length(phrase, new_length, focus)) = mode {
|
||||
|
|
@ -136,7 +136,7 @@ impl Content for PhrasePoolView<Tui> {
|
|||
let content = content.fill_xy().bg(Color::Rgb(28, 35, 25)).border(border);
|
||||
let title_color = if *focused {Color::Rgb(150, 160, 90)} else {Color::Rgb(120, 130, 100)};
|
||||
let upper_left = format!("[{}] Phrases", if self.entered {"■"} else {" "});
|
||||
let upper_right = format!("({})", state.len());
|
||||
let upper_right = format!("({})", model.phrases.len());
|
||||
lay!(
|
||||
content,
|
||||
TuiStyle::fg(upper_left.to_string(), title_color).push_x(1).align_nw().fill_xy(),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue