/** * XRayable.java * Copyright (C) 2010 New Zealand Digital Library, http://expeditee.org * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ package org.expeditee.items; import java.util.Collection; import java.util.LinkedList; import java.util.List; import org.expeditee.core.Colour; import org.expeditee.core.Point; import org.expeditee.encryption.items.surrogates.Label; import org.expeditee.gui.DisplayController; public abstract class XRayable extends Item { protected Text _source = null; public XRayable(Text source){ super(); _source = source; source.setHidden(true); source.addEnclosure(this); } @Override public Item getPrimary() { return _source.getPrimary(); } @Override public boolean isSurrogate() { return _source.isSurrogate(); } @Override public void setEncryptionLabel(String label) { _source.setEncryptionLabel(label); } public boolean sourceIsAccessible() { String encryptionLabel = _source.getEncryptionLabel(); if (encryptionLabel == null || encryptionLabel.isEmpty()) { return true; } else { List accessibleLabelsNames = Label.getAccessibleLabelsNames(this.getParent().getBody()); return accessibleLabelsNames.contains(encryptionLabel); } } public Collection getItemsToSave() { Collection toSave = new LinkedList(); toSave.add(_source); return toSave; } @Override public Collection getConnected() { Collection conn = super.getConnected(); conn.add(_source); return conn; } @Override public void addAllConnected(Collection connected) { super.addAllConnected(connected); if (!connected.contains(_source)) { connected.add(_source); } } /* * (non-Javadoc) * * @see org.expeditee.items.Item#merge(org.expeditee.items.Item, int, int) */ @Override public Item merge(Item merger, int mouseX, int mouseY) { return merger; } /** * Returns the Text Item that was used to create this Picture object. This * is required when saving the Frame. * * @return The Text Item used to create this Picture. */ public Text getSource() { return _source; } @Override public int getID() { return _source.getID(); } @Override public void setID(int newID) { _source.setID(newID); } @Override public int getY() { return _source.getY(); } @Override public int getX() { return _source.getX(); } @Override public Colour getColor() { return _source.getColor(); } @Override public void setColor(Colour c) { _source.setColor(c); invalidateCommonTrait(ItemAppearence.ForegroundColorChanged); } @Override public void setBackgroundColor(Colour c) { _source.setBackgroundColor(c); } @Override public void setFillColor(Colour c) { _source.setFillColor(c); } @Override public void setBorderColor(Colour c) { _source.setBorderColor(c); invalidateCommonTrait(ItemAppearence.BorderColorChanged); } @Override public void setGradientColor(Colour c) { _source.setGradientColor(c); } @Override public void setTooltips(List tooltips) { _source.setTooltips(tooltips); } @Override public void setTooltip(String tooltip) { _source.setTooltip(tooltip); } @Override public List getTooltip() { return _source.getTooltip(); } @Override public float getThickness() { return _source.getThickness(); } @Override public Integer getAnchorLeft() { return _source.getAnchorLeft(); } @Override public Integer getAnchorRight() { return _source.getAnchorRight(); } @Override public Integer getAnchorTop() { return _source.getAnchorTop(); } @Override public Integer getAnchorBottom() { return _source.getAnchorBottom(); } @Override public Colour getBorderColor() { return _source.getBorderColor(); } @Override public void setThickness(float thick, boolean setConnected) { this.invalidateCommonTrait(ItemAppearence.Thickness); _source.setThickness(thick, setConnected); this.invalidateCommonTrait(ItemAppearence.Thickness); } @Override public Colour getBackgroundColor() { return _source.getBackgroundColor(); } @Override public Colour getFillColor() { return _source.getFillColor(); } @Override public Colour getGradientColor() { return _source.getGradientColor(); } @Override public String getFillPattern() { return _source.getFillPattern(); } @Override public boolean hasLink() { return getLink() != null; } @Override public String getLink() { if (_source == null) return null; else return _source.getLink(); } @Override public void setLink(String frameName) { if (_source == null) { return; } if(frameName == null) invalidateAll(); _source.setLink(frameName); invalidateBounds(); //TODO: only invalidate the link bit invalidateAll(); } @Override public void setActions(List action) { if (_source == null){ return; } if(action == null || action.size() == 0) invalidateAll(); _source.setActions(action); invalidateBounds(); invalidateAll(); } @Override public List getAction() { if (_source == null) return null; else return _source.getAction(); } @Override public void translate(Point origin, double ratio){ //_source.translate(origin, ratio); invalidateBounds(); } @Override public void setPosition(float x, float y) { //_source.setPosition(x, y); } @Override public boolean isAnchored() { return _source.isAnchored(); } @Override public boolean isAnchoredX() { return _source.isAnchoredX(); } @Override public boolean isAnchoredY() { return _source.isAnchoredY(); } @Override public void setAnchorTop(Integer anchor) { _source.setAnchorTop(anchor); if (anchor != null) _source.setY(anchor); } @Override public void setAnchorBottom(Integer anchor) { _source.setAnchorBottom(anchor); if (anchor != null) _source.setY(DisplayController.getFramePaintAreaHeight() - getHeight() - anchor); } @Override public void setAnchorLeft(Integer anchor) { _source.setAnchorLeft(anchor); } @Override public void setAnchorRight(Integer anchor) { _source.setAnchorRight(anchor); _source.setX(DisplayController.getFramePaintAreaWidth() - anchor - this.getWidth()); } public boolean refresh(){ return true; } @Override public void setXY(float x, float y){ _source.setXY(x, y); } @Override public boolean hasPermission(UserAppliedPermission p) { return _source.hasPermission(p); } @Override public void setPermission(PermissionTriple permissionPair) { _source.setPermission(permissionPair); } }