Changeset 936
- Timestamp:
- 11/15/14 18:00:04 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/expeditee/io/flowlayout/XGroupItem.java
r919 r936 40 40 public class XGroupItem extends XItem 41 41 { 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 42 46 enum FlowType { in_flow, out_of_flow_original, out_of_flow_faked_position }; 43 47 … … 130 134 for (Text text_item : raw_text_item_list) { 131 135 132 XRawItem x_raw_item = new XRawItem(text_item );136 XRawItem x_raw_item = new XRawItem(text_item, this); 133 137 // overspill can occur (and is acceptable) when raw-text item spills out of enclosing shape (such as a rectangle) 134 138 mapInItem(x_raw_item); … … 1238 1242 } 1239 1243 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 1248 1302 YOverlappingItemsSpan item_span = yitems_span_array[y]; 1249 1303 1250 1304 if (item_span != null) { 1251 1305 1252 1306 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(); 1256 1311 1257 1312 for (XItem xspan : xitem_line.getXItemList()) { 1258 1313 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)); 1271 1328 } 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)); 1275 1333 } 1276 1334 } … … 1279 1337 } 1280 1338 } 1281 1339 1282 1340 return overlapping_y_ordered_items; 1283 1341 }
Note:
See TracChangeset
for help on using the changeset viewer.