Resources system rewrite + new "--save-config DIR" option
[jvcard.git] / src / be / nikiroo / jvcard / tui / MainWindow.java
index c3277e3c0f7dc5c11a6b9f3519b3bbdeb1734870..1cbc01412a77f9e7163862e85b007f07e6d3a5b5 100644 (file)
@@ -1,13 +1,16 @@
 package be.nikiroo.jvcard.tui;
 
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.LinkedList;
 import java.util.List;
 
-import be.nikiroo.jvcard.i18n.Trans.StringId;
+import be.nikiroo.jvcard.launcher.Main;
+import be.nikiroo.jvcard.resources.StringUtils;
+import be.nikiroo.jvcard.resources.enums.ColorOption;
+import be.nikiroo.jvcard.resources.enums.StringId;
 import be.nikiroo.jvcard.tui.KeyAction.Mode;
-import be.nikiroo.jvcard.tui.UiColors.Element;
 import be.nikiroo.jvcard.tui.panes.ContactDetails;
 import be.nikiroo.jvcard.tui.panes.ContactDetailsRaw;
 import be.nikiroo.jvcard.tui.panes.ContactList;
@@ -219,6 +222,16 @@ public class MainWindow extends BasicWindow {
                if (contentStack.size() > 0)
                        prev = contentStack.remove(contentStack.size() - 1);
 
+               if (prev != null) {
+                       try {
+                               String mess = prev.wakeup();
+                               if (mess != null)
+                                       setMessage(mess, false);
+                       } catch (IOException e) {
+                               setMessage(e.getMessage(), true);
+                       }
+               }
+
                pushContent(prev);
 
                return removed;
@@ -238,9 +251,9 @@ public class MainWindow extends BasicWindow {
                if (mess != null || messagePanel.getChildCount() > 0) {
                        messagePanel.removeAllComponents();
                        if (mess != null) {
-                               Element element = (error ? UiColors.Element.LINE_MESSAGE_ERR
-                                               : UiColors.Element.LINE_MESSAGE);
-                               Label lbl = element.createLabel(" " + mess + " ");
+                               ColorOption element = (error ? ColorOption.LINE_MESSAGE_ERR
+                                               : ColorOption.LINE_MESSAGE);
+                               Label lbl = UiColors.createLabel(element, " " + mess + " ");
                                messagePanel.addComponent(lbl, LinearLayout
                                                .createLayoutData(LinearLayout.Alignment.Center));
                        }
@@ -305,7 +318,7 @@ public class MainWindow extends BasicWindow {
                llayout.setSpacing(0);
                hpanel.setLayoutManager(llayout);
 
-               Label lbl = UiColors.Element.LINE_MESSAGE_QUESTION.createLabel(" "
+               Label lbl = UiColors.createLabel(ColorOption.LINE_MESSAGE_QUESTION, " "
                                + question + " ");
                text = new TextBox(new TerminalSize(getSize().getColumns()
                                - lbl.getSize().getColumns(), 1));
@@ -407,8 +420,7 @@ public class MainWindow extends BasicWindow {
 
                if (title.length() > 0) {
                        prefix = prefix + ": ";
-                       title = StringUtils.sanitize(title, UiColors.getInstance()
-                                       .isUnicode());
+                       title = StringUtils.sanitize(title, Main.isUnicode());
                }
 
                String countStr = "";
@@ -439,18 +451,18 @@ public class MainWindow extends BasicWindow {
                        super.setTitle(prefix);
 
                        Label lblPrefix = new Label(prefix);
-                       UiColors.Element.TITLE_MAIN.themeLabel(lblPrefix);
+                       UiColors.themeLabel(ColorOption.TITLE_MAIN, lblPrefix);
 
                        Label lblTitle = null;
                        if (title.length() > 0) {
                                lblTitle = new Label(title);
-                               UiColors.Element.TITLE_VARIABLE.themeLabel(lblTitle);
+                               UiColors.themeLabel(ColorOption.TITLE_VARIABLE, lblTitle);
                        }
 
                        Label lblCount = null;
                        if (countStr != null) {
                                lblCount = new Label(countStr);
-                               UiColors.Element.TITLE_COUNT.themeLabel(lblCount);
+                               UiColors.themeLabel(ColorOption.TITLE_COUNT, lblCount);
                        }
 
                        titlePanel.removeAllComponents();
@@ -501,16 +513,16 @@ public class MainWindow extends BasicWindow {
                        if ("  ".equals(trans))
                                continue;
 
-                       String keyTrans = Main.trans(action.getKey());
+                       String keyTrans = KeyAction.trans(action.getKey());
 
                        Panel kPane = new Panel();
                        LinearLayout layout = new LinearLayout(Direction.HORIZONTAL);
                        layout.setSpacing(0);
                        kPane.setLayoutManager(layout);
 
-                       kPane.addComponent(UiColors.Element.ACTION_KEY
-                                       .createLabel(keyTrans));
-                       kPane.addComponent(UiColors.Element.ACTION_DESC.createLabel(trans));
+                       kPane.addComponent(UiColors.createLabel(ColorOption.ACTION_KEY,
+                                       keyTrans));
+                       kPane.addComponent(UiColors.createLabel(ColorOption.ACTION_DESC, trans));
 
                        actionPanel.addComponent(kPane);
                }
@@ -522,8 +534,8 @@ public class MainWindow extends BasicWindow {
                }
 
                if (width > 0) {
-                       actionPanel.addComponent(UiColors.Element.ACTION_DESC
-                                       .createLabel(StringUtils.padString("", width)));
+                       actionPanel.addComponent(UiColors.createLabel(ColorOption.ACTION_DESC,
+                                       StringUtils.padString("", width)));
                }
        }
 
@@ -609,6 +621,12 @@ public class MainWindow extends BasicWindow {
 
                        handled = true;
 
+                       action.getObject(); // see {@link KeyAction#getMessage()}
+                       String mess = action.getMessage();
+                       if (mess != null) {
+                               setMessage(mess, action.isError());
+                       }
+
                        if (action.onAction()) {
                                handleAction(action, null);
                        }
@@ -657,6 +675,10 @@ public class MainWindow extends BasicWindow {
                case CONTACT_LIST:
                        if (action.getCard() != null) {
                                pushContent(new ContactList(action.getCard()));
+                       } else if (action.getObject() != null
+                                       && action.getObject() instanceof MainContent) {
+                               MainContent mergeContent = (MainContent) action.getObject();
+                               pushContent(mergeContent);
                        }
                        break;
                case CONTACT_DETAILS: