Ignore:
Timestamp:
05/19/08 12:03:18 (16 years ago)
Author:
ra33
Message:

Fixed a bunch of problems with rectangles and resizing the window, as well as adding some more unit tests etc.

File:
1 edited

Legend:

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

    r56 r67  
    4141
    4242        // The various attributes of this Frame
    43         /**
    44          * TODO: Change these to non-string attributes (where applicable). All
    45          * processing to\from Java types should be done in KMSReader and KMSWriter.
    46          */
    4743        private String _frameset = null;
    4844
    4945        private int _number = -1;
    5046
    51         private int _version = 1;
    52 
    53         private int _fversion = -1;
     47        private int _version = 0;
    5448
    5549        private String _protection = null;
     
    9084
    9185        public static List<Item> FreeItems = new ArrayList<Item>();
    92        
     86
    9387        // for drawing purposes
    9488        private List<InteractiveWidget> _iWidgets = new ArrayList<InteractiveWidget>();
     
    10195        private Text _frameName = null;
    10296
    103         // private Text _template = UserSettings.ItemTemplate.copy();
    104 
    10597        private List<Overlay> _overlays = new ArrayList<Overlay>();
    10698
     
    122114        public void setBuffer(VolatileImage newBuffer) {
    123115                _buffer = newBuffer;
    124                 // setBufferValid(true);
    125116        }
    126117
    127118        public boolean isBufferValid() {
    128                 if (_buffer != null && _buffer.contentsLost())
     119                if (_buffer == null || _buffer.contentsLost())
    129120                        return false;
    130121
     
    132123        }
    133124
    134         public void setBufferValid(boolean newValue) {
     125        private void setBufferValid(boolean newValue) {
    135126                _validBuffer = newValue;
    136127        }
     
    147138                                i.setID(++_lineCount);
    148139        }
    149        
     140
    150141        /**
    151142         *
    152143         * @return The interactive widgets that are currently ancored in this frame.
    153          * Hence it exlcudes free-widgets. Returns a copy
     144         *         Hence it exlcudes free-widgets. Returns a copy
    154145         */
    155146        public List<InteractiveWidget> getInteractiveWidgets() {
     
    181172                _change = value;
    182173
    183                 if (_change){
     174                if (_change) {
    184175                        setBufferValid(false);
    185176                        _saved = false;
     
    204195                        _sorted = true;
    205196                }
    206                
     197
    207198                List<Item> visibleItems = new ArrayList<Item>();
    208                
    209                 for(Item i: _body) {
     199
     200                for (Item i : _body) {
    210201                        if (i.isVisible())
    211202                                visibleItems.add(i);
    212203                }
    213                
     204
    214205                return visibleItems;
    215206        }
    216        
    217         /**
    218          * @param i Item to check if contained in this frame
     207
     208        /**
     209         * @param i
     210         *            Item to check if contained in this frame
    219211         * @return True if this frame contains i.
    220212         */
    221213        public boolean containsItem(Item i) {
    222                 if (i == null) throw new NullPointerException("i");
     214                if (i == null)
     215                        throw new NullPointerException("i");
    223216                return _body.contains(i);
    224217        }
     
    234227                for (Item i : getItems()) {
    235228                        // only add up normal body text items
    236                         if ((i instanceof Text) &&
    237                                         (includeAnnotations || !i.isAnnotation())) {
     229                        if ((i instanceof Text)
     230                                        && (includeAnnotations || !i.isAnnotation())) {
    238231                                bodyTextItems.add((Text) i);
    239232                        }
     
    241234                bodyTextItems.remove(getTitle());
    242235
    243                 return bodyTextItems;           
     236                return bodyTextItems;
    244237        }
    245238
     
    316309                                frameTitle.stripFirstWord();
    317310                }
    318                 //TODO Widgets... check this out
    319                 // Brook: Cannot figure what is going on above... widget  annot titles should be stripped always
    320                 if (ItemUtils.isTag(frameTitle, ItemUtils.GetTag(ItemUtils.TAG_IWIDGET))) {
     311                // TODO Widgets... check this out
     312                // Brook: Cannot figure what is going on above... widget annot titles
     313                // should be stripped always
     314                if (ItemUtils
     315                                .isTag(frameTitle, ItemUtils.GetTag(ItemUtils.TAG_IWIDGET))) {
    321316                        frameTitle.stripFirstWord();
    322317                }
     
    425420
    426421                for (Item i : _body)
    427                         if (i.isVisible() /*&& i != _frameName*/ && i.intersects(poly)) {
     422                        if (i.isVisible() /* && i != _frameName */&& i.intersects(poly)) {
    428423                                if (!results.contains(i))
    429424                                        results.add(i);
     
    462457         */
    463458        public void setFrameNumber(int number) {
     459                assert (number >= 0);
     460
     461                if (_number == number)
     462                        return;
     463
    464464                _number = number;
    465465                boolean oldchange = _change;
     
    469469                if (_frameName != null) {
    470470                        id = _frameName.getID();
    471                 } else{
     471                } else {
    472472                        id = -1 * getNextItemID();
    473473                }
     
    493493
    494494        /**
    495          * Sets the version of this Frame to the given String.
     495         * Increments the version of this Frame to the given String.
    496496         *
    497497         * @param version
     
    500500        public void setVersion(int version) {
    501501                _version = version;
    502         }
    503 
    504         /**
    505          * Sets the format version of this Frame to the given String.
    506          *
    507          * @param version
    508          *            The format version to use for this Frame.
    509          */
    510         public void setFormatVersion(int version) {
    511                 _fversion = version;
    512502        }
    513503
     
    593583                if (item != null) {
    594584                        if (_body.contains(item)) {
    595                                 //System.out.println("Item (" + item.getClass().getSimpleName()
    596                                 //              + ") with ID " + item.getID() + " already in body.");
     585                                // System.out.println("Item (" + item.getClass().getSimpleName()
     586                                // + ") with ID " + item.getID() + " already in body.");
    597587                                return;
    598588                        }
     
    600590                        if (item instanceof Line)
    601591                                _lineCount++;
    602                        
     592
    603593                        _itemCount = Math.max(_itemCount, item.getID());
    604594
     
    609599
    610600                        item.setMaxSize(FrameGraphics.getMaxFrameSize());
    611                         //add widget items to the list of widgets
     601                        // add widget items to the list of widgets
    612602                        if (item instanceof WidgetCorner) {
    613                                 InteractiveWidget iw = ((WidgetCorner)item).getWidgetSource();
    614                                 if (!this._iWidgets.contains(iw)) { // A set would have been best
    615                                         _iWidgets.add(iw);
     603                                InteractiveWidget iw = ((WidgetCorner) item).getWidgetSource();
     604                                if (!this._iWidgets.contains(iw)) { // A set would have been
     605                                                                                                        // best
     606                                        _iWidgets.add(iw);
    616607                                }
    617608                        }
    618                        
    619                         item.onParentStateChanged(new ItemParentStateChangedEvent(
    620                                         this, ItemParentStateChangedEvent.EVENT_TYPE_ADDED));
     609
     610                        item.onParentStateChanged(new ItemParentStateChangedEvent(this,
     611                                        ItemParentStateChangedEvent.EVENT_TYPE_ADDED));
    621612
    622613                        change();
     
    648639
    649640        public void removeItem(Item item) {
    650                 if (_body.remove(item))
     641                if (_body.remove(item)) {
    651642                        change();
    652                
    653                 // Remove widgets from the widget list
    654                 if (item != null) {
    655                         item.onParentStateChanged(new ItemParentStateChangedEvent(
    656                                         this, ItemParentStateChangedEvent.EVENT_TYPE_REMOVED));
    657                         if (item instanceof WidgetCorner) {
    658                                 _iWidgets.remove(((WidgetCorner)item).getWidgetSource());
    659                         }
    660                 }
    661                
     643                        // Remove widgets from the widget list
     644                        if (item != null) {
     645                                item.onParentStateChanged(new ItemParentStateChangedEvent(this,
     646                                                ItemParentStateChangedEvent.EVENT_TYPE_REMOVED));
     647                                if (item instanceof WidgetCorner) {
     648                                        _iWidgets.remove(((WidgetCorner) item).getWidgetSource());
     649                                }
     650                        }
     651                }
    662652        }
    663653
     
    760750         * @return The version of this Frame.
    761751         */
     752        public int getVersion(boolean increment) {
     753                // System.out.println("Version: " + _version);
     754                if (increment)
     755                        _version++;
     756                return _version;
     757        }
     758
    762759        public int getVersion() {
    763                 return _version;
    764         }
    765 
    766         public int getFormatVersion() {
    767                 return _fversion;
     760                return getVersion(true);
    768761        }
    769762
     
    843836                s += "Name: " + _frameset + _number + "\n";
    844837                s += "Version: " + _version + "\n";
    845                 s += "Format Version: " + _fversion + "\n";
    846838                s += "Protection: " + _protection + "\n";
    847839                s += "Owner: " + _owner + "\n";
     
    935927         * @param overlay
    936928         *            The Frame to add
    937          *            
     929         *
    938930         * @throws NullPointerException
    939          *            If overlay is null.
     931         *             If overlay is null.
    940932         */
    941933        public void addOverlay(Overlay overlay) {
    942                 if (overlay == null) throw new NullPointerException("overlay");
    943                 if (_overlays.contains(overlay)) return;
    944                
     934                if (overlay == null)
     935                        throw new NullPointerException("overlay");
     936                // make sure we dont add this frame as an overlay of itself
     937                if (overlay.Frame == this)
     938                        return;
     939
     940                if (_overlays.contains(overlay))
     941                        return;
     942
    945943                _overlays.add(overlay);
    946                
    947                 // Items must be notified that they have been added to this frame via the overlay...
     944
     945                // Items must be notified that they have been added to this frame via
     946                // the overlay...
    948947                List<Item> items = new LinkedList<Item>();
    949                 FrameGraphics.AddAllOverlayItems(items, overlay.Frame, new LinkedList<Frame>());
     948                FrameGraphics.AddAllOverlayItems(items, overlay.Frame,
     949                                new LinkedList<Frame>());
    950950                for (Item i : items) {
    951                         i.onParentStateChanged(new ItemParentStateChangedEvent(
    952                                         this,
    953                                         ItemParentStateChangedEvent.EVENT_TYPE_ADDED_VIA_OVERLAY,
     951                        i.onParentStateChanged(new ItemParentStateChangedEvent(this,
     952                                        ItemParentStateChangedEvent.EVENT_TYPE_ADDED_VIA_OVERLAY,
    954953                                        overlay.Level));
    955954                }
     
    957956
    958957        /**
    959          * Removes the given overlay from the list of overlays being drawn with this Frame.
     958         * Removes the given overlay from the list of overlays being drawn with this
     959         * Frame.
    960960         *
    961961         * @param overlay
    962962         *            The overlay to remove
    963          *            
     963         *
    964964         * @throws NullPointerException
    965          *            If overlay is null.
     965         *             If overlay is null.
    966966         */
    967967        public void removeOverlay(Overlay overlay) {
    968                 if (overlay == null) throw new NullPointerException("overlay");
    969        
     968                if (overlay == null)
     969                        throw new NullPointerException("overlay");
     970
    970971                this._overlays.remove(overlay);
    971                
    972                 // Items must be notified that they have been removed from this frame via the overlay...
     972
     973                // Items must be notified that they have been removed from this frame
     974                // via the overlay...
    973975                List<Item> items = new LinkedList<Item>();
    974                 FrameGraphics.AddAllOverlayItems(items, overlay.Frame, new LinkedList<Frame>());
     976                FrameGraphics.AddAllOverlayItems(items, overlay.Frame,
     977                                new LinkedList<Frame>());
    975978                for (Item i : items) {
    976                         i.onParentStateChanged(new ItemParentStateChangedEvent(
    977                                         this,
    978                                         ItemParentStateChangedEvent.EVENT_TYPE_REMOVED_VIA_OVERLAY,
     979                        i.onParentStateChanged(new ItemParentStateChangedEvent(this,
     980                                        ItemParentStateChangedEvent.EVENT_TYPE_REMOVED_VIA_OVERLAY,
    979981                                        overlay.Level));
    980982                }
    981983        }
    982        
    983         /**
    984          * Removes the given Frame from the list of overlayed Frames being drawn with
    985          * this Frame.
     984
     985        /**
     986         * Removes the given Frame from the list of overlayed Frames being drawn
     987         * with this Frame.
    986988         *
    987989         * @param overlayedFrame
    988990         *            The Frame to remove
    989          *            
     991         *
    990992         * @throws NullPointerException
    991          *            If overlayedFrame is null.
     993         *             If overlayedFrame is null.
    992994         */
    993995        public void removeOverlay(Frame overlayedFrame) {
    994                 if (overlayedFrame == null) throw new NullPointerException("overlay");
    995                
     996                if (overlayedFrame == null)
     997                        throw new NullPointerException("overlay");
     998
    996999                // Locate the oveylay(s) that match this
    9971000                List<Overlay> overlaysToRemove = new LinkedList<Overlay>();
    9981001                for (Overlay o : _overlays) {
    999                         if (overlayedFrame.equals(o.Frame)) overlaysToRemove.add(o);
    1000                 }
    1001                 for (Overlay o : overlaysToRemove) { // must be enumerated seperate to above...
     1002                        if (overlayedFrame.equals(o.Frame))
     1003                                overlaysToRemove.add(o);
     1004                }
     1005                for (Overlay o : overlaysToRemove) { // must be enumerated seperate
     1006                                                                                                // to above...
    10021007                        removeOverlay(o);
    10031008                }
    1004                
     1009
    10051010        }
    10061011
     
    10101015                return l;
    10111016        }
    1012        
    1013         /**
    1014          * @return All overlays seen by this frame (including its overlays' overlays).
     1017
     1018        /**
     1019         * @return All overlays seen by this frame (including its overlays'
     1020         *         overlays).
    10151021         */
    10161022        public List<Overlay> getOverlaysDeep() {
     
    10191025                return l;
    10201026        }
    1021        
    1022         private boolean getOverlaysDeep(List<Overlay> overlays, Frame overlay, List<Frame> seenOverlays) {
    1023 
    1024                         if (seenOverlays.contains(overlay))
    1025                                 return false;
    1026 
    1027                         seenOverlays.add(overlay);
    1028 
    1029                         for (Overlay o : overlay.getOverlays()) {
    1030                                 if (getOverlaysDeep(overlays, o.Frame, seenOverlays)) {
    1031                                         overlays.add(o);
    1032                                 }
    1033                         }
    1034                        
    1035                         return true;
    1036         }
    1037        
     1027
     1028        private boolean getOverlaysDeep(List<Overlay> overlays, Frame overlay,
     1029                        List<Frame> seenOverlays) {
     1030
     1031                if (seenOverlays.contains(overlay))
     1032                        return false;
     1033
     1034                seenOverlays.add(overlay);
     1035
     1036                for (Overlay o : overlay.getOverlays()) {
     1037                        if (getOverlaysDeep(overlays, o.Frame, seenOverlays)) {
     1038                                overlays.add(o);
     1039                        }
     1040                }
     1041
     1042                return true;
     1043        }
     1044
    10381045        /**
    10391046         * Gets the overlay on this frame which owns the given item.
    1040          * @param item The item - must not be null.
    1041          * @return The overlay that contains the itm. Null if no overlay owns the item.
     1047         *
     1048         * @param item
     1049         *            The item - must not be null.
     1050         * @return The overlay that contains the itm. Null if no overlay owns the
     1051         *         item.
    10421052         */
    10431053        public Overlay getOverlayOwner(Item item) {
    1044                 if (item == null) throw new NullPointerException("item");
     1054                if (item == null)
     1055                        throw new NullPointerException("item");
    10451056                List<Overlay> overlays = getOverlaysDeep();
    10461057                for (Overlay l : overlays) {
    1047                         //if (l.Frame.containsItem(item)) return l;
    1048                         if (item.getParent() == l.Frame) return l;
    1049                 }
    1050                
     1058                        // if (l.Frame.containsItem(item)) return l;
     1059                        if (item.getParent() == l.Frame)
     1060                                return l;
     1061                }
     1062
    10511063                return null;
    10521064        }
     
    10891101                List<Item> copies = ItemUtils.CopyItems(toMergeWith.getItems());
    10901102                copies.remove(toMergeWith.getFrameNameItem());
    1091                
     1103
    10921104                for (Item i : copies) {
    10931105                        if (i.getID() >= 0) {
     
    11431155        /**
    11441156         * Creates a new text item with the given text.
     1157         *
    11451158         * @param text
    11461159         * @return
Note: See TracChangeset for help on using the changeset viewer.