Changeset 1415 for trunk/src/org/expeditee/gui
- Timestamp:
- 07/24/19 11:23:45 (5 years ago)
- Location:
- trunk/src/org/expeditee/gui
- Files:
-
- 1 added
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/expeditee/gui/AttributeUtils.java
r1405 r1415 19 19 package org.expeditee.gui; 20 20 21 import java.lang.reflect.Field; 21 22 import java.lang.reflect.InvocationTargetException; 22 23 import java.lang.reflect.Method; … … 331 332 _Attrib.put("TabIndex", Text.class.getMethod("getTabIndex"), 332 333 Text.class.getMethod("setTabIndex", pInt)); 334 _Attrib.put("EnterClick", Item.class.getMethod("acceptsKeyboardEnter"), 335 Item.class.getMethod("setAcceptsEnter", pBool)); 333 336 334 337 // Aliases for attribute setting … … 566 569 sb.deleteCharAt(sb.length() - 1); 567 570 o = sb.toString(); 568 } else if (o instanceof Boolean) { 569 // true is the default for boolean values 570 if (((Boolean) o).booleanValue()) { 571 return null; 571 } else if (o instanceof Boolean) { 572 try { 573 Class<?> parentClass = item.getClass(); 574 Field defaultValueField = parentClass.getField(a.getter.getName() + "Default"); 575 boolean defaultValue = defaultValueField.getBoolean(null); 576 if (defaultValue == (boolean) o) { 577 return null; 578 } 579 } catch (IllegalArgumentException e) { 580 e.printStackTrace(); 581 } catch (SecurityException e) { 582 e.printStackTrace(); 583 } catch (NoSuchFieldException e) { 584 // true is the default for boolean values when no other default is provided 585 if ((boolean) o) { 586 return null; 587 } 588 } catch (IllegalAccessException e) { 589 e.printStackTrace(); 572 590 } 573 591 } -
trunk/src/org/expeditee/gui/Browser.java
r1329 r1415 274 274 if (!AuthenticatorBrowser.isAuthenticationRequired() && UserSettings.PublicAndPrivateResources) { 275 275 String userName = UserSettings.ProfileName.get(); 276 FrameIO.setupPersonalResources(userName); 276 if (!FrameIO.personalResourcesExist(userName)) { 277 FrameIO.setupPersonalResources(userName); 278 } 277 279 } 278 280 // Listen for save status to display during and after runtime -
trunk/src/org/expeditee/gui/DisplayController.java
r1413 r1415 583 583 // frames differ. 584 584 if (getCurrentFrame() != null && !bothSidesHaveSameFrame()) { 585 for (Item i : getCurrentFrame().get Items()) {585 for (Item i : getCurrentFrame().getSortedItems()) { 586 586 i.onParentStateChanged(new ItemParentStateChangedEvent(getCurrentFrame(), ItemParentStateChangedEvent.EVENT_TYPE_HIDDEN)); 587 587 } … … 590 590 591 591 // BROOK : TODO... overlays and loadable widgets 592 for (Item i : getCurrentFrame().get Items()) {592 for (Item i : getCurrentFrame().getSortedItems()) { 593 593 i.onParentStateChanged(new ItemParentStateChangedEvent(getCurrentFrame(), ItemParentStateChangedEvent.EVENT_TYPE_SHOWN)); 594 594 } … … 671 671 } 672 672 673 for (Item i : frame.get Items()) {673 for (Item i : frame.getSortedItems()) { 674 674 i.onParentStateChanged(new ItemParentStateChangedEvent(frame, 675 675 ItemParentStateChangedEvent.EVENT_TYPE_SHOWN)); … … 925 925 StandardGestureActions.setHighlightHold(true); 926 926 927 for (Item i : frame.get Items()) {927 for (Item i : frame.getSortedItems()) { 928 928 if (i.getLink() != null && i.getAbsoluteLink().toLowerCase().equals(oldFrame)) { 929 929 if (i.getHighlightMode() != Item.HighlightMode.Normal) { … … 1131 1131 } else { 1132 1132 ToggleAudienceMode(); 1133 ItemUtils.UpdateConnectedToAnnotations(current.get Items());1133 ItemUtils.UpdateConnectedToAnnotations(current.getSortedItems()); 1134 1134 for (Overlay o : current.getOverlays()) { 1135 ItemUtils.UpdateConnectedToAnnotations(o.Frame.get Items());1135 ItemUtils.UpdateConnectedToAnnotations(o.Frame.getSortedItems()); 1136 1136 } 1137 1137 for (Vector v : current.getVectorsDeep()) { 1138 ItemUtils.UpdateConnectedToAnnotations(v.Frame.get Items());1138 ItemUtils.UpdateConnectedToAnnotations(v.Frame.getSortedItems()); 1139 1139 } 1140 1140 } … … 1207 1207 * This results in the Frame being re-parsed and repainted. 1208 1208 */ 1209 public static void ToggleXRayMode() 1210 { 1209 public static void ToggleXRayMode() { 1211 1210 // Turn off x-ray mode if it is on 1212 1211 if (_audienceMode) { -
trunk/src/org/expeditee/gui/Frame.java
r1414 r1415 77 77 * 78 78 */ 79 public class Frame /*implements Cloneable*/{79 public class Frame { 80 80 81 81 /** The frame number to indicate this is a virtual frame. */ … … 126 126 127 127 private boolean _isLocal = true; 128 129 private boolean _sorted = true;130 128 131 129 /** Whether the frame has changed and therefore needs saving. */ … … 139 137 private Stack<History> _redo = new Stack<History>(); 140 138 141 private List<Item> _body = new ArrayList<Item>(); 142 private List<Item> _bodyHiddenDueToPermissions = new ArrayList<Item>(); 143 private List<Item> _surrogates = new ArrayList<Item>(); 139 private ItemsList _body = new ItemsList(); 140 private ItemsList _bodyHiddenDueToPermissions = new ItemsList(); 141 private ItemsList _primaryItemsBody = new ItemsList(); 142 private ItemsList _surrogateItemsBody = new ItemsList(); 143 144 //private List<Item> _body = new ArrayList<Item>(); 145 //private List<Item> _bodyHiddenDueToPermissions = new ArrayList<Item>(); 146 //private List<Item> _primaryItemsBody = new ArrayList<Item>(); 147 //private List<Item> _surrogateItemsBody = new ArrayList<Item>(); 144 148 145 149 // for drawing purposes … … 184 188 private String _groupFrameName; 185 189 private Frame _groupFrame = null; 190 191 public enum BodyType { 192 BodyDisplay, PrimaryBody, SurrogateBody; 193 } 186 194 187 195 /** Default constructor, nothing is set. */ 188 196 public Frame() { 189 197 } 190 191 // public Frame clone() { 192 // Frame clone = new Frame(); 193 // for (Item i: this._body) { 194 // Item copy = i.copy(); 195 // copy.setID(i.getID()); 196 // clone._body.add(copy); 197 // } 198 // for(Item i: this._bodyHiddenDueToPermissions) { 199 // Item copy = i.copy(); 200 // copy.setID(i.getID()); 201 // clone._bodyHiddenDueToPermissions.add(i); 202 // } 203 // if (this._frameName != null) { 204 // clone._frameName = this._frameName.copy(); 205 // } 206 // for(Overlay key: this._overlays.keySet()) { 207 // clone._overlays.put(key, this._overlays.get(key)); 208 // } 209 // for(Vector v: this._vectors) { 210 // clone._vectors.add(v); 211 // } 212 // for (Item i: this._interactableItems) { 213 // clone._interactableItems.add(i.copy()); 214 // } 215 // for (Item i: this._overlayItems) { 216 // clone._overlayItems.add(i.copy()); 217 // } 218 // for (Item i: this._vectorItems) { 219 // clone._vectorItems.add(i.copy()); 220 // } 221 // clone._frameData = this._frameData; 222 // clone._frameset = this._frameset; 223 // clone._number = this._number; 224 // clone._version = this._version; 225 // clone._permissionTriple = this._permissionTriple; 226 // clone._owner = this._owner; 227 // clone._creationDate = this._creationDate; 228 // clone._modifiedUser = this._modifiedUser; 229 // clone._modifiedDate = this._modifiedDate; 230 // clone._modifiedDatePrecise = this._modifiedDatePrecise; 231 // clone._frozenDate = this._frozenDate; 232 // clone._background = this._background; 233 // clone._foreground = this._foreground; 234 // clone.path = this.path; 235 // clone._isLocal = this._isLocal; 236 // clone._sorted = this._sorted; 237 // clone._change = this._change; 238 // clone._saved = this._saved; 239 // clone._lineCount = this._lineCount; 240 // clone._itemCount = this._itemCount; 241 // clone._buffer = this._buffer; 242 // clone._validBuffer = this._validBuffer; 243 // clone._activeTime = (Time) this._activeTime.clone(); 244 // clone._darkTime = (Time) this._darkTime.clone(); 245 // clone._dotTemplate = this._dotTemplate.copy(); 246 // 247 // return clone; 248 // } 249 250 public boolean isReadOnly() 251 { 198 199 public boolean isReadOnly() { 252 200 return !_frameName.hasPermission(UserAppliedPermission.full) && !_protectionChanged; 253 201 } 254 202 255 public void reset() 256 { 203 public void reset() { 257 204 refreshItemPermissions(UserAppliedPermission.full); 258 205 resetDot(); … … 403 350 * @return The list of Item objects that are on this Frame. 404 351 */ 405 public List<Item> getItems(boolean visible) 406 { 407 if (!_sorted) { 408 for(int i = 0; i < _body.size();) { 409 if(_body.get(i) == null) { 410 _body.remove(i); 411 } else { 412 i++; 413 } 414 } 415 Collections.sort(_body); 416 _sorted = true; 417 } 418 352 public List<Item> getSortedItems(boolean requireVisible) { 353 ItemsList listToLoopOver = _body; 354 listToLoopOver.sort(); 355 return getItems(requireVisible, listToLoopOver); 356 } 357 358 public List<Item> getItems(boolean requireVisible, ItemsList listToLoopOver) { 419 359 List<Item> items = new ArrayList<Item>(); 420 360 421 for (Item i : _body) {361 for (Item i: listToLoopOver) { 422 362 if (i == null) { 423 363 continue; 424 364 } 425 365 426 if ( i.isVisible() || (!visible && !i.isDeleted())) {366 if (meetsVisibilityRequirements(requireVisible, i)) { 427 367 items.add(i); 428 368 } … … 431 371 return items; 432 372 } 433 373 434 374 /** TODO: Comment. cts16 */ 435 public List<Item> get Items()436 { 437 return get Items(false);375 public List<Item> getSortedItems() 376 { 377 return getSortedItems(false); 438 378 } 439 379 … … 443 383 * @return True if this frame contains i. 444 384 */ 445 public boolean containsItem(Item i) 446 { 385 public boolean containsItem(Item i) { 447 386 if (i == null) { 448 387 throw new NullPointerException("i"); 449 } 450 388 } 451 389 return _body.contains(i); 452 390 } … … 468 406 List<Text> bodyTextItems = new ArrayList<Text>(); 469 407 470 for (Item i : get Items(true)) {408 for (Item i : getSortedItems(true)) { 471 409 // only add up normal body text items 472 410 if ((i instanceof Text) && ((includeAnnotations && !((Text) i).isSpecialAnnotation()) || !i.isAnnotation()) && !i.isLineEnd()) { … … 483 421 { 484 422 Collection<Item> items = new ArrayList<Item>(); 485 for (Item i : get Items(true)) {423 for (Item i : getSortedItems(true)) { 486 424 // only add up normal body text items 487 425 if (!i.isAnnotation()) { … … 505 443 public Item getLastNonAnnotationTextItem() 506 444 { 507 List<Item> items = get Items();445 List<Item> items = getSortedItems(); 508 446 509 447 // find the last non-annotation text item … … 910 848 * The date to set as the last frozen date. 911 849 */ 912 public void setFrozenDate(String date) 850 public void setFrozenDate(String date) { 913 851 _frozenDate = date; 914 852 } 915 853 916 public void setResort(boolean value) 917 { 918 _sorted = !value; 854 public void invalidateSorted() { 855 _body.invalidateSorted(); 919 856 } 920 857 … … 925 862 * The Item to add to this Frame. 926 863 */ 927 public void addItem(Item item) 928 { 864 public void addItem(Item item) { 929 865 addItem(item, true); 930 866 } 931 867 932 public void addItem(Item item, boolean recalculate) 933 { 934 if (item == null || item.equals(_frameName) || _body.contains(item)) { 868 public void addItem(Item item, boolean recalculate) { 869 if (item == null) { return; } 870 871 addItem(item, recalculate, _body); 872 if (item.isSurrogate()) { 873 addItem(item, recalculate, _surrogateItemsBody); 874 } else { 875 addItem(item, recalculate, _primaryItemsBody); 876 } 877 } 878 879 protected void addItem(Item item, boolean recalculate, ItemsList list) { 880 if (item == null || item.equals(_frameName) || list.contains(item)) { 935 881 return; 936 882 } … … 948 894 _itemCount = Math.max(_itemCount, item.getID()); 949 895 950 _body.add(item);896 list.add(item); 951 897 item.setParent(this); 952 898 item.setFloating(false); // esnure that it is anchored … … 959 905 item.setPosition(item.getPosition()); 960 906 } 961 962 _sorted = false;907 908 list.invalidateSorted(); 963 909 964 910 // item.setMaxWidth(FrameGraphics.getMaxFrameSize().width); … … 983 929 } 984 930 985 public void addToSurrogates (Item surrogate) {986 this._surrogates.add(surrogate);931 public void addToSurrogatesOnLoad(Item surrogate, Item parent) { 932 parent.addToSurrogates(surrogate); 987 933 } 988 934 … … 991 937 boolean bReparse = false; 992 938 993 for (Item i : get Items()) {939 for (Item i : getSortedItems()) { 994 940 Integer anchorLeft = i.getAnchorLeft(); 995 941 Integer anchorRight = i.getAnchorRight(); … … 1039 985 } 1040 986 1041 public void addAllItems(Collection<Item> toAdd) 1042 { 987 public void addAllItems(Collection<Item> toAdd) { 988 addAllItems(toAdd, _body); 989 addAllItems(toAdd, _primaryItemsBody); 990 } 991 992 protected void addAllItems(Collection<Item> toAdd, ItemsList list) { 1043 993 for (Item i : toAdd) { 1044 994 // If an annotation is being deleted clear the annotation list … … 1047 997 } 1048 998 // TODO Improve efficiency when addAll is called 1049 addItem(i); 1050 } 1051 } 1052 1053 public void removeAllItems(Collection<Item> toRemove) 1054 { 999 addItem(i, true, list); 1000 } 1001 } 1002 1003 public void removeAllItems(Collection<Item> toRemove) { 1055 1004 for (Item i : toRemove) { 1056 1005 // If an annotation is being deleted clear the annotation list … … 1066 1015 } 1067 1016 1068 public void removeItem(Item item, boolean recalculate) 1069 { 1017 public void removeItem(Item item, boolean recalculate) { 1018 removeItem(item, recalculate, _body); 1019 if (item.isSurrogate()) { 1020 removeItem(item, recalculate, _surrogateItemsBody); 1021 } else { 1022 removeItem(item, recalculate, _primaryItemsBody); 1023 } 1024 } 1025 1026 protected void removeItem(Item item, boolean recalculate, ItemsList toRemoveFrom) { 1070 1027 // If an annotation is being deleted clear the annotation list 1071 1028 if (item.isAnnotation()) { … … 1073 1030 } 1074 1031 1075 if ( _body.remove(item)) {1032 if (toRemoveFrom.remove(item)) { 1076 1033 change(); 1077 1034 // Remove widgets from the widget list … … 1098 1055 * @param type The type of event that occurred 1099 1056 */ 1100 private void addToUndo(Collection<Item> items, History.Type type) 1101 { 1057 private void addToUndo(ItemsList items, History.Type type) { 1102 1058 if (items.size() < 1) { 1103 1059 return; … … 1107 1063 } 1108 1064 1109 public void addToUndoDelete(Collection<Item> items) 1110 { 1065 public void addToUndoDelete(ItemsList items) { 1111 1066 addToUndo(items, History.Type.deletion); 1112 1067 } 1113 1068 1114 public void addToUndoMove(Collection<Item> items) 1115 { 1069 public void addToUndoMove(ItemsList items) { 1116 1070 addToUndo(items, History.Type.movement); 1117 1071 } … … 1147 1101 break; 1148 1102 case movement: 1149 List<Item> changed = new LinkedList<Item>(_body);1150 changed.retain All(undo.items);1103 ItemsList changed = new ItemsList(_body); 1104 changed.retainHistory(undo.items); 1151 1105 _redo.push(new History(changed, History.Type.movement)); 1152 1106 for(Item i : undo.items) { … … 1207 1161 break; 1208 1162 case movement: 1209 List<Item> changed = new LinkedList<Item>(_body);1210 changed.retain All(redo.items);1163 ItemsList changed = new ItemsList(_body); 1164 changed.retainHistory(redo.items); 1211 1165 _undo.push(new History(changed, History.Type.movement)); 1212 1166 for(Item i : redo.items) { … … 1677 1631 { 1678 1632 for (Overlay o : _overlays.keySet()) { 1679 for (Item i : o.Frame.get Items()) {1633 for (Item i : o.Frame.getSortedItems()) { 1680 1634 i.onParentStateChanged(new ItemParentStateChangedEvent( 1681 1635 this, … … 1695 1649 _overlays.remove(o); 1696 1650 1697 for (Item i : f.get Items()) {1651 for (Item i : f.getSortedItems()) { 1698 1652 _overlayItems.remove(i); 1699 1653 i.onParentStateChanged(new ItemParentStateChangedEvent( … … 1788 1742 } 1789 1743 1790 List<Item> copies = ItemUtils.CopyItems(toMergeWith.get Items());1744 List<Item> copies = ItemUtils.CopyItems(toMergeWith.getSortedItems()); 1791 1745 copies.remove(toMergeWith.getNameItem()); 1792 1746 … … 1834 1788 public void clear(boolean keepAnnotations) 1835 1789 { 1836 List<Item> newBody = new ArrayList<Item>(0);1790 ItemsList newBody = new ItemsList(); 1837 1791 1838 1792 Item title = getTitleItem(); … … 2010 1964 // reset attributes 2011 1965 dot.setParent(this); 1966 dot.setOwner(template.getOwner()); 2012 1967 return dot; 2013 1968 } … … 2018 1973 2019 1974 // check for an updated template... 2020 for (Item i : this.get Items()) {1975 for (Item i : this.getSortedItems()) { 2021 1976 if (ItemUtils.startsWithTag(i, templateTag)) { 2022 1977 t = (Text) i; … … 2032 1987 t = defaultTemplate; 2033 1988 } 2034 1989 2035 1990 // If the item is linked apply any attribute pairs on the child frame 2036 1991 String link = t.getAbsoluteLink(); … … 2038 1993 // need to get link first because copy doesnt copy the link 2039 1994 t = t.copy(); 1995 // If the template does not have a owner then it should be set to the current user. 1996 if (t.getOwner() == null) { 1997 t.setOwner(UserSettings.UserName.get()); 1998 } 2040 1999 t.setTooltip(null); 2041 2000 if (link != null) { … … 2202 2161 public boolean moveMouseToTextItem(int index) 2203 2162 { 2204 List<Item> items = get Items();2163 List<Item> items = getSortedItems(); 2205 2164 int itemsFound = 0; 2206 2165 for (int i = 0; i < items.size(); i++) { … … 2228 2187 public boolean moveMouseToDefaultLocation() 2229 2188 { 2230 List<Item> items = get Items();2189 List<Item> items = getSortedItems(); 2231 2190 2232 2191 for (Item it : items) { … … 2527 2486 public List<Item> getVisibleItems() 2528 2487 { 2529 return get Items(true);2488 return getSortedItems(true); 2530 2489 } 2531 2490 … … 2559 2518 * @return the list of items to be saved to a text file 2560 2519 */ 2561 public List<Item> getItemsToSave() {2520 /*public List<Item> getItemsToSave() { 2562 2521 if (!_sorted) { 2563 2522 Collections.sort(_body); … … 2599 2558 2600 2559 return toSave; 2601 } 2602 2603 public List<Item> getSurrogateItemsToSave() { 2604 List<Item> surrogates = new ArrayList<Item>(); 2605 _body.forEach(item -> surrogates.addAll(item.getSurrogates())); 2606 return surrogates; 2560 }*/ 2561 2562 public List<Item> getItemsToSave() { 2563 return getItemsToSave(BodyType.PrimaryBody); 2564 } 2565 2566 public List<Item> getItemsToSave(BodyType type) { 2567 assert(!type.equals(BodyType.BodyDisplay)); 2568 switch (type) { 2569 case SurrogateBody: 2570 return getItemsToSave(_surrogateItemsBody); 2571 case BodyDisplay: 2572 return getItemsToSave(_body); 2573 case PrimaryBody: 2574 default: 2575 return getItemsToSave(_primaryItemsBody); 2576 } 2577 } 2578 2579 private List<Item> getItemsToSave(ItemsList body) { 2580 body.sort(); 2581 List<Widget> seenWidgets = new ArrayList<Widget>(); 2582 2583 List<Item> toSave = new ArrayList<Item>(); 2584 2585 body.removeIf(item -> item.dontSave()); 2586 for (Item item: body) { 2587 if (item instanceof WidgetCorner) { 2588 // Save the widget source. 2589 // Each widget has multiple WidgetCorner's..ignore them if we already have the source. 2590 Widget iw = ((WidgetCorner) item).getWidgetSource(); 2591 if (seenWidgets.contains(iw)) { continue; } 2592 seenWidgets.add(iw); 2593 toSave.add(iw.getSource()); 2594 } else if (item instanceof XRayable) { 2595 // XRayable Items have their sources saved. 2596 XRayable x = (XRayable) item; 2597 toSave.addAll(x.getItemsToSave()); 2598 } else if (item.hasEnclosures()) { 2599 // Deals with Circle objects only? 2600 continue; 2601 } else { 2602 toSave.add(item); 2603 } 2604 } 2605 2606 return toSave; 2607 2607 } 2608 2608 … … 2623 2623 } 2624 2624 2625 public Collection<Item> getAllItems() 2626 { 2627 Collection<Item> allItems = new LinkedHashSet<Item>(_body); 2625 public Collection<Item> getAllItems() { 2626 ItemsList allItems = new ItemsList(_body); 2628 2627 2629 2628 allItems.addAll(_overlayItems); 2630 2629 allItems.addAll(_vectorItems); 2631 return allItems ;2630 return allItems.underlying(); 2632 2631 } 2633 2632 … … 2648 2647 Collection<Text> textItems = new ArrayList<Text>(); 2649 2648 2650 for (Item i : get Items(true)) {2649 for (Item i : getSortedItems(true)) { 2651 2650 // only add up normal body text items 2652 2651 if ((i instanceof Text)) { … … 2669 2668 public void recalculate() 2670 2669 { 2671 for (Item i : get Items()) {2670 for (Item i : getSortedItems()) { 2672 2671 if (i.hasFormula() && !i.isAnnotation()) { 2673 2672 i.calculate(i.getFormula()); … … 2700 2699 Collection<Text> items = new LinkedHashSet<Text>(); 2701 2700 2702 for (Item i : get Items(true)) {2701 for (Item i : getSortedItems(true)) { 2703 2702 // only add up normal body text items 2704 2703 if (i instanceof Text && !i.isAnnotation()) { … … 2788 2787 } 2789 2788 2790 public List<Item> getBodyItemsWithInsufficientPermissions() {2791 return _bodyHiddenDueToPermissions ;2789 public Collection<Item> getBodyItemsWithInsufficientPermissions() { 2790 return _bodyHiddenDueToPermissions.underlying(); 2792 2791 } 2793 2792 … … 2898 2897 return members; 2899 2898 } 2899 2900 public boolean hasSurrogates() { 2901 return !_surrogateItemsBody.isEmpty(); 2902 } 2903 2904 private boolean meetsVisibilityRequirements(boolean requireVisible, Item i) { 2905 return i.isVisible() || (!requireVisible && !i.isDeleted()); 2906 } 2900 2907 2901 2908 private static final class History { … … 2906 2913 } 2907 2914 2908 public final List<Item>items;2915 public final ItemsList items; 2909 2916 2910 2917 public final Type type; 2911 2918 2912 public History( Collection<Item> items, Type type)2919 public History(ItemsList changed, Type type) 2913 2920 { 2914 this.items = new LinkedList<Item>(items);2921 this.items = new ItemsList(changed); 2915 2922 this.type = type; 2916 2923 } … … 2922 2929 } 2923 2930 } 2931 2932 protected boolean hasAnnotations() { 2933 return _annotations != null && _annotations.size() > 0; 2934 } 2935 2936 protected ItemsList getBody() { 2937 return _body; 2938 } 2939 protected ItemsList getPrimaryBody() { 2940 return _primaryItemsBody; 2941 } 2942 protected ItemsList getSurrogateBody() { 2943 return _surrogateItemsBody; 2944 } 2924 2945 } -
trunk/src/org/expeditee/gui/FrameCreator.java
r1304 r1415 276 276 _lastX = START_X; 277 277 // Check for @Start 278 for (Item it : toUse.get Items()) {278 for (Item it : toUse.getSortedItems()) { 279 279 if (it instanceof Text) { 280 280 Text t = (Text) it; -
trunk/src/org/expeditee/gui/FrameGraphics.java
r1413 r1415 141 141 EcosystemManager.getGraphicsManager().clear(backgroundColor); 142 142 143 List<Item> visibleItems = new LinkedList<Item>();143 List<Item> itemsToPaintCanditates = new LinkedList<Item>(); 144 144 List<Widget> paintWidgets; 145 145 … … 147 147 // Add all the items for this frame and any other from other 148 148 // frames 149 visibleItems.addAll(toPaint.getAllItems());149 itemsToPaintCanditates.addAll(toPaint.getAllItems()); 150 150 paintWidgets = toPaint.getAllOverlayWidgets(); 151 151 paintWidgets.addAll(toPaint.getInteractiveWidgets()); 152 152 } else { 153 visibleItems.addAll(toPaint.getVisibleItems());154 visibleItems.addAll(toPaint.getVectorItems());153 itemsToPaintCanditates.addAll(toPaint.getVisibleItems()); 154 itemsToPaintCanditates.addAll(toPaint.getVectorItems()); 155 155 paintWidgets = toPaint.getInteractiveWidgets(); 156 156 } … … 181 181 182 182 if (clip == null) { 183 paintItems = visibleItems;183 paintItems = itemsToPaintCanditates; 184 184 } else { 185 185 fillOnlyItems = new HashSet<Item>(); 186 186 paintItems = new LinkedList<Item>(); 187 for (Item i : visibleItems) {187 for (Item i : itemsToPaintCanditates) { 188 188 if (clip == null || i.isInDrawingArea(clip.getBounds())) { 189 189 paintItems.add(i); … … 201 201 // Only paint files and lines once ... between anchored AND free items 202 202 PaintPictures(paintItems, fillOnlyItems, paintedFillsAndLines); 203 PaintLines( visibleItems);203 PaintLines(itemsToPaintCanditates); 204 204 205 205 … … 380 380 381 381 List<Item> toFill = new LinkedList<Item>(); 382 382 383 for (Item i : toPaint) { 383 384 // Ignore items that have already been done! -
trunk/src/org/expeditee/gui/FrameIO.java
r1406 r1415 88 88 */ 89 89 90 91 90 public class FrameIO { 92 91 … … 214 213 } 215 214 216 // public static void changeParentAndSubFolders(String newFolder) {217 // // Partial Paths.218 // PARENT_FOLDER = newFolder;219 // String resourcesPublicPath = PARENT_FOLDER + "resources-public" + File.separator;220 // String resourcesPrivateIndividualPath = PARENT_FOLDER + "resources-" + UserSettings.UserName.get() + File.separator;221 //222 // // Standard paths.223 // PUBLIC_PATH = PARENT_FOLDER + "public" + File.separator;224 // TRASH_PATH = PARENT_FOLDER + "trash" + File.separator;225 // HELP_PATH = PARENT_FOLDER + "documentation" + File.separator;226 // PROFILE_PATH = PARENT_FOLDER + "profiles" + File.separator;227 // EXPORTS_PATH = PARENT_FOLDER + "exports" + File.separator;228 // STATISTICS_PATH = PARENT_FOLDER + "statistics" + File.separator;229 // LOGS_PATH = PARENT_FOLDER + "logs" + File.separator;230 //231 //232 // // Conditional paths233 // if (UserSettings.PublicAndPrivateResources) {234 // // Work with a system of public and private folders235 //236 // FONT_PATH = resourcesPublicPath + "fonts" + File.separator;237 // DICT_PATH = resourcesPublicPath + "dict" + File.separator;238 // IMAGES_PATH = resourcesPublicPath + "images" + File.separator;239 // AUDIO_PATH = resourcesPublicPath + "audio" + File.separator;240 // FRAME_PATH = resourcesPublicPath + "framesets" + File.separator;241 // } else {242 // FONT_PATH = PARENT_FOLDER + "fonts" + File.separator;243 // DICT_PATH = PARENT_FOLDER + "dict" + File.separator;244 // IMAGES_PATH = PARENT_FOLDER + "images" + File.separator;245 // AUDIO_PATH = PARENT_FOLDER + "audio" + File.separator;246 // FRAME_PATH = PARENT_FOLDER + "framesets" + File.separator;247 // DEAD_DROPS_PATH = PARENT_FOLDER + "deaddrops" + File.separator;248 // }249 //250 // if (!UserSettings.PublicAndPrivateResources || (AuthenticatorBrowser.isAuthenticationRequired() && !AuthenticatorBrowser.isAuthenticated())) {251 //252 // if (UserSettings.UserName.get().equals(AuthenticatorBrowser.USER_NOBODY)) {253 // System.err.println("**** FrameIO::changeParentAndSubFolders(): Not setting subfolders for user '"+AuthenticatorBrowser.USER_NOBODY+"'");254 // }255 //256 // // If we are using the old regime, or user.name set to Browser.USER_NOBODY257 // // => then these paths should not be used.258 // RESOURCES_PATH = null;259 // SHARED_FRAMESETS_PATH = null;260 // RESOURCES_PRIVATE_PATH = null;261 // FRAME_PRIVATE_PATH = null;262 // IMAGES_PRIVATE_PATH = null;263 // AUDIO_PRIVATE_PATH = null;264 // CONTACTS_PATH = null;265 // HELP_PRIVATE_PATH = null;266 //267 // if (!UserSettings.PublicAndPrivateResources) {268 // MESSAGES_PATH = PARENT_FOLDER + "messages" + File.separator;269 // } else {270 // MESSAGES_PATH = resourcesPrivateIndividualPath + "messages" + File.separator;271 // }272 //273 // } else {274 // RESOURCES_PATH = resourcesPublicPath + "documentation" + File.separator;275 // SHARED_FRAMESETS_PATH = resourcesPrivateIndividualPath + "framesets-shared" + File.separator;276 //277 // RESOURCES_PRIVATE_PATH = PARENT_FOLDER + "resources-private" + File.separator;278 // FRAME_PRIVATE_PATH = resourcesPrivateIndividualPath + "framesets" + File.separator;279 // IMAGES_PRIVATE_PATH = resourcesPrivateIndividualPath + "images" + File.separator;280 // AUDIO_PRIVATE_PATH = resourcesPrivateIndividualPath + "audio" + File.separator;281 // CONTACTS_PATH = resourcesPrivateIndividualPath + "contacts" + File.separator;282 // HELP_PRIVATE_PATH = resourcesPrivateIndividualPath + "documentation" + File.separator;283 // MESSAGES_PATH = resourcesPrivateIndividualPath + "messages" + File.separator;284 // MAIL_PATH = resourcesPrivateIndividualPath + "mail" + File.separator;285 // DEAD_DROPS_PATH = resourcesPrivateIndividualPath + "deaddrops" + File.separator;286 // }287 //288 //289 // System.err.println("**** FrameIO::changeParentAndSubFolder(): Calling AudioPathManger.changeParentAndSubFolder()");290 // AudioPathManager.changeParentAndSubFolders(newFolder);291 // }292 293 215 // All methods are static, this should not be instantiated 294 216 private FrameIO() { … … 1001 923 template.resetDateCreated(); 1002 924 1003 for (Item i : template.get Items()) {925 for (Item i : template.getSortedItems()) { 1004 926 if (ItemUtils.startsWithTag(i, ItemUtils.TAG_PARENT)) { 1005 927 i.setLink(null); … … 1009 931 // do auto shrinking of the title IF not in twin frames mode and the title is not centred 1010 932 Item titleItem = template.getTitleItem(); 1011 1012 if (!DisplayController.isTwinFramesOn() && !Justification.center.equals(((Text)titleItem).getJustification())) { 933 if (titleItem == null) { 934 return template; 935 } 936 937 boolean titleItemJustified = titleItem == null || !Justification.center.equals(((Text)titleItem).getJustification()); 938 if (!DisplayController.isTwinFramesOn() && titleItemJustified) { 1013 939 if ((titleItem.getX() + 1) < template.getNameItem().getX()) { 1014 940 int title_item_xr = titleItem.getX() + titleItem.getBoundsWidth(); // should really be '... -1' … … 1307 1233 EcosystemManager.getMiscManager().beep(); 1308 1234 } else if (checkBackup 1309 && ItemUtils.ContainsExactTag(toSave.get Items(),1235 && ItemUtils.ContainsExactTag(toSave.getSortedItems(), 1310 1236 ItemUtils.TAG_BACKUP)) { 1311 1237 SuspendCache(); … … 1338 1264 } 1339 1265 1340 Item i = ItemUtils.FindExactTag(toSave.get Items(),1266 Item i = ItemUtils.FindExactTag(toSave.getSortedItems(), 1341 1267 ItemUtils.TAG_BACKUP); 1342 1268 i.setLink(original.getName()); … … 1480 1406 } 1481 1407 1482 public static Frame CreateNewProfile(String username, Map<String, Setting> initialSettings, Map<String, Consumer<Frame>> toNotifyOnSet) throws InvalidFramesetNameException, ExistingFramesetException 1408 public static Frame CreateNewProfile(String username, Map<String, Setting> initialSettings, Map<String, Consumer<Frame>> toNotifyOnSet) throws InvalidFramesetNameException, ExistingFramesetException { 1483 1409 Frame profile = CreateFrameset(username, PROFILE_PATH, true); 1484 1410 if (profile != null) { … … 2110 2036 } 2111 2037 2038 public static boolean personalResourcesExist(String username) { 2039 Path personalResources = Paths.get(FrameIO.PARENT_FOLDER).resolve("resources-" + username); 2040 File personalResourcesFile = personalResources.toFile(); 2041 boolean directoryExists = personalResourcesFile.exists() && personalResourcesFile.isDirectory(); 2042 return directoryExists; 2043 } 2044 2112 2045 public static Path setupPersonalResources(String username) { 2113 2046 Path personalResources = Paths.get(FrameIO.PARENT_FOLDER).resolve("resources-" + username); -
trunk/src/org/expeditee/gui/FrameUtils.java
r1407 r1415 60 60 import org.expeditee.core.bounds.AxisAlignedBoxBounds; 61 61 import org.expeditee.core.bounds.PolygonBounds; 62 import org.expeditee.encryption.items.surrogates.Label; 62 63 import org.expeditee.gio.EcosystemManager; 63 64 import org.expeditee.gio.gesture.StandardGestureActions; … … 384 385 } 385 386 386 for (Item i : current.get Items()) {387 for (Item i : current.getSortedItems()) { 387 388 i.setHighlightMode(Item.HighlightMode.None); 388 389 i.setHighlightColorToDefault(); … … 642 643 * @return True if the image was created successfully, false otherwise 643 644 */ 644 private static boolean createPicture(Frame frame, Text txt ) {645 private static boolean createPicture(Frame frame, Text txt, ItemsList items) { 645 646 // attempt to create the picture 646 647 Picture pic = ItemUtils.CreatePicture(txt); … … 659 660 return false; 660 661 } 661 frame.addItem(pic );662 frame.addItem(pic, true, items); 662 663 663 664 return true; 665 } 666 667 private static boolean createPictureInBody(Frame frame, Text txt) { 668 return createPicture(frame, txt, frame.getBody()); 664 669 } 665 670 … … 678 683 * @author Brook Novak 679 684 */ 680 private static boolean createWidget(Frame frame, Text txt ) {685 private static boolean createWidget(Frame frame, Text txt, ItemsList list) { 681 686 682 687 if (frame == null) { … … 713 718 } 714 719 715 frame.removeItem(txt );716 717 frame.addAllItems(iw.getItems() );720 frame.removeItem(txt, true, list); 721 722 frame.addAllItems(iw.getItems(), list); 718 723 719 724 return true; 725 } 726 727 private static boolean createWidgetInBody(Frame frame, Text txt) { 728 return createWidget(frame, txt, frame.getBody()); 720 729 } 721 730 … … 857 866 return dirsToAdd; 858 867 } 859 860 public static void Parse(Frame toParse) { 861 Parse(toParse, false); 862 } 863 864 /** 865 * Checks for any special Annotation items and updates the display as necessary. 866 * Special Items: Images, overlays, sort. 867 * 868 */ 869 public static void Parse(Frame toParse, boolean firstParse) { 870 Parse(toParse, firstParse, false); 871 } 872 873 /** 874 * 875 * @param toParse 876 * @param firstParse 877 * @param ignoreAnnotations 878 * used to prevent infinate loops such as when performing TDFC with 879 * an ao tag linked to a frame with an frameImage of a frame which 880 * also has an ao tag on it. 881 */ 882 public static void Parse(Frame toParse, boolean firstParse, boolean ignoreAnnotations) { 883 // TODO check why we are getting toParse == null... when profile frame 884 // is being created and change the lines below 885 if (toParse == null) { 886 return; 887 } 888 889 if (firstParse) { 890 ItemUtils.EnclosedCheck(toParse.getItems()); 891 } 892 893 List<Item> items = toParse.getItems(); 894 868 869 private static void transformOutOfPlaceItems(Frame toParse, ItemsList toTransform) { 870 // Get all items from toTransform that have not been marked as deleted. 871 List<Item> items = toParse.getItems(false, toTransform); 872 895 873 // if XRayMode is on, replace pictures with their underlying text 896 874 if (DisplayController.isXRayMode()) { … … 901 879 for (Item i : items) { 902 880 if (i instanceof XRayable) { 903 toParse.removeItem(i );881 toParse.removeItem(i, true, toTransform); 904 882 // Show the items 905 883 for (Item item : ((XRayable) i).getConnected()) { … … 908 886 } 909 887 } else if (i instanceof WidgetCorner) { 910 toParse.removeItem(i );888 toParse.removeItem(i, true, toTransform); 911 889 } else if (i instanceof WidgetEdge) { 912 toParse.removeItem(i );890 toParse.removeItem(i, true, toTransform); 913 891 } else if (i.hasFormula()) { 914 892 i.setText(i.getFormula()); … … 920 898 921 899 for (Widget iw : widgets) { 922 toParse.addItem(iw.getSource()); 923 } 924 } 925 926 // Text title = null; 927 // Text template = UserSettingsTemplate.copy(); 928 929 List<Overlay> overlays = new ArrayList<Overlay>(); 930 List<Vector> vectors = new ArrayList<Vector>(); 900 toParse.addItem(iw.getSource(), true, toTransform); 901 } 902 } 903 931 904 932 905 // disable reading of cached overlays if in twinframes mode … … 935 908 } 936 909 937 // DotType pointtype = DotType.square;938 // boolean filledPoints = true;939 940 UserAppliedPermission permission = toParse.getUserAppliedPermission();941 910 toParse.clearAnnotations(); 942 911 943 912 // check for any new overlay items 944 for (Item i : toParse.getItems()) { 913 items = toParse.getItems(false, toTransform); 914 for (Item i : items) { 945 915 try { 946 // reset overlay permission947 i.setOverlayPermission(null);948 // i.setPermission(permission);949 916 if (i instanceof WidgetCorner) { 950 917 // TODO improve efficiency so it only updates once... using … … 952 919 i.update(); 953 920 } else if (i instanceof Text) { 921 if (!DisplayController.isXRayMode() && i.isAnnotation()) { 922 if (ItemUtils.startsWithTag(i, ItemUtils.TAG_IMAGE, true)) { 923 if (!i.hasEnclosures()) { 924 createPicture(toParse, (Text) i, toTransform); 925 } 926 // check for frame images 927 } else if (ItemUtils.startsWithTag(i, ItemUtils.TAG_FRAME_IMAGE) && i.getLink() != null 928 && !i.getAbsoluteLink().equalsIgnoreCase(toParse.getName())) { 929 XRayable image = null; 930 if (i.hasEnclosures()) { 931 // i.setHidden(true); 932 // image = 933 // i.getEnclosures().iterator().next(); 934 // image.refresh(); 935 } else { 936 image = new FrameImage((Text) i, null); 937 } 938 // TODO Add the image when creating new 939 // FrameImage 940 toParse.addItem(image, true, toTransform); 941 } else if (ItemUtils.startsWithTag(i, ItemUtils.TAG_BITMAP_IMAGE) && i.getLink() != null 942 && !i.getAbsoluteLink().equalsIgnoreCase(toParse.getName())) { 943 XRayable image = null; 944 if (i.hasEnclosures()) { 945 // image = 946 // i.getEnclosures().iterator().next(); 947 // image.refresh(); 948 // i.setHidden(true); 949 } else { 950 // If a new bitmap is created for a 951 // frame which already has a bitmap dont 952 // recreate the bitmap 953 image = new FrameBitmap((Text) i, null); 954 } 955 toParse.addItem(image, true, toTransform); 956 } else if (ItemUtils.startsWithTag(i, "@c")) { 957 // Can only have a @c 958 if (!i.hasEnclosures() && i.getLines().size() == 1) { 959 Circle circle = new Circle((Text) i); 960 toParse.addItem(circle, true, toTransform); 961 } 962 // Check for JSItem 963 } else if (ItemUtils.startsWithTag(i, "@js")) { 964 JSItem jsItem = new JSItem((Text) i); 965 toParse.addItem(jsItem, true, toTransform); 966 // Check for interactive widgets 967 } else if (ItemUtils.startsWithTag(i, ItemUtils.TAG_IWIDGET)) { 968 createWidget(toParse, (Text) i, toTransform); 969 } 970 971 // TODO decide exactly what to do here!! 972 toParse.addAnnotation((Text) i); 973 } else if (!DisplayController.isXRayMode() && i.hasFormula()) { 974 i.calculate(i.getFormula()); 975 } 976 } 977 } catch (Exception e) { 978 Logger.Log(e); 979 e.printStackTrace(); 980 System.err 981 .println("**** Have temporarily supressed MessageBay call, as resulted in infinite recursion"); 982 // MessageBay.warningMessage("Exception occured when loading " + 983 // i.getClass().getSimpleName() + "(ID: " 984 // + i.getID() + ") " + e.getMessage() != null ? e.getMessage() : ""); 985 } 986 } 987 988 /* 989 * for (Item i : items) { if (i instanceof Dot) { ((Dot) 990 * i).setPointType(pointtype); ((Dot) i).useFilledPoints(filledPoints); } } 991 */ 992 993 if (DisplayController.isTwinFramesOn()) { 994 FrameIO.ResumeCache(); 995 } 996 997 998 } 999 1000 private static void generatingSupportingItems(Frame toParse, 1001 ItemsList toBuildOff, boolean ignoreAnnotations) { 1002 // Get all items from toBuildOff that have not been marked as deleted. 1003 List<Item> items = toParse.getItems(false, toBuildOff); 1004 1005 List<Overlay> overlays = new ArrayList<Overlay>(); 1006 List<Vector> vectors = new ArrayList<Vector>(); 1007 1008 // disable reading of cached overlays if in twinframes mode 1009 if (DisplayController.isTwinFramesOn()) { 1010 FrameIO.SuspendCache(); 1011 } 1012 1013 UserAppliedPermission permission = toParse.getUserAppliedPermission(); 1014 // check for any new overlay items 1015 for (Item i : items) { 1016 try { 1017 // reset overlay permission 1018 i.setOverlayPermission(null); 1019 if (i instanceof Text) { 954 1020 if (i.isAnnotation()) { 955 if (ItemUtils.startsWithTag(i, ItemUtils.TAG_POINTTYPE)) { 956 Text txt = (Text) i; 957 String line = txt.getFirstLine(); 958 line = ItemUtils.StripTag(line, ItemUtils.GetTag(ItemUtils.TAG_POINTTYPE)); 959 960 if (line != null) { 961 line = line.toLowerCase(); 962 if (line.indexOf(" ") > 0) { 963 String fill = line.substring(line.indexOf(" ") + 1); 964 if (fill.startsWith("nofill")) { 965 // filledPoints = false; 966 } else { 967 // filledPoints = true; 968 } 969 } 970 971 if (line.startsWith("circle")) { 972 // pointtype = DotType.circle; 973 } else { 974 // pointtype = DotType.square; 975 } 976 } 977 } // check for new VECTOR items 978 else if (!DisplayController.isXRayMode() && ItemUtils.startsWithTag(i, ItemUtils.TAG_VECTOR) 1021 if (!DisplayController.isXRayMode() && ItemUtils.startsWithTag(i, ItemUtils.TAG_VECTOR) 979 1022 && i.getLink() != null) { 980 1023 if (!i.getAbsoluteLink().equals(toParse.getName())) { … … 1047 1090 } 1048 1091 } 1049 // check for Images and widgets 1050 else { 1051 if (!DisplayController.isXRayMode()) { 1052 if (ItemUtils.startsWithTag(i, ItemUtils.TAG_IMAGE, true)) { 1053 if (!i.hasEnclosures()) { 1054 createPicture(toParse, (Text) i); 1055 } 1056 // check for frame images 1057 } else if (ItemUtils.startsWithTag(i, ItemUtils.TAG_FRAME_IMAGE) && i.getLink() != null 1058 && !i.getAbsoluteLink().equalsIgnoreCase(toParse.getName())) { 1059 XRayable image = null; 1060 if (i.hasEnclosures()) { 1061 // i.setHidden(true); 1062 // image = 1063 // i.getEnclosures().iterator().next(); 1064 // image.refresh(); 1065 } else { 1066 image = new FrameImage((Text) i, null); 1067 } 1068 // TODO Add the image when creating new 1069 // FrameImage 1070 toParse.addItem(image); 1071 } else if (ItemUtils.startsWithTag(i, ItemUtils.TAG_BITMAP_IMAGE) && i.getLink() != null 1072 && !i.getAbsoluteLink().equalsIgnoreCase(toParse.getName())) { 1073 XRayable image = null; 1074 if (i.hasEnclosures()) { 1075 // image = 1076 // i.getEnclosures().iterator().next(); 1077 // image.refresh(); 1078 // i.setHidden(true); 1079 } else { 1080 // If a new bitmap is created for a 1081 // frame which already has a bitmap dont 1082 // recreate the bitmap 1083 image = new FrameBitmap((Text) i, null); 1084 } 1085 toParse.addItem(image); 1086 } else if (ItemUtils.startsWithTag(i, "@c")) { 1087 // Can only have a @c 1088 if (!i.hasEnclosures() && i.getLines().size() == 1) { 1089 toParse.addItem(new Circle((Text) i)); 1090 } 1091 // Check for JSItem 1092 } else if (ItemUtils.startsWithTag(i, "@js")) { 1093 toParse.addItem(new JSItem((Text) i)); 1094 // Check for interactive widgets 1095 } else if (ItemUtils.startsWithTag(i, ItemUtils.TAG_IWIDGET)) { 1096 createWidget(toParse, (Text) i); 1097 } 1098 } 1099 // TODO decide exactly what to do here!! 1100 toParse.addAnnotation((Text) i); 1101 } 1102 } else if (!DisplayController.isXRayMode() && i.hasFormula()) { 1103 i.calculate(i.getFormula()); 1092 1104 1093 } 1105 1094 } … … 1118 1107 */ 1119 1108 1120 FrameIO.ResumeCache(); 1109 if (DisplayController.isTwinFramesOn()) { 1110 FrameIO.ResumeCache(); 1111 } 1121 1112 1122 1113 toParse.clearOverlays(); … … 1124 1115 toParse.addAllOverlays(overlays); 1125 1116 toParse.addAllVectors(vectors); 1126 1117 } 1118 1119 public static void Parse(Frame toParse) { 1120 Parse(toParse, false); 1121 } 1122 1123 /** 1124 * Checks for any special Annotation items and updates the display as necessary. 1125 * Special Items: Images, overlays, sort. 1126 * 1127 */ 1128 public static void Parse(Frame toParse, boolean firstParse) { 1129 Parse(toParse, firstParse, false); 1130 } 1131 1132 /** 1133 * 1134 * @param toParse 1135 * @param firstParse 1136 * @param ignoreAnnotations 1137 * used to prevent infinate loops such as when performing TDFC with 1138 * an ao tag linked to a frame with an frameImage of a frame which 1139 * also has an ao tag on it. 1140 */ 1141 public static void Parse(Frame toParse, boolean firstParse, boolean ignoreAnnotations) { 1142 List<String> accessList = Label.getAccessibleLabelsNames(new ItemsList(toParse.getPrimaryBody())); 1143 1144 ItemsList primaries = toParse.getPrimaryBody(); 1145 ItemsList surrogates = toParse.getSurrogateBody(); 1146 1147 transformOutOfPlaceItems(toParse, primaries); 1148 transformOutOfPlaceItems(toParse, surrogates); 1149 1150 toParse.getInteractableItems().clear(); 1151 List<Item> newBody = parseFromPrimary(primaries, accessList); 1152 toParse.getBody().clear(); 1153 toParse.getBody().addAll(newBody); 1154 generatingSupportingItems(toParse, toParse.getBody(), ignoreAnnotations); 1155 1156 if (firstParse) { 1157 ItemUtils.EnclosedCheck(toParse.getSortedItems()); 1158 } 1159 } 1160 1161 private static List<Item> parseFromPrimary(ItemsList primaryBody, List<String> access) { 1162 List<Item> parsedBody = new ArrayList<Item>(); 1163 1164 for (Item item: primaryBody) { 1165 String encryptionLabel = item.getEncryptionLabel(); 1166 if (encryptionLabel == null || encryptionLabel.isEmpty()) { 1167 parsedBody.add(item); 1168 } else if (access.contains(encryptionLabel)) { 1169 parsedBody.add(item); 1170 } else { 1171 parsedBody.addAll(item.getSurrogates()); 1172 } 1173 } 1174 1175 return parsedBody; 1127 1176 } 1128 1177 … … 1225 1274 if (LastEdited.contains(x, y) && !FreeItems.getInstance().contains(LastEdited) 1226 1275 && LastEdited.getParent() == DisplayController.getCurrentFrame() 1227 && LastEdited.getParent().get Items().contains(LastEdited)) {1276 && LastEdited.getParent().getSortedItems().contains(LastEdited)) { 1228 1277 LastEdited.setOverlayPermission(UserAppliedPermission.full); 1229 1278 return LastEdited; … … 1412 1461 return null; 1413 1462 } 1414 List<Item> items = current.get Items();1463 List<Item> items = current.getSortedItems(); 1415 1464 1416 1465 // Remove all items that are connected to freeItems … … 1572 1621 MessageBay.suppressMessages(true); 1573 1622 int lastNumber = FrameIO.getLastNumber(defaultFrame.getFramesetName()); 1574 for (int i = 1; i <= lastNumber; i++) { 1623 for (int i = 1; i <= lastNumber; i++) { 1575 1624 // Load in next default, if it doesn't exist continue loop. 1576 1625 defaultFrame = FrameIO.LoadFrame(defaultFrame.getFramesetName() + i); … … 1670 1719 Frame indexFrame = FrameIO.LoadFrame(framesetName + '1'); 1671 1720 // Look through the folder for help index pages 1672 if (indexFrame != null && ItemUtils.FindTag(indexFrame.get Items(), "@HelpIndex") != null) {1721 if (indexFrame != null && ItemUtils.FindTag(indexFrame.getSortedItems(), "@HelpIndex") != null) { 1673 1722 // yPos += spacing; 1674 1723 yPos += 30; -
trunk/src/org/expeditee/gui/MessageBay.java
r1314 r1415 279 279 280 280 if (!displayAlways && message.equals(_lastMessage)) { 281 Item lastMessage = _messages.get(_messages.size() - 1); 282 String text = lastMessage.getText(); 283 if (text.endsWith("}")) { 284 int startOfRepeat = text.lastIndexOf("{"); 285 String repeatString = text.substring(startOfRepeat); 286 repeatString = repeatString.substring(1, repeatString.length() - 1); 287 try { 288 int repeatCount = Integer.parseInt(repeatString) + 1; 289 text = text.substring(0, startOfRepeat).trim() + " {" + repeatCount + "}"; 290 } catch (NumberFormatException e) { 291 e.printStackTrace(); 292 } 293 } else { 294 text = text.trim() + " {2}"; 295 } 296 lastMessage.setText(text); 281 297 DisplayController.DisableMailMode(); 282 Misc.beep();283 298 return null; 284 299 } -
trunk/src/org/expeditee/gui/Vector.java
r1144 r1415 28 28 29 29 /** 30 * TODO: Explain WTF this is. cts16 30 * A vector is a type of overlay with additional features: 31 * - a location (origin) 32 * - size (scaled from frame) 33 * - etc 31 34 */ 32 35 public class Vector extends Overlay {
Note:
See TracChangeset
for help on using the changeset viewer.