ui sync version
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
use std::io;
|
||||
|
||||
use color_eyre::Result;
|
||||
use crossterm::event::Event;
|
||||
use ratatui::widgets::Widget;
|
||||
|
||||
@@ -14,6 +13,6 @@ pub mod list;
|
||||
pub trait Component {
|
||||
type EventResult;
|
||||
fn widget(&self) -> impl Widget;
|
||||
fn event_handler(&mut self, event: &Event) -> io::Result<Self::EventResult>;
|
||||
fn event_handler(&mut self, event: &Event) -> Result<Self::EventResult>;
|
||||
fn active_state(&mut self) -> &mut ActiveState;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
use ratatui::{symbols::block, widgets::Paragraph};
|
||||
use color_eyre::Result;
|
||||
use ratatui::widgets::Paragraph;
|
||||
|
||||
use crate::view::ActiveState;
|
||||
|
||||
@@ -14,6 +15,7 @@ pub struct ButtonComponent {
|
||||
active_state: ActiveState,
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
impl ButtonComponent {
|
||||
pub fn text(mut self, text: String) -> Self {
|
||||
self.text = text;
|
||||
@@ -31,8 +33,8 @@ impl Component for ButtonComponent {
|
||||
}
|
||||
fn event_handler(
|
||||
&mut self,
|
||||
event: &crossterm::event::Event,
|
||||
) -> std::io::Result<Self::EventResult> {
|
||||
_event: &crossterm::event::Event,
|
||||
) -> Result<ButtonEvent> {
|
||||
Ok(ButtonEvent::Click)
|
||||
}
|
||||
fn active_state(&mut self) -> &mut ActiveState {
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
use std::io;
|
||||
|
||||
use color_eyre::Result;
|
||||
use crossterm::event::Event;
|
||||
use ratatui::widgets::{Paragraph, Widget};
|
||||
|
||||
@@ -19,7 +18,7 @@ impl Component for HelpComponent {
|
||||
let help = Paragraph::new("Temp").block(block);
|
||||
help
|
||||
}
|
||||
fn event_handler(&mut self, _event: &Event) -> io::Result<()> {
|
||||
fn event_handler(&mut self, _event: &Event) -> Result<()> {
|
||||
Ok(())
|
||||
}
|
||||
fn active_state(&mut self) -> &mut ActiveState {
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
use std::io;
|
||||
|
||||
use color_eyre::Result;
|
||||
use crossterm::event::{Event, KeyCode, KeyEvent, KeyEventKind, KeyModifiers};
|
||||
use ratatui::{
|
||||
layout::{Position, Rect},
|
||||
@@ -11,6 +10,7 @@ use crate::view::ActiveState;
|
||||
|
||||
use super::{block::BlockComponent, Component};
|
||||
|
||||
#[allow(dead_code)]
|
||||
pub enum InputEvent {
|
||||
Compelete,
|
||||
None,
|
||||
@@ -47,7 +47,7 @@ impl Component for InputComponent {
|
||||
input
|
||||
}
|
||||
|
||||
fn event_handler(&mut self, event: &Event) -> io::Result<InputEvent> {
|
||||
fn event_handler(&mut self, event: &Event) -> Result<InputEvent> {
|
||||
if !self.active_state.is_active() {
|
||||
return Ok(InputEvent::None);
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
use color_eyre::Result;
|
||||
use crossterm::{
|
||||
event::{Event, KeyCode, KeyEvent, KeyEventKind, KeyModifiers},
|
||||
style::Color,
|
||||
@@ -26,8 +27,9 @@ pub struct ListComponent {
|
||||
}
|
||||
|
||||
impl ListComponent {
|
||||
pub fn add_item(&mut self, _item_keys: Vec<String>) {
|
||||
self.item_keys.extend(vec!["S".to_string()]);
|
||||
#[allow(dead_code)]
|
||||
pub fn add_item(&mut self, item_keys: Vec<String>) {
|
||||
self.item_keys.extend(item_keys);
|
||||
}
|
||||
pub fn name(mut self, name: String) -> Self {
|
||||
self.name = name;
|
||||
@@ -43,7 +45,7 @@ impl Default for ListComponent {
|
||||
fn default() -> Self {
|
||||
ListComponent {
|
||||
name: String::default(),
|
||||
item_keys: vec!["1".to_string(), "2".to_string(), "3".to_string()],
|
||||
item_keys: vec![],
|
||||
cursor: 0,
|
||||
selectable: false,
|
||||
active_state: Default::default(),
|
||||
@@ -74,7 +76,10 @@ impl Component for ListComponent {
|
||||
list
|
||||
}
|
||||
|
||||
fn event_handler(&mut self, event: &Event) -> std::io::Result<ListEvent> {
|
||||
fn event_handler(&mut self, event: &Event) -> Result<ListEvent> {
|
||||
if self.item_keys.is_empty() {
|
||||
return Ok(ListEvent::None);
|
||||
}
|
||||
if !self.active_state.is_active() {
|
||||
return Ok(ListEvent::None);
|
||||
}
|
||||
@@ -88,6 +93,7 @@ impl Component for ListComponent {
|
||||
use KeyCode::*;
|
||||
match code {
|
||||
Up => {
|
||||
if self.item_keys.len() == 0 {}
|
||||
self.cursor = if self.cursor == 0 {
|
||||
self.item_keys.len() - 1
|
||||
} else {
|
||||
@@ -112,6 +118,7 @@ impl Component for ListComponent {
|
||||
}
|
||||
Ok(ListEvent::None)
|
||||
}
|
||||
|
||||
fn active_state(&mut self) -> &mut ActiveState {
|
||||
&mut self.active_state
|
||||
}
|
||||
|
||||
@@ -1,17 +1,14 @@
|
||||
use std::io;
|
||||
|
||||
use crossterm::event::{Event, KeyCode, KeyEvent, KeyEventKind};
|
||||
use color_eyre::Result;
|
||||
use crossterm::event::Event;
|
||||
use ratatui::{
|
||||
layout::{Constraint, Direction, Layout, Rect},
|
||||
style::{Color, Style},
|
||||
widgets::{Block, BorderType, Borders},
|
||||
layout::{Constraint, Direction, Layout},
|
||||
Frame,
|
||||
};
|
||||
|
||||
use super::{
|
||||
component::{
|
||||
help::HelpComponent,
|
||||
input::{self, InputComponent, InputEvent},
|
||||
input::{InputComponent, InputEvent},
|
||||
list::{ListComponent, ListEvent},
|
||||
Component,
|
||||
},
|
||||
@@ -60,7 +57,7 @@ impl View for Home {
|
||||
self.setting.draw(frame);
|
||||
}
|
||||
|
||||
fn handle_event(&mut self, event: &Event) -> io::Result<()> {
|
||||
fn handle_event(&mut self, event: &Event) -> Result<()> {
|
||||
match self.input.event_handler(event) {
|
||||
Ok(InputEvent::None) => {}
|
||||
_ => {}
|
||||
|
||||
@@ -1,14 +1,9 @@
|
||||
use std::io;
|
||||
|
||||
use ratatui::{
|
||||
layout::{Constraint, Layout, Rect},
|
||||
widgets::{Block, Clear},
|
||||
};
|
||||
use color_eyre::Result;
|
||||
use ratatui::layout::{Constraint, Layout, Rect};
|
||||
|
||||
use super::{
|
||||
center_rect,
|
||||
component::{
|
||||
block::BlockComponent,
|
||||
list::{ListComponent, ListEvent},
|
||||
Component,
|
||||
},
|
||||
@@ -47,7 +42,7 @@ impl View for SettingView {
|
||||
frame.render_widget(self.menu.widget(), layout[0]);
|
||||
}
|
||||
|
||||
fn handle_event(&mut self, event: &crossterm::event::Event) -> io::Result<()> {
|
||||
fn handle_event(&mut self, event: &crossterm::event::Event) -> Result<()> {
|
||||
match self.menu.event_handler(event) {
|
||||
Ok(ListEvent::Select(idx)) => {
|
||||
self.activate_state.set_active(false);
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
|
||||
|
||||
Reference in New Issue
Block a user