Changeset 30
- Timestamp:
- 05/14/08 09:42:01 (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/expeditee/gui/Frame.java
r26 r30 150 150 * 151 151 * @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 153 153 */ 154 154 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; 157 158 } 158 159 … … 211 212 212 213 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); 213 223 } 214 224 … … 607 617 } 608 618 609 item.onAddedToFrame( );619 item.onAddedToFrame(false, 0); 610 620 611 621 change(); … … 640 650 change(); 641 651 642 // Remove widgets from the widget list652 // Remove widgets from the widget list 643 653 if (item != null) { 644 654 item.onRemovedFromFrame(); … … 921 931 * @param overlay 922 932 * The Frame to add 933 * 934 * @throws NullPointerException 935 * If overlay is null. 923 936 */ 924 937 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 928 941 _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 933 975 * this Frame. 934 976 * 935 * @param overlay 977 * @param overlayedFrame 936 978 * 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 941 995 } 942 996 943 997 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; 945 1042 } 946 1043 947 1044 public void clearOverlays() { 948 _overlays.clear(); 1045 while (!_overlays.isEmpty()) { 1046 removeOverlay(_overlays.get(0)); // centralise removing 1047 } 949 1048 } 950 1049 951 1050 public void addAllOverlays(List<Overlay> overlays) { 952 _overlays.addAll(overlays); 1051 for (Overlay o : overlays) { 1052 addOverlay(o); // centralise adding 1053 } 953 1054 } 954 1055
Note:
See TracChangeset
for help on using the changeset viewer.