From 609f72b68df7d8c5a029d5faf1867ef68a5ff6ef Mon Sep 17 00:00:00 2001 From: Holger Cremer Date: Wed, 10 Jun 2015 22:23:24 +0200 Subject: show a popup for invalid product or missing login --- src/curses-ui/curses-ui.vala | 26 ++++++++++++++++++++--- src/curses-ui/main.vala | 16 +++++++++----- src/curses-ui/message_box.vala | 11 +++++++++- src/scanner-session/scannersession-interface.vala | 1 + src/scanner-session/scannersession.vala | 11 +++++++--- 5 files changed, 53 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/curses-ui/curses-ui.vala b/src/curses-ui/curses-ui.vala index ec007f2..e866c6e 100644 --- a/src/curses-ui/curses-ui.vala +++ b/src/curses-ui/curses-ui.vala @@ -65,12 +65,32 @@ public class CursesUI { statuswin.set(message); } - public void log(string message) { - messages.add(message); + public void log(MessageType type, string message) { + switch (type) { + case MessageType.WARNING: + messages.add(message, MessageBox.WARN_COLOR); + break; + case MessageType.ERROR: + messages.add(message, MessageBox.ERROR_COLOR); + break; + default: + messages.add(message, MessageBox.INFO_COLOR); + break; + } + } - public void dialog_open(string title, string message) { + public void dialog_open(string title, string message, int closeAfter=0) { dialog = new Dialog(message, title); + if (closeAfter > 0) { + Timeout.add_seconds(closeAfter, close); + } + } + + bool close() { + dialog_close(); + // just call me once + return false; } public void dialog_close() { diff --git a/src/curses-ui/main.vala b/src/curses-ui/main.vala index 5ea5a96..7487308 100644 --- a/src/curses-ui/main.vala +++ b/src/curses-ui/main.vala @@ -22,16 +22,21 @@ private static void play(string file) { try { audio.play_system(file); } catch(IOError e) { - ui.log("could not play audio: %s".printf(e.message)); + ui.log(MessageType.WARNING, "could not play audio: %s".printf(e.message)); } } public void msg_handler(MessageType type, string message) { - ui.log(message); + ui.log(type, message); } +public void popup_handler(string title, string message) { + ui.dialog_open(title, message, 10); +} + + public void log_handler(string? log_domain, LogLevelFlags flags, string message) { - ui.log(message); + ui.log(MessageType.INFO, message); } public static int main(string[] args) { @@ -53,14 +58,15 @@ public static int main(string[] args) { Log.set_default_handler(log_handler); scanner.msg.connect(msg_handler); + scanner.popup.connect(popup_handler); - ui.log("KtT Shop System has been started"); + ui.log(MessageType.INFO, "KtT Shop System has been started"); play("startup.ogg"); /* run mainloop */ loop.run(); - ui.log("Stopping Shop System"); + ui.log(MessageType.INFO, "Stopping Shop System"); play("shutdown.ogg"); /* leave curses mode */ diff --git a/src/curses-ui/message_box.vala b/src/curses-ui/message_box.vala index cc258b4..e786517 100644 --- a/src/curses-ui/message_box.vala +++ b/src/curses-ui/message_box.vala @@ -20,6 +20,10 @@ public class MessageBox { Window subwin; DateTime last; + public const short INFO_COLOR = 5; + public const short WARN_COLOR = 6; + public const short ERROR_COLOR = 7; + public MessageBox() { win = new Window(LINES-9, COLS - 2, 8, 1); win.bkgdset(COLOR_PAIR(0)); @@ -34,9 +38,13 @@ public class MessageBox { subwin.refresh(); last = new DateTime.from_unix_utc(0); + + init_pair (INFO_COLOR, Color.WHITE, Color.BLACK); + init_pair (WARN_COLOR, Color.YELLOW, Color.BLACK); + init_pair (ERROR_COLOR, Color.RED, Color.BLACK); } - public void add(string msg) { + public void add(string msg, short color_pair = MessageBox.INFO_COLOR) { var now = new DateTime.now_local(); if(now.get_day_of_year() != last.get_day_of_year() || now.get_year() != last.get_year()) { @@ -47,6 +55,7 @@ public class MessageBox { last = now; string curtime = now.format("%H:%M:%S"); + subwin.bkgdset(COLOR_PAIR(color_pair)); subwin.addstr("\n[" + curtime + "] " + msg); subwin.refresh(); } diff --git a/src/scanner-session/scannersession-interface.vala b/src/scanner-session/scannersession-interface.vala index 0f81dd4..ec5e487 100644 --- a/src/scanner-session/scannersession-interface.vala +++ b/src/scanner-session/scannersession-interface.vala @@ -16,6 +16,7 @@ [DBus (name = "io.mainframe.shopsystem.ScannerSession")] public interface ScannerSession : Object { public abstract signal void msg(MessageType type, string message); + public abstract signal void popup(string title, string message); } public enum MessageType { diff --git a/src/scanner-session/scannersession.vala b/src/scanner-session/scannersession.vala index 5498b83..9e87682 100644 --- a/src/scanner-session/scannersession.vala +++ b/src/scanner-session/scannersession.vala @@ -26,6 +26,7 @@ public class ScannerSessionImplementation { private SerialDevice dev; public signal void msg(MessageType type, string message); + public signal void popup(string title, string message); public ScannerSessionImplementation() { try { @@ -172,7 +173,9 @@ public class ScannerSessionImplementation { } catch(DatabaseError e) { if(e is DatabaseError.PRODUCT_NOT_FOUND) { audio.play_user(theme, "error"); - send_message(MessageType.ERROR, "Error: unknown product: %llu".printf(id)); + var msg = "Error: unknown product: %llu".printf(id); + send_message(MessageType.ERROR, msg); + popup("Attention", msg); } else { audio.play_user(theme, "error"); send_message(MessageType.ERROR, "Error: %s", e.message); @@ -183,10 +186,12 @@ public class ScannerSessionImplementation { if(!logged_in) { var mprice = db.get_product_price(1, id); var gprice = db.get_product_price(0, id); - + var msg = @"article info: $name (Member: $mprice €, Guest: $gprice €)"; audio.play_system("error.ogg"); - send_message(MessageType.INFO, @"article info: $name (Member: $mprice €, Guest: $gprice €)"); + send_message(MessageType.INFO, msg); send_message(MessageType.ERROR, "Login required for purchase!"); + popup("Attention", "%s\nLogin required for purchase!".printf(msg)); + return false; } -- cgit v1.2.3