Ignore:
Timestamp:
07/02/08 12:38:54 (16 years ago)
Author:
ra33
Message:

added functionality for dockable @v's

File:
1 edited

Legend:

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

    r108 r115  
    112112        private Text _frameName = null;
    113113
    114         private List<Overlay> _overlays = new ArrayList<Overlay>();
     114        private Map<Overlay, Frame> _overlays = new HashMap<Overlay, Frame>();
    115115
    116116        private List<Vector> _vectors = new ArrayList<Vector>();
     
    123123
    124124        private Time _darkTime = new Time(0);
     125
     126        private Collection<Item> _overlayItems = new LinkedHashSet<Item>();
     127
     128        private Collection<Item> _vectorItems = new LinkedHashSet<Item>();
    125129
    126130        /**
     
    286290        }
    287291
     292        public List<Item> getNonAnnotationItems() {
     293                List<Item> items = new ArrayList<Item>();
     294                for (Item i : getItems()) {
     295                        // only add up normal body text items
     296                        if (!i.isAnnotation()) {
     297                                items.add(i);
     298                        }
     299                }
     300                return items;
     301        }
     302
    288303        /**
    289304         * Gets the last item on the frame that is a non annotation item but is also
     
    427442
    428443        public Item getStatsTextItem(String itemText) {
    429                 Text t = getStatTemplate();
     444                return getTextItem(itemText, getStatTemplate());
     445        }
     446
     447        public Item getTextItem(String itemText) {
     448                return getTextItem(itemText, getItemTemplate());
     449        }
     450
     451        private Item getTextItem(String itemText, Text template) {
     452                Text t = template;
    430453                // We dont want the stats to wrap at all
    431454                t.setMaxSize(new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE));
     
    470493                }
    471494
    472                 for (Overlay o : _overlays)
     495                for (Overlay o : _overlays.keySet())
    473496                        results.addAll(o.Frame.getItemsWithin(poly));
    474497
     
    774797
    775798                change();
     799                FrameMouseActions.getInstance().refreshHighlights();
    776800                FrameGraphics.Repaint();
    777801                ItemUtils.EnclosedCheck(_body);
     
    882906
    883907        public String toString() {
    884                 String s = "";
    885                 s += "Name: " + _frameset + _number + "\n";
    886                 s += "Version: " + _version + "\n";
    887                 s += "Protection: " + _permission + "\n";
    888                 s += "Owner: " + _owner + "\n";
    889                 s += "Date Created: " + _creationDate + "\n";
    890                 s += "Last Mod. User: " + _modifiedUser + "\n";
    891                 s += "Last Mod. Date: " + _modifiedDate + "\n";
    892                 s += "Last Froz. Date: " + _frozenDate + "\n";
    893 
    894                 s += "\n";
    895                 s += "\n";
    896 
    897                 s += "Items: " + _body.size() + "\n";
    898 
    899                 return s;
     908                StringBuilder s = new StringBuilder();
     909                s.append(String.format("Name: %s%d%n", _frameset, _number));
     910                s.append(String.format("Version: %d%n", _version));
     911                s.append(String.format("Permission: %s%n", _permission.toString()));
     912                s.append(String.format("Owner: %s%n", _owner));
     913                s.append(String.format("Date Created: %s%n", _creationDate));
     914                s.append(String.format("Last Mod. User: %s%n", _modifiedUser));
     915                s.append(String.format("Last Mod. Date: %s%n", _modifiedDate));
     916                s.append(String.format("Items: %d%n", _body.size()));
     917                return s.toString();
    900918        }
    901919
     
    952970                if (from == null)
    953971                        return null;
    954 
    955                 /**
    956                  * TODO: Check
    957                  */
    958972
    959973                List<Item> column = new ArrayList<Item>();
     
    982996         *             If overlay is null.
    983997         */
    984         public void addVector(Vector vector) {
    985                 if (vector == null)
    986                         throw new NullPointerException("Frame.addVector");
     998        protected boolean addVector(Vector toAdd) {
    987999                // make sure we dont add this frame as an overlay of itself
    988                 if (vector.Frame == this)
    989                         return;
    990 
    991                 // if (_vectors.contains(vector))
    992                 // return;
    993 
    994                 _vectors.add(vector);
    995 
    996                 // TODO add the code below
    997                 // Items must be notified that they have been added to this frame via
    998                 // the vector...
    999                 // List<Item> items = new LinkedList<Item>();
    1000                 // FrameGraphics.AddAllOverlayItems(items, vector.Frame,
    1001                 // new LinkedList<Frame>());
    1002                 //             
    1003                 // for (Item i : items) {
    1004                 // i.onParentStateChanged(new ItemParentStateChangedEvent(this,
    1005                 // ItemParentStateChangedEvent.EVENT_TYPE_ADDED_VIA_VECTOR,
    1006                 // overlay.Level));
    1007                 // }
    1008         }
    1009 
    1010         /**
    1011          * Adds the given Frame to the list of overlays Frames being drawn with this
    1012          * Frame.
    1013          *
    1014          * @param overlay
    1015          *            The Frame to add
    1016          *
    1017          * @throws NullPointerException
    1018          *             If overlay is null.
    1019          */
    1020         public void addOverlay(Overlay overlay) {
    1021                 if (overlay == null)
    1022                         throw new NullPointerException("overlay");
    1023                 // make sure we dont add this frame as an overlay of itself
    1024                 if (overlay.Frame == this)
    1025                         return;
    1026 
    1027                 if (_overlays.contains(overlay))
    1028                         return;
    1029 
    1030                 _overlays.add(overlay);
    1031 
    1032                 // Items must be notified that they have been added to this frame via
    1033                 // the overlay...
    1034                 List<Item> items = new LinkedList<Item>();
    1035                 FrameGraphics.AddAllOverlayItems(items, overlay.Frame,
    1036                                 new LinkedList<Frame>());
    1037                 for (Item i : items) {
     1000                if (toAdd.Frame == this)
     1001                        return false;
     1002                _vectors.add(toAdd);
     1003                // Items must be notified that they have been added or removed from this
     1004                // frame via the vector...             
     1005                for (Item i : ItemUtils.CopyItems(toAdd.Frame.getVectorItems(), toAdd)) {
    10381006                        i.onParentStateChanged(new ItemParentStateChangedEvent(this,
    10391007                                        ItemParentStateChangedEvent.EVENT_TYPE_ADDED_VIA_OVERLAY,
    1040                                         overlay.Level));
    1041                 }
    1042         }
    1043 
    1044         /**
    1045          * Removes the given overlay from the list of overlays being drawn with this
    1046          * Frame.
    1047          *
    1048          * @param overlay
    1049          *            The overlay to remove
    1050          *
    1051          * @throws NullPointerException
    1052          *             If overlay is null.
    1053          */
    1054         public void removeOverlay(Overlay overlay) {
    1055                 if (overlay == null)
    1056                         throw new NullPointerException("overlay");
    1057 
    1058                 this._overlays.remove(overlay);
    1059 
    1060                 // Items must be notified that they have been removed from this frame
    1061                 // via the overlay...
    1062                 List<Item> items = new LinkedList<Item>();
    1063                 FrameGraphics.AddAllOverlayItems(items, overlay.Frame,
    1064                                 new LinkedList<Frame>());
    1065                 for (Item i : items) {
    1066                         i.onParentStateChanged(new ItemParentStateChangedEvent(this,
    1067                                         ItemParentStateChangedEvent.EVENT_TYPE_REMOVED_VIA_OVERLAY,
    1068                                         overlay.Level));
    1069                 }
    1070         }
    1071 
    1072         /**
    1073          * Removes the given vector from the list of vector being drawn with this
    1074          * Frame.
    1075          *
    1076          * @param vector
    1077          *            The overlay to remove
    1078          *
    1079          * @throws NullPointerException
    1080          *             If overlay is null.
    1081          */
    1082         public void removeVector(Vector vector) {
    1083                 if (vector == null)
    1084                         throw new NullPointerException("Frame.removeVector");
    1085 
    1086                 this._vectors.remove(vector);
    1087 
    1088                 // TODO figure out what the code below needs to be changed to
    1089                 // Items must be notified that they have been removed from this frame
    1090                 // via the overlay...
    1091                 // List<Item> items = new LinkedList<Item>();
    1092                 // FrameGraphics.AddAllOverlayItems(items, vector.Frame,
    1093                 // new LinkedList<Frame>());
    1094                 // for (Item i : items) {
    1095                 // i.onParentStateChanged(new ItemParentStateChangedEvent(this,
    1096                 // ItemParentStateChangedEvent.EVENT_TYPE_REMOVED_VIA_OVERLAY,
    1097                 // vector.Level));
    1098                 // }
    1099         }
    1100 
    1101         /**
    1102          * Removes the given Frame from the list of overlayed Frames being drawn
    1103          * with this Frame.
    1104          *
    1105          * @param overlayedFrame
    1106          *            The Frame to remove
    1107          *
    1108          * @throws NullPointerException
    1109          *             If overlayedFrame is null.
    1110          */
    1111         public void removeOverlay(Frame overlayedFrame) {
    1112                 if (overlayedFrame == null)
    1113                         throw new NullPointerException("overlay");
    1114 
    1115                 // Locate the oveylay(s) that match this
    1116                 List<Overlay> overlaysToRemove = new LinkedList<Overlay>();
    1117                 for (Overlay o : _overlays) {
    1118                         if (overlayedFrame.equals(o.Frame))
    1119                                 overlaysToRemove.add(o);
    1120                 }
    1121                 for (Overlay o : overlaysToRemove) { // must be enumerated seperate
    1122                         // to above...
    1123                         removeOverlay(o);
    1124                 }
    1125 
    1126         }
    1127 
    1128         public List<Vector> getVectors() {
    1129                 List<Vector> l = new LinkedList<Vector>();
     1008                                        toAdd.permission));
     1009                        _vectorItems.add(i);
     1010                }
     1011                return true;
     1012        }
     1013
     1014        public Collection<Vector> getVectors() {
     1015                Collection<Vector> l = new LinkedList<Vector>();
    11301016                l.addAll(_vectors);
    11311017                return l;
    11321018        }
    11331019
    1134         public List<Overlay> getOverlays() {
    1135                 List<Overlay> l = new LinkedList<Overlay>();
    1136                 l.addAll(_overlays);
    1137                 return l;
    1138         }
    1139 
    1140         /**
    1141          * @return All overlays seen by this frame (including its overlays'
    1142          *         overlays).
    1143          */
    1144         public List<Overlay> getOverlaysDeep() {
    1145                 List<Overlay> l = new LinkedList<Overlay>();
    1146                 getOverlaysDeep(l, this, new LinkedList<Frame>());
    1147                 return l;
     1020        public Collection<Overlay> getOverlays() {
     1021                return new LinkedList<Overlay>(_overlays.keySet());
    11481022        }
    11491023
     
    11741048        }
    11751049
    1176         private boolean getOverlaysDeep(List<Overlay> overlays, Frame overlay,
    1177                         List<Frame> seenOverlays) {
    1178 
    1179                 if (seenOverlays.contains(overlay))
    1180                         return false;
    1181 
    1182                 seenOverlays.add(overlay);
    1183 
    1184                 for (Overlay o : overlay.getOverlays()) {
    1185                         if (getOverlaysDeep(overlays, o.Frame, seenOverlays)) {
    1186                                 overlays.add(o);
    1187                         }
    1188                 }
    1189 
    1190                 return true;
    1191         }
     1050        // private boolean getOverlaysDeep(List<Overlay> overlays, Frame overlay,
     1051        // List<Frame> seenOverlays) {
     1052        //
     1053        // if (seenOverlays.contains(overlay))
     1054        // return false;
     1055        //
     1056        // seenOverlays.add(overlay);
     1057        //
     1058        // for (Overlay o : overlay.getOverlays()) {
     1059        // if (getOverlaysDeep(overlays, o.Frame, seenOverlays)) {
     1060        // overlays.add(o);
     1061        // }
     1062        // }
     1063        //
     1064        // return true;
     1065        // }
    11921066
    11931067        /**
     
    12021076                if (item == null)
    12031077                        throw new NullPointerException("item");
    1204                 List<Overlay> overlays = getOverlaysDeep();
    1205                 for (Overlay l : overlays) {
    1206                         // if (l.Frame.containsItem(item)) return l;
     1078               
     1079                for (Overlay l : getOverlays()) {
    12071080                        if (item.getParent() == l.Frame)
    12081081                                return l;
    12091082                }
    12101083
     1084                //TODO return the correct vector... not just the first vector matching the vectorFrame
     1085                for (Vector v : getVectors()) {
     1086                        if (item.getParent() == v.Frame)
     1087                                return v;
     1088                }
     1089               
    12111090                return null;
    12121091        }
    12131092
    12141093        public void clearVectors() {
    1215                 while (!_vectors.isEmpty()) {
    1216                         removeVector(_vectors.get(0)); // centralise removing
    1217                 }
     1094                _vectors.clear();
     1095                _vectorItems.clear();
     1096        }
     1097
     1098        protected boolean removeVector(Vector toRemove) {
     1099                if(_overlays.remove(toRemove) == null)
     1100                        return false;
     1101                for (Item i : toRemove.Frame.getVectorItems()) {
     1102                        _overlayItems.remove(i);
     1103                        i.onParentStateChanged(new ItemParentStateChangedEvent(this,
     1104                                        ItemParentStateChangedEvent.EVENT_TYPE_REMOVED_VIA_OVERLAY,
     1105                                        toRemove.permission));
     1106                }
     1107                return true;
    12181108        }
    12191109
    12201110        public void clearOverlays() {
    1221                 while (!_overlays.isEmpty()) {
    1222                         removeOverlay(_overlays.get(0)); // centralise removing
    1223                 }
     1111                for (Overlay o : _overlays.keySet()) {
     1112                        removeOverlay(o.Frame);
     1113                }
     1114                assert (_overlays.isEmpty());
     1115        }
     1116
     1117        protected boolean removeOverlay(Frame f) {
     1118                for (Overlay o : _overlays.keySet()) {
     1119                        if (o.Frame == f) {
     1120                                _overlays.remove(o);
     1121                                for (Item i : f.getItems()) {
     1122                                        _overlayItems.remove(i);
     1123                                        i
     1124                                                        .onParentStateChanged(new ItemParentStateChangedEvent(
     1125                                                                        this,
     1126                                                                        ItemParentStateChangedEvent.EVENT_TYPE_REMOVED_VIA_OVERLAY,
     1127                                                                        o.permission));
     1128                                }
     1129                                return true;
     1130                        }
     1131                }
     1132                return false;
    12241133        }
    12251134
    12261135        public void addAllVectors(List<Vector> vectors) {
    12271136                for (Vector v : vectors) {
    1228                         addVector(v); // centralise adding
    1229                 }
    1230         }
    1231 
    1232         public void addAllOverlays(List<Overlay> overlays) {
     1137                        addVector(v);
     1138                }
     1139        }
     1140
     1141        public void addAllOverlays(Collection<Overlay> overlays) {
    12331142                for (Overlay o : overlays) {
    1234                         addOverlay(o); // centralise adding
    1235                 }
     1143                        addOverlay(o);
     1144                }
     1145        }
     1146
     1147        protected boolean addOverlay(Overlay toAdd) {
     1148                // make sure we dont add this frame as an overlay of itself
     1149                if (toAdd.Frame == this)
     1150                        return false;
     1151                // Dont add the overlay if there is already one for this frame
     1152                if (_overlays.values().contains(toAdd.Frame))
     1153                        return false;
     1154                // Add the overlay to the map of overlays on this frame
     1155                _overlays.put(toAdd, toAdd.Frame);
     1156                // Add all the overlays from the overlay frame to this frame
     1157                for (Overlay o : toAdd.Frame.getOverlays())
     1158                        addOverlay(o);
     1159
     1160                // Now add the items for this overlay
     1161
     1162                // Items must be notified that they have been added or removed from this
     1163                // frame via the overlay...
     1164                for (Item i : toAdd.Frame.getVisibleItems()) {
     1165                        i.onParentStateChanged(new ItemParentStateChangedEvent(this,
     1166                                        ItemParentStateChangedEvent.EVENT_TYPE_ADDED_VIA_OVERLAY,
     1167                                        toAdd.permission));
     1168                        _overlayItems.add(i);
     1169                }
     1170                return true;
    12361171        }
    12371172
     
    17611696
    17621697                String[] tokens = text.getProcessedText();
    1763                 if (tokens != null || tokens.length > 1)
     1698                if (tokens != null && tokens.length > 1)
    17641699                        return tokens[1];
    17651700                return null;
     
    17711706                _annotations.clear();
    17721707        }
    1773 
     1708       
    17741709        public List<Item> getVisibleItems() {
    17751710                return getItems(true);
     
    18131748                                seenWidgets.add(iw);
    18141749                                toSave.add(iw.getSource());
    1815                         } else if(i instanceof XRayable){
    1816                                 XRayable x = (XRayable)i;
     1750                        } else if (i instanceof XRayable) {
     1751                                XRayable x = (XRayable) i;
    18171752                                toSave.addAll(x.getItemsToSave());
    1818                         }//Circle centers are items with attached enclosures
    1819                         else if (i.hasEnclosures()){
     1753                        }// Circle centers are items with attached enclosures
     1754                        else if (i.hasEnclosures()) {
    18201755                                continue;
    1821                         }else{
     1756                        } else {
    18221757                                toSave.add(i);
    18231758                        }
     
    18261761                return toSave;
    18271762        }
     1763
     1764        public Collection<Item> getOverlayItems() {
     1765                return _overlayItems;
     1766        }
     1767
     1768        /**
     1769         * Returns true if this frame has and overlays for the specified frame.
     1770         *
     1771         * @param frame
     1772         * @return
     1773         */
     1774        public boolean hasOverlay(Frame frame) {
     1775                return _overlays.containsValue(frame);
     1776        }
     1777
     1778        public Collection<Item> getAllItems() {
     1779                Collection<Item> allItems = new LinkedHashSet<Item>(_body);
     1780                allItems.addAll(_overlayItems);
     1781                allItems.addAll(_vectorItems);
     1782                return allItems;
     1783        }
     1784
     1785        public Collection<Item> getVectorItems() {
     1786                Collection<Item>vectorItems = new LinkedHashSet<Item>(_vectorItems);
     1787                vectorItems.addAll(getNonAnnotationItems());
     1788                return vectorItems;
     1789        }
    18281790}
Note: See TracChangeset for help on using the changeset viewer.