Changeset 55


Ignore:
Timestamp:
05/16/08 10:49:10 (16 years ago)
Author:
davidb
Message:

Fixed bug with widgets movement and scaling

Location:
trunk/src/org/expeditee
Files:
1 added
4 edited

Legend:

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

    r50 r55  
    1616
    1717import org.expeditee.items.Item;
     18import org.expeditee.items.ItemParentStateChangedEvent;
    1819import org.expeditee.items.Picture;
    1920import org.expeditee.stats.SessionStats;
     
    338339                                        && _CurrentFrames[0] != _CurrentFrames[1]) {
    339340                                for (Item i : _CurrentFrames[getCurrentSide()].getItems()) {
    340                                         i.onParentFameHidden();
     341                                        i.onParentStateChanged(new ItemParentStateChangedEvent(
     342                                                        _CurrentFrames[getCurrentSide()],
     343                                                        ItemParentStateChangedEvent.EVENT_TYPE_HIDDEN));
    341344                                }
    342345                        }
     
    345348                        // BROOK : TODO...
    346349                        for (Item i : _CurrentFrames[getCurrentSide()].getItems()) {
    347                                 i.onParentFameShown(false, 0);
     350                                i.onParentStateChanged(new ItemParentStateChangedEvent(
     351                                                _CurrentFrames[getCurrentSide()],
     352                                                ItemParentStateChangedEvent.EVENT_TYPE_SHOWN));
    348353                        }
    349354                } else {
     
    397402                                // Notify items that they are hidden
    398403                                for (Item i : items) {
    399                                         i.onParentFameHidden();
     404                                        i.onParentStateChanged(new ItemParentStateChangedEvent(
     405                                                        _CurrentFrames[getCurrentSide()],
     406                                                        ItemParentStateChangedEvent.EVENT_TYPE_HIDDEN));
    400407                                }
    401408                        }
     
    426433                                // else ...
    427434                                assert (owner != null);
    428                                 i.onParentFameShown(true, owner.Level);
     435                                i.onParentStateChanged(new ItemParentStateChangedEvent(
     436                                                _CurrentFrames[getCurrentSide()],
     437                                                ItemParentStateChangedEvent.EVENT_TYPE_SHOWN_VIA_OVERLAY,
     438                                                owner.Level));
    429439                        }
    430440
    431441                        // Notify non-overlay items that they are shown
    432442                        for (Item i : nonOverlayItems) {
    433                                 i.onParentFameShown(false, 0);
     443                                i.onParentStateChanged(new ItemParentStateChangedEvent(
     444                                                _CurrentFrames[getCurrentSide()],
     445                                                ItemParentStateChangedEvent.EVENT_TYPE_SHOWN));
    434446                        }
    435447                }
  • trunk/src/org/expeditee/items/InteractiveWidget.java

    r28 r55  
    3535        private WidgetEdge _l1, _l2, _l3, _l4;
    3636
    37         /* GUIDE:
    38          *                       l1
    39          *              d1-------d2
    40          *              |         |
    41          *   l4 |    X    | 12
    42          *              |         |
    43          *              d4-------d3
    44      *           13
     37        /*
     38         * GUIDE: l1 d1-------d2 | | l4 | X | 12 | | d4-------d3 13
    4539         */
    4640        private List<Item> _items; // used for quickly returning item list
     
    112106
    113107                int index = text.indexOf(':'); // used for signifying start of
    114                                                                                 // arguments
     108                // arguments
    115109                if (index == 0)
    116110                        throw new IllegalArgumentException("Source text must begin with \""
     
    400394
    401395        /**
     396         * This is for consistancy and to make the code clearer.
     397         *
     398         * @return the corner chosen to listen for events from.
     399         */
     400        private WidgetCorner getEventCorner() {
     401                return _d4;
     402        }
     403
     404        /**
    402405         * @return A copy of this widget
    403406         */
     
    504507                _d3.setFloating(vfloating[2]);
    505508                _d4.setFloating(vfloating[3]);
    506 
     509               
    507510        }
    508511
     
    540543         * @param x
    541544         * @param y
    542          * @return True if need to call super.setPosition
     545         * @return False if need to call super.setPosition
    543546         */
    544547        boolean setPositions(WidgetCorner src, int x, int y) {
     
    707710        }
    708711
    709         public final void onParentFameHidden(WidgetCorner notifier) {
    710                 onRemovedFromFrame(notifier);
    711         }
    712 
    713         public final void onParentFameShown(WidgetCorner notifier,
    714                         boolean isOverlayed, int overlayLevel) {
    715                 addJComponantToFrame(notifier, isOverlayed, overlayLevel, true);
    716         }
    717 
    718         public void onRemovedFromFrame(WidgetCorner notifier) {
    719                 if (notifier == _d4) {
     712        public void onParentStateChanged(ItemParentStateChangedEvent e) {
     713                switch (e.getEventType()) {
     714
     715                case ItemParentStateChangedEvent.EVENT_TYPE_REMOVED:
     716                case ItemParentStateChangedEvent.EVENT_TYPE_REMOVED_VIA_OVERLAY:
     717                case ItemParentStateChangedEvent.EVENT_TYPE_HIDDEN:
    720718                        if (_component.getParent() != null) {
    721719                                _component.getParent().remove(_component);
    722720                        }
    723                 }
    724         }
    725 
    726         public void onAddedToFrame(WidgetCorner notifier, boolean isOverlayed,
    727                         int overlayLevel) {
    728                 addJComponantToFrame(notifier, isOverlayed, overlayLevel, false);
    729         }
    730 
    731         private void addJComponantToFrame(WidgetCorner notifier,
    732                         boolean isOverlayed, int overlayLevel, boolean isShown) {
    733                 if (notifier == _d4) {
    734                         if (isOverlayed && overlayLevel == Item.PERMISSION_NONE)
    735                                 return; // non-active overlays
    736 
     721                        break;
     722
     723                case ItemParentStateChangedEvent.EVENT_TYPE_ADDED:
     724                case ItemParentStateChangedEvent.EVENT_TYPE_ADDED_VIA_OVERLAY:
     725                case ItemParentStateChangedEvent.EVENT_TYPE_SHOWN:
     726                case ItemParentStateChangedEvent.EVENT_TYPE_SHOWN_VIA_OVERLAY:
    737727                        if (_component.getParent() == null) {
    738                                 if (Browser._theBrowser != null) {
    739                                         // Due to precaching - before adding physical swing
    740                                         // componant must check
    741                                         // to see that this widget belongs to a frame that is
    742                                         // considered current.
    743                                         // If the widget is shown however this does not apply -
    744                                         // since it has been explicitly
    745                                         // made clear the the widget is shown.
    746                                         if (isShown
    747                                                         || _d1.getParent() == DisplayIO.getCurrentFrame()) {
    748                                                 Browser._theBrowser.getContentPane().add(_component);
    749                                                 layout(_component);
    750                                         }
    751 
    752                                 } else { // if widgets exist on startup frame this will occur
    753 
    754                                         synchronized (_widgetsToAddLater) {
    755                                                 _widgetsToAddLater.add(new WidgetInfo(notifier,
    756                                                                 isOverlayed, overlayLevel, this));
    757                                         }
    758                                         SwingUtilities.invokeLater(new AddToFrameLater());
    759                                 }
    760                         }
    761                 }
     728                                addJComponantToFrame(e);
     729                        }
     730                        break;
     731
     732                }
     733        }
     734
     735        protected void addJComponantToFrame(ItemParentStateChangedEvent e) {
     736
     737                if ((e.getEventType() == ItemParentStateChangedEvent.EVENT_TYPE_ADDED_VIA_OVERLAY || e
     738                                .getEventType() == ItemParentStateChangedEvent.EVENT_TYPE_SHOWN_VIA_OVERLAY)
     739                                && e.getOverlayLevel() == Item.PERMISSION_NONE) {
     740                        return; // item belongs to a non-active overlay
     741                }
     742
     743                if (_component.getParent() == null) {
     744
     745                        if (Browser._theBrowser != null) {
     746                                // Due to precaching - before adding physical swing
     747                                // componant must check to see that this widget belongs to a
     748                                // frame that is
     749                                // considered current. If the widget is shown however this does
     750                                // not apply -
     751                                // since it has been explicitly made clear the the widget is
     752                                // shown.
     753                                if (e.getEventType() == ItemParentStateChangedEvent.EVENT_TYPE_SHOWN
     754                                                || e.getEventType() == ItemParentStateChangedEvent.EVENT_TYPE_SHOWN_VIA_OVERLAY
     755                                                || e.getSource() == DisplayIO.getCurrentFrame()) {
     756                                        Browser._theBrowser.getContentPane().add(_component);
     757                                        layout(_component);
     758                                }
     759
     760                        } else { // if widgets exist on startup frame this will occur
     761
     762                                synchronized (_widgetsToAddLater) {
     763                                        _widgetsToAddLater.add(new WidgetInfo(this, e));
     764                                }
     765                                SwingUtilities.invokeLater(new AddToFrameLater());
     766                        }
     767
     768                }
     769
    762770        }
    763771
     
    769777        class WidgetInfo {
    770778
    771                 WidgetInfo(WidgetCorner notifier, boolean isOverlayed,
    772                                 int overlayLevel, InteractiveWidget widget) {
     779                WidgetInfo(InteractiveWidget widget, ItemParentStateChangedEvent e) {
    773780                        _widget = widget;
    774                         _isOverlayed = isOverlayed;
    775                         _overlayLevel = overlayLevel;
    776                         _notifier = notifier;
     781                        _e = e;
    777782                }
    778783
    779784                InteractiveWidget _widget;
    780785
    781                 boolean _isOverlayed;
    782 
    783                 int _overlayLevel;
    784 
    785                 WidgetCorner _notifier;
     786                ItemParentStateChangedEvent _e;
    786787        }
    787788
     
    804805                                _widgetsToAddLater.clear();
    805806                                for (WidgetInfo iwi : tmp) {
    806                                         iwi._widget.onAddedToFrame(iwi._notifier, iwi._isOverlayed,
    807                                                         iwi._overlayLevel);
     807                                        iwi._widget.addJComponantToFrame(iwi._e);
    808808                                }
    809809                        }
  • trunk/src/org/expeditee/items/Item.java

    r50 r55  
    14291429                return _visible;
    14301430        }
    1431 
    1432         // BROOK: Overrideable
    1433         public void onRemovedFromFrame() {
    1434         }
    1435 
    1436         public void onAddedToFrame(boolean isOverlayed, int overlayLevel) {
    1437         }
    1438 
    1439         public void onParentFameHidden() {
    1440         } // because of caching
    1441 
    1442         public void onParentFameShown(boolean isOverlayed, int overlayLevel) {
    1443         } // because of caching
    1444 
     1431       
     1432        /**
     1433         * Raised whenever the item is removed, added, no longer in view (That is, when it is
     1434         * not on any of the current frames, of overlays of the current frames) or
     1435         * has become visible. That is, when it is either on a current frames, or an overlay of a current frame.
     1436         * @param e The event
     1437         */
     1438        public void onParentStateChanged(ItemParentStateChangedEvent e) {}
     1439       
    14451440        public void setSelectedMode(SelectedMode mode, Color color) {
    14461441                setSelectionColor(color);
  • trunk/src/org/expeditee/items/WidgetCorner.java

    r28 r55  
    3030
    3131        @Override
    32         public void onParentFameHidden() {
    33                 super.onParentFameHidden();
    34                 _widgetSource.onParentFameHidden(this);
    35         }
    36 
    37         @Override
    38         public void onParentFameShown(boolean isOverlayed, int overlayLevel) {
    39                 super.onParentFameShown(isOverlayed, overlayLevel);
    40                 _widgetSource.onParentFameShown(this, isOverlayed, overlayLevel);
    41         }
    42 
    43         @Override
    44         public void onRemovedFromFrame() {
    45                 super.onRemovedFromFrame();
    46                 _widgetSource.onRemovedFromFrame(this);
    47         }
    48 
    49         @Override
    50         public void onAddedToFrame(boolean isOverlayed, int overlayLevel) {
    51                 super.onAddedToFrame(isOverlayed, overlayLevel);
    52                 _widgetSource.onAddedToFrame(this, isOverlayed, overlayLevel);
     32        public void onParentStateChanged(ItemParentStateChangedEvent e) {
     33                super.onParentStateChanged(e);
     34                _widgetSource.onParentStateChanged(e);
    5335        }
    5436
Note: See TracChangeset for help on using the changeset viewer.