package bd.amazed.docscissors.model; import java.awt.Rectangle; import java.awt.image.BufferedImage; import java.util.ArrayList; import java.util.List; import java.util.Vector; import bd.amazed.docscissors.view.Rect; /** * A group of pages that are cropped together. * */ public class PageGroup { public static final int GROUP_TYPE_ODD_EVEN = 0; public static final int GROUP_TYPE_ALL = 1; public static final int GROUP_TYPE_INDIVIDUAL = 2; private java.util.Vector<Integer> pages = new Vector<>(); private ArrayList<Rect> rects = new ArrayList<>(); private String name; private BufferedImage stackImage; public PageGroup(String name) { this.name = name; } public java.util.Vector<Integer> getPages() { return pages; } public void setPages(java.util.Vector<Integer> pages) { this.pages = pages; } public void addPage(int pageNumber) { pages.add(Integer.valueOf(pageNumber)); } public ArrayList<Rectangle> getRectangles() { ArrayList<Rectangle> rectangles = new ArrayList<>(); for (Rect rect : rects) { rectangles.add(rect.getRectangleBound()); // TODO rename rect by CropCell or something } return rectangles; } public ArrayList<Rect> getRects() { return rects; } public void setRects(ArrayList<Rect> rects) { this.rects = rects; } public static List<PageGroup> createGroupForAllPages(int pageCount) { PageGroup allPages = new PageGroup(Bundle.getString("PageGroup.allPages")); for (int i = 1; i <= pageCount; i++ ) { allPages.addPage(i); } List<PageGroup> pageGroups = new ArrayList<>(); pageGroups.add(allPages); return pageGroups; } public static List<PageGroup> createGroupForIndividualPage(int pageCount) { List<PageGroup> pageGroups = new ArrayList<>(pageCount); for (int i = 1; i <= pageCount; i++ ) { PageGroup group = new PageGroup(Bundle.getString("PageGroup.Page") + " " + i); group.addPage(i); pageGroups.add(group); } return pageGroups; } public static List<PageGroup> createGroupForOddEven(int pageCount) { PageGroup oddPages = new PageGroup(Bundle.getString("PageGroup.oddPages")); PageGroup evenPages = new PageGroup(Bundle.getString("PageGroup.evenPages")); for (int i = 1; i <= pageCount; i++ ) { if (i % 2 == 0) { evenPages.addPage(i); } else { oddPages.addPage(i); } } List<PageGroup> pageGroups = new ArrayList<>(); pageGroups.add(oddPages); pageGroups.add(evenPages); return pageGroups; } public BufferedImage getStackImage() { return stackImage; } public void setStackImage(BufferedImage stackImage) { this.stackImage = stackImage; } @Override public String toString() { if (name != null) { return name; } else { return super.toString(); } } public int getLastPage() { return pages.lastElement(); } public int getPageCount() { return pages.size(); } public int getPageNumberAt(int index) { return pages.elementAt(index); } public static List<PageGroup> createGroup(int groupType, int pageCount) { switch (groupType) { case GROUP_TYPE_ALL: return PageGroup.createGroupForAllPages(pageCount); case GROUP_TYPE_ODD_EVEN: return PageGroup.createGroupForOddEven(pageCount); case GROUP_TYPE_INDIVIDUAL: return PageGroup.createGroupForIndividualPage(pageCount); default: throw new IllegalArgumentException("Unknown type : " + groupType); } } }