From b17dc0500693abb1cb8dc2beec1e6a5343e50729 Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Fri, 16 Jun 2023 11:24:56 +0200 Subject: [PATCH] Use enums in the printer demo --- examples/printerdemo/rust/main.rs | 4 +-- examples/printerdemo/ui/printer_queue.slint | 31 ++++++++++++++----- examples/printerdemo_mcu/main.rs | 4 +-- .../printerdemo_mcu/ui/printer_queue.slint | 29 ++++++++++++----- 4 files changed, 49 insertions(+), 19 deletions(-) diff --git a/examples/printerdemo/rust/main.rs b/examples/printerdemo/rust/main.rs index 294f53fcc31..c4fc082c3ae 100644 --- a/examples/printerdemo/rust/main.rs +++ b/examples/printerdemo/rust/main.rs @@ -25,7 +25,7 @@ struct PrinterQueueData { impl PrinterQueueData { fn push_job(&self, title: slint::SharedString) { self.data.push(PrinterQueueItem { - status: "WAITING...".into(), + status: JobStatus::Waiting, progress: 0, title, owner: env!("CARGO_PKG_AUTHORS").into(), @@ -86,7 +86,7 @@ pub fn main() { if printer_queue.data.row_count() > 0 { let mut top_item = printer_queue.data.row_data(0).unwrap(); top_item.progress += 1; - top_item.status = "PRINTING".into(); + top_item.status = JobStatus::Waiting; if top_item.progress > 100 { printer_queue.data.remove(0); if printer_queue.data.row_count() == 0 { diff --git a/examples/printerdemo/ui/printer_queue.slint b/examples/printerdemo/ui/printer_queue.slint index 5e225241563..fbb5764315d 100644 --- a/examples/printerdemo/ui/printer_queue.slint +++ b/examples/printerdemo/ui/printer_queue.slint @@ -3,8 +3,13 @@ import { DemoPalette, PushButton } from "./common.slint"; +enum JobStatus { + Waiting, + Printing +} + export struct PrinterQueueItem { - status: string, // WAITING..., PRINTING + status: JobStatus, progress: int, title: string, owner: string, @@ -19,10 +24,20 @@ export global PrinterQueue { callback pause-job(int); in property <[PrinterQueueItem]> printer-queue: [ - { status: @tr("PRINTING"), progress: 63, title: "210106-FinalPresentation.pdf", owner: "info@slint-ui.com", pages: 6, size: "143kb", submission-date: "11:41 25/01/21" }, - { status: @tr("WAITING..."), title: "Adressliste.docx", owner: "info@slint-ui.com", pages: 6, size: "143kb", submission-date: "11:41 25/01/21" }, - { status: @tr("WAITING..."), title: "Salaries.pdf", owner: "info@slint-ui.com", pages: 6, size: "143kb", submission-date: "11:41 25/01/21" }, + { status: JobStatus.Printing, progress: 63, title: "210106-FinalPresentation.pdf", owner: "info@slint-ui.com", pages: 6, size: "143kb", submission-date: "11:41 25/01/21" }, + { status: JobStatus.Waiting, title: "Adressliste.docx", owner: "info@slint-ui.com", pages: 6, size: "143kb", submission-date: "11:41 25/01/21" }, + { status: JobStatus.Waiting, title: "Salaries.pdf", owner: "info@slint-ui.com", pages: 6, size: "143kb", submission-date: "11:41 25/01/21" }, ]; + + function statusString(status: JobStatus) -> string { + if (status == JobStatus.Printing) { + @tr("PRINTING") + } else if (status == JobStatus.Waiting) { + @tr("WAITING...") + } else { + @tr("Unknown job status") + } + } } @@ -160,9 +175,9 @@ component NarrowPrintQueueElement inherits Rectangle { // TODO: text-transform: uppercase text: { if (root.queue-item.progress > 0) { - @tr("{}% - {}",root.queue-item.progress, root.queue-item.status) + @tr("{}% - {}",root.queue-item.progress, PrinterQueue.statusString(root.queue-item.status)) } else { - root.queue-item.status + PrinterQueue.statusString(root.queue-item.status) } } color: DemoPalette.status-label-text-color; @@ -269,9 +284,9 @@ component WidePrintQueueElement inherits Rectangle { // TODO: text-transform: uppercase text: { if (root.queue-item.progress > 0) { - @tr("{}% - {}",root.queue-item.progress, root.queue-item.status) + @tr("{}% - {}",root.queue-item.progress, PrinterQueue.statusString(root.queue-item.status)) } else { - root.queue-item.status + PrinterQueue.statusString(root.queue-item.status) } } color: DemoPalette.status-label-text-color; diff --git a/examples/printerdemo_mcu/main.rs b/examples/printerdemo_mcu/main.rs index 1ef14ff83ab..97500da13de 100644 --- a/examples/printerdemo_mcu/main.rs +++ b/examples/printerdemo_mcu/main.rs @@ -21,7 +21,7 @@ struct PrinterQueueData { impl PrinterQueueData { fn push_job(&self, title: slint::SharedString) { self.data.push(PrinterQueueItem { - status: "WAITING...".into(), + status: JobStatus::Waiting, progress: 0, title, owner: env!("CARGO_PKG_AUTHORS").into(), @@ -78,7 +78,7 @@ fn main() -> ! { if printer_queue.data.row_count() > 0 { let mut top_item = printer_queue.data.row_data(0).unwrap(); top_item.progress += 1; - top_item.status = "PRINTING".into(); + top_item.status = JobStatus::Printing; if top_item.progress > 100 { printer_queue.data.remove(0); if printer_queue.data.row_count() == 0 { diff --git a/examples/printerdemo_mcu/ui/printer_queue.slint b/examples/printerdemo_mcu/ui/printer_queue.slint index 2c391defe8f..909a69edd1b 100644 --- a/examples/printerdemo_mcu/ui/printer_queue.slint +++ b/examples/printerdemo_mcu/ui/printer_queue.slint @@ -3,8 +3,13 @@ import { DemoPalette, PushButton } from "./common.slint"; +enum JobStatus { + Waiting, + Printing +} + export struct PrinterQueueItem { - status: string, // WAITING..., PRINTING + status: JobStatus, progress: int, title: string, owner: string, @@ -19,10 +24,20 @@ export global PrinterQueue { callback pause-job(int); in property <[PrinterQueueItem]> printer-queue: [ - { status: "PRINTING", progress: 63, title: "Slint-Demo.jpeg", owner: "info@slint-ui.com", pages: 6, size: "143kb", submission-date: "11:41 25/01/21" }, - { status: "WAITING...", title: "Adressliste.docx", owner: "info@slint-ui.com", pages: 6, size: "143kb", submission-date: "11:41 25/01/21" }, - { status: "WAITING...", title: "210106-FinalPresentation.pdf", owner: "info@slint-ui.com", pages: 6, size: "143kb", submission-date: "11:41 25/01/21" }, + { status: JobStatus.Printing, progress: 63, title: "Slint-Demo.jpeg", owner: "info@slint-ui.com", pages: 6, size: "143kb", submission-date: "11:41 25/01/21" }, + { status: JobStatus.Waiting, title: "Adressliste.docx", owner: "info@slint-ui.com", pages: 6, size: "143kb", submission-date: "11:41 25/01/21" }, + { status: JobStatus.Waiting, title: "210106-FinalPresentation.pdf", owner: "info@slint-ui.com", pages: 6, size: "143kb", submission-date: "11:41 25/01/21" }, ]; + + function statusString(status: JobStatus) -> string { + if (status == JobStatus.Printing) { + "PRINTING" + } else if (status == JobStatus.Waiting) { + "WAITING..." + } else { + "Unknown job status" + } + } } @@ -160,10 +175,10 @@ component NarrowPrintQueueElement inherits Rectangle { Text { // TODO: text-transform: uppercase text: { - if (root.queue-item.status == "PRINTING") { - "\{root.queue-item.progress}% - \{root.queue-item.status}" + if (root.queue-item.status == JobStatus.Printing) { + "\{root.queue-item.progress}% - \{PrinterQueue.statusString(root.queue-item.status)}" } else { - root.queue-item.status + PrinterQueue.statusString(root.queue-item.status) } } color: DemoPalette.status-label-text-color;