Changeset 30


Ignore:
Timestamp:
05/14/08 09:42:01 (16 years ago)
Author:
ra33
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/expeditee/gui/Frame.java

    r26 r30  
    150150         *
    151151         * @return The interactive widgets that are currently ancored in this frame.
    152          * Hence it exlcudes free-widgets.
     152         * Hence it exlcudes free-widgets. Returns a copy
    153153         */
    154154        public List<InteractiveWidget> getInteractiveWidgets() {
    155                 return Collections.unmodifiableList(this._iWidgets);
    156                 // return       this._iWidgets; // faster
     155                LinkedList<InteractiveWidget> clone = new LinkedList<InteractiveWidget>();
     156                clone.addAll(this._iWidgets);
     157                return clone;
    157158        }
    158159
     
    211212               
    212213                return visibleItems;
     214        }
     215       
     216        /**
     217         * @param i Item to check if contained in this frame
     218         * @return True if this frame contains i.
     219         */
     220        public boolean containsItem(Item i) {
     221                if (i == null) throw new NullPointerException("i");
     222                return _body.contains(i);
    213223        }
    214224
     
    607617                        }
    608618                       
    609                         item.onAddedToFrame();
     619                        item.onAddedToFrame(false, 0);
    610620
    611621                        change();
     
    640650                        change();
    641651               
    642                 //Remove widgets from the widget list
     652                // Remove widgets from the widget list
    643653                if (item != null) {
    644654                        item.onRemovedFromFrame();
     
    921931         * @param overlay
    922932         *            The Frame to add
     933         *           
     934         * @throws NullPointerException
     935         *            If overlay is null.
    923936         */
    924937        public void addOverlay(Overlay overlay) {
    925                 if (_overlays == null || overlay == null)
    926                         _overlays = new ArrayList<Overlay>();
    927 
     938                if (overlay == null) throw new NullPointerException("overlay");
     939                if (_overlays.contains(overlay)) return;
     940               
    928941                _overlays.add(overlay);
    929         }
    930 
    931         /**
    932          * Removes the given Frame from the list of overlay Frames being drawn with
     942               
     943                // Items must be notified that they have been added to this frame via the overlay...
     944                List<Item> items = new LinkedList<Item>();
     945                FrameGraphics.AddAllOverlayItems(items, overlay.Frame, new LinkedList<Frame>());
     946                for (Item i : items) {
     947                        i.onAddedToFrame(true, overlay.Level);
     948                }
     949        }
     950
     951        /**
     952         * Removes the given overlay from the list of overlays being drawn with this Frame.
     953         *
     954         * @param overlay
     955         *            The overlay to remove
     956         *           
     957         * @throws NullPointerException
     958         *            If overlay is null.
     959         */
     960        public void removeOverlay(Overlay overlay) {
     961                if (overlay == null) throw new NullPointerException("overlay");
     962       
     963                this._overlays.remove(overlay);
     964               
     965                // Items must be notified that they have been removed from this frame via the overlay...
     966                List<Item> items = new LinkedList<Item>();
     967                FrameGraphics.AddAllOverlayItems(items, overlay.Frame, new LinkedList<Frame>());
     968                for (Item i : items) {
     969                        i.onRemovedFromFrame();
     970                }
     971        }
     972       
     973        /**
     974         * Removes the given Frame from the list of overlayed Frames being drawn with
    933975         * this Frame.
    934976         *
    935          * @param overlay
     977         * @param overlayedFrame
    936978         *            The Frame to remove
    937          */
    938         public void removeOverlay(Frame overlay) {
    939                 _overlays.remove(overlay);
    940                 FrameGraphics.Repaint();
     979         *           
     980         * @throws NullPointerException
     981         *            If overlayedFrame is null.
     982         */
     983        public void removeOverlay(Frame overlayedFrame) {
     984                if (overlayedFrame == null) throw new NullPointerException("overlay");
     985               
     986                // Locate the oveylay(s) that match this
     987                List<Overlay> overlaysToRemove = new LinkedList<Overlay>();
     988                for (Overlay o : _overlays) {
     989                        if (overlayedFrame.equals(o.Frame)) overlaysToRemove.add(o);
     990                }
     991                for (Overlay o : overlaysToRemove) { // must be enumerated seperate to above...
     992                        removeOverlay(o);
     993                }
     994               
    941995        }
    942996
    943997        public List<Overlay> getOverlays() {
    944                 return _overlays;
     998                List<Overlay> l = new LinkedList<Overlay>();
     999                l.addAll(_overlays);
     1000                return l;
     1001        }
     1002       
     1003        /**
     1004         * @return All overlays seen by this frame (including its overlays' overlays).
     1005         */
     1006        public List<Overlay> getOverlaysDeep() {
     1007                List<Overlay> l = new LinkedList<Overlay>();
     1008                getOverlaysDeep(l, this, new LinkedList<Frame>());
     1009                return l;
     1010        }
     1011       
     1012        private boolean getOverlaysDeep(List<Overlay> overlays, Frame overlay, List<Frame> seenOverlays) {
     1013
     1014                        if (seenOverlays.contains(overlay))
     1015                                return false;
     1016
     1017                        seenOverlays.add(overlay);
     1018
     1019                        for (Overlay o : overlay.getOverlays()) {
     1020                                if (getOverlaysDeep(overlays, o.Frame, seenOverlays)) {
     1021                                        overlays.add(o);
     1022                                }
     1023                        }
     1024                       
     1025                        return true;
     1026        }
     1027       
     1028        /**
     1029         * Gets the overlay on this frame which owns the given item.
     1030         * @param item The item - must not be null.
     1031         * @return The overlay that contains the itm. Null if no overlay owns the item.
     1032         */
     1033        public Overlay getOverlayOwner(Item item) {
     1034                if (item == null) throw new NullPointerException("item");
     1035                List<Overlay> overlays = getOverlaysDeep();
     1036                for (Overlay l : overlays) {
     1037                        //if (l.Frame.containsItem(item)) return l;
     1038                        if (item.getParent() == l.Frame) return l;
     1039                }
     1040               
     1041                return null;
    9451042        }
    9461043
    9471044        public void clearOverlays() {
    948                 _overlays.clear();
     1045                while (!_overlays.isEmpty()) {
     1046                        removeOverlay(_overlays.get(0)); // centralise removing
     1047                }
    9491048        }
    9501049
    9511050        public void addAllOverlays(List<Overlay> overlays) {
    952                 _overlays.addAll(overlays);
     1051                for (Overlay o : overlays) {
     1052                        addOverlay(o); // centralise adding
     1053                }
    9531054        }
    9541055
Note: See TracChangeset for help on using the changeset viewer.