X-Git-Url: http://git.nikiroo.be/?p=fanfix.git;a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Ffanfix%2Freader%2Ftui%2FTuiReaderMainWindow.java;h=cbca857d01fc79770bfb04de9b35b96f1b224878;hp=126cee58071c5105c0bdda3959338d2cf114ac47;hb=0bcb5c7ff5300deb01c5136cf0d26d65d9455100;hpb=eeadd228f3069eed696802e25216b5580bca4303 diff --git a/src/be/nikiroo/fanfix/reader/tui/TuiReaderMainWindow.java b/src/be/nikiroo/fanfix/reader/tui/TuiReaderMainWindow.java index 126cee5..cbca857 100644 --- a/src/be/nikiroo/fanfix/reader/tui/TuiReaderMainWindow.java +++ b/src/be/nikiroo/fanfix/reader/tui/TuiReaderMainWindow.java @@ -23,6 +23,7 @@ import be.nikiroo.fanfix.data.MetaData; import be.nikiroo.fanfix.library.BasicLibrary; import be.nikiroo.fanfix.output.BasicOutput.OutputType; import be.nikiroo.fanfix.reader.Reader; +import be.nikiroo.jexer.TSizeConstraint; /** * The library window, that will list all the (filtered) stories available in @@ -35,16 +36,24 @@ class TuiReaderMainWindow extends TWindow { public static final TCommand CMD_SEARCH = new TCommand(MENU_SEARCH) { }; + public enum Mode { + SOURCE, AUTHOR, + } + private TList list; private List listKeys; private List listItems; private Reader reader; - private String source; + + private Mode mode = Mode.SOURCE; + private String target = null; private String filter = ""; + private List sizeConstraints = new ArrayList(); - // TODO: because no way to find out the current index!! - private TComboBox select; + // The 2 comboboxes used to select by source/author + private TComboBox selectTargetBox; + private TComboBox selectBox; /** * Create a new {@link TuiReaderMainWindow} without any stories in the list. @@ -62,9 +71,9 @@ class TuiReaderMainWindow extends TWindow { listKeys = new ArrayList(); listItems = new ArrayList(); - addSearch(); addList(); - addSelect(); // TODO: last so it can draw over the rest + addSearch(); + addSelect(); TStatusBar statusBar = reader.setStatusBar(this, "Library"); statusBar.addShortcutKeypress(TKeypress.kbCtrlF, CMD_SEARCH, "Search"); @@ -130,61 +139,78 @@ class TuiReaderMainWindow extends TWindow { } private void addSelect() { - // TODO: make a full list - final List options = new ArrayList(); - options.add("(all opt)"); - options.add("Sources"); - options.add("Author"); - - // TODO - final List sources = new ArrayList(); - sources.add("(show all)"); - for (String source : reader.getLibrary().getSources()) { - sources.add(source); - } + // TODO: i18n + final List selects = new ArrayList(); + selects.add("(show all)"); + selects.add("Sources"); + selects.add("Author"); + + final List selectTargets = new ArrayList(); + selectTargets.add(""); TLabel lblSelect = addLabel("Select: ", 0, 0); - // TODO: why must be last so to be able to draw over the rest - // TODO: make it so we cannot add manual entries - // TODO: how to select the item via keyboard? why double-click via - // mouse? - // TODO: how to change the values size on resize? - // TODO: setWidth() does not impact the display width, only the control - // and the down arrow on the right - // TODO: width 1 +resize + click on down arrow = bad format exception - select = addComboBox(0, 0, 10, sources, 0, - Math.min(sources.size() + 1, getHeight() - 1 - 1), - new TAction() { - @Override - public void DO() { - // TODO: wut? - if (select.getText().equals("(show all)")) { - setSource(null); - } else { - setSource(select.getText()); - } - refreshStories(); + TAction onSelect = new TAction() { + @Override + public void DO() { + String smode = selectBox.getText(); + boolean showTarget; + if (smode == null || smode.equals("(show all)")) { + showTarget = false; + } else if (smode.equals("Sources")) { + selectTargets.clear(); + selectTargets.add("(show all)"); + for (String source : reader.getLibrary().getSources()) { + selectTargets.add(source); } - }); + showTarget = true; + } else { + selectTargets.clear(); + selectTargets.add("(show all)"); + for (String author : reader.getLibrary().getAuthors()) { + selectTargets.add(author); + } + + showTarget = true; + } + + selectTargetBox.setVisible(showTarget); + selectTargetBox.setEnabled(showTarget); + if (showTarget) { + selectTargetBox.reflowData(); + } + + selectTargetBox.setText(selectTargets.get(0)); + if (showTarget) { + TuiReaderMainWindow.this.activate(selectTargetBox); + } else { + TuiReaderMainWindow.this.activate(list); + } + } + }; + + selectBox = addComboBox(0, 0, 10, selects, 0, -1, onSelect); - final TComboBox option = addComboBox(0, 0, 10, options, 0, - Math.min(sources.size() + 1, getHeight() - 1 - 1), + selectTargetBox = addComboBox(0, 0, 0, selectTargets, 0, -1, new TAction() { @Override public void DO() { - // TODO Not working: - sources.clear(); - sources.add("(show all)"); - for (String source : reader.getLibrary().getSources()) { - sources.add(source); + if (selectTargetBox.getText().equals( + selectTargets.get(0))) { + setMode(mode, null); + } else { + setMode(mode, selectTargetBox.getText()); } } }); + // Set defaults + onSelect.DO(); + TSizeConstraint.setSize(sizeConstraints, lblSelect, 5, 3, null, null); - TSizeConstraint.setSize(sizeConstraints, option, 15, 3, -5, null); - TSizeConstraint.setSize(sizeConstraints, select, 15, 4, -5, null); + TSizeConstraint.setSize(sizeConstraints, selectBox, 15, 3, -5, null); + TSizeConstraint.setSize(sizeConstraints, selectTargetBox, 15, 4, -5, + null); } @Override @@ -205,18 +231,30 @@ class TuiReaderMainWindow extends TWindow { * Will take the current settings into account (filter, source...). */ public void refreshStories() { - List metas = reader.getLibrary().getListBySource(source); + List metas; + if (mode == Mode.SOURCE) { + metas = reader.getLibrary().getListBySource(target); + } else if (mode == Mode.AUTHOR) { + metas = reader.getLibrary().getListByAuthor(target); + } else { + metas = reader.getLibrary().getList(); + } + setMetas(metas); } /** - * Change the source filter and display all stories matching this source. + * Change the author/source filter and display all stories matching this + * target. * - * @param source - * the new source or NULL for all sources + * @param mode + * the new mode or NULL for no sorting + * @param target + * the actual target for the given mode, or NULL for all of them */ - public void setSource(String source) { - this.source = source; + public void setMode(Mode mode, String target) { + this.mode = mode; + this.target = target; refreshStories(); } @@ -245,6 +283,9 @@ class TuiReaderMainWindow extends TWindow { } list.setList(listItems); + if (listItems.size() > 0) { + list.setSelectedIndex(0); + } } public MetaData getSelectedMeta() {