summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHolger Cremer <HolgerCremer@gmail.com>2015-06-10 22:23:24 +0200
committerHolger Cremer <HolgerCremer@gmail.com>2015-06-10 22:23:24 +0200
commit609f72b68df7d8c5a029d5faf1867ef68a5ff6ef (patch)
treefa545c306893ecdee61e23a6707e6b70d15694de
parentc2b6e54ba93bb2f28e65626417e2cee29f8eec64 (diff)
downloadserial-barcode-scanner-609f72b68df7d8c5a029d5faf1867ef68a5ff6ef.tar.bz2
show a popup for invalid product or missing login
-rw-r--r--src/curses-ui/curses-ui.vala26
-rw-r--r--src/curses-ui/main.vala16
-rw-r--r--src/curses-ui/message_box.vala11
-rw-r--r--src/scanner-session/scannersession-interface.vala1
-rw-r--r--src/scanner-session/scannersession.vala11
5 files changed, 53 insertions, 12 deletions
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;
}