New launcher class to start all 3 modes:
[jvcard.git] / src / be / nikiroo / jvcard / tui / panes / MainContentList.java
index 38b775c2998af5986cf06e31440bd663b42d90d5..e4c40ba0bc5aaa1a4031d736c79a4867814a60c5 100644 (file)
@@ -3,15 +3,17 @@ package be.nikiroo.jvcard.tui.panes;
 import java.util.LinkedList;
 import java.util.List;
 
-import be.nikiroo.jvcard.tui.UiColors;
+import be.nikiroo.jvcard.launcher.Main;
+import be.nikiroo.jvcard.resources.StringUtils;
+import be.nikiroo.jvcard.resources.Trans.StringId;
 import be.nikiroo.jvcard.tui.UiColors.Element;
 
 import com.googlecode.lanterna.TextColor;
+import com.googlecode.lanterna.gui2.AbstractListBox.ListItemRenderer;
 import com.googlecode.lanterna.gui2.ActionListBox;
 import com.googlecode.lanterna.gui2.Direction;
 import com.googlecode.lanterna.gui2.LinearLayout;
 import com.googlecode.lanterna.gui2.TextGUIGraphics;
-import com.googlecode.lanterna.gui2.AbstractListBox.ListItemRenderer;
 
 abstract public class MainContentList extends MainContent implements Runnable {
        private ActionListBox lines;
@@ -53,68 +55,63 @@ abstract public class MainContentList extends MainContent implements Runnable {
                }
        }
 
-       public MainContentList(final UiColors.Element normalStyle,
-                       final UiColors.Element selectedStyle) {
+       public MainContentList() {
                super(Direction.VERTICAL);
 
                lines = new ActionListBox();
 
-               lines
-                               .setListItemRenderer(new ListItemRenderer<Runnable, ActionListBox>() {
-                                       /**
-                                        * This is the main drawing method for a single list box
-                                        * item, it applies the current theme to setup the colors
-                                        * and then calls {@code getLabel(..)} and draws the result
-                                        * using the supplied {@code TextGUIGraphics}. The graphics
-                                        * object is created just for this item and is restricted so
-                                        * that it can only draw on the area this item is occupying.
-                                        * The top-left corner (0x0) should be the starting point
-                                        * when drawing the item.
-                                        * 
-                                        * @param graphics
-                                        *            Graphics object to draw with
-                                        * @param listBox
-                                        *            List box we are drawing an item from
-                                        * @param index
-                                        *            Index of the item we are drawing
-                                        * @param item
-                                        *            The item we are drawing
-                                        * @param selected
-                                        *            Will be set to {@code true} if the item is
-                                        *            currently selected, otherwise {@code false},
-                                        *            but please notice what context 'selected'
-                                        *            refers to here (see {@code setSelectedIndex})
-                                        * @param focused
-                                        *            Will be set to {@code true} if the list box
-                                        *            currently has input focus, otherwise {@code
-                                        *            false}
-                                        */
-                                       public void drawItem(TextGUIGraphics graphics,
-                                                       ActionListBox listBox, int index, Runnable item,
-                                                       boolean selected, boolean focused) {
-
-                                               // width "-1" to reserve space for the optional vertical
-                                               // scroll bar
-                                               List<TextPart> parts = MainContentList.this.getLabel(
-                                                               index, lines.getSize().getColumns() - 1,
-                                                               selected, focused);
-
-                                               int position = 0;
-                                               for (TextPart part : parts) {
-                                                       graphics.setForegroundColor(part
-                                                                       .getForegroundColor());
-                                                       graphics.setBackgroundColor(part
-                                                                       .getBackgroundColor());
-                                                       String label = part.getText();
-
-                                                       graphics.putString(position, 0, label);
-                                                       position += label.length();
-                                               }
-                                       }
-                               });
-
-               addComponent(lines, LinearLayout
-                               .createLayoutData(LinearLayout.Alignment.Fill));
+               lines.setListItemRenderer(new ListItemRenderer<Runnable, ActionListBox>() {
+                       /**
+                        * This is the main drawing method for a single list box item, it
+                        * applies the current theme to setup the colors and then calls
+                        * {@code getLabel(..)} and draws the result using the supplied
+                        * {@code TextGUIGraphics}. The graphics object is created just for
+                        * this item and is restricted so that it can only draw on the area
+                        * this item is occupying. The top-left corner (0x0) should be the
+                        * starting point when drawing the item.
+                        * 
+                        * @param graphics
+                        *            Graphics object to draw with
+                        * @param listBox
+                        *            List box we are drawing an item from
+                        * @param index
+                        *            Index of the item we are drawing
+                        * @param item
+                        *            The item we are drawing
+                        * @param selected
+                        *            Will be set to {@code true} if the item is currently
+                        *            selected, otherwise {@code false}, but please notice
+                        *            what context 'selected' refers to here (see
+                        *            {@code setSelectedIndex})
+                        * @param focused
+                        *            Will be set to {@code true} if the list box currently
+                        *            has input focus, otherwise {@code false}
+                        */
+                       public void drawItem(TextGUIGraphics graphics,
+                                       ActionListBox listBox, int index, Runnable item,
+                                       boolean selected, boolean focused) {
+
+                               // width "-1" to reserve space for the optional vertical
+                               // scroll bar
+                               List<TextPart> parts = MainContentList.this.getLabel(index,
+                                               lines.getSize().getColumns() - 1, selected, focused);
+
+                               int position = 0;
+                               for (TextPart part : parts) {
+                                       graphics.setForegroundColor(part.getForegroundColor());
+                                       graphics.setBackgroundColor(part.getBackgroundColor());
+
+                                       String label = StringUtils.sanitize(part.getText(),
+                                                       Main.isUnicode());
+
+                                       graphics.putString(position, 0, label);
+                                       position += label.length();
+                               }
+                       }
+               });
+
+               addComponent(lines,
+                               LinearLayout.createLayoutData(LinearLayout.Alignment.Fill));
        }
 
        /**
@@ -127,6 +124,39 @@ abstract public class MainContentList extends MainContent implements Runnable {
                lines.addItem(line, this);
        }
 
+       /**
+        * Delete the given item.
+        * 
+        * Remark: it will only delete the first found instance if multiple
+        * instances of this item are present.
+        * 
+        * @param line
+        *            the line to delete
+        * 
+        * @return TRUE if the item was deleted
+        */
+       public boolean removeItem(String line) {
+               boolean deleted = false;
+
+               List<Runnable> copy = lines.getItems();
+               for (int index = 0; index < copy.size(); index++) {
+                       if (copy.get(index).toString().equals(line)) {
+                               deleted = true;
+                               copy.remove(index);
+                               break;
+                       }
+               }
+
+               int index = getSelectedIndex();
+               clearItems();
+               for (Runnable run : copy) {
+                       addItem(run.toString());
+               }
+               setSelectedIndex(index);
+               
+               return deleted;
+       }
+
        /**
         * Clear all the items in this {@link MainContentList}
         */
@@ -152,16 +182,14 @@ abstract public class MainContentList extends MainContent implements Runnable {
        public void setSelectedIndex(int index) {
                lines.setSelectedIndex(index);
        }
-       
-       
+
        /**
         * Return the default content separator for text fields.
         * 
         * @return the separator
         */
        public String getSeparator() {
-               // we could use: " ", "┃", "│"...
-               return "┃";
+               return Main.trans(StringId.DEAULT_FIELD_SEPARATOR);
        }
 
        @Override