/** Notifies all views of updates in the data structure. */ public void update() { final Data data = initHistory(gui.context); if (data == null) return; gui.context.marked = new Nodes(data); for (final View v : view) if (v.visible()) v.refreshUpdate(); gui.refreshControls(); }
/** * Notifies all views of a context change. * * @param nodes new context set (may be {@code null} if root nodes are addressed) * @param quick quick switch * @param vw the calling view */ public void context(final Nodes nodes, final boolean quick, final View vw) { final Context ctx = gui.context; // add new entry if current node set has not been cached yet final Nodes newn = nodes.checkRoot(); final Nodes empty = new Nodes(new int[0], ctx.data(), ctx.marked.ftpos); final Nodes curr = quick ? ctx.current() : null; final Nodes cmp = quick ? curr : ctx.marked; if (cont[hist] == null ? cmp != null : cmp == null || !cont[hist].sameAs(cmp)) { checkHist(); if (quick) { // store history entry queries[hist] = ""; marked[hist] = new Nodes(ctx.data()); // add current entry cont[++hist] = curr; } else { // store history entry final String in = gui.input.getText(); queries[hist] = in; marked[hist] = ctx.marked; // add current entry cont[++hist] = newn; queries[hist] = in; marked[hist] = empty; } histsize = hist; } ctx.set(newn, empty); for (final View v : view) if (v != vw && v.visible()) v.refreshContext(true, quick); gui.refreshControls(); }
/** * Notifies all views of a selection change. * * @param mark marked nodes * @param vw the calling view */ public void mark(final Nodes mark, final View vw) { final Context ctx = gui.context; ctx.marked = mark; for (final View v : view) if (v != vw && v.visible()) v.refreshMark(); gui.filter.setEnabled(mark.size() != 0); gui.refreshControls(); }
@Override public void execute(final GUI gui) { final boolean rt = gui.gprop.invert(GUIProp.FILTERRT); gui.stop(); // refresh buttons in input bar gui.refreshControls(); // refresh editor buttons gui.editor.refreshMark(); final Context ctx = gui.context; final boolean root = ctx.root(); final Data data = ctx.data(); if (!rt) { if (!root) { gui.notify.context(new Nodes(0, data), true, null); gui.notify.mark(ctx.current(), null); } } else { if (root) { gui.notify.mark(new Nodes(data), null); } else { final Nodes mark = ctx.marked; ctx.marked = new Nodes(data); gui.notify.context(mark, true, null); } } }
@Override public void execute(final GUI gui) { gui.gprop.invert(GUIProp.EXECRT); gui.stop(); // refresh buttons in input bar gui.refreshControls(); // refresh editor buttons gui.editor.refreshMark(); }
/** * Moves around in the internal history and notifies all views of a context change. * * @param forward move forward or backward */ public void hist(final boolean forward) { final Context ctx = gui.context; final String query; if (forward) { if (hist == histsize) return; query = queries[++hist]; } else { if (hist == 0) return; marked[hist] = ctx.marked; query = queries[--hist]; } ctx.set(cont[hist], marked[hist]); gui.input.setText(query); for (final View v : view) if (v.visible()) v.refreshContext(forward, false); gui.refreshControls(); }