ferroui_dialogs/internal/
managed_file_chooser_item_view_model.rs1use super::{FerroDialogsInternalViewModelBase, ManagedFileChooserItemType, ManagedFileChooserNavigationItem};
2use ferroui_base::data::model::{Event, INotifyPropertyChanged};
3use ferroui_base::ferro_markup_type;
4use ferroui_base::utilities::DateTime;
5use std::cell::{Cell, RefCell};
6use std::rc::Rc;
7
8pub struct ManagedFileChooserItemViewModel {
10 base: FerroDialogsInternalViewModelBase,
11 display_name: RefCell<Option<String>>,
12 path: RefCell<Option<String>>,
13 modified: Cell<DateTime>,
14 type_: RefCell<Option<String>>,
15 size: Cell<i64>,
16 item_type: Cell<ManagedFileChooserItemType>,
17}
18
19impl PartialEq for ManagedFileChooserItemViewModel {
20 fn eq(&self, other: &Self) -> bool {
21 std::ptr::eq(self, other)
22 }
23}
24
25impl INotifyPropertyChanged for ManagedFileChooserItemViewModel {
26 fn property_changed(&self) -> &Event<str> {
27 self.base.property_changed()
28 }
29}
30
31impl ManagedFileChooserItemViewModel {
32 pub fn new() -> Rc<Self> {
33 Rc::new(Self {
34 base: FerroDialogsInternalViewModelBase::new(),
35 display_name: RefCell::new(None),
36 path: RefCell::new(None),
37 modified: Cell::new(DateTime::default()),
38 type_: RefCell::new(None),
39 size: Cell::new(0),
40 item_type: Cell::new(ManagedFileChooserItemType::File),
41 })
42 }
43
44 pub fn from_navigation_item(item: &ManagedFileChooserNavigationItem) -> Rc<Self> {
45 let this = Self::new();
46 this.set_item_type(item.item_type);
47 this.set_path(item.path.clone());
48 this.set_display_name(item.display_name.clone());
49 this
50 }
51
52 pub fn display_name(&self) -> Option<String> {
53 self.display_name.borrow().clone()
54 }
55
56 pub fn set_display_name(&self, value: Option<String>) {
57 self.base.raise_and_set_if_changed(&self.display_name, value, "DisplayName");
58 }
59
60 pub fn path(&self) -> Option<String> {
61 self.path.borrow().clone()
62 }
63
64 pub fn set_path(&self, value: Option<String>) {
65 self.base.raise_and_set_if_changed(&self.path, value, "Path");
66 }
67
68 pub fn modified(&self) -> DateTime {
69 self.modified.get()
70 }
71
72 pub fn set_modified(&self, value: DateTime) {
73 self.base.raise_and_set_if_changed_cell(&self.modified, value, "Modified");
74 }
75
76 pub fn type_(&self) -> Option<String> {
79 self.type_.borrow().clone()
80 }
81
82 pub fn set_type(&self, value: Option<String>) {
83 self.base.raise_and_set_if_changed(&self.type_, value, "Type");
84 }
85
86 pub fn size(&self) -> i64 {
87 self.size.get()
88 }
89
90 pub fn set_size(&self, value: i64) {
91 self.base.raise_and_set_if_changed_cell(&self.size, value, "Size");
92 }
93
94 pub fn item_type(&self) -> ManagedFileChooserItemType {
95 self.item_type.get()
96 }
97
98 pub fn set_item_type(&self, value: ManagedFileChooserItemType) {
99 self.base.raise_and_set_if_changed_cell(&self.item_type, value, "ItemType");
100 }
101
102 pub fn icon_key(&self) -> String {
104 match self.item_type() {
105 ManagedFileChooserItemType::Folder => "Icon_Folder".to_string(),
106 ManagedFileChooserItemType::Volume => "Icon_Volume".to_string(),
107 _ => "Icon_File".to_string(),
108 }
109 }
110}
111
112ferro_markup_type!(class ManagedFileChooserItemViewModel {
113 this: Rc<ManagedFileChooserItemViewModel>,
114 handles: [
115 ManagedFileChooserItemViewModel,
116 Rc<ManagedFileChooserItemViewModel>,
117 Option<Rc<ManagedFileChooserItemViewModel>>
118 ],
119 constructors: [() => ManagedFileChooserItemViewModel::new],
120 properties: [
121 DisplayName: Option<String> {
122 get: ManagedFileChooserItemViewModel::display_name,
123 set: ManagedFileChooserItemViewModel::set_display_name
124 },
125 Path: Option<String> { get: ManagedFileChooserItemViewModel::path, set: ManagedFileChooserItemViewModel::set_path },
126 Modified: DateTime {
127 get: ManagedFileChooserItemViewModel::modified,
128 set: ManagedFileChooserItemViewModel::set_modified
129 },
130 Type: Option<String> { get: ManagedFileChooserItemViewModel::type_, set: ManagedFileChooserItemViewModel::set_type },
131 Size: i64 { get: ManagedFileChooserItemViewModel::size, set: ManagedFileChooserItemViewModel::set_size },
132 ItemType: ManagedFileChooserItemType {
133 get: ManagedFileChooserItemViewModel::item_type,
134 set: ManagedFileChooserItemViewModel::set_item_type
135 },
136 IconKey: String { get: ManagedFileChooserItemViewModel::icon_key },
137 ],
138 notify_property_changed: ManagedFileChooserItemViewModel,
139});