Changeset 1415 for trunk


Ignore:
Timestamp:
07/24/19 11:23:45 (5 years ago)
Author:
bln4
Message:

Renamed Frame.getItems() to Frame.getSortedItems() to better represent its functionality.

-> org.apollo.ApolloGestureActions
-> org.apollo.ApolloSystem
-> org.expeditee.actions.Actions
-> org.expeditee.actions.Debug
-> org.expeditee.actions.ExploratorySearchActions
-> org.expeditee.actions.JfxBrowserActions
-> org.expeditee.actions.Misc
-> org.expeditee.actions.Navigation
-> org.expeditee.actions.ScriptBase
-> org.expeditee.actions.Simple
-> org.expeditee.agents.ComputeTree
-> org.expeditee.agents.CopyTree
-> org.expeditee.agents.DisplayComet
-> org.expeditee.agents.DisplayTree
-> org.expeditee.agents.DisplayTreeLeaves
-> org.expeditee.agents.GraphFramesetLinks
-> org.expeditee.agents.TreeProcessor
-> org.expeditee.gio.gesture.StandardGestureActions
-> org.expeditee.gui.DisplayController
-> org.expeditee.gui.FrameCreator
-> org.expeditee.gui.FrameIO
-> org.expeditee.io.DefaultTreeWriter
-> org.expeditee.io.JavaWriter
-> org.expeditee.io.PDF2Writer
-> org.expeditee.io.TXTWriter
-> org.expeditee.io.WebParser
-> org.expeditee.io.flowlayout.XGroupItem
-> org.expeditee.items.Dot
-> org.expeditee.items.Item
-> org.expeditee.items.ItemUtils
-> org.expeditee.network.FrameShare
-> org.expeditee.stats.TreeStats


Created ItemsList class to wrap ArrayList<Item>. Frames now use this new class to store its body list (used for display) as well as its primaryBody and surrogateBody.

-> org.expeditee.agents.Format
-> org.expeditee.agents.HFormat
-> org.expeditee.gio.gesture.StandardGestureActions
-> org.expeditee.gui.Frame
-> org.expeditee.gui.FrameUtils


Refactorted Frame.setResort(bool) to Frame.invalidateSorted() to better function how it is intended to with a more accurate name.

-> org.expeditee.agents.Sort


When writing out .exp files and getting attributes to respond to LEFT + RIGHT click, boolean items are by default true. This has always been the case. An ammendment to this is that defaults can now be established.
Also added 'EnterClick' functionality. If cursored over a item with this property and you press enter, it acts as if you have clicked on it instead.

-> org.expeditee.assets.resources-public.framesets.authentication.1.exp to 6.exp
-> org.expeditee.gio.gesture.StandardGestureActions
-> org.expeditee.gio.input.KBMInputEvent
-> org.expeditee.gio.javafx.JavaFXConversions
-> org.expeditee.gio.swing.SwingConversions
-> org.expeditee.gui.AttributeUtils
-> org.expeditee.io.Conversion
-> org.expeditee.io.DefaultFrameWriter
-> org.expeditee.items.Item


Fixed a bug caused by calling Math.abs on Integer.MIN_VALUE returning unexpected result. Due to zero being a thing, you cannot represent Math.abs(Integer.MIN_VALUE) in a Integer object. The solution is to use Integer.MIN_VALUE + 1 instead of Integer.MIN_VALUE.

-> org.expeditee.core.bounds.CombinationBounds
-> org.expeditee.io.flowlayout.DimensionExtent


Recoded the contains function in EllipticalBounds so that intersection tests containing circles work correctly.

-> org.expeditee.core.bounds.EllipticalBounds


Added toString() to PolygonBounds to allow for useful printing during debugging.

-> org.expeditee.core.bounds.PolygonBounds

Implemented Surrogate Mode!

-> org.expeditee.encryption.io.EncryptedExpReader
-> org.expeditee.encryption.io.EncryptedExpWriter
-> org.expeditee.encryption.items.surrogates.EncryptionDetail
-> org.expeditee.encryption.items.surrogates.Label
-> org.expeditee.gui.FrameUtils
-> org.expeditee.gui.ItemsList
-> org.expeditee.items.Item
-> org.expeditee.items.Text


???? Use Integer.MAX_VALUE cast to a float instead of Float.MAX_VALUE. This fixed some bug which I cannot remember.

-> org.expeditee.gio.TextLayoutManager
-> org.expeditee.gio.swing.SwingTextLayoutManager


Improved solution for dealing with the F10 key taking focus away from Expeditee due to it being a assessibility key.

-> org.expeditee.gio.swing.SwingInputManager


Renamed variable visibleItems in FrameGraphics.paintFrame to itemsToPaintCanditates to better represent functional intent.

-> org.expeditee.gui.FrameGraphics


Improved checking for if personal resources exist before recreating them

-> org.expeditee.gui.FrameIO


Repeated messages to message bay now have a visual feedback instead of just a beep. This visual feedback is in the form of a count of the amount of times it has repeated.

-> org.expeditee.gui.MessageBay


Updated comment on the Vector class to explain what vectors are.

-> org.expeditee.gui.Vector


Added constants to represent all of the property keys in DefaultFrameReader and DefaultFrameWriter.

-> org.expeditee.io.DefaultFrameReader
-> org.expeditee.io.DefaultFrameWriter


Updated the KeyList setting to be more heirarcial with how users will store their Secrets.

-> org.expeditee.settings.identity.secrets.KeyList

Location:
trunk/src/org
Files:
1 added
76 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/apollo/ApolloGestureActions.java

    r1179 r1415  
    180180                                Dimension windowSize = EcosystemManager.getGraphicsManager().getWindowSize();
    181181
    182                                 for (Item i : current.getItems()) {
     182                                for (Item i : current.getSortedItems()) {
    183183                                        Point pos = i.getPosition();
    184184                                        pos.setX(pos.getX() % windowSize.width);
  • trunk/src/org/apollo/ApolloSystem.java

    r1327 r1415  
    165165                assert(profile != null);
    166166               
    167                 for (Item i : profile.getItems()) {
     167                for (Item i : profile.getSortedItems()) {
    168168                        if (i instanceof Text) {
    169169                                Text textItem = (Text)i;
  • trunk/src/org/expeditee/actions/Actions.java

    r1286 r1415  
    413413
    414414                // Check for protection on frame.
    415                 if (ItemUtils.ContainsTag(source.getItems(), "@No" + actionName)) {
     415                if (ItemUtils.ContainsTag(source.getSortedItems(), "@No" + actionName)) {
    416416                        final String errorMsg = "Frame is protected by @No" + actionName
    417417                                        + " tag.";
     
    501501
    502502                // Check for protection on frame.
    503                 if (ItemUtils.ContainsTag(source.getItems(), "@No" + actionName)) {
     503                if (ItemUtils.ContainsTag(source.getSortedItems(), "@No" + actionName)) {
    504504                        final String errorMsg = "Frame is protected by @No" + actionName
    505505                                        + " tag.";
  • trunk/src/org/expeditee/actions/Debug.java

    r1304 r1415  
    5353         */
    5454        public static void ShowConstraints() {
    55                 List<Item> items = DisplayController.getCurrentFrame().getItems();
     55                List<Item> items = DisplayController.getCurrentFrame().getSortedItems();
    5656
    5757                for (Item i : items)
     
    127127       
    128128        public static void HowManyMinWidths() {
    129                 MessageBay.displayMessage(DisplayController.getCurrentFrame().getItems().stream().filter(t -> t.getMinWidth() != null).collect(Collectors.toList()).size() + "");
     129                MessageBay.displayMessage(DisplayController.getCurrentFrame().getSortedItems().stream().filter(t -> t.getMinWidth() != null).collect(Collectors.toList()).size() + "");
    130130        }
    131131       
  • trunk/src/org/expeditee/actions/ExploratorySearchActions.java

    r1102 r1415  
    7272                       
    7373                        // Remove everything from new frame
    74                         frame.removeAllItems(frame.getItems());
     74                        frame.removeAllItems(frame.getSortedItems());
    7575                       
    7676                        // Add web browser active overlay and @old
     
    132132               
    133133                // Clear new frame and add active overlay and @old
    134                 frame.removeAllItems(frame.getItems());
     134                frame.removeAllItems(frame.getSortedItems());
    135135                Text t = (Text) frame.addText(-150, 50, "@ao: 2", null, "overlayset3");
    136136                t.setAnchorLeft(-150);
     
    182182                       
    183183                        // Remove everything from new frame
    184                         frame.removeAllItems(frame.getItems());
     184                        frame.removeAllItems(frame.getSortedItems());
    185185                       
    186186                        // Add web browser active overlay and @old
  • trunk/src/org/expeditee/actions/JfxBrowserActions.java

    r1258 r1415  
    112112                // Create JfxBrowser widget on a new frame
    113113                Frame frame = FrameIO.CreateNewFrame(text);                     // create new frame for browser
    114                 frame.removeAllItems(frame.getItems());
     114                frame.removeAllItems(frame.getSortedItems());
    115115                text.setLink("" + frame.getNumber());                           // link this text item to new frame
    116116               
     
    168168        public static void createFrameWithBrowser(Item link, String url) throws Exception {
    169169                Frame frame = FrameIO.CreateNewFrame(link);
    170                 frame.removeAllItems(frame.getItems());
     170                frame.removeAllItems(frame.getSortedItems());
    171171
    172172                link.setLink("" + frame.getNumber());
  • trunk/src/org/expeditee/actions/Misc.java

    r1293 r1415  
    104104        {
    105105                Frame current = f;
    106                 List<Item> allItems = current.getItems();
     106                List<Item> allItems = current.getSortedItems();
    107107               
    108108                for(Item i : allItems)
     
    126126                Frame current = f;
    127127               
    128                 List<Item> allItems = current.getItems();
     128                List<Item> allItems = current.getSortedItems();
    129129               
    130130               
     
    242242                                // deleted
    243243                                Frame current = DisplayController.getCurrentFrame();
    244                                 for (Item i : current.getItems())
     244                                for (Item i : current.getSortedItems())
    245245                                        if (i.getLink() != null
    246246                                                        && i.getAbsoluteLink().toLowerCase().equals(
     
    507507                charList.append(String.format("Unicode block 0x%x - 0x%x", start,
    508508                                finish));
    509                 System.out.println();
     509                System.out.println(); // Is this println needed?
    510510                // charList.append("Unicode block: ").append(String.format(format,
    511511                // args))
     
    706706        public static void MigrateImages(Frame frame) {
    707707                //Collect the images on frame
    708                 final Collection<Item> items = frame.getItems();
     708                final Collection<Item> items = frame.getSortedItems();
    709709                final Collection<Item> imagesTextItems = new LinkedList<Item>();
    710710                items.forEach(i -> { if(i.getText().startsWith("@i")) imagesTextItems.add(i); });
     
    931931                        body.addAll(child.getBodyTextItems(false));
    932932                else
    933                         body.addAll(child.getItems());
     933                        body.addAll(child.getSortedItems());
    934934                Item item = null;
    935935
     
    970970                        body.addAll(child.getBodyTextItems(false));
    971971                else
    972                         body.addAll(child.getItems());
     972                        body.addAll(child.getSortedItems());
    973973
    974974                return body;
     
    13321332        public static void resetHomeFrame() {
    13331333                Frame homeFrame = FrameIO.LoadFrame(UserSettings.HomeFrame.get());
    1334                 homeFrame.removeAllItems(homeFrame.getItems());
     1334                homeFrame.removeAllItems(homeFrame.getSortedItems());
    13351335                homeFrame.addText(0, 0, "title", null);
    13361336                FrameUtils.CreateDefaultProfile(UserSettings.UserName.get(), homeFrame, null, null);
  • trunk/src/org/expeditee/actions/Navigation.java

    r1102 r1415  
    211211
    212212                // find the next item to visit
    213                 List<Item> items = parent.getItems(); // getItems method gets us the
     213                List<Item> items = parent.getSortedItems(); // getItems method gets us the
    214214                // FirstItem on the frame
    215215                int parentItemLinkedToSource = 0; // ByMike: Will be set to the
  • trunk/src/org/expeditee/actions/ScriptBase.java

    r1102 r1415  
    135135       
    136136        // get all items on the frame
    137         List<Item> y_ordered_items = (List<Item>)frame.getItems();
     137        List<Item> y_ordered_items = (List<Item>)frame.getSortedItems();
    138138        // remove the title item
    139139        y_ordered_items.remove(frame.getTitleItem());
  • trunk/src/org/expeditee/actions/Simple.java

    r1197 r1415  
    14631463                                        Frame frame = (Frame) context.getPointers().getVariable(
    14641464                                                        frameVar).getValue();
    1465                                         Integer count = frame.getItems(true).size();
     1465                                        Integer count = frame.getSortedItems(true).size();
    14661466                                        context.getPrimitives().setValue(countVar,
    14671467                                                        new SInteger(count));
     
    23912391                                        double thisFramesPause = pause;
    23922392                                        // check for change in delay for this frame only
    2393                                         Item pauseItem = ItemUtils.FindTag(frame.getItems(),
     2393                                        Item pauseItem = ItemUtils.FindTag(frame.getSortedItems(),
    23942394                                                        "@DisplayFramePause:");
    23952395                                        if (pauseItem != null) {
     
    24892489                                                frameVar).getValue();
    24902490                                frameToClear.clear(false);
    2491                                 assert (frameToClear.getItems().size() <= 1);
     2491                                assert (frameToClear.getSortedItems().size() <= 1);
    24922492                        } catch (Exception e) {
    24932493                                success = false;
  • trunk/src/org/expeditee/agents/ComputeTree.java

    r919 r1415  
    5858               
    5959                //TODO can speed this up by using frame.hasAnnotations
    60                 for (Item i : frame.getItems()) {
     60                for (Item i : frame.getSortedItems()) {
    6161                        if (_stop)
    6262                                return null;
  • trunk/src/org/expeditee/agents/CopyTree.java

    r919 r1415  
    9696
    9797                boolean added = false;
    98                 for (Item i : fresh.getItems())
     98                for (Item i : fresh.getSortedItems())
    9999                        if (i.getLink() != null && !i.isAnnotation() && i.isLinkValid()) {
    100100                                String link = i.getLink().toLowerCase();
     
    133133                        Frame toParse = FrameIO.LoadFrame(name);
    134134                        boolean changed = false;
    135                         for (Item i : toParse.getItems()) {
     135                        for (Item i : toParse.getSortedItems()) {
    136136                                if (i.getLink() != null && i.isAnnotation() && i.isLinkValid()) {
    137137                                        String link = i.getLink();
  • trunk/src/org/expeditee/agents/DisplayComet.java

    r1102 r1415  
    5555                        seen.add(oldFrame.getName().toLowerCase());
    5656                        _frameList.push(oldFrame);
    57                         old = ItemUtils.FindExactTag(oldFrame.getItems(), ItemUtils
     57                        old = ItemUtils.FindExactTag(oldFrame.getSortedItems(), ItemUtils
    5858                                        .GetTag(ItemUtils.TAG_BACKUP));
    5959                        oldFrame = null;
  • trunk/src/org/expeditee/agents/DisplayTree.java

    r1102 r1415  
    9696        private void delay(Frame toSearch) {
    9797                // check for change in globaly delay time
    98                 Item delay = ItemUtils.FindTag(toSearch.getItems(),
     98                Item delay = ItemUtils.FindTag(toSearch.getSortedItems(),
    9999                                "@DisplayTreePause:");
    100100               
     
    112112
    113113                // check for change in delay for this frame only
    114                 delay = ItemUtils.FindTag(toSearch.getItems(), "@DisplayFramePause:");
     114                delay = ItemUtils.FindTag(toSearch.getSortedItems(), "@DisplayFramePause:");
    115115                if (delay != null) {
    116116                        try {
  • trunk/src/org/expeditee/agents/DisplayTreeLeaves.java

    r919 r1415  
    4646                // call display trees process only if the frame doesnt have any linked
    4747                // items
    48                 for (Item item : toProcess.getItems()) {
     48                for (Item item : toProcess.getSortedItems()) {
    4949                        if (item.getLink() != null && !item.isAnnotation())
    5050                                return;
  • trunk/src/org/expeditee/agents/Format.java

    r1258 r1415  
    2929import org.expeditee.gui.Frame;
    3030import org.expeditee.gui.FrameUtils;
     31import org.expeditee.gui.ItemsList;
    3132import org.expeditee.items.Item;
    3233import org.expeditee.items.Text;
     
    181182                 */
    182183                start.setChanged(true);
    183                 start.addToUndoMove(changedItems);
     184                start.addToUndoMove(new ItemsList(changedItems));
    184185                DisplayController.requestRefresh(true);
    185186                return null;
  • trunk/src/org/expeditee/agents/GraphFramesetLinks.java

    r1125 r1415  
    119119                                }
    120120
    121                                 List<Item> items = toProccess.getItems();
     121                                List<Item> items = toProccess.getSortedItems();
    122122
    123123                                for (Item item : items) {
  • trunk/src/org/expeditee/agents/HFormat.java

    r919 r1415  
    2424
    2525import org.expeditee.gui.Frame;
     26import org.expeditee.gui.ItemsList;
    2627import org.expeditee.items.Item;
    2728import org.expeditee.items.Text;
     
    6667               
    6768                System.out.println(changedItems);
    68                 start.addToUndoMove(changedItems);
     69                start.addToUndoMove(new ItemsList(changedItems));
    6970                return null;
    7071        }
  • trunk/src/org/expeditee/agents/Sort.java

    r1142 r1415  
    6767
    6868                // items will need to be resorted after this
    69                 start.setResort(true);
     69                start.invalidateSorted();
    7070                DisplayController.requestRefresh(true);
    7171
  • trunk/src/org/expeditee/agents/TreeProcessor.java

    r919 r1415  
    7979
    8080                        // the items on the frame currently being processed.
    81                         List<Item> items = next.getItems();
     81                        List<Item> items = next.getSortedItems();
    8282
    8383                        // resume from the next item in the list
  • trunk/src/org/expeditee/assets/resources-public/framesets/authentication/1.exp

    r1396 r1415  
    1 V 167
    2 p 40
     1V 171
     2p 400
    33U authadmin
    44D 07Jan2019[14:34]
    55M nobody
    6 d 23May2019[15:50]
     6d 04Jul2019[13:20]
    77B 100 100 39 100
    88Z
     
    2020m 0.0
    2121h -1.0
     22_sl F
    2223
    2324S T 23
     
    3334m 0.0
    3435h -1.0
     36_sl F
    3537
    3638S T 24
     
    4648m 0.0
    4749h -1.0
     50_sl F
    4851
    4952S T 25
     
    5962m 0.0
    6063h -1.0
     64_sl F
    6165
    6266S T 60
     
    7882M 300
    7983h 1.0
    80 p 44
     84p 444
    8185_ph Username
     86_sl F
    8287_ti 1
    8388
     
    101106M 300
    102107h 1.0
    103 p 44
     108p 444
    104109_ph Password
     110_sl F
    105111_ti 2
    106112
     
    123129M 205
    124130h 1.0
     131_sl F
    125132_ti 3
     133_ae true
    126134
    127135S P 78
     
    162170m 0.0
    163171h -1.0
     172_sl F
    164173
    165174S T 67
     
    177186m 0.0
    178187h -1.0
     188_sl F
    179189
    180190S T 68
     
    192202m 0.0
    193203h -1.0
     204_sl F
    194205
    195206S T 69
     
    207218m 0.0
    208219h -1.0
     220_sl F
    209221
    210222S P 80
     
    260272Z
    261273
    262 ActiveTime:2597632:50:00
    263 DarkTime:-2597632:-55:-56
    264 50:47:701 375 276 kSHIFT
    265 50:47:812 375 276 kB
    266 50:49:753 403 286 Ld
    267 50:49:873 403 286 Lu
    268 51:37:130 739 260 kSHIFT
    269 51:37:369 739 260 kT
    270 51:37:642 750 260 kO
    271 51:37:817 759 260 kG
    272 51:37:929 768 260 kG
    273 51:38:017 777 260 kL
    274 51:38:122 782 260 kE
    275 51:38:281 790 260 kSHIFT
    276 51:38:361 790 260 kA
    277 51:38:521 802 260 kU
    278 51:38:681 812 260 kT
    279 51:38:753 817 260 kH
    280 51:38:978 826 260 kCTRL
    281 51:39:137 826 260 kA
    282 51:40:411 794 245 Ld
    283 51:40:545 794 245 Lu
    284 51:41:506 473 279 Ld
    285 51:41:617 473 279 Rd
    286 51:41:745 473 279 Ru
    287 51:41:753 473 279 Lu
    288 51:49:018 205 254 Md
    289 51:49:129 205 254 Rd
    290 51:50:065 205 254 Mu
    291 51:50:073 205 254 Ru
    292 51:53:817 51 275 kSHIFT
    293 51:54:185 51 275 kP
    294 51:54:377 61 275 kE
    295 51:54:435 68 275 kR
    296 51:54:578 75 275 kM
    297 51:54:657 89 275 kI
    298 51:54:777 94 275 kS
    299 51:54:913 101 275 kS
    300 51:55:026 108 275 kI
    301 51:55:089 113 275 kO
    302 51:55:122 122 275 kN
    303 51:55:305 131 275 kSHIFT
    304 51:57:866 103 256 Md
    305 51:57:938 103 256 Mu
    306 51:58:557 119 248 Md
    307 51:58:588 119 248 Rd
    308 51:58:738 119 248 Ru
    309 51:58:761 119 248 Mu
    310 51:59:171 98 261 Md
    311 51:59:241 98 261 Mu
    312 52:00:458 360 271 Rd
    313 52:00:633 360 271 Ru
    314 52:01:562 369 322 Rd
    315 52:01:674 369 322 Ru
    316 52:02:433 250 348 Md
    317 52:02:482 250 348 Rd
    318 52:02:633 250 348 Ru
    319 52:02:641 250 348 Mu
    320 52:03:114 352 283 Ld
    321 52:03:162 352 283 Rd
    322 52:03:266 352 283 Lu
    323 52:03:289 352 283 Ru
    324 52:06:346 233 266 Md
    325 52:06:377 233 266 Rd
    326 52:06:553 233 266 Mu
    327 52:06:578 233 266 Ru
    328 52:07:913 119 259 kSHIFT
    329 52:08:073 119 259 kO
    330 52:08:370 132 259 kW
    331 52:08:434 145 259 kN
    332 52:09:033 154 259 kE
    333 52:09:057 162 259 kR
    334 52:09:265 168 259 kSHIFT
    335 52:09:569 177 259 kA
    336 52:09:681 185 259 kU
    337 52:09:817 194 259 kT
    338 52:09:890 199 259 kH
    339 52:10:033 208 259 kA
    340 52:10:138 216 259 kD
    341 52:10:338 225 259 kM
    342 52:10:418 239 259 kI
    343 52:10:505 244 259 kN
    344 52:12:058 144 259 Md
    345 52:12:130 144 259 Mu
    346 52:12:841 346 280 Rd
    347 52:12:978 346 280 Ru
    348 52:13:554 371 330 Rd
    349 52:13:674 371 330 Ru
    350 52:14:234 200 307 Md
    351 52:14:306 200 307 Rd
    352 52:14:433 200 307 Ru
    353 52:14:474 200 307 Mu
    354 52:15:314 769 253 Md
    355 52:15:369 769 253 Rd
    356 52:15:498 769 253 Ru
    357 52:15:522 769 253 Mu
    358 52:16:354 769 253 kCTRL
    359 52:16:818 769 253 kS
     274ActiveTime:4333414:09:21
     275DarkTime:-4333102:-15:-17
     27620:36:610 124 250 kSHIFT
     27720:36:873 124 250 kT
     27820:37:090 135 250 kO
     27920:37:217 144 250 kG
     28020:37:369 153 250 kG
     28120:37:490 162 250 kL
     28220:37:570 167 250 kE
     28320:37:745 175 250 kSHIFT
     28420:37:801 175 250 kA
     28520:38:001 188 250 kU
     28620:38:105 196 250 kT
     28720:38:209 202 250 kH
     28820:38:377 211 250 kCTRL
     28920:38:569 211 250 kA
     29020:39:362 211 250 Ld
     29120:39:489 211 250 Lu
     29220:40:386 462 393 Ld
     29320:40:497 462 393 Rd
     29420:40:681 462 393 Ru
     29520:40:690 462 393 Lu
     29620:43:657 254 204 Md
     29720:43:889 254 204 Rd
     29820:44:537 254 204 Ru
     29920:44:538 254 204 Mu
     30020:45:161 174 239 Md
     30120:45:201 174 239 Rd
     30220:45:409 174 239 Ru
     30320:45:449 174 239 Mu
  • trunk/src/org/expeditee/assets/resources-public/framesets/authentication/2.exp

    r1396 r1415  
    1 V 300
    2 p 40
     1V 302
     2p 400
    33U authadmin
    44D 07Dec2018[12:19]
    5 M authadmin
    6 d 27May2019[11:51]
     5M nobody
     6d 04Jul2019[13:20]
    77B 100 100 39 100
    88Z
     
    2020m 0.0
    2121h -1.0
    22 p 40
     22p 400
    2323_sl F
    2424
     
    3535m 0.0
    3636h -1.0
    37 p 40
     37p 400
    3838_sl F
    3939
     
    5050m 0.0
    5151h -1.0
    52 p 40
     52p 400
    5353_sl F
    5454
     
    5656s 11Apr2019[10:56.20]
    5757d 0 0 0 100
    58 P 280 168
     58P 280 185
    5959T Create an Expeditee Account
    6060N 150
     
    6666m 0.0
    6767h -1.0
    68 p 40
     68p 400
    6969_sl F
    7070
     
    9292G 100 100 100 100
    9393K 0 0 0 100
    94 P 175 260
     94P 175 287
    9595T
    9696x F
     
    106106M 300
    107107h 1.0
    108 p 44
     108p 444
    109109_ph Username
     110_sl F
    110111_ti 1
    111112
     
    115116G 100 100 100 100
    116117K 0 0 0 100
    117 P 175 320
     118P 175 347
    118119T
    119120x F
     
    131132M 300
    132133h 1.0
    133 p 44
     134p 444
    134135_ph Password
    135 _sl T
    136136_ti 2
    137137
     
    141141G 100 100 100 100
    142142K 0 0 0 100
    143 P 515 320
     143P 515 347
    144144T
    145145x F
     
    157157M 300
    158158h 1.0
    159 p 44
     159p 444
    160160_ph Password Again
    161 _sl T
    162161_ti 3
    163162
     
    167166G 100 100 100 100
    168167K 0 0 0 100
    169 P 515 380
     168P 515 407
    170169T
    171170x F
     
    182181M 300
    183182h 1.0
    184 p 44
     183p 444
    185184_ph Email Again
    186 _sl T
    187185_ti 5
    188186
     
    192190G 100 100 100 100
    193191K 0 0 0 100
    194 P 175 380
     192P 175 407
    195193T
    196194x F
     
    207205M 300
    208206h 1.0
    209 p 44
     207p 444
    210208_ph Email
    211 _sl T
    212209_ti 4
    213210
     
    217214G 100 100 0 100
    218215K 0 0 0 100
    219 P 394 458
     216P 394 469
    220217T Create Account
    221218X AuthCreateAccount
     
    231228M 205
    232229h 1.0
    233 p 41
     230p 411
    234231_sl F
    235232_ti 6
     233_ae true
    236234
    237235S P 773
     
    246244l 1467 1476
    247245c 1481 1482
    248 p 41
     246p 411
    249247
    250248S P 774
     
    258256l 1467 1470
    259257c 1481 1483
    260 p 41
     258p 411
    261259
    262260S P 769
     
    270268l 1455 1464
    271269c 1477 1478
    272 p 41
     270p 411
    273271
    274272S P 772
     
    282280l 1464 1461
    283281c 1477 1480
    284 p 41
     282p 411
    285283
    286284S T 764
     
    298296m 0.0
    299297h -1.0
    300 p 41
     298p 411
    301299_sl F
    302300
     
    315313m 0.0
    316314h -1.0
    317 p 41
     315p 411
    318316_sl F
    319317
     
    332330m 0.0
    333331h -1.0
    334 p 41
     332p 411
    335333_sl F
    336334
     
    349347m 0.0
    350348h -1.0
    351 p 41
     349p 411
    352350_sl F
    353351
     
    366364m 0.0
    367365h -1.0
    368 p 41
     366p 411
    369367_sl F
    370368
     
    383381m 0.0
    384382h -1.0
    385 p 40
     383p 400
    386384_sl F
    387385
     
    400398m 0.0
    401399h -1.0
    402 p 41
     400p 411
    403401_sl F
    404402
     
    417415m 0.0
    418416h -1.0
    419 p 41
     417p 411
    420418_sl F
    421419
     
    431429l 1455 1458
    432430c 1478 1479
    433 p 41
     431p 411
    434432
    435433S P 771
     
    443441l 1461 1458
    444442c 1480 1479
    445 p 41
     443p 411
    446444
    447445S P 775
     
    455453l 1470 1473
    456454c 1483 1484
    457 p 41
     455p 411
    458456
    459457S P 776
     
    467465l 1476 1473
    468466c 1482 1484
    469 p 41
     467p 411
    470468
    471469Z
     
    523521Z
    524522
    525 ActiveTime:01:25:41
     523ActiveTime:01:25:44
    526524DarkTime:01:32:58
    527 49:46:377 540 328 Ld
    528 49:46:521 540 328 Rd
    529 49:46:712 540 328 Ru
    530 49:46:728 540 328 Lu
    531 49:51:681 705 241 kSHIFT
    532 49:52:097 705 241 kT
    533 49:52:316 716 241 kO
    534 49:52:508 725 241 kG
    535 49:52:652 734 241 kG
    536 49:52:762 743 241 kL
    537 49:52:873 748 241 kE
    538 49:53:036 756 241 kSHIFT
    539 49:53:132 756 241 kA
    540 49:53:324 769 241 kU
    541 49:53:442 778 241 kT
    542 49:53:547 783 241 kH
    543 49:53:741 792 241 kCTRL
    544 49:53:978 792 241 kA
    545 49:55:338 745 238 Ld
    546 49:55:433 745 238 Lu
    547 49:56:269 748 242 Md
    548 49:56:368 748 242 Rd
    549 49:56:477 748 242 Ru
    550 49:56:508 748 242 Mu
    551 49:59:950 699 238 kSHIFT
    552 50:00:169 699 238 kW
    553 50:00:346 716 238 kI
    554 50:00:483 721 238 kD
    555 50:00:623 730 238 kT
    556 50:00:702 735 238 kH
    557 50:00:795 744 238 kSHIFT
    558 50:01:563 748 238 kBACKSPACE
    559 50:01:641 744 238 kSHIFT
    560 50:03:755 728 235 Md
    561 50:03:848 728 235 Mu
    562 50:04:584 564 332 Rd
    563 50:04:741 564 332 Ru
    564 50:05:217 557 398 Rd
    565 50:05:311 556 398 Ru
    566 50:06:211 231 333 Rd
    567 50:06:305 231 333 Ru
    568 50:06:791 212 390 Rd
    569 50:06:885 212 390 Ru
    570 50:07:494 660 271 Md
    571 50:07:604 660 271 Rd
    572 50:07:760 660 271 Ru
    573 50:07:760 660 271 Mu
    574 50:08:298 567 391 Ld
    575 50:08:329 567 391 Rd
    576 50:08:465 567 391 Lu
    577 50:08:482 567 391 Ru
    578 50:10:777 702 257 Md
    579 50:10:824 702 257 Rd
    580 50:10:999 702 257 Ru
    581 50:11:015 702 257 Mu
    582 50:12:094 547 398 kLEFT_ARROW
    583 50:15:756 657 242 kSHIFT
    584 50:15:896 657 242 kS
    585 50:16:068 667 242 kI
    586 50:16:132 672 242 kN
    587 50:16:273 681 242 kG
    588 50:16:351 690 242 kL
    589 50:16:476 695 242 kE
    590 50:16:554 703 242 kSHIFT
    591 50:16:680 703 242 kL
    592 50:16:906 714 242 kI
    593 50:16:969 719 242 kN
    594 50:17:086 728 242 kE
    595 50:17:181 736 242 kSHIFT
    596 50:17:321 736 242 kO
    597 50:17:478 749 242 kN
    598 50:17:569 758 242 kL
    599 50:17:729 763 242 kY
    600 50:18:276 772 242 kSHIFT
    601 50:18:652 781 242 kT
    602 50:18:793 786 242 kR
    603 50:18:903 792 242 kU
    604 50:18:981 800 242 kE
    605 50:20:639 706 227 Md
    606 50:20:732 705 227 Mu
    607 50:23:753 587 342 Rd
    608 50:23:894 587 342 Ru
    609 50:24:803 253 345 Rd
    610 50:24:897 253 345 Ru
    611 50:25:459 219 399 Rd
    612 50:25:568 219 399 Ru
    613 50:26:109 589 393 Rd
    614 50:26:257 589 392 Ru
    615 50:28:245 660 275 Md
    616 50:28:292 660 275 Rd
    617 50:28:448 660 275 Ru
    618 50:28:464 660 275 Mu
    619 50:29:583 565 405 kLEFT_ARROW
    620 50:30:625 254 281 Ld
    621 50:30:703 254 281 Rd
    622 50:30:860 254 281 Lu
    623 50:30:860 254 281 Ru
    624 50:34:787 708 285 Md
    625 50:34:858 708 285 Rd
    626 50:35:039 708 285 Ru
    627 50:35:039 708 285 Mu
    628 50:35:587 544 352 Ld
    629 50:35:665 544 352 Rd
    630 50:35:790 544 352 Lu
    631 50:35:806 544 352 Ru
    632 50:37:058 715 256 Md
    633 50:37:095 715 256 Rd
    634 50:37:283 715 256 Ru
    635 50:37:299 715 256 Mu
    636 50:40:472 876 220 kCTRL
    637 50:40:987 876 220 kCTRL
    638 50:41:019 876 220 kCTRL
    639 50:41:050 876 220 kCTRL
    640 50:41:081 876 220 kCTRL
    641 50:41:119 876 220 kCTRL
    642 50:41:150 876 220 kCTRL
    643 50:41:182 876 220 kCTRL
    644 50:41:213 876 220 kCTRL
    645 50:41:244 876 220 kCTRL
    646 50:41:275 876 220 kCTRL
    647 50:41:306 876 220 kS
    648 51:24:134 583 226 kSHIFT
    649 51:24:400 583 226 kU
    650 51:24:585 596 226 kS
    651 51:27:824 603 226 kBACKSPACE
     52520:55:434 79 398 kSHIFT
     52620:55:722 79 398 kT
     52720:55:898 90 398 kO
     52820:56:050 99 398 kG
     52920:56:194 108 398 kG
     53020:56:251 117 398 kL
     53120:56:338 122 398 kE
     53220:56:498 130 398 kSHIFT
     53320:56:593 130 398 kA
     53420:56:738 143 398 kU
     53520:56:890 152 398 kT
     53620:56:961 156 398 kH
     53720:57:194 166 398 kCTRL
     53820:57:394 166 398 kA
     53920:58:462 102 384 Ld
     54020:58:618 102 384 Lu
     54120:59:346 103 401 Md
     54220:59:434 103 401 Rd
     54320:59:578 103 401 Ru
     54420:59:602 103 401 Mu
     54521:01:922 69 473 kSHIFT
     54621:02:308 69 473 kE
     54721:02:899 80 473 kN
     54821:03:076 89 473 kT
     54921:03:193 94 473 kE
     55021:03:284 102 473 kR
     55121:03:436 108 473 kSHIFT
     55221:03:559 108 473 kC
     55321:03:724 120 473 kL
     55421:03:893 125 473 kI
     55521:04:009 130 473 kC
     55621:04:090 138 473 kK
     55721:04:201 147 473 kSHIFT
     55821:05:236 156 473 kT
     55921:05:922 161 473 kR
     56021:06:097 167 473 kU
     56121:06:162 176 473 kE
     56221:07:404 183 473 Md
     56321:07:514 183 473 Mu
     56421:08:149 431 452 Md
     56521:08:274 431 452 Mu
     56621:11:572 138 467 kCTRL
     56721:12:071 138 467 kCTRL
     56821:12:102 138 467 kCTRL
     56921:12:135 138 467 kCTRL
     57021:12:169 138 467 kCTRL
     57121:12:203 138 467 kCTRL
     57221:12:235 138 467 kCTRL
     57321:12:269 138 467 kCTRL
     57421:12:275 138 467 kS
  • trunk/src/org/expeditee/assets/resources-public/framesets/authentication/3.exp

    r1396 r1415  
    1 V 100
    2 p 40
     1V 102
     2p 400
    33U authadmin
    44D 07Jan2019[14:34]
    5 M authadmin
    6 d 27May2019[11:48]
     5M nobody
     6d 04Jul2019[13:22]
    77B 100 100 39 100
    88Z
     
    2020m 0.0
    2121h -1.0
    22 p 40
     22p 400
    2323_sl F
    2424
     
    3535m 0.0
    3636h -1.0
    37 p 40
     37p 400
    3838_sl F
    3939
     
    5050m 0.0
    5151h -1.0
    52 p 40
     52p 400
    5353_sl F
    5454
     
    6565m 0.0
    6666h -1.0
    67 p 40
     67p 400
    6868_sl F
    6969
     
    104104M 300
    105105h 1.0
    106 p 44
     106p 444
    107107_ph Password
    108108_sl F
     
    128128M 300
    129129h 1.0
    130 p 44
     130p 444
    131131_ph New Password
     132_sl F
    132133_ti 2
    133134
     
    151152M 300
    152153h 1.0
    153 p 44
     154p 444
    154155_ph New Password Again
     156_sl F
    155157_ti 3
    156158
     
    174176M 205
    175177h 1.0
    176 p 41
     178p 411
    177179_sl F
    178180_ti 4
     181_ae true
    179182
    180183S P 263
     
    301304Z
    302305
    303 ActiveTime:00:16:32
     306ActiveTime:00:16:33
    304307DarkTime:00:20:25
    305 48:13:768 687 245 kSHIFT
    306 48:13:947 687 245 kS
    307 48:14:193 697 245 kI
    308 48:14:257 702 245 kN
    309 48:14:382 711 245 kG
    310 48:14:464 720 245 kL
    311 48:14:574 725 245 kE
    312 48:14:641 733 245 kSHIFT
    313 48:14:768 733 245 kL
    314 48:14:986 744 245 kI
    315 48:15:057 749 245 kN
    316 48:15:147 758 245 kE
    317 48:15:259 766 245 kSHIFT
    318 48:15:321 766 245 kO
    319 48:15:434 779 245 kN
    320 48:15:634 792 245 kL
    321 48:15:852 797 245 kY
    322 48:16:141 805 245 kBACKSPACE
    323 48:16:281 797 245 kBACKSPACE
    324 48:16:407 792 245 kBACKSPACE
    325 48:16:628 779 245 kN
    326 48:16:918 788 245 kL
    327 48:17:035 793 245 kY
    328 48:17:391 801 245 kSHIFT
    329 48:18:113 811 245 kT
    330 48:18:258 816 245 kR
    331 48:18:352 822 245 kU
    332 48:18:430 831 245 kE
    333 48:20:006 689 234 Md
    334 48:20:117 689 234 Mu
    335 48:21:588 555 338 Rd
    336 48:21:744 555 338 Ru
    337 48:22:463 195 331 Rd
    338 48:22:624 195 331 Ru
    339 48:23:324 690 271 Rd
    340 48:23:324 690 271 Md
    341 48:23:574 690 271 Ru
    342 48:23:590 690 271 Mu
    343 48:24:405 669 241 kSHIFT
    344 48:24:577 669 241 kW
    345 48:24:733 686 241 kI
    346 48:24:858 691 241 kD
    347 48:25:036 700 241 kT
    348 48:25:098 705 241 kH
    349 48:25:217 714 241 kSHIFT
    350 48:27:126 750 241 Md
    351 48:27:220 750 241 Mu
    352 48:27:868 591 336 Rd
    353 48:28:025 591 336 Ru
    354 48:28:690 333 345 Rd
    355 48:28:816 333 345 Ru
    356 48:29:349 678 258 Md
    357 48:29:443 678 258 Rd
    358 48:29:599 678 258 Ru
    359 48:29:599 678 258 Mu
    360 48:30:821 598 341 Ld
    361 48:30:884 598 341 Rd
    362 48:31:040 598 341 Lu
    363 48:31:040 598 341 Ru
    364 48:31:979 681 264 Md
    365 48:32:057 681 264 Rd
    366 48:32:213 681 264 Mu
    367 48:32:232 681 264 Ru
    368 48:33:919 780 241 kCTRL
    369 48:34:122 780 241 kS
     30822:46:330 32 445 kSHIFT
     30922:46:490 32 445 kT
     31022:46:722 43 445 kO
     31122:46:890 52 445 kG
     31222:47:034 61 445 kG
     31322:47:122 70 445 kL
     31422:47:211 75 445 kE
     31522:47:362 83 445 kSHIFT
     31622:47:450 83 445 kA
     31722:47:634 96 445 kU
     31822:47:730 105 445 kT
     31922:47:850 110 445 kH
     32022:48:026 119 445 kCTRL
     32122:48:267 119 445 kA
     32222:49:554 97 439 Ld
     32322:49:690 97 439 Lu
     32422:50:922 76 541 kSHIFT
     32522:51:114 76 541 kE
     32622:51:266 87 541 kN
     32722:51:394 96 541 kT
     32822:51:498 101 541 kE
     32922:51:594 109 541 kR
     33022:51:730 115 541 kSHIFT
     33122:51:866 115 541 kC
     33222:52:090 127 541 kL
     33322:52:250 132 541 kI
     33422:52:370 137 541 kC
     33522:52:458 145 541 kK
     33622:52:594 154 541 kSHIFT
     33722:53:082 163 541 kT
     33822:53:242 168 541 kR
     33922:53:323 174 541 kU
     34022:53:426 182 541 kE
     34122:54:490 191 541 Md
     34222:54:610 191 541 Mu
     34322:55:437 432 404 Md
     34422:55:555 432 404 Mu
     34522:56:540 65 444 Md
     34622:56:573 65 444 Rd
     34722:56:754 65 444 Ru
     34822:56:794 65 444 Mu
     34922:57:907 65 444 kRIGHT_ARROW
  • trunk/src/org/expeditee/assets/resources-public/framesets/authentication/4.exp

    r1396 r1415  
    1 V 228
    2 p 40
     1V 232
     2p 400
    33U authadmin
    44D 07Jan2019[14:34]
    55M nobody
    6 d 30May2019[12:55]
     6d 04Jul2019[13:23]
    77B 100 100 39 100
    88Z
     
    2020m 0.0
    2121h -1.0
    22 p 40
     22p 400
    2323_sl F
    2424
     
    3535m 0.0
    3636h -1.0
    37 p 40
     37p 400
    3838_sl F
    3939
     
    5050m 0.0
    5151h -1.0
    52 p 40
     52p 400
    5353_sl F
    5454
     
    6565m 0.0
    6666h -1.0
    67 p 40
     67p 400
    6868_sl F
    6969
     
    8585M 300
    8686h 1.0
    87 p 44
     87p 444
    8888_ph Username
    8989_sl F
     
    110110M 300
    111111h 1.0
    112 p 41
     112p 411
     113_sl F
    113114_ti 2
     115_ae true
    114116
    115117S P 328
     
    148150M 300
    149151h 1.0
    150 p 44
     152p 444
    151153_ph Identity Number
     154_sl F
    152155_ti 3
    153156
     
    172175M 300
    173176h 1.0
    174 p 41
     177p 411
     178_sl F
    175179_ti 4
     180_ae true
    176181
    177182S P 382
     
    217222M 300
    218223h 1.0
    219 p 44
     224p 444
    220225_ph Password Piece Two
     226_sl F
    221227_ti 6
    222228
     
    239245M 300
    240246h 1.0
    241 p 44
     247p 444
    242248_ph Password Piece One
     249_sl F
    243250_ti 5
    244251
     
    262269M 300
    263270h 1.0
    264 p 44
     271p 444
    265272_ph New Password Again
    266273_sl F
     
    286293M 300
    287294h 1.0
    288 p 44
     295p 444
    289296_ph New Password
    290297_sl F
     
    310317M 205
    311318h 1.0
    312 p 41
     319p 411
    313320_sl F
    314321_ti 9
     322_ae true
    315323
    316324S P 618
     
    325333l 620 639
    326334c 1313 1314
    327 p 41
     335p 411
    328336
    329337S P 619
     
    337345l 620 621
    338346c 1313 1315
    339 p 41
     347p 411
    340348
    341349S P 622
     
    349357l 624 625
    350358c 1373 1374
    351 p 41
     359p 411
    352360
    353361S P 623
     
    361369l 625 635
    362370c 1373 1376
    363 p 41
     371p 411
    364372
    365373S T 626
     
    377385m 0.0
    378386h -1.0
    379 p 41
     387p 411
    380388_sl F
    381389
     
    394402m 0.0
    395403h -1.0
    396 p 41
     404p 411
    397405_sl F
    398406
     
    411419m 0.0
    412420h -1.0
    413 p 41
     421p 411
    414422_sl F
    415423
     
    428436m 0.0
    429437h -1.0
    430 p 41
     438p 411
    431439_sl F
    432440
     
    445453m 0.0
    446454h -1.0
    447 p 41
     455p 411
    448456_sl F
    449457
     
    462470m 0.0
    463471h -1.0
    464 p 41
     472p 411
    465473_sl F
    466474
     
    479487m 0.0
    480488h -1.0
    481 p 41
     489p 411
    482490_sl F
    483491
     
    493501l 624 636
    494502c 1374 1375
    495 p 41
     503p 411
    496504
    497505S P 634
     
    505513l 635 636
    506514c 1376 1375
    507 p 41
     515p 411
    508516
    509517S P 637
     
    517525l 621 640
    518526c 1315 1320
    519 p 41
     527p 411
    520528
    521529S P 638
     
    529537l 639 640
    530538c 1314 1320
    531 p 41
     539p 411
    532540
    533541Z
     
    591599Z
    592600
    593 ActiveTime:01:37:49
     601ActiveTime:01:38:25
    594602DarkTime:02:33:57
    595 55:59:214 974 141 kSHIFT
    596 55:59:413 974 141 kT
    597 55:59:669 985 141 kO
    598 55:59:820 994 141 kG
    599 55:59:955 1003 141 kG
    600 56:00:066 1012 141 kL
    601 56:00:186 1016 141 kE
    602 56:00:348 1025 141 kSHIFT
    603 56:00:436 1025 141 kA
    604 56:00:660 1038 141 kU
    605 56:00:763 1047 141 kT
    606 56:00:863 1052 141 kH
    607 56:01:085 1061 141 kCTRL
    608 56:01:245 1061 141 kA
    609 56:12:623 644 193 Ld
    610 56:12:691 644 193 Rd
    611 56:12:826 644 193 Lu
    612 56:12:843 644 193 Ru
    613 56:13:979 986 135 Ld
    614 56:14:115 986 135 Lu
    615 56:14:966 696 197 Ld
    616 56:15:012 696 197 Rd
    617 56:15:147 696 197 Lu
    618 56:15:187 696 197 Ru
    619 56:26:280 1069 243 Md
    620 56:26:299 1069 243 Rd
    621 56:26:419 1069 243 Mu
    622 56:26:426 1069 243 Ru
    623 56:27:534 1026 139 Md
    624 56:27:571 1026 139 Rd
    625 56:27:779 1026 139 Ru
    626 56:27:780 1026 139 Mu
    627 56:31:507 663 197 Ld
    628 56:31:581 663 197 Rd
    629 56:31:723 663 197 Lu
    630 56:31:747 663 197 Ru
    631 56:34:254 1038 189 Md
    632 56:34:314 1038 189 Rd
    633 56:34:523 1038 189 Mu
    634 56:34:538 1038 189 Ru
    635 56:35:068 1151 300 kSHIFT
    636 56:35:568 1150 300 kSHIFT
    637 56:35:599 1150 300 kSHIFT
    638 56:35:632 1150 300 kSHIFT
    639 56:35:666 1150 300 kSHIFT
    640 56:35:699 1150 300 kSHIFT
    641 56:35:732 1150 300 kSHIFT
    642 56:35:764 1150 300 kSHIFT
    643 56:35:798 1150 300 kSHIFT
    644 56:35:831 1150 300 kSHIFT
    645 56:35:863 1150 300 kSHIFT
    646 56:35:874 1150 300 kW
    647 56:36:380 1167 300 kI
    648 56:36:451 1172 300 kD
    649 56:36:645 1181 300 kT
    650 56:36:707 1186 300 kH
    651 56:36:810 1195 300 kSHIFT
    652 56:38:190 1182 295 Md
    653 56:38:307 1182 295 Mu
    654 56:38:894 625 191 Rd
    655 56:38:987 625 191 Ru
    656 56:39:764 627 249 Rd
    657 56:39:859 627 249 Ru
    658 56:41:702 1047 334 Md
    659 56:41:781 1047 334 Rd
    660 56:41:931 1047 334 Ru
    661 56:41:947 1047 334 Mu
    662 56:54:550 704 261 Ld
    663 56:54:765 704 261 Rd
    664 56:54:947 704 261 Ru
    665 56:54:955 704 261 Lu
    666 56:58:422 1052 309 Md
    667 56:58:451 1052 309 Rd
    668 56:58:627 1052 309 Ru
    669 56:58:627 1052 309 Mu
    670 57:09:933 848 208 kBACKSPACE
    671 57:20:206 1047 362 kSHIFT
    672 57:20:389 1047 362 kW
    673 57:20:678 1064 362 kSHIFT
    674 57:24:475 1085 362 Md
    675 57:24:619 1085 362 Mu
    676 57:25:366 720 212 Md
    677 57:25:459 720 212 Mu
    678 57:29:539 1023 282 kSHIFT
    679 57:29:997 1023 282 kW
    680 57:30:349 1040 282 kI
    681 57:30:428 1045 282 kD
    682 57:30:669 1054 282 kT
    683 57:30:748 1059 282 kH
    684 57:30:835 1068 282 kSHIFT
    685 57:33:967 1109 284 Md
    686 57:34:107 1109 284 Mu
    687 57:35:022 700 206 Rd
    688 57:35:131 700 206 Ru
    689 57:36:262 690 248 Rd
    690 57:36:363 690 248 Ru
    691 57:38:078 1136 307 Md
    692 57:38:203 1136 307 Mu
    693 57:39:158 660 256 Ld
    694 57:39:643 660 256 Lu
    695 57:42:876 881 215 kBACKSPACE
    696 57:43:086 874 219 kBACKSPACE
    697 57:43:396 865 219 kBACKSPACE
    698 57:45:393 600 212 kBACKSPACE
    699 57:45:589 590 219 kBACKSPACE
    700 57:45:819 582 219 kBACKSPACE
    701 57:49:485 1047 296 kSHIFT
    702 57:49:582 1047 296 kM
    703 57:49:806 1066 305 kI
    704 57:49:875 1071 305 kN
    705 57:51:391 1080 305 Md
    706 57:51:507 1080 305 Mu
    707 57:52:144 705 215 Rd
    708 57:52:195 705 215 Ru
    709 57:52:846 710 250 Rd
    710 57:52:931 710 250 Ru
    711 57:53:726 1142 372 Md
    712 57:53:788 1142 372 Rd
    713 57:53:923 1142 372 Ru
    714 57:53:947 1142 372 Mu
    715 58:00:035 1153 256 kCTRL
    716 58:00:538 1153 257 kCTRL
    717 58:00:554 1153 257 kS
     60323:59:891 1076 133 kSHIFT
     60424:00:098 1076 133 kT
     60524:00:530 1087 133 kO
     60624:00:739 1096 133 kG
     60724:00:868 1105 133 kG
     60824:00:971 1114 133 kL
     60924:01:059 1119 133 kE
     61024:01:203 1127 133 kSHIFT
     61124:01:267 1127 133 kA
     61224:01:452 1140 133 kU
     61324:01:516 1149 133 kT
     61424:01:661 1154 133 kH
     61524:01:787 1163 133 kCTRL
     61624:01:956 1163 133 kA
     61724:02:797 1163 133 Ld
     61824:02:891 1163 133 Lu
     61924:03:467 747 207 Ld
     62024:03:540 747 207 Rd
     62124:03:643 747 207 Ru
     62224:03:659 747 207 Lu
     62324:04:533 1049 204 Md
     62424:04:555 1049 204 Rd
     62524:04:691 1049 204 Mu
     62624:04:698 1049 204 Ru
     62724:05:310 731 267 Ld
     62824:05:362 731 267 Rd
     62924:05:476 732 268 Lu
     63024:05:477 732 268 Ru
     63124:06:052 1306 239 Md
     63224:06:076 1306 239 Rd
     63324:06:220 1305 239 Mu
     63424:06:236 1303 238 Ru
     63524:06:662 1075 125 Md
     63624:06:685 1075 125 Rd
     63724:06:787 1075 125 Ru
     63824:06:803 1075 125 Mu
  • trunk/src/org/expeditee/assets/resources-public/framesets/authentication/5.exp

    r1396 r1415  
    1 V 194
    2 p 40
     1V 196
     2p 400
    33U authadmin
    44D 07Jan2019[14:34]
    55M authadmin
    6 d 23May2019[14:56]
     6d 04Jul2019[13:23]
    77B 100 100 39 100
    88Z
     
    2020m 0.0
    2121h -1.0
     22_sl F
    2223
    2324S T 373
     
    3334m 0.0
    3435h -1.0
     36_sl F
    3537
    3638S T 374
     
    4648m 0.0
    4749h -1.0
     50_sl F
    4851
    4952S T 392
     
    5962m 0.0
    6063h -1.0
     64_sl F
    6165
    6266S T 410
     
    7781M 300
    7882h 1.0
    79 p 44
     83p 444
    8084_ph Trusted User One
     85_sl F
    8186_ti 1
    8287
     
    103108m 0.0
    104109h 2.0
     110_sl F
    105111
    106112S T 406
     
    121127M 300
    122128h 1.0
    123 p 44
     129p 444
    124130_ph Trusted User Two
     131_sl F
    125132_ti 2
    126133
     
    144151M 300
    145152h 1.0
    146 p 41
     153p 411
     154_sl F
    147155_ti 3
     156_ae true
    148157
    149158S P 428
     
    183192m 0.0
    184193h -1.0
     194_sl F
    185195
    186196S T 426
     
    198208m 0.0
    199209h -1.0
     210_sl F
    200211
    201212S T 427
     
    213224m 0.0
    214225h -1.0
     226_sl F
    215227
    216228S P 429
     
    267279Z
    268280
    269 ActiveTime:01:16:40
     281ActiveTime:01:17:19
    270282DarkTime:01:04:09
    271 55:35:445 516 401 Ld
    272 55:35:533 517 401 Rd
    273 55:35:661 517 401 Lu
    274 55:35:662 517 401 Ru
    275 55:36:574 756 335 Md
    276 55:36:749 756 335 Rd
    277 55:39:613 756 335 Ru
    278 55:39:765 756 335 Mu
    279 56:18:735 420 343 Ld
    280 56:18:821 420 343 Rd
    281 56:18:990 420 343 Lu
    282 56:19:005 420 343 Ru
    283 56:19:990 194 308 Md
    284 56:20:054 194 308 Rd
    285 56:20:205 194 308 Ru
    286 56:20:206 194 308 Mu
    287 56:20:789 712 452 kCTRL
    288 56:21:150 712 452 kV
    289 56:22:334 660 472 Md
    290 56:22:445 660 472 Mu
    291 56:23:326 650 468 kSHIFT
    292 56:23:454 650 468 kA
    293 56:23:702 673 472 kC
    294 56:24:022 681 472 kT
    295 56:24:221 686 472 kI
    296 56:24:278 691 472 kO
    297 56:24:334 700 472 kN
    298 56:24:446 709 472 kSHIFT
    299 56:26:078 705 489 Md
    300 56:26:182 705 489 Mu
    301 56:27:014 611 401 Md
    302 56:27:118 611 401 Mu
    303 56:28:070 579 411 Ld
    304 56:28:126 579 410 Rd
    305 56:28:246 581 410 Lu
    306 56:28:247 581 410 Ru
    307 56:29:670 177 348 Md
    308 56:29:750 177 348 Rd
    309 56:29:925 177 348 Ru
    310 56:29:941 177 348 Mu
    311 56:31:326 413 392 Ld
    312 56:31:374 413 392 Rd
    313 56:31:477 413 392 Lu
    314 56:31:485 413 392 Ru
    315 56:32:455 185 308 Md
    316 56:32:526 185 308 Rd
    317 56:32:670 185 308 Ru
    318 56:32:685 185 308 Mu
    319 56:35:846 235 568 kCTRL
    320 56:35:926 265 589 kV
    321 56:36:486 278 572 Md
    322 56:36:581 278 572 Mu
    323 56:37:558 271 565 kSHIFT
    324 56:37:686 271 565 kA
    325 56:37:878 291 572 kC
    326 56:38:190 299 572 kT
    327 56:38:437 304 572 kI
    328 56:38:501 309 572 kO
    329 56:38:565 318 572 kN
    330 56:38:741 327 572 kSHIFT
    331 56:41:150 376 560 Md
    332 56:41:254 376 560 Mu
    333 56:41:998 464 400 Md
    334 56:42:093 464 400 Mu
    335 56:42:966 493 401 Ld
    336 56:43:102 493 401 Rd
    337 56:43:214 493 401 Ru
    338 56:43:229 493 401 Lu
    339 56:44:518 73 380 Md
    340 56:44:606 73 380 Rd
    341 56:44:733 73 380 Ru
    342 56:44:749 73 380 Mu
    343 56:45:622 786 366 kCTRL
    344 56:46:054 786 366 kS
    345 56:47:478 489 407 Ld
    346 56:47:566 489 407 Rd
    347 56:47:678 489 407 Ru
    348 56:47:694 489 407 Lu
    349 56:48:542 213 321 Md
    350 56:48:598 213 321 Rd
    351 56:48:733 213 321 Ru
    352 56:48:742 213 321 Mu
    353 56:50:095 441 467 Ld
    354 56:50:174 441 467 Lu
     28323:19:762 102 718 kSHIFT
     28423:19:949 102 718 kE
     28523:20:099 113 718 kN
     28623:20:218 122 718 kT
     28723:20:331 126 718 kE
     28823:20:427 135 718 kR
     28923:20:605 141 718 kSHIFT
     29023:20:770 141 718 kC
     29123:20:948 153 718 kL
     29223:21:082 158 718 kI
     29323:21:220 163 718 kC
     29423:21:325 171 718 kK
     29523:21:396 180 718 kSHIFT
     29623:21:836 189 718 kT
     29723:21:996 194 718 kR
     29823:22:077 200 718 kU
     29923:22:180 209 718 kE
     30023:23:646 205 714 Md
     30123:23:738 205 714 Mu
     30223:24:548 434 402 Md
     30323:24:634 434 402 Mu
     30423:26:428 479 628 kRIGHT_ARROW
  • trunk/src/org/expeditee/assets/resources-public/framesets/authentication/6.exp

    r1396 r1415  
    1 V 835
    2 p 40
     1V 837
     2p 400
    33U authadmin
    44D 23Nov2018[12:31]
    55M authadmin
    6 d 23May2019[14:31]
     6d 04Jul2019[13:23]
    77B 100 100 39 100
    88Z
     
    4141m 0.0
    4242h -1.0
     43_sl F
    4344
    4445S T 1684
     
    5354m 0.0
    5455h -1.0
     56_sl F
    5557
    5658S T 1685
     
    6567m 0.0
    6668h -1.0
     69_sl F
    6770
    6871S T 1686
     
    7780m 0.0
    7881h -1.0
     82_sl F
    7983
    8084S P 1689
     
    113117m 0.0
    114118h -1.0
    115 p 40
     119p 400
     120_sl F
    116121
    117122S T 1673
     
    128133m 0.0
    129134h -1.0
    130 p 40
     135p 400
     136_sl F
    131137
    132138S T 1670
     
    143149m 0.0
    144150h -1.0
    145 p 40
     151p 400
     152_sl F
    146153
    147154S T 1637
     
    158165m 0.0
    159166h -1.0
    160 p 40
     167p 400
     168_sl F
    161169
    162170S T 1266
     
    179187M 300
    180188h 1.0
    181 p 44
     189p 444
    182190_ph Username
     191_sl F
    183192_ti 1
    184193
     
    203212M 300
    204213h 1.0
    205 p 44
     214p 444
    206215_ph Password
     216_sl F
    207217_ti 2
    208218
     
    226236M 205
    227237h 1.0
    228 p 41
     238p 411
     239_sl F
    229240_ti 3
     241_ae true
    230242
    231243S P 1703
     
    265277m 0.0
    266278h -1.0
    267 p 41
     279p 411
     280_sl F
    268281
    269282S T 1696
     
    281294m 0.0
    282295h -1.0
    283 p 41
     296p 411
     297_sl F
    284298
    285299S T 1697
     
    297311m 0.0
    298312h -1.0
    299 p 41
     313p 411
     314_sl F
    300315
    301316S P 1704
     
    359374m 0.0
    360375h -1.0
    361 p 41
     376p 411
     377_sl F
    362378
    363379S T 1699
     
    375391m 0.0
    376392h -1.0
    377 p 41
     393p 411
     394_sl F
    378395
    379396S T 1700
     
    391408m 0.0
    392409h -1.0
    393 p 01
     410p 011
     411_sl F
    394412
    395413S T 1701
     
    407425m 0.0
    408426h -1.0
    409 p 41
     427p 411
     428_sl F
    410429
    411430S T 1702
     
    423442m 0.0
    424443h -1.0
    425 p 41
     444p 411
     445_sl F
    426446
    427447S P 1709
     
    549569Z
    550570
    551 ActiveTime:19857915:44:01
    552 DarkTime:-19847399:-39:-16
    553 32:20:162 706 445 Md
    554 32:20:290 706 445 Rd
    555 32:20:538 706 445 Ru
    556 32:20:594 706 445 Mu
    557 32:37:858 766 295 kCTRL
    558 32:38:635 766 295 kCTRL
    559 32:38:858 766 295 kS
     571ActiveTime:19857915:44:18
     572DarkTime:-19847087:-39:-16
     57323:29:005 178 694 kSHIFT
     57423:29:109 178 694 kE
     57523:29:362 189 694 kN
     57623:29:441 198 694 kT
     57723:29:506 203 694 kE
     57823:29:580 211 694 kR
     57923:29:763 217 694 kSHIFT
     58023:29:906 217 694 kC
     58123:30:140 228 694 kL
     58223:30:299 234 694 kI
     58323:30:403 239 694 kC
     58423:30:516 247 694 kK
     58523:30:603 256 694 kSHIFT
     58623:31:476 265 694 kT
     58723:31:652 270 694 kR
     58823:31:732 276 694 kU
     58923:31:811 285 694 kE
     59023:32:950 293 694 Md
     59123:33:066 293 694 Mu
     59223:33:738 432 403 Md
     59323:33:850 432 403 Mu
     59423:36:710 481 410 Ld
     59523:36:773 481 410 Rd
     59623:36:931 481 410 Lu
     59723:36:931 481 410 Ru
     59823:37:750 338 458 Md
     59923:37:836 338 458 Rd
     60023:38:002 338 458 Ru
     60123:38:042 338 458 Mu
     60223:39:396 175 714 kRIGHT_ARROW
  • trunk/src/org/expeditee/core/bounds/CombinationBounds.java

    r1097 r1415  
    8787
    8888        @Override
    89         public int getMaxX()
    90         {
    91                 int maxX = Integer.MIN_VALUE;
     89        public int getMaxX() {
     90                // +1 makes it safe to do math.abs on
     91                int maxX = Integer.MIN_VALUE + 1;
    9292               
    9393                for (Bounds b : _bounds) {
     
    113113
    114114        @Override
    115         public int getMaxY()
    116         {
    117                 int maxY = Integer.MIN_VALUE;
     115        public int getMaxY() {
     116                // +1 makes it safe to do math.abs on
     117                int maxY = Integer.MIN_VALUE + 1;
    118118               
    119119                for (Bounds b : _bounds) {
  • trunk/src/org/expeditee/core/bounds/EllipticalBounds.java

    r1142 r1415  
    7070       
    7171        @Override
    72         public boolean contains(int x, int y)
    73         {
     72        public boolean contains(int x, int y) {
    7473                // If the ellipse is degenerate then it can't contain anything
    7574                if (_diameters.getArea() == 0) return false;
    76                
    77                 // Get the position of the given coordinates with respect to the ellipse centre
    78                 Point pRel = new Point(x - _centre.getX(), y - _centre.getY());
    79                
    80                 // x^2 / r_x^2 + y^2 / r_y^2 must be <= 1
    81                 // (using diameters instead of radii hence the 4.0f value)
    82                 float xNorm = (((float) pRel.getX()) * pRel.getX()) / (((float) _diameters.width) * _diameters.width);
    83                 float yNorm = (((float) pRel.getY()) * pRel.getY()) / (((float) _diameters.height) * _diameters.height);
    84                 return (xNorm + yNorm <= 4.0f);
     75
     76                double deltaXSq = Math.pow(x - _centre.getX(), 2);
     77                double deltaYSq = Math.pow(y - _centre.getY(), 2);
     78                double minorAxisSq = Math.pow(Math.min(_diameters.height, _diameters.width) / 2, 2);
     79                double majorAxisSq = Math.pow(Math.max(_diameters.height, _diameters.width) / 2, 2);
     80                double result = (deltaXSq / majorAxisSq) + (deltaYSq / minorAxisSq);
     81                return result <= 1.0f;
    8582        }
    8683       
     
    118115       
    119116        @Override
    120         public boolean equals(Bounds other)
    121         {
     117        public boolean equals(Bounds other) {
    122118                if (other instanceof EllipticalBounds) {
    123119                        EllipticalBounds e = (EllipticalBounds) other;
     
    128124
    129125        @Override
    130         public boolean intersects(AxisAlignedBoxBounds other)
    131         {
     126        public boolean intersects(AxisAlignedBoxBounds other) {
    132127                // Treat the box as a polygon
    133128                return intersects(other.getPolygon());
     
    135130
    136131        @Override
    137         public boolean intersects(CombinationBounds other)
    138         {
     132        public boolean intersects(CombinationBounds other) {
    139133                // Defer to the CombinationBounds routine
    140134                return other.intersects(this);
     
    142136
    143137        @Override
    144         public boolean intersects(EllipticalBounds other)
    145         {
     138        public boolean intersects(EllipticalBounds other) {
    146139                // TODO: Implement. cts16
    147140                System.err.println("Unimplemented method: EllipticalBounds.intersects(EllipticalBounds)");
  • trunk/src/org/expeditee/core/bounds/PolygonBounds.java

    r1142 r1415  
    538538                }
    539539        }
     540       
     541        public String toString() {
     542                StringBuilder sb = new StringBuilder("PolygonBounds with: ");
     543                sb.append("[MinX: " + getMinX() + "]");
     544                sb.append("[MinY: " + getMinY() + "]");
     545                sb.append("[MaxX: " + getMaxX() + "]");
     546                sb.append("[MaxY: " + getMaxY() + "]");
     547                return sb.toString();
     548        }
    540549
    541550}
  • trunk/src/org/expeditee/encryption/io/EncryptedExpReader.java

    r1414 r1415  
    2424import javax.crypto.spec.SecretKeySpec;
    2525
     26import org.expeditee.core.Point;
    2627import org.expeditee.encryption.CryptographyConstants;
    2728import org.expeditee.encryption.items.surrogates.EncryptionDetail;
     
    3334import org.expeditee.io.DefaultFrameWriter;
    3435import org.expeditee.io.ExpReader;
     36import org.expeditee.items.Constraint;
    3537import org.expeditee.items.Item;
    3638import org.expeditee.items.Text;
     
    4446        private SecretKey personalKey;
    4547        private boolean accessDenied = false;
     48        private boolean _readingSurrogates;
     49        private static final Predicate<String> endOfSection = s -> s.equals(EncryptedExpWriter.TERMINATOR + "") || s.equals(EncryptedExpWriter.TERMINATOR_WITH_CONTINUATION);
    4650
    4751        public static boolean isEncryptedExpediteeFile(final String path) throws IOException {
    48                 final BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(path), "UTF-8"));
    49                 final String firstLine = in.readLine();
     52                BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(path), "UTF-8"));
     53                String firstLine = in.readLine();
    5054                in.close();
     55                if (firstLine == null) return false;
    5156                return firstLine.startsWith(ENCRYPTED_EXP_FLAG);
    5257        }
     
    8792                if (accessDenied) { return null; }
    8893               
     94                _readingSurrogates = false;
    8995                _reader = reader;
    9096                String next = "";
     
    106112                        next = readTheConstraints();
    107113                       
     114                        if (next.equals(EncryptedExpWriter.TERMINATOR_WITH_CONTINUATION)) {
     115                                // Read the surrogates
     116                                _readingSurrogates = true;
     117                                next = readTheItems(newFrame, delayedActions);
     118                                _readingSurrogates = false;
     119                        }
     120                       
    108121                        for(DelayedAction action: delayedActions) {
    109122                                action.exec();
     
    124137        }
    125138       
    126 //      @Override
    127 //      protected String readTheItems(Frame newFrame, List<DelayedAction> delayedActions) throws IOException {
    128 //              String next = null;
    129 //              Item currentItem = null;
    130 //             
    131 //              Predicate<String> endOfSection = s -> s.equals(EncryptedExpWriter.TERMINATOR + "") || s.equals(EncryptedExpWriter.TERMINATOR_WITH_CONTINUATION);
    132 //              while (_reader.ready() && !endOfSection.test(next = _reader.readLine())) {
    133 //                      if (!isValidLine(next)) {
    134 //                              continue;
    135 //                      }
    136 //                     
    137 //                      String tag = getTagEnc(next);
    138 //                      if (next.startsWith(DefaultFrameWriter.TYPE_AND_ID_STR + " ")) {
    139 //                              currentItem = newItem(next);
    140 //                              _linePoints.put(currentItem.getID(), currentItem);
    141 //                              newFrame.addItem(currentItem);
    142 //                              currentItem.setEncryptionDetailForTag(tag + "", EncryptionDetail.UnencryptedOnSave);
    143 //                      } else if (next.startsWith("SurrogateFor")) {
    144 //                              int parentID = Integer.parseInt(next.split(" ")[1]);
    145 //                              newFrame.getItemWithID(parentID).addToSurrogates(currentItem);
    146 //                              newFrame.addToSurrogates(currentItem);
    147 //                      } else if (currentItem != null && actionShouldBeDelayed(tag.charAt(0))) {
    148 //                              delayedActions.add(new DelayedAction(currentItem, next));
    149 //                      } else if (currentItem != null) {
    150 //                              processBodyLine(currentItem, next);
    151 //                      } else {
    152 //                              System.err.println("Error while reading in frame (ExpReader): Found body line but no current item to apply it to.");
    153 //                      }
    154 //              }
    155 //                             
    156 //              if (next.equals(EncryptedExpWriter.TERMINATOR_WITH_CONTINUATION)) {
    157 //                      next = readTheItems(newFrame, delayedActions);
    158 //              }
    159 //             
    160 //              return next;
    161 //      }
    162        
    163139        protected String readTheItems(Frame newFrame, List<DelayedAction> delayedActions) throws IOException {
    164                 // Read the primary item.
    165                 BiConsumer<Item, String> addToBody = (item, line) -> newFrame.addItem(item);
    166                 String next = readLineAfterLine(false, addToBody, delayedActions);
    167                
    168                 // Read the surrogate items.
    169                 if (next.equals(EncryptedExpWriter.TERMINATOR_WITH_CONTINUATION)) {
    170                         BiConsumer<Item, String> addToSurrogates = (item, line) -> {
    171                                 int parentID = Integer.parseInt(line.split(" ")[1]);
    172                                 newFrame.getItemWithID(parentID).addToSurrogates(item);
    173                                 newFrame.addToSurrogates(item);
    174                         };
    175                         next = readLineAfterLine(true, addToSurrogates, delayedActions);
     140                BiConsumer<Item, String> primaryAdd = (item, line) -> newFrame.addItem(item);
     141                BiConsumer<Item, String> surrogateAdd = (item, line) -> {
     142                        int parentID = Integer.parseInt(line.split(" ")[1]);
     143                        Item parent = newFrame.getItemWithID(parentID);
     144                        newFrame.addToSurrogatesOnLoad(item, parent);
     145                };
     146               
     147                if (_readingSurrogates) {
     148                        return readLineAfterLine(true, surrogateAdd, delayedActions);
     149                } else {
     150                        return readLineAfterLine(false, primaryAdd, delayedActions);
     151                }
     152        }
     153       
     154        @Override
     155        protected String readTheConstraints() throws IOException, Exception {
     156                String next = null;
     157                while (_reader.ready() && !endOfSection.test(next = _reader.readLine())) {
     158                        if (isValidLine(next)) {
     159                                Point idtype = separateValues(next.substring(2));
     160                                // The next line must be the endpoints
     161                                if (!_reader.ready()) {
     162                                        throw new Exception("Unexpected end of file");
     163                                }
     164                                next = _reader.readLine();
     165                                Point startend = separateValues(next.substring(2));
     166
     167                                Item a = _linePoints.get(startend.getX());
     168                                Item b = _linePoints.get(startend.getY());
     169
     170                                new Constraint(a, b, idtype.getX(), idtype.getY());
     171                        }
    176172                }
    177173                return next;
     
    182178                Item currentItem = null;
    183179               
    184                 Predicate<String> endOfSection = s -> s.equals(EncryptedExpWriter.TERMINATOR + "") || s.equals(EncryptedExpWriter.TERMINATOR_WITH_CONTINUATION);
    185180                while (_reader.ready() && !endOfSection.test(next = _reader.readLine())) {
    186181                        if (!isValidLine(next)) {
     
    195190                                        storeResult.accept(currentItem, next);
    196191                                }
    197                                 currentItem.setEncryptionDetailForTag(tag + "", EncryptionDetail.UnencryptedOnSave);
     192                                EncryptionDetail unencryptedOnSave = new EncryptionDetail(EncryptionDetail.Type.UnencryptedOnSave);
     193                                currentItem.setEncryptionDetailForTag(tag + "", unencryptedOnSave);
    198194                        } else if (next.startsWith("SurrogateFor")) {
    199195                                if (isSurrogate) {
     
    212208        }
    213209       
    214 //      private String readLineAfterLine(Consumer<Item> storeResult, List<DelayedAction> delayedActions) throws IOException {
    215 //              String next = null;
    216 //              Item currentItem = null;
    217 //             
    218 //              Predicate<String> endOfSection = s -> {
    219 //                      return s.equals(EncryptedExpWriter.TERMINATOR + "") || s.equals(EncryptedExpWriter.TERMINATOR_WITH_CONTINUATION);
    220 //              };
    221 //              while (_reader.ready() && !endOfSection.test(next = _reader.readLine())) {
    222 //                      if (!isValidLine(next)) {
    223 //                              continue;
    224 //                      }
    225 //                     
    226 //                      String tag = getTagEnc(next);
    227 //                      if (next.startsWith(DefaultFrameWriter.TYPE_AND_ID_STR + " ")) {
    228 //                              currentItem = newItem(next);
    229 //                              _linePoints.put(currentItem.getID(), currentItem);
    230 //                              currentItem.setEncryptionDetailForTag(tag + "", EncryptionDetail.UnencryptedOnSave);
    231 //                              storeResult.accept(currentItem);
    232 //                      } else if (next.startsWith("SurrogateFor")) {
    233 //                              int parentID = Integer.parseInt(next.split(" ")[1]);
    234 //                              newFrame.getItemWithID(parentID).addToSurrogates(currentItem);
    235 //                              new Delayed
    236 //                      }
    237 //              }
    238 //             
    239 //              return next;
    240 //      }
    241        
    242210        @Override
    243211        protected void processBodyLine(Item item, String line) {
     
    245213                String tag = getTagEnc(line);
    246214                String value = getValue(line);
    247                
    248                 if (item.isSurrogate() && item.isTagInherited(tag)) {
     215                boolean isEncryptedLine = isEncryptedLine(line);
     216               
     217                if (item.isSurrogate() && isEncryptedLine) {
     218                        // Surrogates should never have encrypted body lines.
    249219                        return;
    250220                }
    251221               
    252222                // Attempt to decrypt the line if necessary.
    253                 if (isEncryptedLine(line)) {
    254                         LabelResult res = Label.resolveKey(item.getEncryptionLabel());
     223                if (isEncryptedLine) {
     224                        LabelResult res = Label.getLabel(item.getEncryptionLabel());
    255225                        if (res == LabelResult.SuccessResolveLabelToKey) {
    256                                 item.setEncryptionDetailForTag(tag, EncryptionDetail.ReencryptOnSave);
     226                                EncryptionDetail reencryptOnSave = new EncryptionDetail(EncryptionDetail.Type.ReencryptOnSave);
     227                                item.setEncryptionDetailForTag(tag, reencryptOnSave);
    257228                                SecretKey key = new SecretKeySpec(res.key, SymmetricAlgorithm);
    258229                                byte[] decryptedBytes = DecryptSymmetric(Base64.getDecoder().decode(value), key);
    259230                                value = new String(decryptedBytes);                             
    260231                        } else {
    261                                 EncryptionDetail encryptionDetail = EncryptionDetail.UseUndecipheredValueOnSave.setUndecipheredValue(getValue(line));
    262                                 item.setEncryptionDetailForTag(tag, encryptionDetail);
     232                                EncryptionDetail undecipheredValueOnSave = new EncryptionDetail(EncryptionDetail.Type.UseUndecipheredValueOnSave);
     233                                undecipheredValueOnSave.setUndecipheredValue(getValue(line));
     234                                item.setEncryptionDetailForTag(tag, undecipheredValueOnSave);
    263235                                return;
    264236                        }
    265237                } else {
    266                         item.setEncryptionDetailForTag(tag, EncryptionDetail.UnencryptedOnSave);
     238                        EncryptionDetail unencryptedOnSave = new EncryptionDetail(EncryptionDetail.Type.UnencryptedOnSave);
     239                        item.setEncryptionDetailForTag(tag, unencryptedOnSave);
     240                        if (item.isSurrogate()) {
     241                                item.setTagNotInherited(tag);
     242                        }
    267243                }
    268244               
     
    394370               
    395371                private SecretKeySpec resolveLabel(String label) {
    396                         LabelResult res = Label.resolveKey(label);
     372                        LabelResult res = Label.getLabel(label);
    397373                        if (res == LabelResult.SuccessResolveLabelToKey) {
    398374                                byte[] keyBytes = res.key;
  • trunk/src/org/expeditee/encryption/io/EncryptedExpWriter.java

    r1414 r1415  
    2323import org.expeditee.encryption.CryptographyConstants;
    2424import org.expeditee.encryption.items.surrogates.EncryptionDetail;
     25import org.expeditee.encryption.items.surrogates.EncryptionDetail.Type;
    2526import org.expeditee.encryption.items.surrogates.Label;
    2627import org.expeditee.encryption.items.surrogates.Label.LabelResult;
    2728import org.expeditee.gui.Frame;
     29import org.expeditee.gui.Frame.BodyType;
    2830import org.expeditee.gui.MessageBay;
    2931import org.expeditee.io.Conversion;
     
    6264                        }
    6365                } else {
    64                         LabelResult res = Label.resolveKey(label);
     66                        LabelResult res = Label.getLabel(label);
    6567                        if (res == LabelResult.SuccessResolveLabelToKey) {
    6668                                byte[] keyBytes = res.key;
     
    9496               
    9597                // write item
    96                 writeItemData(frame);
     98                writeItemData(frame, true);
    9799                writeTerminator();
    98                
    99100                // write lines and constraints
    100101                writeLineData();
    101102                writeTerminator();
    102103                writeConstraintData();
    103                 writeTerminator();
    104                
     104               
     105                // write surrogate items
     106                if (frame.hasSurrogates()) {
     107                        writeSurrogateTerminator();
     108                        writeItemData(frame, false);
     109                        writeTerminator();
     110                } else {
     111                        writeTerminator();
     112                }
     113                               
    105114                writeLine(SessionStats.getFrameEventList(frame));
    106115        }
     
    126135       
    127136        protected void writeClass(Item toWrite) throws IOException {
     137                if (toWrite instanceof Text && toWrite.getText().equals("Content for Label Two")) {
     138                        System.err.println("EncryptedExpWriter::writeClass::breakpoint");
     139                } else if (toWrite instanceof Text && toWrite.getText().equals("Encrypted") && toWrite.getPrimary().getText().equals("Content for Label One")) {
     140                        System.err.println("EncryptedExpWriter::writeClass::breakpoint");
     141                }
     142               
    128143                LinkedHashMap<Character,Method> itemTags = new LinkedHashMap<Character, Method>(getItemTags());
    129144                LinkedHashMap<String,Method> itemTagsExt = new LinkedHashMap<String, Method>(getItemTagsExt());
     
    149164                }
    150165                EncryptionDetail encryptionDetail = toWrite.getEncryptionDetailForTag(tag + "");
    151                                
    152                 switch(encryptionDetail) {
     166                Type encryptionDetailType = encryptionDetail.getEncryptionDetailType();
     167                               
     168                switch(encryptionDetailType) {
    153169                case UnencryptedOnSave:
    154170                        writeTagUnencryptedOnSave(toWrite, param, tags, tag);
     
    166182        }
    167183       
    168         private void writeItemData(Frame frame) throws IOException {
     184        private void writeItemData(Frame frame, boolean primaryItems) throws IOException {
    169185                // write each item in the frame
    170                 for (Item i : frame.getItemsToSave()) {
     186                BodyType bodyType = primaryItems ? BodyType.PrimaryBody : BodyType.SurrogateBody;
     187                for (Item i : frame.getItemsToSave(bodyType)) {
    171188                        assert (!(i instanceof Line));
    172189                        writeItem(i);
     
    176193                        assert (!(i instanceof Line));
    177194                        writeItem(i);
    178                 }
    179                
    180                 // write out the surrogates
    181                 List<Item> surrogates = frame.getSurrogateItemsToSave();
    182                 if (!surrogates.isEmpty()) {
    183                         writeSurrogateTerminator();
    184                         for (Item i: surrogates) {
    185                                 assert (!(i instanceof Line));
    186                                 writeItem(i);
    187                         }
    188195                }
    189196        }
     
    194201                BinaryOperator<Boolean> trueExists = (a, b) -> a || b;
    195202                boolean surrogatesInherit = surrogateItems.stream().map(isTagInherited).collect(Collectors.reducing(trueExists)).get();
    196                 if (surrogatesInherit &&
    197                                 Label.resolveKey(toWrite.getEncryptionLabel()) == LabelResult.SuccessResolveLabelToKey) {
    198                         toWrite.setEncryptionDetailForTag(tag + "", EncryptionDetail.UnencryptedOnSave);
     203                boolean userHasKey = Label.getLabel(toWrite.getEncryptionLabel()) == LabelResult.SuccessResolveLabelToKey;
     204               
     205                if (!surrogatesInherit && userHasKey) {
     206                        EncryptionDetail reencryptOnSave = new EncryptionDetail(EncryptionDetail.Type.ReencryptOnSave);
     207                        toWrite.setEncryptionDetailForTag(tag + "", reencryptOnSave);
     208                        writeTagReencryptOnSave(toWrite, tags, tag);
     209                } else {
     210                        EncryptionDetail unencryptedOnSave = new EncryptionDetail(EncryptionDetail.Type.UnencryptedOnSave);
     211                        toWrite.setEncryptionDetailForTag(tag + "", unencryptedOnSave);
    199212                        writeTagUnencryptedOnSave(toWrite, new Object[] {}, tags, tag);
    200                 } else {
    201                         toWrite.setEncryptionDetailForTag(tag + "", EncryptionDetail.ReencryptOnSave);
    202                         writeTagReencryptOnSave(toWrite, tags, tag);
    203213                }
    204214        }
     
    207217                Method toRun = tags.get(tag);
    208218                Class<?> declarer = toRun.getDeclaringClass();
    209                 LabelResult res = Label.resolveKey(toWrite.getEncryptionLabel());
     219                LabelResult res = Label.getLabel(toWrite.getEncryptionLabel());
    210220                if (declarer.isAssignableFrom(toWrite.getClass()) && res == LabelResult.SuccessResolveLabelToKey) {
    211221                        try {
  • trunk/src/org/expeditee/encryption/items/surrogates/EncryptionDetail.java

    r1413 r1415  
    11package org.expeditee.encryption.items.surrogates;
    22
    3 public enum EncryptionDetail {
    4         // If the property needs to be unencrypted due to inheritance then do not try to encrypt it.
    5         UnencryptedOnSave,
    6        
    7         // If the property is not inherited by any surrogates then we can try to encrypt it. 
    8         // If we do not have key then default to UnencryptedOnSave.
    9         ReencryptOnSave,
    10        
    11         // If the property is no longer inherited by at least one surrogate then this value is present. 
    12         // If it turns out there is no longer any surrogates who inherit the value then this value can be replaced with ReencryptOnSave.
    13         // Otherwise, this value must be replaced with UnencryptedOnSave.
    14         InheritanceCheckOnSave,
    15        
    16         // If we could not decrypt the value on load then EncryptionDetail.getUndecipheredValue() can be used to get the value for saving.
    17         UseUndecipheredValueOnSave;
    18        
    19         private String undecipheredValue = null;
     3public class EncryptionDetail {
     4        private Type type;
     5        private String undecipheredValue;
     6
     7        public EncryptionDetail(Type type) {
     8                this.type = type;               
     9        }
    2010       
    2111        public EncryptionDetail setUndecipheredValue(String undecipheredValue) {
     
    2515       
    2616        public String getUndecipheredValue() {
    27                 return this.undecipheredValue;
     17                return undecipheredValue;
     18        }
     19       
     20        public Type getEncryptionDetailType() {
     21                return type;
     22        }
     23       
     24        @Override
     25        public EncryptionDetail clone() {
     26                EncryptionDetail copy = new EncryptionDetail(this.type);
     27                copy.setUndecipheredValue(this.undecipheredValue);
     28                return copy;
     29        }
     30       
     31        public enum Type {
     32                // If the property needs to be unencrypted due to inheritance then do not try to encrypt it.
     33                UnencryptedOnSave,
     34               
     35                // If the property is not inherited by any surrogates then we can try to encrypt it. 
     36                // If we do not have key then default to UnencryptedOnSave.
     37                ReencryptOnSave,
     38               
     39                // If the property is no longer inherited by at least one surrogate then this value is present. 
     40                // If it turns out there is no longer any surrogates who inherit the value then this value can be replaced with ReencryptOnSave.
     41                // Otherwise, this value must be replaced with UnencryptedOnSave.
     42                InheritanceCheckOnSave,
     43               
     44                // If we could not decrypt the value on load then EncryptionDetail.getUndecipheredValue() can be used to get the value for saving.
     45                UseUndecipheredValueOnSave;
    2846        }
    2947}
  • trunk/src/org/expeditee/encryption/items/surrogates/Label.java

    r1413 r1415  
    22
    33import java.util.ArrayList;
     4import java.util.Arrays;
    45import java.util.Base64;
    5 import java.util.Collection;
    66import java.util.List;
    7 import java.util.Set;
     7import java.util.function.Predicate;
    88import java.util.stream.Collectors;
    9 
    10 import org.expeditee.auth.AuthenticatorBrowser;
    11 import org.expeditee.gui.DisplayController;
    12 import org.expeditee.gui.Frame;
    13 import org.expeditee.gui.FrameIO;
    14 import org.expeditee.gui.MessageBay;
     9import java.util.stream.Stream;
     10
     11import org.expeditee.gui.ItemsList;
    1512import org.expeditee.items.Item;
    1613import org.expeditee.items.Text;
    17 import org.expeditee.settings.UserSettings;
     14import org.expeditee.settings.identity.secrets.KeyList;
    1815
    1916public class Label {
    2017       
    21         private static List<LabelResult> labelCache = new ArrayList<LabelResult>();
    22         private static List<String> forbiddenLabels = new ArrayList<String>();
    23        
    24         public static LabelResult resolveKey(String label) {
    25                
    26                 if (forbiddenLabels.contains(label)) {
     18        private static int surrogateStep = -1;
     19
     20        public static LabelResult getLabel(String label) {
     21                Text[] userLabels = KeyList.UserLabels.get();
     22                Text labelText = null;
     23                for (Text userLabel : userLabels) {
     24                        if (userLabel.getText().equals(label)) {
     25                                labelText = userLabel;
     26                                break;
     27                        }
     28                }
     29
     30                if (labelText == null) {
     31                        return unableToFindLabelResult(label);
     32                } else {
     33                        List<String> data = labelText.getData();
     34                        if (data == null || data.isEmpty()) {
     35                                return unableToFindLabelResult(label);
     36                        }
     37                        String dataEntry = data.get(0);
     38                       
     39                        if (dataEntry.contains("{")) {
     40                                return partialKeyResult(label, dataEntry);
     41                        } else {
     42                                return fullKeyResult(label, dataEntry);
     43                        }
     44                }
     45        }
     46       
     47        public static void progressSurrogateMode() {
     48                surrogateStep += 1;
     49        }
     50
     51        public static void resetSurrogateMode() {
     52                surrogateStep = -1;
     53        }
     54
     55        public static List<String> getAccessibleLabelsNames(ItemsList itemsList) {
     56                Text[] userLabels = KeyList.UserLabels.get();
     57                Stream<String> accessibleUserWideLabels = Arrays.asList(userLabels).stream().map(label -> label.getText());
     58               
     59                Predicate<Item> isLabelWithoutEncryptionLabel = item -> item.getEncryptionLabel() == null || item.getEncryptionLabel().isEmpty();
     60                itemsList.removeIf(isLabelWithoutEncryptionLabel);
     61                Stream<String> accessibleFrameLocalLabels = itemsList.underlying().stream().map(item -> item.getEncryptionLabel()).distinct();
     62               
     63                List<String> accessibleLabelsUnion = accessibleUserWideLabels.collect(Collectors.toList());
     64                accessibleLabelsUnion.retainAll(accessibleFrameLocalLabels.collect(Collectors.toList()));
     65               
     66                if (surrogateStep > -1 && surrogateStep < accessibleLabelsUnion.size()) {
     67                        String surrogateModeFilter = accessibleLabelsUnion.get(surrogateStep);
     68                        List<String> single = new ArrayList<String>();
     69                        single.add(surrogateModeFilter);
     70                        return single;
     71                } else {
     72                        resetSurrogateMode();
     73                }
     74               
     75                return accessibleLabelsUnion;
     76        }
     77
     78        private static LabelResult partialKeyResult(String label, String dataEntry) {
     79                dataEntry = dataEntry.substring(dataEntry.indexOf('}') + 1).trim();
     80                LabelResult res = LabelResult.SuccessResolveLabelToPartialKey;
     81                res.name = label;
     82                return res;
     83        }
     84
     85        private static LabelResult unableToFindLabelResult(String label) {
     86                LabelResult res = LabelResult.ErrorUnableToFindLabel;
     87                res.name = label;
     88                return res;
     89        }
     90       
     91        private static LabelResult fullKeyResult(String label, String dataEntry) {
     92                try {
     93                        LabelResult res = LabelResult.SuccessResolveLabelToKey;
     94                        res.key = Base64.getDecoder().decode(dataEntry);
     95                        res.name = label;
     96                        return res;
     97                } catch (IllegalArgumentException e) {
    2798                        return LabelResult.ErrorUnableToFindLabel;
    2899                }
    29                
    30                 LabelResult fromCache = getFromCache(label);
    31                 if (fromCache != null) {
    32                         return fromCache;
    33                 }
    34 
    35                
    36                 String credentialsFrameName = UserSettings.ProfileName.get() +
    37                                 AuthenticatorBrowser.CREDENTIALS_FRAME;
    38                 Frame credentialsFrame = FrameIO.LoadFrame(credentialsFrameName);
    39                 Collection<Text> textItems = credentialsFrame.getTextItems();
    40                 textItems.removeIf(t -> !t.getText().equals("Secrets"));
    41                 textItems.removeIf(t -> !t.hasLink());
    42                 if (textItems.isEmpty()) {
    43                         return LabelResult.ErrorUnableToFindSecretsFrame;
    44                 }
    45                 Text linkToSecretsFrame = textItems.iterator().next();
    46                 if (!linkToSecretsFrame.hasLink()) {
    47                         return LabelResult.ErrorUnableToFindSecretsFrame;
    48                 }
    49                 Frame secretsFrame = FrameIO.LoadFrame(linkToSecretsFrame.getParent().getFramesetName() + linkToSecretsFrame.getLink());
    50                 Collection<Text> labels = secretsFrame.getTextItems();
    51                 labels.removeIf(lbl -> !lbl.getText().equals(label));
    52                 labels.removeIf(lbl -> lbl.getData() == null || lbl.getData().size() == 0);
    53                 if (labels.isEmpty()) {
    54                         return LabelResult.ErrorUnableToFindLabel;
    55                 }
    56                 Text labelItem = labels.iterator().next();
    57                 String data = labelItem.getData().get(0);
    58                 if (data.contains("{")) {
    59                         data = data.substring(data.indexOf('}') + 1).trim();
    60                         LabelResult res = LabelResult.SuccessResolveLabelToPartialKey;
    61                         res.key = Base64.getDecoder().decode(data);
    62                         return res;
    63                 } else {
    64                         try {
    65                                 LabelResult res = LabelResult.SuccessResolveLabelToKey;
    66                                 res.key = Base64.getDecoder().decode(data);
    67                                 res.name = label;
    68                                 labelCache.add(res);
    69                                 return res;
    70                         } catch (IllegalArgumentException e) {
    71                                 return LabelResult.ErrorUnableToFindLabel;
    72                         }
    73                 }
    74         }
    75        
    76         public static void progressSurrogateMode() {
    77                 Collection<Item> allItems = DisplayController.getCurrentFrame().getAllItems();
    78                 allItems.removeIf(item -> item.getEncryptionLabel() == null);
    79                 MessageBay.displayMessage("Encryption labels found on items on current frame: ");
    80                 Set<String> allLabels = allItems.stream().map(i -> i.getEncryptionLabel()).collect(Collectors.toSet());
    81                 StringBuilder sb = new StringBuilder();
    82                 for (String label: allLabels) {
    83                         sb.append(label + ",");
    84                 }
    85                 MessageBay.displayMessage(sb.deleteCharAt(sb.length() - 1).toString());
    86         }
    87        
    88         public static void resetSurrogateMode() {
    89                 // TODO Auto-generated method stub
    90                
    91         }
    92        
    93         private static LabelResult getFromCache(String label) {
    94                 List<LabelResult> cacheCanditates = labelCache.stream().filter(labelResult -> labelResult.name.equals(label)).collect(Collectors.toList());
    95                 if (!cacheCanditates.isEmpty()) {
    96                         return cacheCanditates.get(0);
    97                 } else {
    98                         return null;
    99                 }
    100         }
    101        
    102 //      private static List<List<String>> permutation(List<String> strings, List<List<String>> acc) {
    103 //              for (int i = 0; i < strings.size(); i++) {
    104 //                     
     100        }
     101
     102        //private static Map<LabelResult, LabelAccess> labelCache = new LinkedHashMap<LabelResult, LabelAccess>();
     103        //private static int surrogateStep = -1;
     104        //private static final Predicate<? super LabelResult> isAccessible = a -> labelCache.get(a).allowed;
     105       
     106//      public static LabelResult resolveKey(String label) {
     107//              Stream<LabelResult> stream = labelCache.keySet().stream();
     108//              stream = stream.filter(res -> res.name.equals(label));
     109//              if (stream.count() == 0) {
     110//                      return resolveKeyWorker(label);
     111//              } else {
     112//                      LabelResult labelResult = stream.collect(Collectors.toList()).get(0);
     113//                      LabelAccess accessible = labelCache.get(labelResult);
     114//                      if (accessible.allowed) { return labelResult; }
     115//                      else { return LabelResult.ErrorForbiddenLabel; }
     116//              }
     117//      }       
     118//      private static LabelResult resolveKeyWorker(String label) {
     119//              Frame secretsFrame = getSecretsFrame();
     120//              if (secretsFrame == null) {
     121//                      return LabelResult.ErrorUnableToFindSecretsFrame;
     122//              }
     123//             
     124//              String data = getDataFromLabel(secretsFrame, label);
     125//              if (data == null) {
     126//                      return LabelResult.ErrorUnableToFindLabel;
     127//              }
     128//             
     129//              if (data.contains("{")) {
     130//                      data = data.substring(data.indexOf('}') + 1).trim();
     131//                      LabelResult res = LabelResult.SuccessResolveLabelToPartialKey;
     132//                      res.key = Base64.getDecoder().decode(data);
     133//                      return res;
     134//              } else {
     135//                      try {
     136//                              LabelResult res = LabelResult.SuccessResolveLabelToKey;
     137//                              res.key = Base64.getDecoder().decode(data);
     138//                              res.name = label;
     139//                              labelCache.put(res, new LabelAccess(true));
     140//                              return res;
     141//                      } catch (IllegalArgumentException e) {
     142//                              return LabelResult.ErrorUnableToFindLabel;
     143//                      }
    105144//              }
    106145//      }
     146//     
     147//      private static String getDataFromLabel(Frame frame, String label) {
     148//              Collection<Text> labels = frame.getTextItems();
     149//              labels.removeIf(lbl -> !lbl.getText().equals(label));
     150//              labels.removeIf(lbl -> lbl.getData() == null || lbl.getData().size() == 0);
     151//              if (labels.isEmpty()) { return null; }
     152//              Text labelItem = labels.iterator().next();
     153//              List<String> data = labelItem.getData();
     154//              if (data.isEmpty()) { return null; }
     155//              return data.get(0);
     156//      }
     157//     
     158//      private static Frame getSecretsFrame() {
     159//              String credentialsFrameName = UserSettings.ProfileName.get() +
     160//                              AuthenticatorBrowser.CREDENTIALS_FRAME;
     161//              Frame credentialsFrame = FrameIO.LoadFrame(credentialsFrameName);
     162//              Collection<Text> textItems = credentialsFrame.getTextItems();
     163//              textItems.removeIf(t -> !t.getText().equals("Secrets"));
     164//              textItems.removeIf(t -> !t.hasLink());
     165//              if (textItems.isEmpty()) {
     166//                      return null;
     167//              }
     168//              Text linkToSecretsFrame = textItems.iterator().next();
     169//              if (!linkToSecretsFrame.hasLink()) {
     170//                      return null;
     171//              }
     172//              Frame secretsFrame = FrameIO.LoadFrame(linkToSecretsFrame.getParent().getFramesetName() + linkToSecretsFrame.getLink());
     173//              return secretsFrame;
     174//      }
     175//     
     176//      private static class LabelAccess {
     177//              public final boolean allowedDefault;
     178//              public boolean allowed;
     179//             
     180//              public LabelAccess(boolean value) {
     181//                      allowedDefault = value;
     182//                      allowed = allowedDefault;
     183//              }
     184//      }
    107185       
    108186        public enum LabelResult {
     
    110188                SuccessResolveLabelToPartialKey,
    111189                ErrorUnableToFindSecretsFrame,
    112                 ErrorUnableToFindLabel;
     190                ErrorUnableToFindLabel,
     191                ErrorForbiddenLabel;
    113192               
    114193                public byte[] key;
     
    125204                                return "Unable to find your Secrets Frame.";
    126205                        case ErrorUnableToFindLabel:
    127                                 return "Unable to resolve label to encrypt/decrypt frame.  Label: ";
     206                                return "Unable to resolve label to encrypt/decrypt frame.  Label: " + name;
     207                        case ErrorForbiddenLabel:
     208                                return "Whilst you have the key for label " + name + " ; you are not allowed to use it.";
    128209                        }
    129210                       
  • trunk/src/org/expeditee/gio/InputManager.java

    r1164 r1415  
    306306        protected final void distributeInputEvent(InputEvent event)
    307307        {
     308//              if (event instanceof KBMInputEvent) {
     309//                      KBMInputEvent kEvent = (KBMInputEvent) event;
     310//                      if (kEvent.getKeyDown() != null) {
     311//                              System.err.println("distributeInputEvent:::" + kEvent.toString());
     312//                      }
     313//              }
     314               
    308315                // Allow listeners to optionally consume input before gesture translation
    309316                for (InputEventListener listener : _inputEventListeners) {
  • trunk/src/org/expeditee/gio/TextLayoutManager.java

    r1150 r1415  
    6868        public float getLineWidth(Point p, Line[] lines)
    6969        {
    70                 float width = Float.MAX_VALUE;
     70                float width = (float) Integer.MAX_VALUE;
    7171                for(Line l : lines) {
    7272                        // check for lines that cross over our y
  • trunk/src/org/expeditee/gio/gesture/ExpediteeKBMGestureTranslator.java

    r1413 r1415  
    77import org.expeditee.gio.EcosystemManager;
    88import org.expeditee.gio.TimeoutQueue.TimeoutHandle;
     9import org.expeditee.gio.gesture.Gesture.GestureType;
    910import org.expeditee.gio.gesture.StandardGestureActions.StandardGestureType;
    1011import org.expeditee.gio.gesture.data.ChangeColourGestureData;
     
    100101                                        return null;
    101102                                }
     103                               
    102104                                //System.err.println("ExpediteeKBMGestureTranslator::" + details() + ": " + kbmEvent.getCharTyped());
    103105                                // Generate a INSERT_STRING gesture
     
    130132                addTranslator(new InputEventToGestureTranslator(InputType.KBM)
    131133                {
    132                         private static final int NO_CONSTRAINT = 0;
     134                        //private static final int NO_CONSTRAINT = 0;
    133135                        private SelectAreaGestureData _draggedFromData = null;
    134                         private int _constrainedDirection = NO_CONSTRAINT;
     136                        //private int _constrainedDirection = NO_CONSTRAINT;
    135137                       
    136138                        @Override
     
    210212                                        newMousePos.add(1, 1);
    211213                                } else*/ {
    212                                         _constrainedDirection = NO_CONSTRAINT;
     214                                        //_constrainedDirection = NO_CONSTRAINT;
    213215                                        newMousePos = kbmEvent.getMouseMove().getSecondEnd().clone();
    214216                                }
     
    682684               
    683685                // Add the F10 -> TOGGLE_XRAY_MODE gesture recogniser
    684                 addTranslator(new InputEventToGestureTranslator(InputType.KBM)
    685                 {
     686                addTranslator(new InputEventToGestureTranslator(InputType.KBM) {
     687                       
    686688                        @Override
    687689                        public String details() { return "F10 -> TOGGLE_XRAY_MODE"; }
    688 
    689                         @Override
    690                         public List<Gesture> onInputEvent(InputEvent event) {
    691                                 // Cast to keyboard/mouse event
    692                                 KBMInputEvent kbmEvent = (KBMInputEvent) event;
    693 
     690                       
     691                        @Override
     692                        public List<Gesture> onInputEvent(InputEvent event) {
     693                                // Cast to keyboard/mouse event
     694                                KBMInputEvent kbmEvent = (KBMInputEvent) event;
     695                               
    694696                                // Must be pressing F10 to xray mode
    695                                 if (kbmEvent.getKeyDown() != KBMInputEvent.Key.F10) {
    696                                         return null;
    697                                 }
    698                                
    699                                 // Return the gesture
    700                                 if (kbmTranslator.isKeyDown(Key.SHIFT)) {
    701                                         UndoGestureData data = new UndoGestureData(kbmTranslator.isKeyDown(Key.CTRL));
    702                                         return Gesture.single(StandardGestureActions.getInstance().gestureType(StandardGestureType.TOGGLE_SURROGATE_MODE), data);
    703                                 } else {
    704                                         return Gesture.single(StandardGestureActions.getInstance().gestureType(StandardGestureType.TOGGLE_XRAY_MODE), null);
    705                                 }
     697                                if (kbmEvent.getKeyDown() != KBMInputEvent.Key.F10 || kbmTranslator.isKeyDown(Key.SHIFT)) {
     698                                        return null;
     699                                }
     700                               
     701                                return Gesture.single(StandardGestureActions.getInstance().gestureType(StandardGestureType.TOGGLE_XRAY_MODE), null);
     702                        }
     703                });
     704               
     705                // Add the F10 -> CYCLE_SURROGATE_MODE gesture recogniser
     706                addTranslator(new InputEventToGestureTranslator(InputType.KBM) {
     707                        @Override
     708                        public String details() { return "F10 -> CYCLE_SURROGATE_MODE"; }
     709                       
     710                        @Override
     711                        public List<Gesture> onInputEvent(InputEvent event) {
     712                                // Case to keyboard/mouse event
     713                                KBMInputEvent kbmEvent = (KBMInputEvent) event;
     714                               
     715                                // Must be pressing F10 to surrogate mode
     716                                if (kbmEvent.getKeyDown() != KBMInputEvent.Key.F10 || !kbmTranslator.isKeyDown(Key.SHIFT)) {
     717                                        return null;
     718                                }
     719                               
     720                                UndoGestureData data = new UndoGestureData(kbmTranslator.isKeyDown(Key.CTRL));
     721                                return Gesture.single(StandardGestureActions.getInstance().gestureType(StandardGestureType.CYCLE_SURROGATE_MODE), data);
    706722                        }
    707723                });
     
    21902206                                        return Gesture.single(vFormat);
    21912207                                }
     2208                        }
     2209                });
     2210               
     2211                // Add the ENTER_CHAR_TYPED -> ACTIVATE BUTTON -> FORMAT gesture recogniser
     2212                addTranslator(new InputEventToGestureTranslator(InputType.KBM)
     2213                {
     2214                        @Override
     2215                        public String details() { return "ENTER_CHAR_TYPED -> ACTIVATE BUTTON"; }
     2216
     2217                        @Override
     2218                        public List<Gesture> onInputEvent(InputEvent event) {
     2219                                // Cast to keyboard/mouse event
     2220                                KBMInputEvent kbmEvent = (KBMInputEvent) event;
     2221                       
     2222                                if (kbmEvent.getKeyDown() != Key.ENTER) {
     2223                                        return null;
     2224                                }
     2225                               
     2226                                GestureType gestureType = StandardGestureActions.getInstance().gestureType(StandardGestureType.ACTIVATE_BUTTON);
     2227                                ItemSpecificGestureData data = new ClickGestureData(false);
     2228                                return Gesture.single(gestureType, data);
    21922229                        }
    21932230                });
  • trunk/src/org/expeditee/gio/gesture/StandardGestureActions.java

    r1413 r1415  
    5454import org.expeditee.gui.FreeItems;
    5555import org.expeditee.gui.MessageBay;
     56import org.expeditee.gui.ItemsList;
    5657import org.expeditee.gui.Vector;
    5758import org.expeditee.io.ExpClipReader;
     
    123124                TOGGLE_ITEMS_MARK, // Show/hide the little circle indicating the item has a link and/or action
    124125                TOGGLE_XRAY_MODE, // F10
    125                 TOGGLE_SURROGATE_MODE, // Shift + F10
     126                CYCLE_SURROGATE_MODE, // Shift + F10
    126127                UNDO,
    127                 ZOOM
     128                ZOOM,
     129                ACTIVATE_BUTTON // Enter while over Item with _acceptsKeyboardEnter set to true
    128130        }
    129131        //@formatter:on
     
    420422                        public void exec(Gesture gesture) {
    421423                                InsertStringGestureData data = (InsertStringGestureData) gesture.getData();
    422                                 for (char c : data.getString().toCharArray()) {
     424                               
     425                                Item currentItem = data.getCurrentItem();
     426                                char[] charArray = data.getString().toCharArray();
     427                               
     428                                if (currentItem != null) {
     429                                        // If we are over a item taht accepts keyboard enter and the only
     430                                        // character being entered is the enter key then we do not insert it.
     431                                        boolean keyboardEnter = data.getCurrentItem().acceptsKeyboardEnter();
     432                                        if (keyboardEnter && charArray.length == 1 && charArray[0] == (char) 10) {
     433                                                return;
     434                                        }
     435                                }
     436                                                               
     437                                for (char c : charArray) {
    423438                                        processChar(c, data.isShiftDown());
    424439                                }
     
    967982                });
    968983               
    969                 setGestureAction(gestureType(StandardGestureType.TOGGLE_SURROGATE_MODE), new GestureAction() {
     984                // Set the ACTIVATE BUTTON action
     985                setGestureAction(gestureType(StandardGestureType.ACTIVATE_BUTTON), new GestureAction() {
     986                        @Override
     987                        public void exec(Gesture gesture) {
     988                                ItemSpecificGestureData data = (ItemSpecificGestureData) gesture.getData();
     989                                if (data.getCurrentItem().acceptsKeyboardEnter()) {
     990                                        getGestureAction(Gesture.GestureType.get("CLICK")).exec(gesture);
     991                                }
     992                        }                       
     993                });
     994               
     995                setGestureAction(gestureType(StandardGestureType.CYCLE_SURROGATE_MODE), new GestureAction() {
    970996                        @Override
    971997                        public void exec(Gesture gesture) {
     
    17451771                        if (_lastHoldsHighlight) {
    17461772                                _lastHoldsHighlight = false;
    1747                                 for (Item i : DisplayController.getCurrentFrame().getItems()) {
     1773                                for (Item i : DisplayController.getCurrentFrame().getSortedItems()) {
    17481774                                        if (i.isHighlighted() && i != on) {
    17491775                                                FrameGraphics.changeHighlightMode(i, Item.HighlightMode.None);
     
    18241850
    18251851                if (checkEnclosure) {
    1826                         ItemUtils.EnclosedCheck(toAnchor.getParentOrCurrentFrame().getItems());
     1852                        ItemUtils.EnclosedCheck(toAnchor.getParentOrCurrentFrame().getSortedItems());
    18271853                        DisplayController.requestRefresh(true);
    18281854                }
     
    19361962                                }
    19371963                        } else if (!toUndo.contains(i)) {
    1938                                 if (addToUndo)
    1939                                  {
     1964                                if (addToUndo) {
    19401965                                        toUndo.add(i); // Why was is this a copy
    19411966                                }
     
    19511976                // the current frame as well as the overlay frame
    19521977                Frame currentFrame = DisplayController.getCurrentFrame();
    1953                 currentFrame.addToUndoDelete(itemList);
     1978                currentFrame.addToUndoDelete(new ItemsList(itemList));
    19541979                itemList.clear();
    19551980                if (bReparse) {
     
    32683293                        SessionStats.DeletedItems(toUndo);
    32693294                        if (parent != null) {
    3270                                 parent.addToUndoDelete(toUndo);
     3295                                parent.addToUndoDelete(new ItemsList(toUndo));
    32713296                                parent.removeAllItems(toUndo); // toDelete.getConnected()
    32723297                        }
     
    36103635                                                        DisplayController.setCursorPosition(toDisconnect.getPosition(), false);
    36113636                                                        pickup(newPoint);
    3612                                                         ItemUtils.EnclosedCheck(toDisconnect.getParentOrCurrentFrame().getItems());
     3637                                                        ItemUtils.EnclosedCheck(toDisconnect.getParentOrCurrentFrame().getSortedItems());
    36133638                                                }
    36143639                                        }
     
    39263951                mergee.getParent().setChanged(true);
    39273952
    3928                 ItemUtils.EnclosedCheck(mergee.getParent().getItems());
     3953                ItemUtils.EnclosedCheck(mergee.getParent().getSortedItems());
    39293954                // Mike: Why does parse frame have to be called?!?
    39303955                FrameUtils.Parse(mergee.getParent());
     
    43864411                        int mouseY = position.getY();
    43874412                        // System.out.println(mouseX + "," + mouseY);
    4388                         for (Item i : DisplayController.getCurrentFrame().getItems()) {
     4413                        for (Item i : DisplayController.getCurrentFrame().getSortedItems()) {
    43894414                                // System.out.println(i.getName().toString());
    43904415                                if (i instanceof Text) {
  • trunk/src/org/expeditee/gio/input/InputEventToGestureTranslatorSet.java

    r1127 r1415  
    5757                if (_recognisers.isEmpty())
    5858                        return null;
     59               
     60//              if (event instanceof KBMInputEvent) {
     61//                      KBMInputEvent kEvent = (KBMInputEvent) event;
     62//                      if (kEvent.getKeyDown() != null) {
     63//                              System.err.println("onInputEvent:::" + kEvent.toString());
     64//                      }
     65//              }
    5966
    6067                // Only interested in monitored events
  • trunk/src/org/expeditee/gio/input/KBMInputEvent.java

    r1097 r1415  
    3737                BACKSPACE,
    3838                TAB,
     39                ENTER,
    3940                A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z
    4041        }
  • trunk/src/org/expeditee/gio/input/StandardInputEventListeners.java

    r1097 r1415  
    5252               
    5353                @Override
    54                 public boolean onInputEvent(InputEvent event)
    55                 {
     54                public boolean onInputEvent(InputEvent event) {
    5655                        // Only interested in keyboard/mouse events
    5756                        if (event.getInputType() != InputType.KBM) return false;
     
    7776                }
    7877               
    79                 public boolean isKeyDown(Key key)
    80                 {
     78                public boolean isKeyDown(Key key) {
    8179                        return (key != null) && (_keyState[key.ordinal()] == Boolean.TRUE);
    8280                }
    8381               
    84                 public boolean isMouseButtonDown(MouseButton button)
    85                 {
     82                public boolean isMouseButtonDown(MouseButton button) {
    8683                        return (button != null) && (_mouseState[button.ordinal()] == Boolean.TRUE);
    8784                }
    8885               
    89                 public boolean isOnlyMouseButtonDown(MouseButton button)
    90                 {
     86                public boolean isOnlyMouseButtonDown(MouseButton button) {
    9187                        if (button == null) return false;
    9288                       
     
    9894                }
    9995               
    100                 public boolean isAnyMouseButtonDown()
    101                 {
     96                public boolean isAnyMouseButtonDown() {
    10297                        for (MouseButton button : MouseButton.values()) {
    10398                                if (isMouseButtonDown(button)) return true;
  • trunk/src/org/expeditee/gio/javafx/JavaFXConversions.java

    r1144 r1415  
    137137                case Y: return org.expeditee.gio.input.KBMInputEvent.Key.Y;
    138138                case Z: return org.expeditee.gio.input.KBMInputEvent.Key.Z;
     139                case ENTER: return org.expeditee.gio.input.KBMInputEvent.Key.ENTER;
    139140                default: return null;
    140141                }
  • trunk/src/org/expeditee/gio/swing/SwingConversions.java

    r1144 r1415  
    350350                case java.awt.event.KeyEvent.VK_Y: return org.expeditee.gio.input.KBMInputEvent.Key.Y;
    351351                case java.awt.event.KeyEvent.VK_Z: return org.expeditee.gio.input.KBMInputEvent.Key.Z;
     352                case java.awt.event.KeyEvent.VK_ENTER: return org.expeditee.gio.input.KBMInputEvent.Key.ENTER;
    352353                default: return null;
    353354                }
  • trunk/src/org/expeditee/gio/swing/SwingInputManager.java

    r1248 r1415  
    44import java.awt.Color;
    55import java.awt.Dimension;
     6import java.awt.KeyEventDispatcher;
     7import java.awt.KeyboardFocusManager;
    68import java.awt.MouseInfo;
    79import java.awt.Robot;
     
    3335import org.expeditee.gio.input.InputEvent.InputType;
    3436import org.expeditee.gio.input.KBMInputEvent;
     37import org.expeditee.gio.input.KBMInputEvent.Key;
     38import org.expeditee.gio.input.StandardInputEventListeners;
    3539import org.expeditee.gui.Popup;
    3640import org.expeditee.gui.PopupManager;
     
    3842
    3943public class SwingInputManager extends InputManager implements ComponentListener, WindowListener, WindowStateListener,
    40                 KeyListener, MouseListener, MouseMotionListener, MouseWheelListener {
     44                KeyListener, MouseListener, MouseMotionListener, MouseWheelListener, KeyEventDispatcher {
    4145        /** Singleton instance. */
    4246        private static SwingInputManager _instance;
     
    7377                // Sign up to receive input as events
    7478                SwingGraphicsManager graphicsManager = SwingMiscManager.getIfUsingSwingGraphicsManager();
    75                 if (graphicsManager != null) {
     79                if (graphicsManager != null) {                 
    7680                        graphicsManager.addWindowListener(swingInputManager);
    7781                        graphicsManager.addWindowStateListener(swingInputManager);
     
    9195                        graphicsManager.getGlassPane().setVisible(true);
    9296                        graphicsManager.getContentPane().setBackground(Color.WHITE);
    93                         graphicsManager.getContentPane().setFocusTraversalKeysEnabled(false);
    94                 }
     97                }
     98                graphicsManager.getContentPane().setFocusTraversalKeysEnabled(false);
    9599
    96100                // Set up the robot (for controlling the mouse)
     
    111115                });
    112116                _timer.setRepeats(false);
     117               
     118//              AWTEventListener[] listeners = Toolkit.getDefaultToolkit().getAWTEventListeners();
     119//              for (AWTEventListener listener: listeners) {
     120//                      System.err.println(listener);
     121//                      F10FriendlyKeyboardFocusManager keyboardManager = new F10FriendlyKeyboardFocusManager(listener);
     122//                      KeyboardFocusManager.setCurrentKeyboardFocusManager(keyboardManager);
     123//              }
     124//             
     125//              F10FriendlyKeyboardFocusManager keyboardManager = new F10FriendlyKeyboardFocusManager(this);
     126//              KeyboardFocusManager.setCurrentKeyboardFocusManager(keyboardManager);
     127
     128                KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(this);
    113129        }
    114130
     
    222238        @Override
    223239        public void mouseWheelMoved(MouseWheelEvent e) {
     240                //ensureShiftAltStateCorrect(e);
    224241                // Give widgets first whack at input
    225242                distributeNativeInput(e);
     
    247264        @Override
    248265        public void mouseMoved(MouseEvent e) {
     266                //ensureShiftAltStateCorrect(e);
     267               
    249268                // Update the cursor position
    250269                updateCursorPosition(e.getX(), e.getY());
     
    271290        @Override
    272291        public void mouseClicked(MouseEvent e) {
     292                //ensureShiftAltStateCorrect(e);
    273293                // Give widgets first whack at input
    274294                distributeNativeInput(e);
     
    282302        @Override
    283303        public void mousePressed(MouseEvent e) {
     304                //ensureShiftAltStateCorrect(e);
    284305                mouseAction(e, true);
    285306        }
     
    287308        @Override
    288309        public void mouseReleased(MouseEvent e) {
     310                //ensureShiftAltStateCorrect(e);
    289311                mouseAction(e, false);
    290312        }
     
    324346                } catch (Exception exception) {
    325347                        System.err.println("SwingInputManager::mouseAction: " + exception.getMessage());
     348                        exception.printStackTrace();
    326349                }
    327350        }
     
    349372        @Override
    350373        public void keyTyped(KeyEvent e) {
    351                 //System.err.println("SwingInputManager::keyTyped::KeyEvent: " + e.getKeyChar());
     374                //System.err.println("SwingInputManager::keyTyped::" + KeyEvent.getKeyText(e.getKeyCode()));
     375                //ensureShiftAltStateCorrect(e);
     376               
    352377                // Give widgets first whack at input
    353378                distributeNativeInput(e);
    354379                if (e.isConsumed()) {
    355                         //System.err.println("SwingInputManager::keyTyped::Widget/Popup Consumed KeyEvent");
    356                         return;
    357                 }
    358 
     380                        return;
     381                }
     382               
    359383                try {
    360384                        // Ignore escape character and control characters
     
    376400        @Override
    377401        public void keyPressed(KeyEvent e) {
     402                //System.err.println("SwingInputManager::keyPressed::" + KeyEvent.getKeyText(e.getKeyCode()));
     403                //ensureShiftAltStateCorrect(e);
    378404                keyAction(e, true);
    379405        }
     
    381407        @Override
    382408        public void keyReleased(KeyEvent e) {
     409                //System.err.println("SwingInputManager::keyReleased::" + KeyEvent.getKeyText(e.getKeyCode()));
    383410                keyAction(e, false);
    384411        }
     412
     413//      private void ensureShiftAltStateCorrect(java.awt.event.InputEvent inputEvent) {
     414////            Component source = (Component) e.getSource();
     415////            int id = KeyEvent.KEY_RELEASED;
     416////            long when = System.currentTimeMillis();
     417////            int keyCode = KeyEvent.VK_UNDEFINED;
     418////            char keyChar = KeyEvent.CHAR_UNDEFINED;
     419//             
     420////            int modifiers = (e.getModifiers() & ~KeyEvent.SHIFT_DOWN_MASK);
     421////            KeyEvent event = new KeyEvent(source, id, when, modifiers, keyCode, keyChar);
     422////            Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(event);
     423//             
     424//              boolean shiftIsDownInRecordedState = StandardInputEventListeners.kbmStateListener.isKeyDown(Key.SHIFT);
     425//              boolean shiftIsDownEventState = inputEvent.isShiftDown();
     426//              if (shiftIsDownInRecordedState && !shiftIsDownEventState) {
     427//                      try {
     428//                              // Create an input event
     429//                              InputEvent event = new KBMInputEvent(KBMInputEvent.EventType.KEY_UP, KBMInputEvent.Key.SHIFT);
     430//                              System.err.println("SwingInputManager::ensureShiftAltStateCorrect::Sending followup Shift Up");
     431//                             
     432//                              // Translate and perform the input
     433//                              distributeInputEvent(event);
     434//                      } catch (Exception exception) {
     435//                              System.err.println(exception.getMessage());
     436//                      }
     437//              }
     438               
     439//              System.err.println("SwingInputManager::ensureShiftAltStateCorrect::datastructure shift down: " + shiftIsDownInRecordedState);
     440//              if (shiftIsDownInRecordedState != e.isShiftDown() && !e.isShiftDown()) {
     441//                      System.err.println("SwingInputManager::ensureShiftAltStateCorrect::Sending shift up event.");
     442//                      int modifiers = (e.getModifiers() & ~KeyEvent.SHIFT_DOWN_MASK);
     443//                      KeyEvent event = new KeyEvent(source, id, when, modifiers, keyCode, keyChar);
     444//                      Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(event);
     445//              }               
     446               
     447//              boolean altIsDown = StandardInputEventListeners.kbmStateListener.isKeyDown(Key.ALT);
     448//              if (altIsDown != e.isAltDown() && !e.isAltDown()) {
     449//                      System.err.println("SwingInputManager::ensureShiftAltStateCorrect::Sending alt up event.");
     450//                      int modifiers = (e.getModifiers() & ~KeyEvent.ALT_DOWN_MASK);
     451//                      KeyEvent event = new KeyEvent(source, id, when, modifiers, keyCode, keyChar);
     452//                      Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(event);
     453//              }
     454//      }
    385455
    386456        /** Handles key pressed/released events. */
    387457        private void keyAction(KeyEvent e, boolean down) {
    388                 //System.err.println("SwingInputManager::keyAction::KeyEvent: " + e.getKeyChar());
    389458                // Give widgets first whack at input
    390459                distributeNativeInput(e);
    391460                if (e.isConsumed()) {
    392                         //System.err.println("SwingInputManager::keyAction::Was consumed: " + e.isConsumed());
    393                         return;
    394                 }
    395                 //System.err.println("SwingInputManager::keyAction::Was consumed: " + e.isConsumed());
    396 
     461                        return;
     462                }
     463               
    397464                KBMInputEvent.Key key = SwingConversions.fromSwingVirtualKey(e.getKeyCode());
    398465                if (key == null) {
    399466                        return;
    400467                }
    401 
     468               
    402469                try {
    403470                        // Create an input event
     
    424491        /** Forwards the given input event to the listener if it is listening for it. */
    425492        private void forwardNativeInputToListener(Object listener, java.awt.event.InputEvent event) {
    426                 //System.err.println("SwingInputManager::forwardNativeInputToListener");
    427493                if (listener == null || event == null) {
    428494                        return;
    429495                }
    430                 //System.err.println("SwingInputManager::forwardNativeInputToListener::Recieving input: " + event.toString());
     496               
    431497                if (listener instanceof KeyListener && event instanceof KeyEvent) {
    432498
    433499                        KeyListener keyListener = (KeyListener) listener;
    434500                        KeyEvent ke = (KeyEvent) event;
    435 
     501                       
    436502                        switch (event.getID()) {
    437503                        case KeyEvent.KEY_PRESSED:
     
    442508                                return;
    443509                        case KeyEvent.KEY_TYPED:
    444                                 //System.err.println("SwingInputManager::forwardNativeInputToListener::Recieving key typed: " + event.toString());
    445510                                keyListener.keyTyped(ke);
    446511                                return;
     
    632697
    633698        }
     699
     700        @Override
     701        public boolean dispatchKeyEvent(KeyEvent e) {
     702                if (e.getKeyCode() == KeyEvent.VK_F10) {
     703                        if (KeyEvent.KEY_PRESSED == e.getID()) {
     704                                keyPressed(e);
     705                        } else if (KeyEvent.KEY_RELEASED == e.getID()) {
     706                                keyReleased(e);
     707                        } else if (KeyEvent.KEY_TYPED == e.getID()) {
     708                                keyTyped(e);
     709                        } else {
     710                                System.err.println("SwingInputManager::dispatchKeyEvent::Found Key that is not pressed, "
     711                                                + "released or typed.  What is it?  " + e.getID());
     712                        }
     713                        return true;
     714                }
     715                return false;
     716        }
    634717}
  • trunk/src/org/expeditee/gio/swing/SwingTextLayoutManager.java

    r1206 r1415  
    262262                        }
    263263                       
    264                         java.awt.font.TextLayout layout = lineBreaker.nextLayout(width, end, dontBreakWords);
     264                        java.awt.font.TextLayout layout = null;
     265
     266                        try {
     267                                layout = lineBreaker.nextLayout(width, end, dontBreakWords);
     268                        } catch (ArrayIndexOutOfBoundsException e) {
     269                                e.printStackTrace();
     270                        }
    265271                       
    266272                        // If it's impossible to layout any more text without breaking a word, just do it
  • trunk/src/org/expeditee/gui/AttributeUtils.java

    r1405 r1415  
    1919package org.expeditee.gui;
    2020
     21import java.lang.reflect.Field;
    2122import java.lang.reflect.InvocationTargetException;
    2223import java.lang.reflect.Method;
     
    331332                        _Attrib.put("TabIndex",                         Text.class.getMethod("getTabIndex"),
    332333                                                                                                Text.class.getMethod("setTabIndex", pInt));
     334                        _Attrib.put("EnterClick",                       Item.class.getMethod("acceptsKeyboardEnter"),
     335                                                                                                Item.class.getMethod("setAcceptsEnter", pBool));
    333336                       
    334337                        // Aliases for attribute setting
     
    566569                        sb.deleteCharAt(sb.length() - 1);
    567570                        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();
    572590                        }
    573591                }
  • trunk/src/org/expeditee/gui/Browser.java

    r1329 r1415  
    274274                if (!AuthenticatorBrowser.isAuthenticationRequired() && UserSettings.PublicAndPrivateResources) {
    275275                        String userName = UserSettings.ProfileName.get();
    276                         FrameIO.setupPersonalResources(userName);
     276                        if (!FrameIO.personalResourcesExist(userName)) {
     277                                FrameIO.setupPersonalResources(userName);
     278                        }
    277279                }
    278280                // Listen for save status to display during and after runtime
  • trunk/src/org/expeditee/gui/DisplayController.java

    r1413 r1415  
    583583                        // frames differ.
    584584                        if (getCurrentFrame() != null && !bothSidesHaveSameFrame()) {
    585                                 for (Item i : getCurrentFrame().getItems()) {
     585                                for (Item i : getCurrentFrame().getSortedItems()) {
    586586                                        i.onParentStateChanged(new ItemParentStateChangedEvent(getCurrentFrame(), ItemParentStateChangedEvent.EVENT_TYPE_HIDDEN));
    587587                                }
     
    590590
    591591                        // BROOK : TODO... overlays and loadable widgets
    592                         for (Item i : getCurrentFrame().getItems()) {
     592                        for (Item i : getCurrentFrame().getSortedItems()) {
    593593                                i.onParentStateChanged(new ItemParentStateChangedEvent(getCurrentFrame(), ItemParentStateChangedEvent.EVENT_TYPE_SHOWN));
    594594                        }
     
    671671                        }
    672672
    673                         for (Item i : frame.getItems()) {
     673                        for (Item i : frame.getSortedItems()) {
    674674                                i.onParentStateChanged(new ItemParentStateChangedEvent(frame,
    675675                                                ItemParentStateChangedEvent.EVENT_TYPE_SHOWN));
     
    925925                StandardGestureActions.setHighlightHold(true);
    926926
    927                 for (Item i : frame.getItems()) {
     927                for (Item i : frame.getSortedItems()) {
    928928                        if (i.getLink() != null && i.getAbsoluteLink().toLowerCase().equals(oldFrame)) {
    929929                                if (i.getHighlightMode() != Item.HighlightMode.Normal) {
     
    11311131                } else {
    11321132                        ToggleAudienceMode();
    1133                         ItemUtils.UpdateConnectedToAnnotations(current.getItems());
     1133                        ItemUtils.UpdateConnectedToAnnotations(current.getSortedItems());
    11341134                        for (Overlay o : current.getOverlays()) {
    1135                                 ItemUtils.UpdateConnectedToAnnotations(o.Frame.getItems());
     1135                                ItemUtils.UpdateConnectedToAnnotations(o.Frame.getSortedItems());
    11361136                        }
    11371137                        for (Vector v : current.getVectorsDeep()) {
    1138                                 ItemUtils.UpdateConnectedToAnnotations(v.Frame.getItems());
     1138                                ItemUtils.UpdateConnectedToAnnotations(v.Frame.getSortedItems());
    11391139                        }
    11401140                }
     
    12071207         * This results in the Frame being re-parsed and repainted.
    12081208         */
    1209         public static void ToggleXRayMode()
    1210         {
     1209        public static void ToggleXRayMode()     {
    12111210                // Turn off x-ray mode if it is on
    12121211                if (_audienceMode) {
  • trunk/src/org/expeditee/gui/Frame.java

    r1414 r1415  
    7777 *
    7878 */
    79 public class Frame /*implements Cloneable*/ {
     79public class Frame {
    8080       
    8181        /** The frame number to indicate this is a virtual frame. */
     
    126126
    127127        private boolean _isLocal = true;
    128 
    129         private boolean _sorted = true;
    130128       
    131129        /** Whether the frame has changed and therefore needs saving. */
     
    139137        private Stack<History> _redo = new Stack<History>();
    140138
    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>();
    144148
    145149        // for drawing purposes
     
    184188        private String _groupFrameName;
    185189        private Frame _groupFrame = null;
     190       
     191        public enum BodyType {
     192                BodyDisplay, PrimaryBody, SurrogateBody;
     193        }
    186194
    187195        /** Default constructor, nothing is set. */
    188196        public Frame() {
    189197        }
    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() {
    252200                return !_frameName.hasPermission(UserAppliedPermission.full) && !_protectionChanged;
    253201        }
    254202
    255         public void reset()
    256         {
     203        public void reset()     {
    257204                refreshItemPermissions(UserAppliedPermission.full);
    258205                resetDot();
     
    403350         * @return The list of Item objects that are on this Frame.
    404351         */
    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) {
    419359                List<Item> items = new ArrayList<Item>();
    420360
    421                 for (Item i : _body) {
     361                for (Item i: listToLoopOver) {
    422362                        if (i == null) {
    423363                                continue;
    424364                        }
    425365                       
    426                         if (i.isVisible() || (!visible && !i.isDeleted())) {
     366                        if (meetsVisibilityRequirements(requireVisible, i)) {
    427367                                items.add(i);
    428368                        }
     
    431371                return items;
    432372        }
    433 
     373       
    434374        /** TODO: Comment. cts16 */
    435         public List<Item> getItems()
    436         {
    437                 return getItems(false);
     375        public List<Item> getSortedItems()
     376        {
     377                return getSortedItems(false);
    438378        }
    439379
     
    443383         * @return True if this frame contains i.
    444384         */
    445         public boolean containsItem(Item i)
    446         {
     385        public boolean containsItem(Item i) {
    447386                if (i == null) {
    448387                        throw new NullPointerException("i");
    449                 }
    450                
     388                }       
    451389                return _body.contains(i);
    452390        }
     
    468406                List<Text> bodyTextItems = new ArrayList<Text>();
    469407               
    470                 for (Item i : getItems(true)) {
     408                for (Item i : getSortedItems(true)) {
    471409                        // only add up normal body text items
    472410                        if ((i instanceof Text) && ((includeAnnotations && !((Text) i).isSpecialAnnotation()) || !i.isAnnotation()) && !i.isLineEnd()) {
     
    483421        {
    484422                Collection<Item> items = new ArrayList<Item>();
    485                 for (Item i : getItems(true)) {
     423                for (Item i : getSortedItems(true)) {
    486424                        // only add up normal body text items
    487425                        if (!i.isAnnotation()) {
     
    505443        public Item getLastNonAnnotationTextItem()
    506444        {
    507                 List<Item> items = getItems();
     445                List<Item> items = getSortedItems();
    508446
    509447                // find the last non-annotation text item
     
    910848         *            The date to set as the last frozen date.
    911849         */
    912         public void setFrozenDate(String date)  {
     850        public void setFrozenDate(String date) {
    913851                _frozenDate = date;
    914852        }
    915853
    916         public void setResort(boolean value)
    917         {
    918                 _sorted = !value;
     854        public void invalidateSorted() {
     855                _body.invalidateSorted();
    919856        }
    920857
     
    925862         *            The Item to add to this Frame.
    926863         */
    927         public void addItem(Item item)
    928         {
     864        public void addItem(Item item) {
    929865                addItem(item, true);
    930866        }
    931867
    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)) {
    935881                        return;
    936882                }
     
    948894                _itemCount = Math.max(_itemCount, item.getID());
    949895
    950                 _body.add(item);
     896                list.add(item);
    951897                item.setParent(this);
    952898                item.setFloating(false); // esnure that it is anchored
     
    959905                        item.setPosition(item.getPosition());
    960906                }
    961 
    962                 _sorted = false;
     907               
     908                list.invalidateSorted();
    963909
    964910                // item.setMaxWidth(FrameGraphics.getMaxFrameSize().width);
     
    983929        }
    984930       
    985         public void addToSurrogates(Item surrogate) {
    986                 this._surrogates.add(surrogate);
     931        public void addToSurrogatesOnLoad(Item surrogate, Item parent) {
     932                parent.addToSurrogates(surrogate);
    987933        }
    988934
     
    991937                boolean bReparse = false;
    992938               
    993                 for (Item i : getItems()) {
     939                for (Item i : getSortedItems()) {
    994940                        Integer anchorLeft   = i.getAnchorLeft();
    995941                        Integer anchorRight  = i.getAnchorRight();
     
    1039985        }
    1040986
    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) {
    1043993                for (Item i : toAdd) {
    1044994                        // If an annotation is being deleted clear the annotation list
     
    1047997                        }
    1048998                        // 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) {
    10551004                for (Item i : toRemove) {
    10561005                        // If an annotation is being deleted clear the annotation list
     
    10661015        }
    10671016
    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) {
    10701027                // If an annotation is being deleted clear the annotation list
    10711028                if (item.isAnnotation()) {
     
    10731030                }
    10741031
    1075                 if (_body.remove(item)) {
     1032                if (toRemoveFrom.remove(item)) {
    10761033                        change();
    10771034                        // Remove widgets from the widget list
     
    10981055         * @param type  The type of event that occurred
    10991056         */
    1100         private void addToUndo(Collection<Item> items, History.Type type)
    1101         {
     1057        private void addToUndo(ItemsList items, History.Type type) {
    11021058                if (items.size() < 1) {
    11031059                        return;
     
    11071063        }
    11081064       
    1109         public void addToUndoDelete(Collection<Item> items)
    1110         {
     1065        public void addToUndoDelete(ItemsList items) {
    11111066                addToUndo(items, History.Type.deletion);
    11121067        }
    11131068       
    1114         public void addToUndoMove(Collection<Item> items)
    1115         {
     1069        public void addToUndoMove(ItemsList items) {
    11161070                addToUndo(items, History.Type.movement);
    11171071        }
     
    11471101                break;
    11481102                case movement:
    1149                         List<Item> changed = new LinkedList<Item>(_body);
    1150                         changed.retainAll(undo.items);
     1103                        ItemsList changed = new ItemsList(_body);
     1104                        changed.retainHistory(undo.items);
    11511105                        _redo.push(new History(changed, History.Type.movement));
    11521106                        for(Item i : undo.items) {
     
    12071161                break;
    12081162                case movement:
    1209                         List<Item> changed = new LinkedList<Item>(_body);
    1210                         changed.retainAll(redo.items);
     1163                        ItemsList changed = new ItemsList(_body);
     1164                        changed.retainHistory(redo.items);
    12111165                        _undo.push(new History(changed, History.Type.movement));
    12121166                        for(Item i : redo.items) {
     
    16771631        {
    16781632                for (Overlay o : _overlays.keySet()) {
    1679                         for (Item i : o.Frame.getItems()) {
     1633                        for (Item i : o.Frame.getSortedItems()) {
    16801634                                i.onParentStateChanged(new ItemParentStateChangedEvent(
    16811635                                                                this,
     
    16951649                                _overlays.remove(o);
    16961650                               
    1697                                 for (Item i : f.getItems()) {
     1651                                for (Item i : f.getSortedItems()) {
    16981652                                        _overlayItems.remove(i);
    16991653                                        i.onParentStateChanged(new ItemParentStateChangedEvent(
     
    17881742                }
    17891743
    1790                 List<Item> copies = ItemUtils.CopyItems(toMergeWith.getItems());
     1744                List<Item> copies = ItemUtils.CopyItems(toMergeWith.getSortedItems());
    17911745                copies.remove(toMergeWith.getNameItem());
    17921746
     
    18341788        public void clear(boolean keepAnnotations)
    18351789        {
    1836                 List<Item> newBody = new ArrayList<Item>(0);
     1790                ItemsList newBody = new ItemsList();
    18371791               
    18381792                Item title = getTitleItem();
     
    20101964                // reset attributes
    20111965                dot.setParent(this);
     1966                dot.setOwner(template.getOwner());
    20121967                return dot;
    20131968        }
     
    20181973
    20191974                // check for an updated template...
    2020                 for (Item i : this.getItems()) {
     1975                for (Item i : this.getSortedItems()) {
    20211976                        if (ItemUtils.startsWithTag(i, templateTag)) {
    20221977                                t = (Text) i;
     
    20321987                        t = defaultTemplate;
    20331988                }
    2034 
     1989               
    20351990                // If the item is linked apply any attribute pairs on the child frame
    20361991                String link = t.getAbsoluteLink();
     
    20381993                // need to get link first because copy doesnt copy the link
    20391994                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                }
    20401999                t.setTooltip(null);
    20412000                if (link != null) {
     
    22022161        public boolean moveMouseToTextItem(int index)
    22032162        {
    2204                 List<Item> items = getItems();
     2163                List<Item> items = getSortedItems();
    22052164                int itemsFound = 0;
    22062165                for (int i = 0; i < items.size(); i++) {
     
    22282187        public boolean moveMouseToDefaultLocation()
    22292188        {
    2230                 List<Item> items = getItems();
     2189                List<Item> items = getSortedItems();
    22312190
    22322191                for (Item it : items) {
     
    25272486        public List<Item> getVisibleItems()
    25282487        {
    2529                 return getItems(true);
     2488                return getSortedItems(true);
    25302489        }
    25312490
     
    25592518         * @return the list of items to be saved to a text file
    25602519         */
    2561         public List<Item> getItemsToSave() {
     2520        /*public List<Item> getItemsToSave() {
    25622521                if (!_sorted) {
    25632522                        Collections.sort(_body);
     
    25992558
    26002559                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;
    26072607        }
    26082608
     
    26232623        }
    26242624
    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);
    26282627               
    26292628                allItems.addAll(_overlayItems);
    26302629                allItems.addAll(_vectorItems);
    2631                 return allItems;
     2630                return allItems.underlying();
    26322631        }
    26332632
     
    26482647                Collection<Text> textItems = new ArrayList<Text>();
    26492648               
    2650                 for (Item i : getItems(true)) {
     2649                for (Item i : getSortedItems(true)) {
    26512650                        // only add up normal body text items
    26522651                        if ((i instanceof Text)) {
     
    26692668        public void recalculate()
    26702669        {
    2671                 for (Item i : getItems()) {
     2670                for (Item i : getSortedItems()) {
    26722671                        if (i.hasFormula() && !i.isAnnotation()) {
    26732672                                i.calculate(i.getFormula());
     
    27002699                Collection<Text> items = new LinkedHashSet<Text>();
    27012700               
    2702                 for (Item i : getItems(true)) {
     2701                for (Item i : getSortedItems(true)) {
    27032702                        // only add up normal body text items
    27042703                        if (i instanceof Text && !i.isAnnotation()) {
     
    27882787        }
    27892788       
    2790         public List<Item> getBodyItemsWithInsufficientPermissions() {
    2791                 return _bodyHiddenDueToPermissions;
     2789        public Collection<Item> getBodyItemsWithInsufficientPermissions() {
     2790                return _bodyHiddenDueToPermissions.underlying();
    27922791        }
    27932792       
     
    28982897                return members;
    28992898        }
     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        }
    29002907
    29012908        private static final class History {
     
    29062913                }
    29072914               
    2908                 public final List<Item> items;
     2915                public final ItemsList items;
    29092916               
    29102917                public final Type type;
    29112918               
    2912                 public History(Collection<Item> items, Type type)
     2919                public History(ItemsList changed, Type type)
    29132920                {
    2914                         this.items = new LinkedList<Item>(items);
     2921                        this.items = new ItemsList(changed);
    29152922                        this.type = type;
    29162923                }
     
    29222929                }
    29232930        }
     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        }
    29242945}
  • trunk/src/org/expeditee/gui/FrameCreator.java

    r1304 r1415  
    276276                _lastX = START_X;
    277277                // Check for @Start
    278                 for (Item it : toUse.getItems()) {
     278                for (Item it : toUse.getSortedItems()) {
    279279                        if (it instanceof Text) {
    280280                                Text t = (Text) it;
  • trunk/src/org/expeditee/gui/FrameGraphics.java

    r1413 r1415  
    141141                EcosystemManager.getGraphicsManager().clear(backgroundColor);
    142142
    143                 List<Item> visibleItems = new LinkedList<Item>();
     143                List<Item> itemsToPaintCanditates = new LinkedList<Item>();
    144144                List<Widget> paintWidgets;
    145145
     
    147147                        // Add all the items for this frame and any other from other
    148148                        // frames
    149                         visibleItems.addAll(toPaint.getAllItems());
     149                        itemsToPaintCanditates.addAll(toPaint.getAllItems());
    150150                        paintWidgets = toPaint.getAllOverlayWidgets();
    151151                        paintWidgets.addAll(toPaint.getInteractiveWidgets());
    152152                } else {
    153                         visibleItems.addAll(toPaint.getVisibleItems());
    154                         visibleItems.addAll(toPaint.getVectorItems());
     153                        itemsToPaintCanditates.addAll(toPaint.getVisibleItems());
     154                        itemsToPaintCanditates.addAll(toPaint.getVectorItems());
    155155                        paintWidgets = toPaint.getInteractiveWidgets();
    156156                }
     
    181181
    182182                if (clip == null) {
    183                         paintItems = visibleItems;
     183                        paintItems = itemsToPaintCanditates;
    184184                } else {
    185185                        fillOnlyItems = new HashSet<Item>();
    186186                        paintItems = new LinkedList<Item>();
    187                         for (Item i : visibleItems) {
     187                        for (Item i : itemsToPaintCanditates) {
    188188                                if (clip == null || i.isInDrawingArea(clip.getBounds())) {
    189189                                        paintItems.add(i);
     
    201201                // Only paint files and lines once ... between anchored AND free items
    202202                PaintPictures(paintItems, fillOnlyItems, paintedFillsAndLines);
    203                 PaintLines(visibleItems);
     203                PaintLines(itemsToPaintCanditates);
    204204
    205205
     
    380380
    381381                List<Item> toFill = new LinkedList<Item>();
     382               
    382383                for (Item i : toPaint) {
    383384                        // Ignore items that have already been done!
  • trunk/src/org/expeditee/gui/FrameIO.java

    r1406 r1415  
    8888 */
    8989
    90 
    9190public class FrameIO {
    9291
     
    214213        }
    215214       
    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 paths
    233 //              if (UserSettings.PublicAndPrivateResources) {
    234 //                      // Work with a system of public and private folders
    235 //                     
    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_NOBODY
    257 //                      // => 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        
    293215        // All methods are static, this should not be instantiated
    294216        private FrameIO() {
     
    1001923                template.resetDateCreated();
    1002924
    1003                 for (Item i : template.getItems()) {
     925                for (Item i : template.getSortedItems()) {
    1004926                        if (ItemUtils.startsWithTag(i, ItemUtils.TAG_PARENT)) {
    1005927                                i.setLink(null);
     
    1009931                // do auto shrinking of the title IF not in twin frames mode and the title is not centred
    1010932                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) {
    1013939                        if ((titleItem.getX() + 1) < template.getNameItem().getX()) {
    1014940                                int title_item_xr = titleItem.getX() + titleItem.getBoundsWidth(); // should really be '... -1'
     
    13071233                                EcosystemManager.getMiscManager().beep();
    13081234                        } else if (checkBackup
    1309                                         && ItemUtils.ContainsExactTag(toSave.getItems(),
     1235                                        && ItemUtils.ContainsExactTag(toSave.getSortedItems(),
    13101236                                                        ItemUtils.TAG_BACKUP)) {
    13111237                                SuspendCache();
     
    13381264                                }
    13391265
    1340                                 Item i = ItemUtils.FindExactTag(toSave.getItems(),
     1266                                Item i = ItemUtils.FindExactTag(toSave.getSortedItems(),
    13411267                                                ItemUtils.TAG_BACKUP);
    13421268                                i.setLink(original.getName());
     
    14801406        }
    14811407
    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 {
    14831409                Frame profile = CreateFrameset(username, PROFILE_PATH, true);
    14841410                if (profile != null) {
     
    21102036        }
    21112037       
     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       
    21122045        public static Path setupPersonalResources(String username) {
    21132046                Path personalResources = Paths.get(FrameIO.PARENT_FOLDER).resolve("resources-" + username);
  • trunk/src/org/expeditee/gui/FrameUtils.java

    r1407 r1415  
    6060import org.expeditee.core.bounds.AxisAlignedBoxBounds;
    6161import org.expeditee.core.bounds.PolygonBounds;
     62import org.expeditee.encryption.items.surrogates.Label;
    6263import org.expeditee.gio.EcosystemManager;
    6364import org.expeditee.gio.gesture.StandardGestureActions;
     
    384385                }
    385386
    386                 for (Item i : current.getItems()) {
     387                for (Item i : current.getSortedItems()) {
    387388                        i.setHighlightMode(Item.HighlightMode.None);
    388389                        i.setHighlightColorToDefault();
     
    642643         * @return True if the image was created successfully, false otherwise
    643644         */
    644         private static boolean createPicture(Frame frame, Text txt) {
     645        private static boolean createPicture(Frame frame, Text txt, ItemsList items) {
    645646                // attempt to create the picture
    646647                Picture pic = ItemUtils.CreatePicture(txt);
     
    659660                        return false;
    660661                }
    661                 frame.addItem(pic);
     662                frame.addItem(pic, true, items);
    662663
    663664                return true;
     665        }
     666       
     667        private static boolean createPictureInBody(Frame frame, Text txt) {
     668                return createPicture(frame, txt, frame.getBody());
    664669        }
    665670
     
    678683         * @author Brook Novak
    679684         */
    680         private static boolean createWidget(Frame frame, Text txt) {
     685        private static boolean createWidget(Frame frame, Text txt, ItemsList list) {
    681686
    682687                if (frame == null) {
     
    713718                }
    714719
    715                 frame.removeItem(txt);
    716 
    717                 frame.addAllItems(iw.getItems());
     720                frame.removeItem(txt, true, list);
     721
     722                frame.addAllItems(iw.getItems(), list);
    718723
    719724                return true;
     725        }
     726       
     727        private static boolean createWidgetInBody(Frame frame, Text txt) {
     728                return createWidget(frame, txt, frame.getBody());
    720729        }
    721730
     
    857866                return dirsToAdd;
    858867        }
    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               
    895873                // if XRayMode is on, replace pictures with their underlying text
    896874                if (DisplayController.isXRayMode()) {
     
    901879                        for (Item i : items) {
    902880                                if (i instanceof XRayable) {
    903                                         toParse.removeItem(i);
     881                                        toParse.removeItem(i, true, toTransform);
    904882                                        // Show the items
    905883                                        for (Item item : ((XRayable) i).getConnected()) {
     
    908886                                        }
    909887                                } else if (i instanceof WidgetCorner) {
    910                                         toParse.removeItem(i);
     888                                        toParse.removeItem(i, true, toTransform);
    911889                                } else if (i instanceof WidgetEdge) {
    912                                         toParse.removeItem(i);
     890                                        toParse.removeItem(i, true, toTransform);
    913891                                } else if (i.hasFormula()) {
    914892                                        i.setText(i.getFormula());
     
    920898
    921899                        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
    931904
    932905                // disable reading of cached overlays if in twinframes mode
     
    935908                }
    936909
    937                 // DotType pointtype = DotType.square;
    938                 // boolean filledPoints = true;
    939 
    940                 UserAppliedPermission permission = toParse.getUserAppliedPermission();
    941910                toParse.clearAnnotations();
    942911
    943912                // check for any new overlay items
    944                 for (Item i : toParse.getItems()) {
     913                items = toParse.getItems(false, toTransform);
     914                for (Item i : items) {
    945915                        try {
    946                                 // reset overlay permission
    947                                 i.setOverlayPermission(null);
    948                                 // i.setPermission(permission);
    949916                                if (i instanceof WidgetCorner) {
    950917                                        // TODO improve efficiency so it only updates once... using
     
    952919                                        i.update();
    953920                                } 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) {
    9541020                                        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)
    9791022                                                                && i.getLink() != null) {
    9801023                                                        if (!i.getAbsoluteLink().equals(toParse.getName())) {
     
    10471090                                                        }
    10481091                                                }
    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                                               
    11041093                                        }
    11051094                                }
     
    11181107                 */
    11191108
    1120                 FrameIO.ResumeCache();
     1109                if (DisplayController.isTwinFramesOn()) {
     1110                        FrameIO.ResumeCache();
     1111                }
    11211112
    11221113                toParse.clearOverlays();
     
    11241115                toParse.addAllOverlays(overlays);
    11251116                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;
    11271176        }
    11281177
     
    12251274                                if (LastEdited.contains(x, y) && !FreeItems.getInstance().contains(LastEdited)
    12261275                                                && LastEdited.getParent() == DisplayController.getCurrentFrame()
    1227                                                 && LastEdited.getParent().getItems().contains(LastEdited)) {
     1276                                                && LastEdited.getParent().getSortedItems().contains(LastEdited)) {
    12281277                                        LastEdited.setOverlayPermission(UserAppliedPermission.full);
    12291278                                        return LastEdited;
     
    14121461                        return null;
    14131462                }
    1414                 List<Item> items = current.getItems();
     1463                List<Item> items = current.getSortedItems();
    14151464
    14161465                // Remove all items that are connected to freeItems
     
    15721621                        MessageBay.suppressMessages(true);
    15731622                        int lastNumber = FrameIO.getLastNumber(defaultFrame.getFramesetName());
    1574                         for (int i = 1; i <= lastNumber; i++) {
     1623                        for (int i = 1; i <= lastNumber; i++) {                         
    15751624                                // Load in next default, if it doesn't exist continue loop.
    15761625                                defaultFrame = FrameIO.LoadFrame(defaultFrame.getFramesetName() + i);
     
    16701719                                                Frame indexFrame = FrameIO.LoadFrame(framesetName + '1');
    16711720                                                // Look through the folder for help index pages
    1672                                                 if (indexFrame != null && ItemUtils.FindTag(indexFrame.getItems(), "@HelpIndex") != null) {
     1721                                                if (indexFrame != null && ItemUtils.FindTag(indexFrame.getSortedItems(), "@HelpIndex") != null) {
    16731722                                                        // yPos += spacing;
    16741723                                                        yPos += 30;
  • trunk/src/org/expeditee/gui/MessageBay.java

    r1314 r1415  
    279279
    280280                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);
    281297                        DisplayController.DisableMailMode();
    282                         Misc.beep();
    283298                        return null;
    284299                }
  • trunk/src/org/expeditee/gui/Vector.java

    r1144 r1415  
    2828
    2929/**
    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
    3134 */
    3235public class Vector extends Overlay {
  • trunk/src/org/expeditee/io/Conversion.java

    r1374 r1415  
    691691                        return getExpediteeColorCode((Colour) output);
    692692
    693                 // covert points
     693                // convert points
    694694                if (output instanceof Point)
    695695                        return ((Point) output).getX() + " " + ((Point) output).getY();
    696696
    697                 if (output instanceof Boolean)
    698                         if ((Boolean) output)
    699                                 return null;
    700                         else
    701                                 return "F";
     697                if (output instanceof Boolean) {
     698                        try {
     699                                Class<?> parentClass = method.getDeclaringClass();
     700                                Field defaultValueField = parentClass.getField(method.getName() + "Default");
     701                                boolean defaultValue = defaultValueField.getBoolean(null);
     702                                if (defaultValue == (boolean) output) {
     703                                        return null;
     704                                }
     705                        } catch (IllegalArgumentException e) {
     706                                e.printStackTrace();
     707                        } catch (SecurityException e) {
     708                                e.printStackTrace();
     709                        } catch (NoSuchFieldException e) {
     710                                // true is the default for boolean values when no other default is provided
     711                                if ((boolean) output) {
     712                                        return null;
     713                                } else {
     714                                        return "F";
     715                                }
     716                        } catch (IllegalAccessException e) {
     717                                e.printStackTrace();
     718                        }
     719                        return output;
     720                }
    702721
    703722                if (output instanceof int[]) {
  • trunk/src/org/expeditee/io/DefaultFrameReader.java

    r1414 r1415  
    181181                        _DelayedItemTags.add('/');
    182182                       
    183                         _ItemTagsExt.put(DefaultFrameWriter.ENCRYPTION_LABEL_STR, Item.class.getMethod("setEncryptionLabel", pString));
     183                        _ItemTagsExt.put(DefaultFrameWriter.ENCRYPTION_LABEL_STR, Item.class.getMethod("setEncryptionLabelOnLoad", pString));
    184184                       
    185185                        _ItemTagsExt.put(DefaultFrameWriter.PLACEHOLDER_STR, Text.class.getMethod("setPlaceholder", pString));
    186186                        _ItemTagsExt.put(DefaultFrameWriter.SINGLE_LINE_ONLY_STR, Text.class.getMethod("setSingleLineOnly", pBool));
    187187                        _ItemTagsExt.put(DefaultFrameWriter.TAB_INDEX_STR, Text.class.getMethod("setTabIndex", pInt));
     188                        _ItemTagsExt.put(DefaultFrameWriter.ACCEPTS_ENTER, Item.class.getMethod("setAcceptsEnter", pBool));
    188189                } catch (Exception e) {
    189190                        e.printStackTrace();
  • trunk/src/org/expeditee/io/DefaultFrameWriter.java

    r1413 r1415  
    9999        public static final String PLACEHOLDER_STR = "_ph";
    100100        public static final String ENCRYPTION_LABEL_STR = "_el";
     101        public static final String ACCEPTS_ENTER = "_ae";
    101102        public static final String MAGNETIZED_ITEM_BOTTOM_STR = MAGNETIZED_ITEM_BOTTOM + "";
    102103        public static final String MAGNETIZED_ITEM_TOP_STR = MAGNETIZED_ITEM_TOP + "";
     
    263264                        _ItemTagsExt.put(DefaultFrameWriter.SINGLE_LINE_ONLY_STR, Text.class.getMethod("isSingleLineOnly"));
    264265                        _ItemTagsExt.put(DefaultFrameWriter.TAB_INDEX_STR, Text.class.getMethod("getTabIndex"));
     266                        _ItemTagsExt.put(DefaultFrameWriter.ACCEPTS_ENTER, Item.class.getMethod("acceptsKeyboardEnter"));
    265267                } catch (Exception e) {
    266268                        e.printStackTrace();
     
    308310                                this.writeAnnotationTitle(starting.getTitleItem());
    309311                        else
    310                                 this.writeTitle(starting.getTitleItem(), starting.getItems());
     312                                this.writeTitle(starting.getTitleItem(), starting.getSortedItems());
    311313                }
    312314        }
  • trunk/src/org/expeditee/io/DefaultTreeWriter.java

    r919 r1415  
    8888        protected List<Item> getSortedItems(Frame frame)
    8989        {
    90                 List<Item> items = frame.getItems();
     90                List<Item> items = frame.getSortedItems();
    9191                return items;
    9292        }
  • trunk/src/org/expeditee/io/JavaWriter.java

    r1102 r1415  
    6161        protected List<Item> getSortedItems(Frame frame)
    6262        {
    63                 List<Item> y_ordered_items = frame.getItems();
     63                List<Item> y_ordered_items = frame.getSortedItems();
    6464               
    6565                for (Item item: y_ordered_items) {
  • trunk/src/org/expeditee/io/PDF2Writer.java

    r1258 r1415  
    186186               
    187187                Frame child;
    188                 for(Item i : current.getItems()) {
     188                for(Item i : current.getSortedItems()) {
    189189                        if(i.isAnnotation())
    190190                                continue;
     
    209209                        writeStartFrame(f);
    210210                Text title = f.getTitleItem();
    211                 for(Item i : f.getItems()) {
     211                for(Item i : f.getSortedItems()) {
    212212                        if(i != title) {
    213213                                this.writeItem(i);
     
    220220                                this.writeAnnotationTitle(title);
    221221                        else
    222                                 this.writeTitle(title, f.getItems());
     222                                this.writeTitle(title, f.getSortedItems());
    223223                }
    224224                }
  • trunk/src/org/expeditee/io/TXTWriter.java

    r919 r1415  
    4242        @Override
    4343        protected void writeStartFrame(Frame toParse) throws IOException {
    44                 if (ItemUtils.ContainsTag(toParse.getItems(), "@join"))
     44                if (ItemUtils.ContainsTag(toParse.getSortedItems(), "@join"))
    4545                        _join = !_join;
    4646
    47                 if (ItemUtils.ContainsTag(toParse.getItems(), "@indent"))
     47                if (ItemUtils.ContainsTag(toParse.getSortedItems(), "@indent"))
    4848                        _indent++;
    4949
     
    7373        @Override
    7474        protected void writeEndFrame(Frame toParse) throws IOException {
    75                 if (ItemUtils.ContainsTag(toParse.getItems(), "@indent"))
     75                if (ItemUtils.ContainsTag(toParse.getSortedItems(), "@indent"))
    7676                        if (_indent > 0)
    7777                                _indent--;
    7878
    79                 if (ItemUtils.ContainsTag(toParse.getItems(), "@join"))
     79                if (ItemUtils.ContainsTag(toParse.getSortedItems(), "@join"))
    8080                        _join = !_join;
    8181
     
    8585        @Override
    8686        protected void resumeFrame(Frame resuming) {
    87                 _join = ItemUtils.ContainsTag(resuming.getItems(), "@join");
     87                _join = ItemUtils.ContainsTag(resuming.getSortedItems(), "@join");
    8888        }
    8989
  • trunk/src/org/expeditee/io/WebParser.java

    r1258 r1415  
    366366
    367367                                                frameToAddTo = FrameIO.CreateFrame(frameToAddTo.getFramesetName(), pageTitle, null);
    368                                                 frameToAddTo.removeAllItems(frameToAddTo.getItems());
     368                                                frameToAddTo.removeAllItems(frameToAddTo.getSortedItems());
    369369
    370370                                                try {
  • trunk/src/org/expeditee/io/flowlayout/DimensionExtent.java

    r1102 r1415  
    3838        public static DimensionExtent calcMinMaxXExtent(List<Item>items)
    3939        {
    40 
    4140                int min_x = Integer.MAX_VALUE;
    42                 int max_x = Integer.MIN_VALUE;
     41                int max_x = Integer.MIN_VALUE + 1; // +1 makes it safe to do math.abs on
    4342               
    4443                for (Item item : items) {
     
    5958        public static DimensionExtent calcMinMaxYExtent(List<Item>items)
    6059        {
    61 
    6260                int min_y = Integer.MAX_VALUE;
    63                 int max_y = Integer.MIN_VALUE;
     61                int max_y = Integer.MIN_VALUE + 1; // +1 makes it safe to do math.abs on
    6462               
    6563                for (Item item : items) {
  • trunk/src/org/expeditee/io/flowlayout/XGroupItem.java

    r1102 r1415  
    635635                double enclosureArea = 0.0;
    636636
    637                 for (Item i : frame.getItems()) {
     637                for (Item i : frame.getSortedItems()) {
    638638
    639639                        // Go through all the enclosures ...
  • trunk/src/org/expeditee/items/Circle.java

    r1402 r1415  
    2828import org.expeditee.core.Stroke;
    2929import org.expeditee.core.bounds.AxisAlignedBoxBounds;
    30 import org.expeditee.core.bounds.CombinationBoxBounds;
    3130import org.expeditee.core.bounds.EllipticalBounds;
    3231import org.expeditee.core.bounds.PolygonBounds;
  • trunk/src/org/expeditee/items/Dot.java

    r1318 r1415  
    392392                // TODO is the code below needed... what for?
    393393                for (Line line : getLines()) {
    394                         if (line.getID() < 0 && !current.getItems().contains(line)) {
     394                        if (line.getID() < 0 && !current.getSortedItems().contains(line)) {
    395395                                line.setID(current.getNextItemID());
    396396                                line.setHighlightColorToDefault();
  • trunk/src/org/expeditee/items/Item.java

    r1414 r1415  
    4848import org.expeditee.core.bounds.PolygonBounds;
    4949import org.expeditee.encryption.items.surrogates.EncryptionDetail;
     50import org.expeditee.encryption.items.surrogates.EncryptionDetail.Type;
     51import org.expeditee.encryption.items.surrogates.Label;
     52import org.expeditee.encryption.items.surrogates.Label.LabelResult;
    5053//import org.expeditee.encryption.items.surrogates.Surrogate;
    5154import org.expeditee.gio.EcosystemManager;
     
    156159
    157160        public static final Cursor.CursorType CROP_CURSOR = Cursor.CursorType.CROSSHAIR;
    158 
     161       
    159162        /** The default value for integer attributes */
    160163        public static final int DEFAULT_INTEGER = -1;
    161 
     164       
    162165        private static final int BRIGHTNESS = 185;
    163 
     166       
    164167        /** Contains all dots (including this one) that form an enclosure if this dot is part of an enclosing shape. */
    165168        private Collection<Item> _enclosure = null;
     
    317320       
    318321        private Data _data = new Data();
     322       
     323        // Used via reflection by AttributeUtils to determine if the boolean value is different from default.
     324        public static final boolean acceptsKeyboardEnterDefault = false;
     325        private boolean _acceptsKeyboardEnter = acceptsKeyboardEnterDefault;
    319326
    320327        private Item surrogateFor = null;
     
    326333       
    327334        {
     335                EncryptionDetail unencryptedOnSave = new EncryptionDetail(EncryptionDetail.Type.UnencryptedOnSave);
    328336                for(Character tag: DefaultFrameWriter.getItemTags().keySet()) {
    329337                        if (tag == 'T' || tag == 'S') {
     
    332340                                surrogatePropertyInheritanceDefault.put(tag + "", true);
    333341                        }
    334                         primaryPropertyEncryptionDefault.put(tag + "", EncryptionDetail.UnencryptedOnSave);
     342                        primaryPropertyEncryptionDefault.put(tag + "", unencryptedOnSave);
    335343                }
    336344               
    337345                for(String tag: DefaultFrameWriter.getItemTagsExt().keySet()) {
    338346                        surrogatePropertyInheritanceDefault.put(tag, true);
    339                         primaryPropertyEncryptionDefault.put(tag, EncryptionDetail.UnencryptedOnSave);
     347                        primaryPropertyEncryptionDefault.put(tag, unencryptedOnSave);
    340348                }
    341349        }
     
    383391                dest.setLinkTemplate(this.getLinkTemplate());
    384392
    385                 // dest.setMaxWidth(this.getMaxWidth());
     393                // dest.setWidth(this.getWidth());
    386394
    387395                dest.setOffset(this.getOffset());
     
    424432                }
    425433               
    426                 final String currentUser = UserSettings.UserName.get();
    427                 if (parent != null && (parent.getOwner() == null || currentUser.compareTo(parent.getOwner()) != 0)) {
    428                         dest.setOwner(currentUser);
    429                 }
     434                String currentUser = UserSettings.UserName.get();
     435//              if (parent != null && !currentUser.equals(parent.getOwner())) {
     436//                      //dest.setOwner(currentUser);
     437//              } else {
     438//                      System.err.println("I have duplicated a item and made it owned by "
     439//                                      + "current user, whereas the old code would not have "
     440//                                      + "changed ownership at this time.");
     441//                      System.err.println("Item: " + dest + ", Class: " + dest.getClass());
     442//                      System.err.println("Current owner: " + dest.getOwner());
     443//                      System.err.println("Current user: " + currentUser);
     444//              }
     445                dest.setOwner(currentUser);
    430446        }
    431447       
     
    438454                        Item primary = getPrimary();
    439455                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.DOT_TYPE_STR)) {
    440                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.DOT_TYPE_STR, EncryptionDetail.InheritanceCheckOnSave);
     456                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     457                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.DOT_TYPE_STR, inheritanceCheckOnSave);
    441458                        }
    442459                }
     
    461478                        Item primary = getPrimary();
    462479                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.DOT_TYPE_STR)) {
    463                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.FILLED_STR, EncryptionDetail.InheritanceCheckOnSave);
     480                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     481                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.FILLED_STR, inheritanceCheckOnSave);
    464482                        }
    465483                }
     
    494512                        Item primary = getPrimary();
    495513                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.DOT_TYPE_STR)) {
    496                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.GRADIENT_ANGLE_STR, EncryptionDetail.InheritanceCheckOnSave);
     514                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     515                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.GRADIENT_ANGLE_STR, inheritanceCheckOnSave);
    497516                        }
    498517                }
     
    567586                        Item primary = getPrimary();
    568587                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.DOT_TYPE_STR)) {
    569                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.PERMISSION_STR, EncryptionDetail.InheritanceCheckOnSave);
     588                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     589                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.PERMISSION_STR, inheritanceCheckOnSave);
    570590                        }
    571591                }
     
    11141134                        Item primary = getPrimary();
    11151135                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.FORMULA_STR)) {
    1116                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.FORMULA_STR, EncryptionDetail.InheritanceCheckOnSave);
     1136                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     1137                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.FORMULA_STR, inheritanceCheckOnSave);
    11171138                        }
    11181139                }
     
    13891410                if (otherBounds.equals(thisBounds)) return true;
    13901411
    1391                 return otherBounds.intersects(thisBounds);
     1412                boolean intersects = otherBounds.intersects(thisBounds);
     1413               
     1414                /*if (intersects) {
     1415                        System.err.println("Found intersection between this item (" + this + ") with bounds: " + thisBounds + "...and...");
     1416                        System.err.println("item with bounds: " + otherBounds.toString());
     1417                }*/
     1418                return intersects;
    13921419
    13931420                // Need to check the second equality so that we dont pick up circles
     
    15231550                        Item primary = getPrimary();
    15241551                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.TOOLTIP_STR)) {
    1525                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.TOOLTIP_STR, EncryptionDetail.InheritanceCheckOnSave);
     1552                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     1553                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.TOOLTIP_STR, inheritanceCheckOnSave);
    15261554                        }
    15271555                }
     
    18271855                        Item primary = getPrimary();
    18281856                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.ACTION_STR)) {
    1829                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.ACTION_STR, EncryptionDetail.InheritanceCheckOnSave);
     1857                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     1858                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.ACTION_STR, inheritanceCheckOnSave);
    18301859                        }
    18311860                }
     
    18471876                        Item primary = getPrimary();
    18481877                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.DATA_STR)) {
    1849                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.DATA_STR, EncryptionDetail.InheritanceCheckOnSave);
     1878                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     1879                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.DATA_STR, inheritanceCheckOnSave);
    18501880                        }
    18511881                }
     
    18631893                        Item primary = getPrimary();
    18641894                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.ACTION_CURSOR_ENTER_STR)) {
    1865                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.ACTION_CURSOR_ENTER_STR, EncryptionDetail.InheritanceCheckOnSave);
     1895                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     1896                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.ACTION_CURSOR_ENTER_STR, inheritanceCheckOnSave);
    18661897                        }
    18671898                }
     
    18751906                        Item primary = getPrimary();
    18761907                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.ACTION_CURSOR_LEAVE_STR)) {
    1877                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.ACTION_CURSOR_LEAVE_STR, EncryptionDetail.InheritanceCheckOnSave);
     1908                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     1909                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.ACTION_CURSOR_LEAVE_STR, inheritanceCheckOnSave);
    18781910                        }
    18791911                }
     
    18871919                        Item primary = getPrimary();
    18881920                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.ACTION_ENTER_FRAME_STR)) {
    1889                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.ACTION_ENTER_FRAME_STR, EncryptionDetail.InheritanceCheckOnSave);
     1921                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     1922                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.ACTION_ENTER_FRAME_STR, inheritanceCheckOnSave);
    18901923                        }
    18911924                }
     
    18991932                        Item primary = getPrimary();
    19001933                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.ACTION_LEAVE_FRAME_STR)) {
    1901                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.ACTION_LEAVE_FRAME_STR, EncryptionDetail.InheritanceCheckOnSave);
     1934                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     1935                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.ACTION_LEAVE_FRAME_STR, inheritanceCheckOnSave);
    19021936                        }
    19031937                }
     
    19141948                        Item primary = getPrimary();
    19151949                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.ACTION_MARK_STR)) {
    1916                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.ACTION_MARK_STR, EncryptionDetail.InheritanceCheckOnSave);
     1950                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     1951                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.ACTION_MARK_STR, inheritanceCheckOnSave);
    19171952                        }
    19181953                }
     
    19471982                        Item primary = getPrimary();
    19481983                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.ARROW_STR)) {
    1949                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.ARROW_STR, EncryptionDetail.InheritanceCheckOnSave);
     1984                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     1985                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.ARROW_STR, inheritanceCheckOnSave);
    19501986                        }
    19511987                }
     
    19852021                        Item primary = getPrimary();
    19862022                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.BACKGROUND_COLOR_STR)) {
    1987                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.BACKGROUND_COLOR_STR, EncryptionDetail.InheritanceCheckOnSave);
     2023                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     2024                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.BACKGROUND_COLOR_STR, inheritanceCheckOnSave);
    19882025                        }
    19892026                }
     
    20002037                        Item primary = getPrimary();
    20012038                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.BORDER_COLOR_STR)) {
    2002                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.BORDER_COLOR_STR, EncryptionDetail.InheritanceCheckOnSave);
     2039                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     2040                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.BORDER_COLOR_STR, inheritanceCheckOnSave);
    20032041                        }
    20042042                }
     
    20392077                        Item primary = getPrimary();
    20402078                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.CONSTRAINT_IDS_STR)) {
    2041                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.CONSTRAINT_IDS_STR, EncryptionDetail.InheritanceCheckOnSave);
     2079                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     2080                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.CONSTRAINT_IDS_STR, inheritanceCheckOnSave);
    20422081                        }
    20432082                }
     
    20682107                        Item primary = getPrimary();
    20692108                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.DATE_CREATED_STR)) {
    2070                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.DATE_CREATED_STR, EncryptionDetail.InheritanceCheckOnSave);
     2109                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     2110                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.DATE_CREATED_STR, inheritanceCheckOnSave);
    20712111                        }
    20722112                }
     
    20912131                        Item primary = getPrimary();
    20922132                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.FILL_COLOR_STR)) {
    2093                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.FILL_COLOR_STR, EncryptionDetail.InheritanceCheckOnSave);
     2133                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     2134                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.FILL_COLOR_STR, inheritanceCheckOnSave);
    20942135                        }
    20952136                }
     
    21122153                        Item primary = getPrimary();
    21132154                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.GRADIENT_COLOR_STR)) {
    2114                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.GRADIENT_COLOR_STR, EncryptionDetail.InheritanceCheckOnSave);
     2155                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     2156                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.GRADIENT_COLOR_STR, inheritanceCheckOnSave);
    21152157                        }
    21162158                }
     
    21342176                        Item primary = getPrimary();
    21352177                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.FILL_PATTERN_STR)) {
    2136                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.FILL_PATTERN_STR, EncryptionDetail.InheritanceCheckOnSave);
     2178                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     2179                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.FILL_PATTERN_STR, inheritanceCheckOnSave);
    21372180                        }
    21382181                }
     
    21562199                        Item primary = getPrimary();
    21572200                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.HIGHLIGHT_STR)) {
    2158                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.HIGHLIGHT_STR, EncryptionDetail.InheritanceCheckOnSave);
     2201                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     2202                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.HIGHLIGHT_STR, inheritanceCheckOnSave);
    21592203                        }
    21602204                }
     
    21752219                        Item primary = getPrimary();
    21762220                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.TYPE_AND_ID_STR)) {
    2177                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.TYPE_AND_ID_STR, EncryptionDetail.InheritanceCheckOnSave);
     2221                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     2222                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.TYPE_AND_ID_STR, inheritanceCheckOnSave);
    21782223                        }
    21792224                }
     
    21912236                        Item primary = getPrimary();
    21922237                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.LINE_IDS_STR)) {
    2193                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.LINE_IDS_STR, EncryptionDetail.InheritanceCheckOnSave);
     2238                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     2239                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.LINE_IDS_STR, inheritanceCheckOnSave);
    21942240                        }
    21952241                }
     
    22062252                        Item primary = getPrimary();
    22072253                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.LINE_PATTERN_STR)) {
    2208                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.LINE_PATTERN_STR, EncryptionDetail.InheritanceCheckOnSave);
     2254                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     2255                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.LINE_PATTERN_STR, inheritanceCheckOnSave);
    22092256                        }
    22102257                }
     
    22462293                        Item primary = getPrimary();
    22472294                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.LINK_STR)) {
    2248                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.LINK_STR, EncryptionDetail.InheritanceCheckOnSave);
     2295                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     2296                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.LINK_STR, inheritanceCheckOnSave);
    22492297                        }
    22502298                }
     
    22582306                        Item primary = getPrimary();
    22592307                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.LINK_HISTORY_STR)) {
    2260                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.LINK_HISTORY_STR, EncryptionDetail.InheritanceCheckOnSave);
     2308                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     2309                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.LINK_HISTORY_STR, inheritanceCheckOnSave);
    22612310                        }
    22622311                }
     
    22842333                        Item primary = getPrimary();
    22852334                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.LINK_FRAMESET_STR)) {
    2286                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.LINK_FRAMESET_STR, EncryptionDetail.InheritanceCheckOnSave);
     2335                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     2336                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.LINK_FRAMESET_STR, inheritanceCheckOnSave);
    22872337                        }
    22882338                }
     
    22992349                        Item primary = getPrimary();
    23002350                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.LINK_MARK_STR)) {
    2301                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.LINK_MARK_STR, EncryptionDetail.InheritanceCheckOnSave);
     2351                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     2352                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.LINK_MARK_STR, inheritanceCheckOnSave);
    23022353                        }
    23032354                }
     
    23162367                        Item primary = getPrimary();
    23172368                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.LINK_TEMPLATE_STR)) {
    2318                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.LINK_TEMPLATE_STR, EncryptionDetail.InheritanceCheckOnSave);
     2369                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     2370                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.LINK_TEMPLATE_STR, inheritanceCheckOnSave);
    23192371                        }
    23202372                }
     
    23502402                        Item primary = getPrimary();
    23512403                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.OWNER_STR)) {
    2352                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.OWNER_STR, EncryptionDetail.InheritanceCheckOnSave);
     2404                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     2405                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.OWNER_STR, inheritanceCheckOnSave);
    23532406                        }
    23542407                }
     
    25412594                        Item primary = getPrimary();
    25422595                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.POSITION_STR)) {
    2543                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.POSITION_STR, EncryptionDetail.InheritanceCheckOnSave);
     2596                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     2597                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.POSITION_STR, inheritanceCheckOnSave);
    25442598                        }
    25452599                }
     
    25852639                        Item primary = getPrimary();
    25862640                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.THICKNESS_STR)) {
    2587                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.THICKNESS_STR, EncryptionDetail.InheritanceCheckOnSave);
     2641                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     2642                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.THICKNESS_STR, inheritanceCheckOnSave);
    25882643                        }
    25892644                }
     
    26972752                        Item primary = getPrimary();
    26982753                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.POSITION_STR)) {
    2699                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.POSITION_STR, EncryptionDetail.InheritanceCheckOnSave);
     2754                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     2755                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.POSITION_STR, inheritanceCheckOnSave);
    27002756                        }
    27012757                }
     
    27152771                        Item primary = getPrimary();
    27162772                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.POSITION_STR)) {
    2717                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.POSITION_STR, EncryptionDetail.InheritanceCheckOnSave);
     2773                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     2774                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.POSITION_STR, inheritanceCheckOnSave);
    27182775                        }
    27192776                }
     
    28272884
    28282885                current.addItem(this, false);
    2829                 current.setResort(true);
     2886                current.invalidateSorted();
    28302887                setRelativeLink();
    28312888                setFloating(false);
     
    35273584                        Item primary = getPrimary();
    35283585                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.ANCHOR_LEFT_STR)) {
    3529                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.ANCHOR_LEFT_STR, EncryptionDetail.InheritanceCheckOnSave);
     3586                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     3587                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.ANCHOR_LEFT_STR, inheritanceCheckOnSave);
    35303588                        }
    35313589                }
     
    35433601                        Item primary = getPrimary();
    35443602                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.ANCHOR_RIGHT_STR)) {
    3545                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.ANCHOR_RIGHT_STR, EncryptionDetail.InheritanceCheckOnSave);
     3603                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     3604                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.ANCHOR_RIGHT_STR, inheritanceCheckOnSave);
    35463605                        }
    35473606                }
     
    35593618                        Item primary = getPrimary();
    35603619                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.ANCHOR_TOP_STR)) {
    3561                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.ANCHOR_TOP_STR, EncryptionDetail.InheritanceCheckOnSave);
     3620                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     3621                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.ANCHOR_TOP_STR, inheritanceCheckOnSave);
    35623622                        }
    35633623                }
     
    35763636                        Item primary = getPrimary();
    35773637                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.ANCHOR_BOTTOM_STR)) {
    3578                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.ANCHOR_BOTTOM_STR, EncryptionDetail.InheritanceCheckOnSave);
     3638                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     3639                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.ANCHOR_BOTTOM_STR, inheritanceCheckOnSave);
    35793640                        }
    35803641                }
     
    38863947                        Item primary = getPrimary();
    38873948                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.MAGNETIZED_ITEM_LEFT_STR)) {
    3888                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.MAGNETIZED_ITEM_LEFT_STR, EncryptionDetail.InheritanceCheckOnSave);
     3949                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     3950                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.MAGNETIZED_ITEM_LEFT_STR, inheritanceCheckOnSave);
    38893951                        }
    38903952                }
     
    39113973                        Item primary = getPrimary();
    39123974                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.MAGNETIZED_ITEM_RIGHT_STR)) {
    3913                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.MAGNETIZED_ITEM_RIGHT_STR, EncryptionDetail.InheritanceCheckOnSave);
     3975                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     3976                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.MAGNETIZED_ITEM_RIGHT_STR, inheritanceCheckOnSave);
    39143977                        }
    39153978                }
     
    39363999                        Item primary = getPrimary();
    39374000                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.MAGNETIZED_ITEM_TOP_STR)) {
    3938                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.MAGNETIZED_ITEM_TOP_STR, EncryptionDetail.InheritanceCheckOnSave);
     4001                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     4002                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.MAGNETIZED_ITEM_TOP_STR, inheritanceCheckOnSave);
    39394003                        }
    39404004                }
     
    39614025                        Item primary = getPrimary();
    39624026                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.MAGNETIZED_ITEM_BOTTOM_STR)) {
    3963                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.MAGNETIZED_ITEM_BOTTOM_STR, EncryptionDetail.InheritanceCheckOnSave);
     4027                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     4028                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.MAGNETIZED_ITEM_BOTTOM_STR, inheritanceCheckOnSave);
    39644029                        }
    39654030                }
     
    39754040       
    39764041        public void setEncryptionLabel(String label) {
     4042                if (this.getParent().getEncryptionLabel() == null) {
     4043                        MessageBay.displayMessage("Items can only be entrypted if the frame they are on is.");
     4044                        return;
     4045                }
     4046                LabelResult labelResult = Label.getLabel(label);
     4047                if (labelResult != LabelResult.SuccessResolveLabelToKey) {
     4048                        MessageBay.displayMessage(labelResult.toString());
     4049                        return;
     4050                }
     4051               
    39774052                this._encryptionLabel = label;
    39784053                this.getSurrogates().clear();
     
    39804055                if (copy instanceof Text) {     copy.setText("Encrypted"); }
    39814056                this.addToSurrogates(copy);
     4057        }
     4058       
     4059        public void setEncryptionLabelOnLoad(String label) {
     4060                this._encryptionLabel = label;
    39824061        }
    39834062
     
    40064085                Frame current = dot.getParentOrCurrentFrame();
    40074086                current.removeItem(dot);
    4008                 ItemUtils.EnclosedCheck(current.getItems());
     4087                ItemUtils.EnclosedCheck(current.getSortedItems());
    40094088                return text;
    40104089                // TODO: Should this add the newly-created Text item to the frame? cts16
     
    40294108                current.addItem(dot);
    40304109                DisplayController.setCursor(Item.DEFAULT_CURSOR);
    4031                 ItemUtils.EnclosedCheck(current.getItems());
     4110                ItemUtils.EnclosedCheck(current.getSortedItems());
    40324111                return dot;
    40334112        }
     
    40444123                this.surrogateItems.add(surrogate);
    40454124                surrogate.setAsSurrogateFor(this);
     4125                this.getParent().addItem(surrogate);
     4126               
     4127                EncryptionDetail reencryptOnSave = new EncryptionDetail(EncryptionDetail.Type.ReencryptOnSave);
     4128                EncryptionDetail unencryptedOnSave = new EncryptionDetail(EncryptionDetail.Type.UnencryptedOnSave);
     4129                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
    40464130               
    40474131                for (Character tag: DefaultFrameWriter.getItemTags().keySet()) {
    40484132                        if (tag == 'T') {
    4049                                 primaryPropertyEncryption.put(tag + "", EncryptionDetail.ReencryptOnSave);
     4133                                primaryPropertyEncryption.put(tag + "", reencryptOnSave.clone());
    40504134                        } else {
    4051                                 primaryPropertyEncryption.put(tag + "", EncryptionDetail.UnencryptedOnSave);
     4135                                primaryPropertyEncryption.put(tag + "", unencryptedOnSave.clone());
    40524136                        }
    40534137                                       
     
    40604144               
    40614145                for (String tag: DefaultFrameWriter.getItemTagsExt().keySet()) {
    4062                         primaryPropertyEncryption.put(tag, EncryptionDetail.UnencryptedOnSave);
     4146                        primaryPropertyEncryption.put(tag, inheritanceCheckOnSave.clone());
    40634147                        surrogate.surrogatePropertyInheritance.put(tag + "", true);
    40644148                }
     
    40774161               
    40784162                if (encryptionDetail == null) {
    4079                         return EncryptionDetail.UnencryptedOnSave;
     4163                        EncryptionDetail unencryptedOnSave = new EncryptionDetail(EncryptionDetail.Type.UnencryptedOnSave);
     4164                        return unencryptedOnSave;
    40804165                } else {
    40814166                        return encryptionDetail;
     
    40914176        }
    40924177       
    4093 
    4094         /**
    4095          * If when setting a property, we find that the primary has a undeciphered value, when we must containue using that undeciphered value
     4178        public void setTagNotInherited(String tag) {
     4179                surrogatePropertyInheritance.put(tag, false);
     4180        }
     4181       
     4182        public boolean hasAccessToItemAsPrimary() {
     4183                String label = this.getEncryptionLabel();
     4184                if (this.isSurrogate() || label == null || label.length() == 0) {
     4185                        return true;
     4186                }
     4187               
     4188                return Label.getLabel(label) == LabelResult.SuccessResolveLabelToKey;
     4189        }
     4190       
     4191
     4192        /**
     4193         * If when setting a property, we find that the primary has a undeciphered value, when we must continue using that undeciphered value
    40964194         * when eventually saving.
    40974195         * @return
    40984196         */
    40994197        protected boolean subjectToInheritanceCheckOnSave(String tag) {
    4100                 if (getPrimary() == null) return false;
    4101                 return getPrimary().primaryPropertyEncryption.get(tag) != EncryptionDetail.UseUndecipheredValueOnSave;
     4198                Item primary = getPrimary();
     4199                if (primary == null) return false;
     4200                EncryptionDetail primaryItemTagEncryptionDetail = primary.primaryPropertyEncryption.get(tag);
     4201                Type primaryItemTagEncryptionDetailType = primaryItemTagEncryptionDetail.getEncryptionDetailType();
     4202                return primaryItemTagEncryptionDetailType != EncryptionDetail.Type.UseUndecipheredValueOnSave;
     4203        }
     4204
     4205        public boolean acceptsKeyboardEnter() {
     4206                return _acceptsKeyboardEnter;
     4207        }
     4208               
     4209        public void setAcceptsEnter(boolean value) {
     4210                if (this.getText() != null && this.getText().equals("Beep")) {
     4211                        System.err.println();
     4212                }
     4213                _acceptsKeyboardEnter = value;
    41024214        }
    41034215}
  • trunk/src/org/expeditee/items/ItemUtils.java

    r1245 r1415  
    616616                        Item start = lineEndMap.get(c.getStart());
    617617                        Item end = lineEndMap.get(c.getEnd());
    618                         int id = DisplayController.getCurrentFrame().getNextItemID();
     618                        int id = start.getParent().getNextItemID();
    619619                        if (start != null && end != null) {
    620620                                new Constraint(start, end, id, c.getType());
     
    748748
    749749        public static void New() {
    750                 EnclosedCheck(DisplayController.getCurrentFrame().getItems());
     750                EnclosedCheck(DisplayController.getCurrentFrame().getSortedItems());
    751751        }
    752752
    753753        public static void Old() {
    754                 OldEnclosedCheck(DisplayController.getCurrentFrame().getItems());
     754                OldEnclosedCheck(DisplayController.getCurrentFrame().getSortedItems());
    755755        }
    756756
     
    10981098                        return;
    10991099                }
    1100                 EnclosedCheck(frame.getItems());
    1101                 Justify(frame.getItems());
     1100                EnclosedCheck(frame.getSortedItems());
     1101                Justify(frame.getSortedItems());
    11021102        }
    11031103}
  • trunk/src/org/expeditee/items/Text.java

    r1414 r1415  
    409409                        Item primary = getPrimary();
    410410                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.WIDTH_TO_SAVE_STR)) {
    411                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.WIDTH_TO_SAVE_STR, EncryptionDetail.InheritanceCheckOnSave);
     411                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     412                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.WIDTH_TO_SAVE_STR, inheritanceCheckOnSave);
    412413                        }
    413414                }
     
    432433                        Item primary = getPrimary();
    433434                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.MIN_WIDTH_TO_SAVE_STR)) {
    434                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.MIN_WIDTH_TO_SAVE_STR, EncryptionDetail.InheritanceCheckOnSave);
     435                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     436                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.MIN_WIDTH_TO_SAVE_STR, inheritanceCheckOnSave);
    435437                        }
    436438                }
     
    453455                        return this.getPrimary().getWidth();
    454456                } else {
     457                        if (_width == null || _width <= 0)
     458                                return null;
    455459                        return _width;
    456460                }
     
    458462
    459463        public Integer getAbsoluteWidth() {
    460                 if (_width == null) {
     464                if (_width == null || _width == Integer.MIN_VALUE) {
     465                        // When absoluting Integer.MIN_VALUE, the java API is defined to give you back Integer.MIN_VALUE!!?!
     466                        // This is because of the asymmetry of two's complement integer representation.
     467                        // We would prefer to use Integer.MAX_VALUE in this circumstance.
    461468                        return Integer.MAX_VALUE;
    462469                }
    463 
     470               
    464471                return Math.abs(_width);
    465472        }
     
    469476                        return this.getPrimary().getMinWidth();
    470477                } else {
     478                        if (_minWidth == null || _minWidth <= 0)
     479                                return null;
    471480                        return _minWidth;
    472481                }
     
    513522                        Item primary = getPrimary();
    514523                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.JUSTIFICATION_STR)) {
    515                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.JUSTIFICATION_STR, EncryptionDetail.InheritanceCheckOnSave);
     524                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     525                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.JUSTIFICATION_STR, inheritanceCheckOnSave);
    516526                        }
    517527                }
     
    694704                        Item primary = getPrimary();
    695705                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.TEXT_STR)) {
    696                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.TEXT_STR, EncryptionDetail.InheritanceCheckOnSave);
     706                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     707                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.TEXT_STR, inheritanceCheckOnSave);
    697708                        }
    698709                }
     
    13271338
    13281339                invalidateAll();
    1329                
     1340                               
    13301341                if (isSurrogate()) {
    13311342                        surrogatePropertyInheritance.put(DefaultFrameWriter.FONT_STR, false);
    13321343                        Item primary = getPrimary();
    13331344                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.FONT_STR)) {
    1334                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.FONT_STR, EncryptionDetail.InheritanceCheckOnSave);
     1345                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     1346                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.FONT_STR, inheritanceCheckOnSave);
    13351347                        }
    13361348                }
     
    15541566                        Item primary = getPrimary();
    15551567                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.SPACING_STR)) {
    1556                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.SPACING_STR, EncryptionDetail.InheritanceCheckOnSave);
     1568                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     1569                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.SPACING_STR, inheritanceCheckOnSave);
    15571570                        }
    15581571                }
     
    15951608                        Item primary = getPrimary();
    15961609                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.WORD_SPACING_STR)) {
    1597                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.WORD_SPACING_STR, EncryptionDetail.InheritanceCheckOnSave);
     1610                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     1611                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.WORD_SPACING_STR, inheritanceCheckOnSave);
    15981612                        }
    15991613                }
     
    16261640                        Item primary = getPrimary();
    16271641                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.LETTER_SPACING_STR)) {
    1628                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.LETTER_SPACING_STR, EncryptionDetail.InheritanceCheckOnSave);
     1642                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     1643                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.LETTER_SPACING_STR, inheritanceCheckOnSave);
    16291644                        }
    16301645                }
     
    16501665                        Item primary = getPrimary();
    16511666                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.INITIAL_SPACING_STR)) {
    1652                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.INITIAL_SPACING_STR, EncryptionDetail.InheritanceCheckOnSave);
     1667                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     1668                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.INITIAL_SPACING_STR, inheritanceCheckOnSave);
    16531669                        }
    16541670                }
     
    17771793
    17781794                int minX = Integer.MAX_VALUE;
    1779                 int maxX = Integer.MIN_VALUE;
     1795                int maxX = Integer.MIN_VALUE + 1; // +1 makes it safe to do math.abs on
    17801796
    17811797                int minY = Integer.MAX_VALUE;
    1782                 int maxY = Integer.MIN_VALUE;
     1798                int maxY = Integer.MIN_VALUE + 1; // +1 makes it safe to do math.abs on
    17831799
    17841800                float y = -1;
     
    18921908                                return;
    18931909                        }
    1894                         for (Item item : DisplayController.getCurrentFrame().getItems()) {
     1910                        for (Item item : DisplayController.getCurrentFrame().getSortedItems()) {
    18951911                                if (item instanceof Line) {
    18961912                                        lines.add(new org.expeditee.core.Line(((Line) item).getStartItem().getPosition(),
     
    19141930                }
    19151931
    1916                 float width = Float.MAX_VALUE;
     1932                float width = (float) Integer.MAX_VALUE;
    19171933                if (limitWidth) {
    19181934                        if (_width == null) {
     
    19451961                                                        paintFont,
    19461962                                                        new Point(getX(), getY()), lines != null ? lines.toArray(new org.expeditee.core.Line[1]) : null,
    1947                                                         paintFont.getSize() > MINIMUM_FONT_SIZE ? (int) width : (int) Float.MAX_VALUE,
     1963                                                        paintFont.getSize() > MINIMUM_FONT_SIZE ? (int) width : Integer.MAX_VALUE,
    19481964                                                        (int) getSpacing(),
    19491965                                                        true,
     
    25532569                                Integer width = getWidth();
    25542570                                if (width == null || width < 0) {
    2555                                         setWidth(Integer.MIN_VALUE + 1);
     2571                                        setWidth(Integer.MIN_VALUE + 1); // +1 makes it safe to do math.abs on
    25562572                                }
    25572573                        } else if (frameWidth - getX() > ADJUST_WIDTH_THRESHOLD) {
     
    28662882                        Item primary = getPrimary();
    28672883                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.ANCHOR_LEFT_STR)) {
    2868                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.ANCHOR_LEFT_STR, EncryptionDetail.InheritanceCheckOnSave);
     2884                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     2885                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.ANCHOR_LEFT_STR, inheritanceCheckOnSave);
    28692886                        }
    28702887                }
     
    29002917                        Item primary = getPrimary();
    29012918                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.ANCHOR_RIGHT_STR)) {
    2902                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.ANCHOR_RIGHT_STR, EncryptionDetail.InheritanceCheckOnSave);
     2919                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     2920                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.ANCHOR_RIGHT_STR, inheritanceCheckOnSave);
    29032921                        }
    29042922                }
     
    29412959                        Item primary = getPrimary();
    29422960                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.ANCHOR_TOP_STR)) {
    2943                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.ANCHOR_TOP_STR, EncryptionDetail.InheritanceCheckOnSave);
     2961                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     2962                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.ANCHOR_TOP_STR, inheritanceCheckOnSave);
    29442963                        }
    29452964                }
     
    29873006                        Item primary = getPrimary();
    29883007                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.ANCHOR_BOTTOM_STR)) {
    2989                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.ANCHOR_BOTTOM_STR, EncryptionDetail.InheritanceCheckOnSave);
     3008                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     3009                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.ANCHOR_BOTTOM_STR, inheritanceCheckOnSave);
    29903010                        }
    29913011                }
     
    31013121        //
    31023122        // int min_xl = Integer.MAX_VALUE;
    3103         // int max_xr = Integer.MIN_VALUE;
     3123        // int max_xr = Integer.MIN_VALUE + 1; // +1 makes it safe to do math.abs on
    31043124        //
    31053125        // int min_yt = Integer.MAX_VALUE;
    3106         // int max_yb = Integer.MIN_VALUE;
     3126        // int max_yb = Integer.MIN_VALUE + 1; // +1 makes it safe to do math.abs on
    31073127        //
    31083128        //
     
    31683188                        Item primary = getPrimary();
    31693189                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.AUTO_WRAP_TO_SAVE_STR)) {
    3170                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.AUTO_WRAP_TO_SAVE_STR, EncryptionDetail.InheritanceCheckOnSave);
     3190                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     3191                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.AUTO_WRAP_TO_SAVE_STR, inheritanceCheckOnSave);
    31713192                        }
    31723193                }
     
    33073328                        Item primary = getPrimary();
    33083329                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.MASK_STR)) {
    3309                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.MASK_STR, EncryptionDetail.InheritanceCheckOnSave);
     3330                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     3331                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.MASK_STR, inheritanceCheckOnSave);
    33103332                        }
    33113333                }
     
    33303352                        Item primary = getPrimary();
    33313353                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.PLACEHOLDER_STR)) {
    3332                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.PLACEHOLDER_STR, EncryptionDetail.InheritanceCheckOnSave);
     3354                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     3355                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.PLACEHOLDER_STR, inheritanceCheckOnSave);
    33333356                        }
    33343357                }
     
    33603383                        Item primary = getPrimary();
    33613384                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.SINGLE_LINE_ONLY_STR)) {
    3362                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.SINGLE_LINE_ONLY_STR, EncryptionDetail.InheritanceCheckOnSave);
     3385                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     3386                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.SINGLE_LINE_ONLY_STR, inheritanceCheckOnSave);
    33633387                        }
    33643388                }
     
    33803404                        Item primary = getPrimary();
    33813405                        if (subjectToInheritanceCheckOnSave(DefaultFrameWriter.TAB_INDEX_STR)) {
    3382                                 primary.primaryPropertyEncryption.put(DefaultFrameWriter.TAB_INDEX_STR, EncryptionDetail.InheritanceCheckOnSave);
     3406                                EncryptionDetail inheritanceCheckOnSave = new EncryptionDetail(EncryptionDetail.Type.InheritanceCheckOnSave);
     3407                                primary.primaryPropertyEncryption.put(DefaultFrameWriter.TAB_INDEX_STR, inheritanceCheckOnSave);
    33833408                        }
    33843409                }
  • trunk/src/org/expeditee/items/XRayable.java

    r1402 r1415  
    2626import org.expeditee.core.Point;
    2727import org.expeditee.gui.DisplayController;
    28 import org.expeditee.gui.FrameGraphics;
    2928
    3029public abstract class XRayable extends Item {
  • trunk/src/org/expeditee/network/FrameShare.java

    r919 r1415  
    414414               
    415415                List<File> imageFiles = new LinkedList<File>();
    416                 for(Item i : toSave.getItems()) {
     416                for(Item i : toSave.getSortedItems()) {
    417417                        if(i instanceof Picture) {
    418418                                ((Picture) i).moveToImagesFolder();
  • trunk/src/org/expeditee/setting/ArraySetting.java

    r1242 r1415  
    3737        }
    3838
    39         public T getSafe(int i) {
    40                
    41                 if(i < _value.length){
    42                        
     39    public T getSafe(int i) {
     40                if(i < _value.length) {
    4341                        return _value[i];
    4442                }
    45                 else{
     43                else {
    4644                        return _default[i];
    4745                }               
     
    7169               
    7270                if (_value.length > 0) {
    73                         Frame arrayFrame = FrameIO.CreateFrame(frameset, null, null);
    74                         arrayFrame.getTitleItem().delete();
    75                        
    76                         int x = 100;
    77                         int y = 100;
    78                         for (T v: _value) {
    79                                 if (v == null) continue;
    80                                 Text representation;
    81                                 if (v instanceof Representable) {
    82                                         representation = ((Representable) v).generateRepresentation("Array Entry", "");
    83                                         representation.setPosition(x, y);
    84                                         representation.setID(arrayFrame.getNextItemID());
    85                                         arrayFrame.addItem(representation);
    86                                 } else {
    87                                         representation = arrayFrame.addText(x, y, v.toString(), null);
    88                                 }
    89                                 y += representation.getBoundsHeight();
    90                         }
    91                         FrameIO.ForceSaveFrame(arrayFrame);
    92                         t.setLink(arrayFrame.getName());
     71                        createChildFrame(frameset, t, null);
    9372                }
    9473               
    9574                return t;
    9675        }
     76
     77        protected void createChildFrame(String frameset, Text t, String frameTitle) {
     78                Frame arrayFrame = FrameIO.CreateFrame(frameset, frameTitle, null);
     79               
     80                if (frameTitle != null) {
     81                        arrayFrame.getTitleItem().delete();
     82                }
     83               
     84                int x = 100;
     85                int y = 100;
     86                for (T v: _value) {
     87                        if (v == null) continue;
     88                        Text representation;
     89                        if (v instanceof Representable) {
     90                                representation = ((Representable) v).generateRepresentation("Array Entry", "");
     91                                representation.setPosition(x, y);
     92                                representation.setID(arrayFrame.getNextItemID());
     93                                arrayFrame.addItem(representation);
     94                        } else {
     95                                representation = arrayFrame.addText(x, y, v.toString(), null);
     96                        }
     97                        y += representation.getBoundsHeight();
     98                }
     99                FrameIO.ForceSaveFrame(arrayFrame);
     100                t.setLink(arrayFrame.getName());
     101        }
    97102}
  • trunk/src/org/expeditee/settings/Settings.java

    r1393 r1415  
    2121import java.lang.reflect.Field;
    2222import java.lang.reflect.Method;
     23import java.util.Collection;
    2324import java.util.HashMap;
    2425import java.util.Iterator;
     
    3031import org.expeditee.gui.FrameCreator;
    3132import org.expeditee.gui.MessageBay;
     33import org.expeditee.items.Item;
     34import org.expeditee.items.ItemParentStateChangedEvent;
    3235import org.expeditee.items.Text;
    3336import org.expeditee.items.widgets.Password;
     
    194197                                                }
    195198
    196                                                 if(s == null) continue;
     199                                                if(s == null) {
     200                                                        continue;
     201                                                }
    197202                                               
    198203                                                if(validPages.size() > 1) {
     
    226231        }
    227232               
     233                // Having parsed this page, we must alter all the items on the frame that they are no longer being shown.
     234                // For things such as WidgetCorners, this means that they will be removed from live consideration.
     235                Collection<Item> allItems = child.getAllItems();
     236                for (Item i: allItems) {
     237                        i.onParentStateChanged(new ItemParentStateChangedEvent(child, ItemParentStateChangedEvent.EVENT_TYPE_HIDDEN));
     238                }
     239               
    228240                // if the page was a settings page, check if it has any subpages
    229241                for(Text t : child.getTextItems()) {
     
    275287                        int x = 0, y = 0;
    276288                       
     289                        Frame currentFrame = frames.getCurrentFrame();
    277290                        if (key.toLowerCase().equals("pass")) {
    278291                                // Special case for Password widgets
     
    280293                                Password pw = new Password(passwordWidgetText, null);
    281294                                pw.setPassword("");
    282                                 frames.getCurrentFrame().removeItem(passwordWidgetText);
    283                                 frames.getCurrentFrame().addAllItems(pw.getItems());
     295                                currentFrame.removeItem(passwordWidgetText);
     296                                currentFrame.addAllItems(pw.getItems());
    284297                                x = passwordWidgetText.getX() + passwordWidgetText.getBoundsWidth();
    285298                                y = passwordWidgetText.getY();
     
    291304                                // Construct and add text representation for setting. 
    292305                                // If a setting has no initialised value then it is not included.
    293                                 Text settingRepresentation = setting.generateRepresentation(key, frames.getCurrentFrame().getFramesetName()).copy();
    294                                 if (settingRepresentation.getBounds() == null) {
     306                                String framesetName = currentFrame.getFramesetName();
     307                                Text template = setting.generateRepresentation(key, framesetName);
     308                                if (template == null) {
    295309                                        continue;
    296310                                }
    297                                 settingRepresentation.setID(frames.getCurrentFrame().getNextItemID());
     311                                Text settingRepresentation = template.copy();
     312                                if (settingRepresentation == null || settingRepresentation.getBounds() == null) {
     313                                        continue;
     314                                }
     315                                settingRepresentation.setID(currentFrame.getNextItemID());
    298316                                frames.addItem(settingRepresentation, false);                           
    299317                                x = settingRepresentation.getX() + settingRepresentation.getBoundsWidth();
     
    303321                        x = Math.max(250, x + 20);
    304322                        // Add tooltip for setting
    305                         Text tooltip = frames.getCurrentFrame().addText(x, y, "// " + setting.getTooltip(), null);
     323                        Text tooltip = currentFrame.addText(x, y, "// " + setting.getTooltip(), null);
    306324                        tooltip.rebuild(true);
    307325                        if (tooltip.getY() + tooltip.getBoundsHeight() > frames.getLastY()) {
  • trunk/src/org/expeditee/settings/UserSettings.java

    r1403 r1415  
    283283        }
    284284
    285 //      public static void appendDefaultFolders() {
    286 //              if (PublicAndPrivateResources && AuthenticatorBrowser.isAuthenticated()) {
    287 //                      // The comments here explain how things have changed with the new regime.
    288 //                      // FrameDirs
    289 //                      // 1. PROFILE_PATH                                      Still points to same place.
    290 //                      // 2. SHARED_FRAMESETS_PATH                     Still points to same place. (encryption stops just anyone reading it)
    291 //                      // 3. framesets-<username>                      Generated on user account creation and must be refreshed on user switching.  Also gives access to tutorial stuffs.
    292 //                      // 4. FRAME_PATH                                        <expeditee-home>\resources-public\framesets.
    293 //                      // 5. HELP_PUBLIC_PATH                          <expeditee-home>\resources-public\documentation.
    294 //                      // 6. MESSAGES_PATH                                     Still points to same place.  Should these be per user and encrypted?
    295 //                      // 7. PUBLIC_PATH                                       Still points to same place.  Kept for compatibility.
    296 //                      FolderSettings.FrameDirs.addAbsoluteDir(FrameIO.PROFILE_PATH);
    297 //                      FolderSettings.FrameDirs.addAbsoluteDir(FrameIO.FRAME_PRIVATE_PATH);
    298 //                      FolderSettings.FrameDirs.addAbsoluteDir(FrameIO.SHARED_FRAMESETS_PATH);
    299 //                      FolderSettings.FrameDirs.addAbsoluteDir(FrameIO.FRAME_PATH);
    300 //                      FolderSettings.FrameDirs.addAbsoluteDir(FrameIO.RESOURCES_PATH);
    301 //                      FolderSettings.FrameDirs.addAbsoluteDir(FrameIO.MESSAGES_PATH);
    302 //                      FolderSettings.FrameDirs.addAbsoluteDir(FrameIO.PUBLIC_PATH);
    303 //                      FolderSettings.FrameDirs.addAbsoluteDir(FrameIO.HELP_PRIVATE_PATH);
    304 //                      FolderSettings.FrameDirs.addAbsoluteDir(FrameIO.MAIL_PATH);
    305 //                      FolderSettings.FrameDirs.setDefault(FolderSettings.FrameDirs.get());
    306 //                                             
    307 //                      // ImageDirs
    308 //                      // 1. resources-<username>\images       Generated on user account creation and must be refreshed on user switching.
    309 //                      // 2. IMAGES_PATH                                       <expeditee-home>\resources-public\images
    310 //                      FolderSettings.ImageDirs.addAbsoluteDir(FrameIO.IMAGES_PRIVATE_PATH);
    311 //                      FolderSettings.ImageDirs.addAbsoluteDir(FrameIO.IMAGES_PATH);
    312 //                      FolderSettings.ImageDirs.setDefault(FolderSettings.ImageDirs.get());
    313 //                     
    314 //                      FolderSettings.AudioDirs.addAbsoluteDir(FrameIO.AUDIO_PRIVATE_PATH);
    315 //                      FolderSettings.AudioDirs.addAbsoluteDir(FrameIO.AUDIO_PATH);
    316 //                      FolderSettings.AudioDirs.setDefault(FolderSettings.AudioDirs.get());
    317 //              } else {
    318 //                      FolderSettings.FrameDirs.addAbsoluteDir(FrameIO.FRAME_PATH);
    319 //                      FolderSettings.FrameDirs.addAbsoluteDir(FrameIO.PUBLIC_PATH);
    320 //                      FolderSettings.FrameDirs.addAbsoluteDir(FrameIO.PROFILE_PATH);
    321 //                      FolderSettings.FrameDirs.addAbsoluteDir(FrameIO.HELP_PATH);
    322 //                      FolderSettings.FrameDirs.addAbsoluteDir(FrameIO.MESSAGES_PATH);
    323 //                      if (FrameIO.FRAME_PRIVATE_PATH != null) {
    324 //                              FolderSettings.FrameDirs.addAbsoluteDir(FrameIO.FRAME_PRIVATE_PATH);
    325 //                      }
    326 //                      FolderSettings.FrameDirs.setDefault(FolderSettings.FrameDirs.get());
    327 //                     
    328 //                      FolderSettings.ImageDirs.addAbsoluteDir(FrameIO.IMAGES_PATH);
    329 //                      FolderSettings.ImageDirs.setDefault(FolderSettings.ImageDirs.get());
    330 //                     
    331 //                      FolderSettings.AudioDirs.addAbsoluteDir(FrameIO.AUDIO_PATH);
    332 //                      FolderSettings.AudioDirs.setDefault(FolderSettings.AudioDirs.get());
    333 //              }
    334 //      }
    335 
    336285        /**
    337286         * Find the appropriate directory to store application settings in for
  • trunk/src/org/expeditee/settings/identity/secrets/KeyList.java

    r1241 r1415  
    11package org.expeditee.settings.identity.secrets;
    22
     3import java.util.List;
     4import java.util.function.Predicate;
     5
     6import org.expeditee.gui.Frame;
    37import org.expeditee.items.Text;
     8import org.expeditee.setting.ArraySetting;
    49import org.expeditee.setting.TextSetting;
    510
    611public class KeyList {
     12       
    713        public static final TextSetting PersonalKey = new TextSetting("The AES key used to secure your profile frame - do not share with anyone!", "PersonalKey") {     
    814                @Override
     
    2026                }
    2127        };
     28       
     29        public static final ArraySetting<Text> UserLabels = new ArraySetting<Text>("The labels (and their associated keys) that you have either created or recieved.",
     30                        "UserLabels", new Text[] { }) {
     31               
     32                @Override
     33                public boolean setSetting(Text text) {
     34                        Frame child = text.getChild();
     35                if (child == null) {
     36                        return false;
     37                }
     38               
     39                Predicate<Text> hasNoData = t -> {
     40                        List<String> data = t.getData();
     41                        return data == null || data.isEmpty();
     42                };
     43                List<Text> textItems = child.getBodyTextItems(false);
     44                textItems.removeIf(hasNoData);
     45                _value = textItems.toArray(new Text[] {});
     46               
     47                return true;
     48                }
     49               
     50                @Override
     51                public Text generateRepresentation(String label, String frameset) {
     52                        Text t = new Text(label);
     53                       
     54                        createChildFrame(frameset, t, "My Labels");
     55                       
     56                        return t;
     57                }
     58        };
    2259}
  • trunk/src/org/expeditee/stats/TreeStats.java

    r919 r1415  
    5757                _treeFrames = 1;
    5858                // Now get all add all the trees for linked items
    59                 for (Item i : topFrame.getItems()) {
     59                for (Item i : topFrame.getSortedItems()) {
    6060                        String link = i.getAbsoluteLink();
    6161                        if (link == null)
Note: See TracChangeset for help on using the changeset viewer.