policydata: wip: view and state handling updates
Signed-off-by: Ralf Zerres <ralf.zerres@networkx.de>
This commit is contained in:
@@ -42,29 +42,6 @@ impl PolicyDataState {
|
|||||||
self.action = action.into();
|
self.action = action.into();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// create a new policy data member
|
|
||||||
fn new_entry(&self, text: String, registry: &mut Registry, ctx: &mut Context) {
|
|
||||||
let index = ctx.widget().clone::<Option<usize>>("list_index");
|
|
||||||
|
|
||||||
if let Some(index) = index {
|
|
||||||
if let Some(policy_list) = ctx
|
|
||||||
.widget()
|
|
||||||
.get_mut::<PolicyData>("policy_data")
|
|
||||||
.get_mut(index)
|
|
||||||
{
|
|
||||||
policy_list.push(PolicyData {
|
|
||||||
policy_code,
|
|
||||||
date_valid_until,
|
|
||||||
selected: true,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
self.adjust_count(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
self.save(registry, ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// update number of available policy data entries.
|
/// update number of available policy data entries.
|
||||||
fn adjust_count(&self, ctx: &mut Context) {
|
fn adjust_count(&self, ctx: &mut Context) {
|
||||||
if let Some(index) = ctx.widget().clone::<Option<usize>>("list_index") {
|
if let Some(index) = ctx.widget().clone::<Option<usize>>("list_index") {
|
||||||
@@ -73,21 +50,11 @@ impl PolicyDataState {
|
|||||||
.clone::<PolicyList>("policy_list")
|
.clone::<PolicyList>("policy_list")
|
||||||
.get(index)
|
.get(index)
|
||||||
{
|
{
|
||||||
ctx.widget().set("policy_count", policy_list.len());
|
ctx.widget().set("policy_data_count", policy_list.len());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// navigate to previous policy data entry.
|
|
||||||
fn navigate_back(&mut self, ctx: &mut Context) {
|
|
||||||
ctx.get_widget(self.text_box)
|
|
||||||
.set("name", String16::from(""));
|
|
||||||
self.open = false;
|
|
||||||
ctx.widget().set::<Option<usize>>("list_index", None);
|
|
||||||
ctx.widget().set("policy_count", 0 as usize);
|
|
||||||
self.navigate(self.back_entity, ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// If policy data element 'name' is empty, disable the add button
|
/// If policy data element 'name' is empty, disable the add button
|
||||||
/// otherwise otherwise enabled it.
|
/// otherwise otherwise enabled it.
|
||||||
fn adjust_add_button_enabled(&self, text_box: Entity, ctx: &mut Context) {
|
fn adjust_add_button_enabled(&self, text_box: Entity, ctx: &mut Context) {
|
||||||
@@ -100,44 +67,6 @@ impl PolicyDataState {
|
|||||||
ctx.get_widget(self.add_button).update_theme_by_state(true);
|
ctx.get_widget(self.add_button).update_theme_by_state(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Toggle the invalid element of the given policy data entry
|
|
||||||
fn toggle_invalid(
|
|
||||||
&self,
|
|
||||||
entry: Entity,
|
|
||||||
index: usize,
|
|
||||||
registry: &mut Registry,
|
|
||||||
ctx: &mut Context,
|
|
||||||
) {
|
|
||||||
let invalid: bool = *ctx.get_widget(entry).get("invalid");
|
|
||||||
|
|
||||||
if let Some(idx) = ctx.widget().clone::<Option<usize>>("list_index") {
|
|
||||||
if let Some(policy_list) = ctx
|
|
||||||
.widget()
|
|
||||||
.get_mut::<PolicyData>("policy_list")
|
|
||||||
.get_mut(idx)
|
|
||||||
{
|
|
||||||
if let Some(task) = policy_list.get_mut(index) {
|
|
||||||
policy.selected = selected;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
self.save(registry, ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn open(&mut self, ctx: &mut Context) {
|
|
||||||
if let Some(index) = ctx.widget().clone::<Option<usize>>("list_index") {
|
|
||||||
let mut name: String16 = "".into();
|
|
||||||
let mut policy_count = 0;
|
|
||||||
if let Some(policy_list) = ctx.widget().get::<PolicyList>("policy_list").get(index) {
|
|
||||||
name = String16::from(policy_list.name.as_str());
|
|
||||||
policy_count = policy_list.len();
|
|
||||||
}
|
|
||||||
ctx.widget().set("name", title);
|
|
||||||
ctx.widget().set("policy_count", policy_count);
|
|
||||||
self.open = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Change status of given text box to edit mode.
|
/// Change status of given text box to edit mode.
|
||||||
fn edit_entry(&self, text_box: Entity, ctx: &mut Context) {
|
fn edit_entry(&self, text_box: Entity, ctx: &mut Context) {
|
||||||
if *ctx.get_widget(text_box).get::<bool>("focused") {
|
if *ctx.get_widget(text_box).get::<bool>("focused") {
|
||||||
@@ -162,6 +91,53 @@ impl PolicyDataState {
|
|||||||
ctx.push_event_by_window(FocusEvent::RequestFocus(text_box));
|
ctx.push_event_by_window(FocusEvent::RequestFocus(text_box));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// navigate to previous policy data entry.
|
||||||
|
fn navigate_back(&mut self, ctx: &mut Context) {
|
||||||
|
ctx.get_widget(self.text_box)
|
||||||
|
.set("name", String16::from(""));
|
||||||
|
self.open = false;
|
||||||
|
ctx.widget().set::<Option<usize>>("list_index", None);
|
||||||
|
ctx.widget().set("policy_data_count", 0 as usize);
|
||||||
|
self.navigate(self.back_entity, ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// create a new policy data member
|
||||||
|
fn new_entry(&self, name: String, registry: &mut Registry, ctx: &mut Context) {
|
||||||
|
let index = ctx.widget().clone::<Option<usize>>("list_index");
|
||||||
|
|
||||||
|
if let Some(index) = index {
|
||||||
|
if let Some(policy_elements) = ctx
|
||||||
|
.widget()
|
||||||
|
.get_mut::<PolicyData>("policy_elements")
|
||||||
|
.get_mut(index)
|
||||||
|
{
|
||||||
|
policy_list.push(PolicyData {
|
||||||
|
policy_code,
|
||||||
|
date_valid_until,
|
||||||
|
selected: true,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
self.adjust_count(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
self.save(registry, ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn open(&mut self, ctx: &mut Context) {
|
||||||
|
if let Some(index) = ctx.widget().clone::<Option<usize>>("list_index") {
|
||||||
|
let mut name: String16 = "".into();
|
||||||
|
let mut policy_data_count = 0;
|
||||||
|
if let Some(policy_list) = ctx.widget().get::<PolicyList>("policy_list").get(index) {
|
||||||
|
name = String16::from(policy_list.name.as_str());
|
||||||
|
policy_data_count = policy_list.len();
|
||||||
|
}
|
||||||
|
ctx.widget().set("name", title);
|
||||||
|
ctx.widget().set("policy_data_count", policy_count);
|
||||||
|
self.open = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn remove_entry(&self, index: usize, registry: &mut Registry, ctx: &mut Context) {
|
fn remove_entry(&self, index: usize, registry: &mut Registry, ctx: &mut Context) {
|
||||||
if let Some(idx) = ctx.widget().clone::<Option<usize>>("list_index") {
|
if let Some(idx) = ctx.widget().clone::<Option<usize>>("list_index") {
|
||||||
if let Some(policy_list) = ctx
|
if let Some(policy_list) = ctx
|
||||||
@@ -176,6 +152,30 @@ impl PolicyDataState {
|
|||||||
self.save(registry, ctx);
|
self.save(registry, ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Toggle the invalid element of the given policy data entry
|
||||||
|
fn toggle_invalid(
|
||||||
|
&self,
|
||||||
|
entry: Entity,
|
||||||
|
index: usize,
|
||||||
|
registry: &mut Registry,
|
||||||
|
ctx: &mut Context,
|
||||||
|
) {
|
||||||
|
let invalid: bool = *ctx.get_widget(entry).get("invalid");
|
||||||
|
|
||||||
|
if let Some(idx) = ctx.widget().clone::<Option<usize>>("list_index") {
|
||||||
|
if let Some(policy_list) = ctx
|
||||||
|
.widget()
|
||||||
|
.get_mut::<PolicyData>("policy_list")
|
||||||
|
.get_mut(idx)
|
||||||
|
{
|
||||||
|
if let Some(task) = policy_list.get_mut(index) {
|
||||||
|
policy.selected = selected;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
self.save(registry, ctx);
|
||||||
|
}
|
||||||
|
|
||||||
fn update_entry(
|
fn update_entry(
|
||||||
&self,
|
&self,
|
||||||
text_box: Entity,
|
text_box: Entity,
|
||||||
|
|||||||
@@ -8,48 +8,48 @@ use crate::{
|
|||||||
|
|
||||||
type ListIndex = Option<usize>;
|
type ListIndex = Option<usize>;
|
||||||
|
|
||||||
widget!(PolicyList<PolicyState> {
|
widget!(PolicyData<PolicyDataState> {
|
||||||
back_entity: u32,
|
back_entity: u32,
|
||||||
list_index: ListIndex,
|
list_index: ListIndex,
|
||||||
policy_list: PolicyList,
|
|
||||||
policy_count: usize,
|
|
||||||
name: String16
|
name: String16
|
||||||
|
policy_data: PolicyData,
|
||||||
|
policy_data_count: usize,
|
||||||
});
|
});
|
||||||
|
|
||||||
impl Template for PolicyList {
|
impl Template for PolicyData {
|
||||||
fn template(self, id: Entity, ctx: &mut BuildContext) -> Self {
|
fn template(self, id: Entity, ctx: &mut BuildContext) -> Self {
|
||||||
// listing the policy elements
|
// listing the policy elements
|
||||||
let items_widget = ItemsWidget::new()
|
let items_widget = ItemsWidget::new()
|
||||||
.id(ID_POLICY_ITEMS_WIDGET)
|
.id(ID_POLICY_DATA_ITEMS_WIDGET)
|
||||||
.v_align("start")
|
.v_align("start")
|
||||||
.items_builder(move |ctx, index| {
|
.items_builder(move |ctx, index| {
|
||||||
let mut policy_code = "".to_string();
|
let mut policy_code = "".to_string();
|
||||||
let mut date_inserted = None;
|
let mut date_inserted = None;
|
||||||
let mut invalid = false;
|
let mut isactive = false;
|
||||||
|
|
||||||
if let Some(list_index) = ctx.get_widget(id).clone::<ListIndex>("list_index") {
|
if let Some(list_index) = ctx.get_widget(id).clone::<ListIndex>("list_index") {
|
||||||
if let Some(task_overview) = ctx
|
if let Some(policy_data) = ctx
|
||||||
.get_widget(id)
|
.get_widget(id)
|
||||||
.get::<PolicyList>(PROP_POLICY_LIST)
|
.get::<PolicyData(PROP_POLICY_DATA)
|
||||||
.get(list_index)
|
.get(list_index)
|
||||||
{
|
{
|
||||||
if let Some(policy) = policy_list.get(index) {
|
if let Some(policy_data) = policy_data.get(index) {
|
||||||
policy_code = policy.policy_code.clone();
|
policy_code = policy_data.policy_code.clone();
|
||||||
date_inserted = policy.date_inserted.clone();
|
date_inserted = policy_data.date_inserted.clone();
|
||||||
invalid = policy.invalid;
|
isactive = policy_data.isactive;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let text_box = TextBox::new()
|
let text_box = TextBox::new()
|
||||||
.text(text)
|
.text(name)
|
||||||
.enabled(false)
|
.enabled(false)
|
||||||
.v_align("center")
|
.v_align("center")
|
||||||
.water_mark("Insert text...")
|
.water_mark("Insert the new policy collection name ...")
|
||||||
.class("inplace")
|
.class("inplace")
|
||||||
.attach(Grid::column(3))
|
.attach(Grid::column(3))
|
||||||
.on_changed(move |ctx, entity| {
|
.on_changed(move |ctx, entity| {
|
||||||
ctx.get_mut::<PolicyState>(id)
|
ctx.get_mut::<PolicyDataState>(id)
|
||||||
.action(Action::TextChanged(entity, index));
|
.action(Action::TextChanged(entity, index));
|
||||||
})
|
})
|
||||||
.on_activate(move |ctx, entity| {
|
.on_activate(move |ctx, entity| {
|
||||||
@@ -130,7 +130,7 @@ impl Template for PolicyList {
|
|||||||
)
|
)
|
||||||
.build(ctx)
|
.build(ctx)
|
||||||
})
|
})
|
||||||
.count((PROP_POLICY_COUNT, id))
|
.policy_data_count(PROP_POLICY_COUNT, id)
|
||||||
.build(ctx);
|
.build(ctx);
|
||||||
|
|
||||||
let scroll_viewer = ScrollViewer::new()
|
let scroll_viewer = ScrollViewer::new()
|
||||||
|
|||||||
Reference in New Issue
Block a user