Changeset 936


Ignore:
Timestamp:
11/15/14 18:00:04 (10 years ago)
Author:
bln4
Message:

Modifications to XGroupItem for SpIDER

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/expeditee/io/flowlayout/XGroupItem.java

    r919 r936  
    4040public class XGroupItem extends XItem
    4141{
     42        public static final Text GROUPSEP_END = new Text('2' + ""); //ASCII '2' is start of text
     43
     44        public static final Text GROUPSEP_START = new Text('3' + ""); //ASCII '3' is end of text
     45       
    4246        enum FlowType { in_flow, out_of_flow_original, out_of_flow_faked_position };
    4347       
     
    130134                for (Text text_item : raw_text_item_list) {
    131135                       
    132                         XRawItem x_raw_item = new XRawItem(text_item);
     136                        XRawItem x_raw_item = new XRawItem(text_item, this);
    133137                        // overspill can occur (and is acceptable) when raw-text item spills out of enclosing shape (such as a rectangle)
    134138                        mapInItem(x_raw_item);
     
    12381242        }
    12391243       
    1240        
    1241 
    1242         public ArrayList<Item> getYXOverlappingItemList(boolean separateGroups)
    1243         {
    1244                 ArrayList<Item> overlapping_y_ordered_items = new ArrayList<Item>();
    1245                
    1246                 for (int y=0; y<y_span_height; y++) {
    1247                        
     1244        public List<Item[]> getYXOverlappingItemListLines() {
     1245                final List<XRawItem> yxOverlappingXRawItemList = getYXOverlappingXRawItemList(true);
     1246                final List<Item[]> lines = new ArrayList<Item[]>();
     1247                final List<XRawItem> currentLineXItem = new ArrayList<XRawItem>();
     1248                for(final XRawItem xitem : yxOverlappingXRawItemList) {
     1249                        if(xitem.getItem() == GROUPSEP_START) continue;
     1250                        else if(xitem.getItem() == GROUPSEP_END) {
     1251                                if(currentLineXItem.isEmpty()) continue;
     1252                                else {
     1253                                        final List<Item> ln = new ArrayList<Item>();
     1254                                        for(final XRawItem xrawitem : currentLineXItem) ln.add(xrawitem.getItem());
     1255                                        lines.add(ln.toArray(new Item[]{}));
     1256                                        currentLineXItem.clear();
     1257                                }
     1258                        } else {
     1259                                if(currentLineXItem.isEmpty()) currentLineXItem.add(xitem);
     1260                                else {
     1261                                        final YOverlappingItemsSpan[] itemSpanArray = xitem.getGroup().yitems_span_array;
     1262                                        final int index = xitem.getBoundingYTop() - xitem.getGroup().getBoundingYTop();
     1263                                        final YOverlappingItemsSpan itemSpan = itemSpanArray[index];
     1264                                        final List<XItem> xOrderedList = itemSpan instanceof YOverlappingItemsTopEdge ?
     1265                                                        ((YOverlappingItemsTopEdge)itemSpan).getXOrderedLine().getXItemList() :
     1266                                                                ((YOverlappingItemsShadow)itemSpan).getTopEdge().getXOrderedLine().getXItemList();
     1267                                        if(!xOrderedList.contains(currentLineXItem.get(0))) {
     1268                                                if(!currentLineXItem.isEmpty()) {
     1269                                                        final List<Item> ln = new ArrayList<Item>();
     1270                                                        for(final XRawItem xrawitem : currentLineXItem) ln.add(xrawitem.getItem());
     1271                                                        lines.add(ln.toArray(new Item[]{}));
     1272                                                        currentLineXItem.clear();
     1273                                                }
     1274                                                currentLineXItem.add(xitem);
     1275                                        } else {
     1276                                                currentLineXItem.add(xitem);
     1277                                        }
     1278                                }
     1279                        }
     1280                }
     1281                if(!currentLineXItem.isEmpty()) {
     1282                        final List<Item> ln = new ArrayList<Item>();
     1283                        for(final XRawItem xrawitem : currentLineXItem) ln.add(xrawitem.getItem());
     1284                        lines.add(ln.toArray(new Item[]{}));
     1285                        currentLineXItem.clear();
     1286                }
     1287                return lines;
     1288        }
     1289
     1290        public ArrayList<Item> getYXOverlappingItemList(boolean separateGroups) {
     1291                final List<XRawItem> yxOverlappingXItemList = getYXOverlappingXRawItemList(separateGroups);
     1292                final ArrayList<Item> yxOverlappingItemList = new ArrayList<Item>();
     1293                for(final XRawItem xitem : yxOverlappingXItemList) yxOverlappingItemList.add(xitem.getItem());
     1294                return yxOverlappingItemList;
     1295        }
     1296       
     1297        public List<XRawItem> getYXOverlappingXRawItemList(final boolean separateGroups) {
     1298                ArrayList<XRawItem> overlapping_y_ordered_items = new ArrayList<XRawItem>();
     1299
     1300                for (int y = 0; y < y_span_height; y++) {
     1301
    12481302                        YOverlappingItemsSpan item_span = yitems_span_array[y];
    1249                        
     1303
    12501304                        if (item_span != null) {
    12511305
    12521306                                if (item_span instanceof YOverlappingItemsTopEdge) {
    1253                                        
    1254                                         YOverlappingItemsTopEdge item_span_top_edge = (YOverlappingItemsTopEdge)item_span;
    1255                                         XOrderedLine xitem_line = item_span_top_edge.getXOrderedLine();
     1307
     1308                                        YOverlappingItemsTopEdge item_span_top_edge = (YOverlappingItemsTopEdge) item_span;
     1309                                        XOrderedLine xitem_line = item_span_top_edge
     1310                                                        .getXOrderedLine();
    12561311
    12571312                                        for (XItem xspan : xitem_line.getXItemList()) {
    12581313                                                if (xspan instanceof XRawItem) {
    1259                                                         XRawItem xitem_span = (XRawItem)xspan;
    1260                                                         Item item = xitem_span.getItem();
    1261                                                        
    1262                                                         overlapping_y_ordered_items.add(item);
    1263                                                 }
    1264                                                 else {
    1265                                                         // Must be an XGroupItem => recursive call on xspan item
    1266                                                        
    1267                                                         XGroupItem nested_group_item = (XGroupItem)xspan;
    1268                                                         ArrayList<Item> nested_overlapping_items = nested_group_item.getYXOverlappingItemList(separateGroups);
    1269                                                         if(separateGroups) {
    1270                                                                 overlapping_y_ordered_items.add(new Text("{"));
     1314                                                        XRawItem xitem_span = (XRawItem) xspan;
     1315//                                                      Item item = xitem_span.getItem();
     1316//
     1317//                                                      overlapping_y_ordered_items.add(item);
     1318                                                        overlapping_y_ordered_items.add(xitem_span);
     1319                                                } else {
     1320                                                        // Must be an XGroupItem => recursive call on xspan
     1321                                                        // item
     1322
     1323                                                        XGroupItem nested_group_item = (XGroupItem) xspan;
     1324                                                        List<XRawItem> nested_overlapping_items = nested_group_item
     1325                                                                        .getYXOverlappingXRawItemList(separateGroups);
     1326                                                        if (separateGroups) {
     1327                                                                overlapping_y_ordered_items.add(new XRawItem(GROUPSEP_START, this));
    12711328                                                        }
    1272                                                         overlapping_y_ordered_items.addAll(nested_overlapping_items);
    1273                                                         if(separateGroups) {
    1274                                                                 overlapping_y_ordered_items.add(new Text("}"));
     1329                                                        overlapping_y_ordered_items
     1330                                                                        .addAll(nested_overlapping_items);
     1331                                                        if (separateGroups) {
     1332                                                                overlapping_y_ordered_items.add(new XRawItem(GROUPSEP_END, this));
    12751333                                                        }
    12761334                                                }
     
    12791337                        }
    12801338                }
    1281                
     1339
    12821340                return overlapping_y_ordered_items;
    12831341        }
Note: See TracChangeset for help on using the changeset viewer.