package org.basex.gui.view; import org.basex.gui.layout.BaseXBack; import org.basex.gui.layout.BaseXSplit; import org.basex.util.Array; /** * Layout class. * * @author BaseX Team 2005-12, BSD License * @author Christian Gruen */ final class ViewAlignment implements ViewLayout { /** Alignment (horizontal/vertical). */ final boolean horiz; /** Layout Components. */ ViewLayout[] comp = {}; /** * Constructor. * @param h alignment (horizontal/vertical) */ ViewAlignment(final boolean h) { horiz = h; } /** * Adds a single object. * @param obj object to be added */ void add(final ViewLayout obj) { add(obj, comp.length); } /** * Adds a single object at the specified position. * @param obj object to insert * @param o index */ void add(final ViewLayout obj, final int o) { final int n = comp.length; final ViewLayout[] tmp = new ViewLayout[n + 1]; System.arraycopy(comp, 0, tmp, 0, o); System.arraycopy(comp, o, tmp, o + 1, n - o); comp = tmp; comp[o] = obj; } /** * Removes a single object. * @param o index */ private void remove(final int o) { comp = Array.delete(comp, o); } @Override public boolean isVisible() { for(final ViewLayout c : comp) if(c.isVisible()) return true; return false; } @Override public void setVisibility(final boolean db) { for(final ViewLayout c : comp) c.setVisibility(db); } @Override public boolean delete(final ViewPanel panel) { for(int o = 0; o < comp.length; ++o) { if(comp[o].delete(panel)) { if(comp[o] instanceof ViewPanel) { remove(o--); } else { comp[o] = ((ViewAlignment) comp[o]).comp[0]; } } } return comp.length < 2; } @Override public void createView(final BaseXBack panel) { // skip invisible layouts if(!isVisible()) return; final BaseXBack split = new BaseXSplit(horiz); for(final ViewLayout c : comp) c.createView(split); panel.add(split); } @Override public String layoutString() { final StringBuilder str = new StringBuilder(horiz ? "H " : "V "); for(final ViewLayout c : comp) str.append(c.layoutString()); str.append("- "); return str.toString(); } @Override public String toString() { return (horiz ? "Horizontal" : "Vertical") + " Layout"; } }