Connect add and remove buttons
This commit is contained in:
parent
f7ae70b901
commit
a9fd194672
|
@ -1,10 +1,46 @@
|
||||||
// Prevent console window in addition to Slint window in Windows release builds when, e.g., starting the app via file manager. Ignored on other platforms.
|
// Prevent console window in addition to Slint window in Windows release builds when, e.g., starting the app via file manager. Ignored on other platforms.
|
||||||
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
|
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
|
||||||
|
|
||||||
|
use slint::Model;
|
||||||
|
use std::{cell::RefCell, rc::Rc};
|
||||||
|
|
||||||
slint::include_modules!();
|
slint::include_modules!();
|
||||||
|
|
||||||
fn main() -> Result<(), slint::PlatformError> {
|
struct GUIElements {
|
||||||
let main_window = MainWindow::new()?;
|
tab_vram_file_list: Rc<slint::VecModel<slint::StandardListViewItem>>
|
||||||
|
}
|
||||||
|
|
||||||
|
impl GUIElements {
|
||||||
|
pub fn new(main_window: &MainWindow) -> GUIElements {
|
||||||
|
let tab_vram_file_list:Vec<slint::StandardListViewItem> = main_window.get_main_tab_vram_file_list().iter().collect();
|
||||||
|
let tab_vram_file_list = Rc::new(slint::VecModel::from(tab_vram_file_list));
|
||||||
|
|
||||||
|
main_window.set_main_tab_vram_file_list(tab_vram_file_list.clone().into());
|
||||||
|
GUIElements{tab_vram_file_list}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn add_new_vram_file(&mut self, file: &str) {
|
||||||
|
self.tab_vram_file_list.push(slint::StandardListViewItem::from(file));
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn remove_vram_file(&mut self, idx: usize) {
|
||||||
|
self.tab_vram_file_list.remove(idx);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() -> Result<(), slint::PlatformError> {
|
||||||
|
let main_window = MainWindow::new()?;
|
||||||
|
let gui_elements = Rc::new(RefCell::new(GUIElements::new(&main_window)));
|
||||||
|
|
||||||
|
let gui_elements_cloned = gui_elements.clone();
|
||||||
|
main_window.on_main_tab_add_file_clicked(move || {
|
||||||
|
gui_elements_cloned.borrow_mut().add_new_vram_file("Planschi");
|
||||||
|
});
|
||||||
|
let gui_elements_cloned = gui_elements.clone();
|
||||||
|
main_window.on_main_tab_remove_file_clicked(move |idx: i32| {
|
||||||
|
if idx >= 0 {
|
||||||
|
gui_elements_cloned.borrow_mut().remove_vram_file(idx as usize);
|
||||||
|
}
|
||||||
|
});
|
||||||
main_window.run()
|
main_window.run()
|
||||||
}
|
}
|
|
@ -4,6 +4,11 @@ import { MainTab } from "./tab/main-tab.slint";
|
||||||
import { TabWidget } from "std-widgets.slint";
|
import { TabWidget } from "std-widgets.slint";
|
||||||
|
|
||||||
export component MainWindow inherits Window {
|
export component MainWindow inherits Window {
|
||||||
|
in-out property main_tab_vram_file_list <=> tab.vram_files;
|
||||||
|
|
||||||
|
callback main_tab_add_file_clicked <=> tab.add_file_clicked;
|
||||||
|
callback main_tab_remove_file_clicked <=> tab.remove_file_clicked;
|
||||||
|
|
||||||
title: "TIM Tool 0.1.0";
|
title: "TIM Tool 0.1.0";
|
||||||
width: tab_widget.width;
|
width: tab_widget.width;
|
||||||
height: tab_widget.height;
|
height: tab_widget.height;
|
||||||
|
|
|
@ -8,8 +8,11 @@ struct VRAMImage {
|
||||||
}
|
}
|
||||||
|
|
||||||
export component MainTab inherits Rectangle {
|
export component MainTab inherits Rectangle {
|
||||||
in property <[StandardListViewItem]> vram_file_list: [];
|
in-out property <[StandardListViewItem]> vram_files: [];
|
||||||
in property <[VRAMImage]> vram_images: [];
|
in-out property <[VRAMImage]> vram_images: [];
|
||||||
|
|
||||||
|
callback add_file_clicked();
|
||||||
|
callback remove_file_clicked(int);
|
||||||
|
|
||||||
width: group.width + group.x*2;
|
width: group.width + group.x*2;
|
||||||
height: group.height + group.y*2 + 32px;
|
height: group.height + group.y*2 + 32px;
|
||||||
|
@ -49,19 +52,23 @@ export component MainTab inherits Rectangle {
|
||||||
VerticalLayout {
|
VerticalLayout {
|
||||||
alignment: start;
|
alignment: start;
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
StandardListView {
|
vram_files_list := StandardListView {
|
||||||
width: background_image.width/2;
|
width: background_image.width/2;
|
||||||
height: 128px;
|
height: 128px;
|
||||||
|
model: root.vram_files;
|
||||||
model: root.vram_file_list;
|
|
||||||
}
|
}
|
||||||
HorizontalLayout {
|
HorizontalLayout {
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
Button {
|
Button {
|
||||||
text: "Add File";
|
text: "Add File";
|
||||||
|
clicked => {root.add_file_clicked();}
|
||||||
}
|
}
|
||||||
Button {
|
Button {
|
||||||
text: "Remove File";
|
text: "Remove File";
|
||||||
|
clicked => {
|
||||||
|
root.remove_file_clicked(vram_files_list.current_item);
|
||||||
|
vram_files_list.current-item = -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue