Changeset 34


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

Legend:

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

    r25 r34  
    99import java.awt.Toolkit;
    1010import java.awt.image.MemoryImageSource;
     11import java.util.LinkedList;
    1112import java.util.List;
    1213import java.util.Stack;
     
    342343                        _CurrentFrames[getCurrentSide()] = frame;
    343344
    344                         // BROOK
     345                        // BROOK : TODO...
    345346                        for (Item i : _CurrentFrames[getCurrentSide()].getItems()) {
    346                                 i.onParentFameShown();
     347                                i.onParentFameShown(false, 0);
    347348                        }
    348349                } else {
     350
    349351                        // Notifying items on the frame being hidden that they
    350352                        // are about to be hidden.
    351                         // ie. Widgets use this method to remove themselves from
    352                         // the JPanel
     353                        // ie. Widgets use this method to remove themselves from the JPanel
     354                        List<Frame> currentOnlyOverlays = new LinkedList<Frame>();
     355                        List<Frame> nextOnlyOverlays = new LinkedList<Frame>();
     356                        List<Frame> sharedOverlays = new LinkedList<Frame>();
     357
     358                        // Get all overlayed frames seen by the next frame
     359                        for (Overlay o : frame.getOverlaysDeep()) {
     360                                if (!nextOnlyOverlays.contains(o))
     361                                        nextOnlyOverlays.add(o.Frame);
     362                        }
     363
     364                        // Get all overlayed frames seen by the current frame
    353365                        if (_CurrentFrames[getCurrentSide()] != null) {
    354                                 for (Item i : _CurrentFrames[getCurrentSide()].getItems()) {
     366                                for (Overlay o : _CurrentFrames[getCurrentSide()]
     367                                                .getOverlaysDeep()) {
     368                                        if (!currentOnlyOverlays.contains(o))
     369                                                currentOnlyOverlays.add(o.Frame);
     370                                }
     371                        }
     372
     373                        // Extract shared overlays between the current and next frame
     374                        for (Frame of : currentOnlyOverlays) {
     375                                if (nextOnlyOverlays.contains(of)) {
     376                                        sharedOverlays.add(of);
     377                                }
     378                        }
     379
     380                        // The first set, currentOnlyOverlays, must be notified that they
     381                        // are hidden
     382                        List<Item> items = new LinkedList<Item>();
     383
     384                        // Notify items that will not be in view any more
     385                        if (_CurrentFrames[getCurrentSide()] != null) {
     386                                List<Frame> seen = new LinkedList<Frame>();
     387                                seen.addAll(sharedOverlays); // Signify that seen all shared
     388                                                                                                // overlays
     389                                seen.remove(_CurrentFrames[getCurrentSide()]); // must ensure
     390                                                                                                                                // excluded
     391
     392                                // Get all items seen from the current frame - including all
     393                                // possible non-shared overlays
     394                                FrameGraphics.AddAllOverlayItems(items,
     395                                                _CurrentFrames[getCurrentSide()], seen);
     396
     397                                // Notify items that they are hidden
     398                                for (Item i : items) {
    355399                                        i.onParentFameHidden();
    356400                                }
    357401                        }
    358402
     403                        // Set the new frame
    359404                        _CurrentFrames[getCurrentSide()] = frame;
    360405                        frame.setMaxSize(FrameGraphics.getMaxFrameSize());
     
    362407                        // Notify items on the frame being displayed that they are in view
    363408                        // ie. widgets use this method to add themselves to the content pane
    364                         for (Item i : _CurrentFrames[getCurrentSide()].getItems()) {
    365                                 i.onParentFameShown();
     409                        items.clear();
     410
     411                        // Get all items seen from the new frame - including all possible
     412                        // non-shared overlays
     413                        FrameGraphics.AddAllOverlayItems(items,
     414                                        _CurrentFrames[getCurrentSide()], new LinkedList<Frame>());
     415
     416                        // Seperate current frames items from its overlayed items
     417                        List<Item> nonOverlayItems = _CurrentFrames[getCurrentSide()]
     418                                        .getItems();
     419                        items.removeAll(nonOverlayItems);
     420
     421                        // Notify overlay items that they are shown
     422                        for (Item i : items) {
     423                                Overlay owner = _CurrentFrames[getCurrentSide()]
     424                                                .getOverlayOwner(i);
     425                                // if (owner == null) i.onParentFameShown(false, 0);
     426                                // else ...
     427                                assert (owner != null);
     428                                i.onParentFameShown(true, owner.Level);
     429                        }
     430
     431                        // Notify non-overlay items that they are shown
     432                        for (Item i : nonOverlayItems) {
     433                                i.onParentFameShown(false, 0);
    366434                        }
    367435                }
Note: See TracChangeset for help on using the changeset viewer.