update
This commit is contained in:
parent
ef1eaab359
commit
bfba5b6e14
@ -11,7 +11,7 @@ pub struct App {
|
||||
pub settings: Settings,
|
||||
pub filter_config: FilterConfig,
|
||||
}
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
#[derive(Debug, Clone)]
|
||||
pub enum Message {
|
||||
RuleList(rule_list::Message),
|
||||
}
|
||||
@ -19,7 +19,7 @@ pub enum Message {
|
||||
pub fn view(state: &App) -> Element<Message> {
|
||||
container(
|
||||
row![
|
||||
rule_list::view(&state.filter_config).map(Message::RuleList),
|
||||
rule_list::view(&state.filter_config.filters).map(Message::RuleList),
|
||||
vertical_rule(2),
|
||||
column![]
|
||||
]
|
||||
@ -32,7 +32,7 @@ pub fn view(state: &App) -> Element<Message> {
|
||||
pub fn update(state: &mut App, msg: Message) -> Task<Message> {
|
||||
match msg {
|
||||
Message::RuleList(msg) => {
|
||||
rule_list::update(&mut state.filter_config, msg).map(Message::RuleList)
|
||||
rule_list::update(&mut state.filter_config.filters, msg).map(Message::RuleList)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,39 +1,92 @@
|
||||
use iced::{
|
||||
widget::{button, row, text, toggler},
|
||||
Element, Task,
|
||||
padding,
|
||||
widget::{button, column, container, row, text, toggler},
|
||||
Border, Element, Task, Theme,
|
||||
};
|
||||
|
||||
use crate::models::{Filter, FilterRule, FilterText};
|
||||
use crate::models::{Filter, FilterGroup, FilterLeaf, FilterRule, FilterText};
|
||||
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
use super::rule_list;
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub enum Message {
|
||||
TogglerToggled(bool),
|
||||
Delete,
|
||||
MoveUp,
|
||||
MoveDown,
|
||||
RuleList(Box<rule_list::Message>),
|
||||
}
|
||||
|
||||
fn view_leaf(enabled: bool, state: &FilterLeaf) -> Element<Message> {
|
||||
let preview_text = if state.show { "Show" } else { "Hide" };
|
||||
row![
|
||||
button(text("x").size(10))
|
||||
.padding(4)
|
||||
.style(button::danger)
|
||||
.on_press(Message::Delete),
|
||||
button(text("↑").size(10))
|
||||
.padding(4)
|
||||
.on_press(Message::MoveUp),
|
||||
button(text("↓").size(10))
|
||||
.padding(4)
|
||||
.on_press(Message::MoveDown),
|
||||
toggler(enabled)
|
||||
.label("")
|
||||
.on_toggle(Message::TogglerToggled),
|
||||
preview_text
|
||||
]
|
||||
.spacing(4)
|
||||
.into()
|
||||
}
|
||||
|
||||
pub fn bordered_box(theme: &Theme) -> container::Style {
|
||||
let palette = theme.extended_palette();
|
||||
|
||||
container::Style {
|
||||
border: Border {
|
||||
width: 1.0,
|
||||
radius: 0.0.into(),
|
||||
color: palette.background.strong.color,
|
||||
},
|
||||
..container::Style::default()
|
||||
}
|
||||
}
|
||||
|
||||
fn view_group(enabled: bool, state: &FilterGroup) -> Element<Message> {
|
||||
let header = row![
|
||||
button(text("x").size(10))
|
||||
.padding(4)
|
||||
.style(button::danger)
|
||||
.on_press(Message::Delete),
|
||||
button(text("↑").size(10))
|
||||
.padding(4)
|
||||
.on_press(Message::MoveUp),
|
||||
button(text("↓").size(10))
|
||||
.padding(4)
|
||||
.on_press(Message::MoveDown),
|
||||
toggler(enabled)
|
||||
.label("")
|
||||
.on_toggle(Message::TogglerToggled),
|
||||
// button(text("expand").size(10))
|
||||
// .padding(4)
|
||||
// .on_press(Message::MoveDown),
|
||||
]
|
||||
.spacing(4);
|
||||
column![
|
||||
header,
|
||||
container(rule_list::view(&state.filters).map(|msg| Message::RuleList(Box::new(msg))))
|
||||
.padding(padding::left(32))
|
||||
.style(bordered_box)
|
||||
]
|
||||
.spacing(4)
|
||||
.into()
|
||||
}
|
||||
|
||||
pub fn view(state: &Filter) -> Element<Message> {
|
||||
match &state.rule {
|
||||
FilterRule::Leaf(_) => row![
|
||||
button(text("x").size(10))
|
||||
.padding(4)
|
||||
.on_press(Message::Delete),
|
||||
button(text("↑").size(10))
|
||||
.padding(4)
|
||||
.on_press(Message::MoveUp),
|
||||
button(text("↓").size(10))
|
||||
.padding(4)
|
||||
.on_press(Message::MoveDown),
|
||||
toggler(state.enabled)
|
||||
.label("")
|
||||
.on_toggle(Message::TogglerToggled),
|
||||
text(format!("{}", state.to_filter_text().replace("\n", " ")))
|
||||
]
|
||||
.spacing(4),
|
||||
FilterRule::Group(group) => todo!(),
|
||||
FilterRule::Leaf(leaf) => view_leaf(state.enabled, leaf),
|
||||
FilterRule::Group(group) => view_group(state.enabled, group),
|
||||
}
|
||||
.into()
|
||||
}
|
||||
|
||||
pub fn update(state: &mut Filter, msg: Message) -> Task<Message> {
|
||||
@ -45,5 +98,10 @@ pub fn update(state: &mut Filter, msg: Message) -> Task<Message> {
|
||||
Message::Delete => Task::none(),
|
||||
Message::MoveUp => Task::none(),
|
||||
Message::MoveDown => Task::none(),
|
||||
Message::RuleList(msg) => match state.rule {
|
||||
FilterRule::Leaf(_) => panic!("Should be group rule"),
|
||||
FilterRule::Group(ref mut group) => rule_list::update(&mut group.filters, *msg)
|
||||
.map(|msg| Message::RuleList(Box::new(msg))),
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
use iced::{
|
||||
widget::{button, column, keyed_column},
|
||||
widget::{button, column, keyed_column, row, text},
|
||||
Element, Task,
|
||||
};
|
||||
use uuid::Uuid;
|
||||
@ -8,53 +8,71 @@ use crate::models::{Filter, FilterConfig};
|
||||
|
||||
use super::rule_item;
|
||||
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
#[derive(Debug, Clone)]
|
||||
pub enum Message {
|
||||
AddRule,
|
||||
AddRule(RuleType),
|
||||
RuleItem(Uuid, rule_item::Message),
|
||||
}
|
||||
|
||||
pub fn view(state: &FilterConfig) -> Element<Message> {
|
||||
let rows = keyed_column(state.filters.iter().map(|filter| {
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
pub enum RuleType {
|
||||
Leaf,
|
||||
Group,
|
||||
}
|
||||
|
||||
pub fn view(state: &Vec<Filter>) -> Element<Message> {
|
||||
let rows = keyed_column(state.iter().map(|filter| {
|
||||
(
|
||||
filter.id,
|
||||
rule_item::view(filter).map(|msg| Message::RuleItem(filter.id, msg)),
|
||||
)
|
||||
}))
|
||||
.spacing(4);
|
||||
column![button("Add Rule").on_press(Message::AddRule), rows]
|
||||
.spacing(4)
|
||||
.into()
|
||||
column![
|
||||
row![
|
||||
button(text("New Rule").size(10)).on_press(Message::AddRule(RuleType::Leaf)),
|
||||
button(text("New Group").size(10)).on_press(Message::AddRule(RuleType::Group))
|
||||
]
|
||||
.spacing(8),
|
||||
rows
|
||||
]
|
||||
.spacing(4)
|
||||
.into()
|
||||
}
|
||||
|
||||
pub fn update(state: &mut FilterConfig, msg: Message) -> Task<Message> {
|
||||
pub fn update(state: &mut Vec<Filter>, msg: Message) -> Task<Message> {
|
||||
match msg {
|
||||
Message::AddRule => {
|
||||
state.filters.push(Filter::default_leaf());
|
||||
Message::AddRule(RuleType::Leaf) => {
|
||||
state.push(Filter::default_leaf());
|
||||
Task::none()
|
||||
}
|
||||
|
||||
Message::AddRule(RuleType::Group) => {
|
||||
state.push(Filter::default_group());
|
||||
Task::none()
|
||||
}
|
||||
Message::RuleItem(uuid, rule_item::Message::Delete) => {
|
||||
state.filters.retain(|f| f.id != uuid);
|
||||
state.retain(|f| f.id != uuid);
|
||||
Task::none()
|
||||
}
|
||||
Message::RuleItem(uuid, rule_item::Message::MoveUp) => {
|
||||
if let Some(index) = state.filters.iter().position(|f| f.id == uuid) {
|
||||
if let Some(index) = state.iter().position(|f| f.id == uuid) {
|
||||
if index > 0 {
|
||||
state.filters.swap(index, index - 1);
|
||||
state.swap(index, index - 1);
|
||||
}
|
||||
}
|
||||
Task::none()
|
||||
}
|
||||
Message::RuleItem(uuid, rule_item::Message::MoveDown) => {
|
||||
if let Some(index) = state.filters.iter().position(|f| f.id == uuid) {
|
||||
if index < state.filters.len() - 1 {
|
||||
state.filters.swap(index, index + 1);
|
||||
if let Some(index) = state.iter().position(|f| f.id == uuid) {
|
||||
if index < state.len() - 1 {
|
||||
state.swap(index, index + 1);
|
||||
}
|
||||
}
|
||||
Task::none()
|
||||
}
|
||||
Message::RuleItem(uuid, msg) => {
|
||||
if let Some(filter) = state.filters.iter_mut().find(|filter| filter.id == uuid) {
|
||||
if let Some(filter) = state.iter_mut().find(|filter| filter.id == uuid) {
|
||||
rule_item::update(filter, msg).map(move |msg| Message::RuleItem(uuid, msg))
|
||||
} else {
|
||||
Task::none()
|
||||
|
||||
@ -27,7 +27,7 @@ impl Filter {
|
||||
}
|
||||
}
|
||||
|
||||
fn default_group() -> Self {
|
||||
pub fn default_group() -> Self {
|
||||
Self {
|
||||
id: Uuid::new_v4(),
|
||||
enabled: true,
|
||||
|
||||
Loading…
Reference in New Issue
Block a user