pages = documentViewModel.getAllPageComponents();
AbstractPageViewComponent page = pages.get(documentViewModel.getViewCurrentPageIndex());
// resort page text as layer visibility will have changed.
try {
diff --git a/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/AbstractDocumentView.java b/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/AbstractDocumentView.java
index 58b9aa846..738a973cc 100644
--- a/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/AbstractDocumentView.java
+++ b/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/AbstractDocumentView.java
@@ -225,6 +225,11 @@ public void dispose() {
*/
public abstract void updateDocumentView();
+ /**
+ * Received when the list of displayed pages has changed
+ */
+ public abstract void pagesListChanged();
+
public ToolHandler uninstallCurrentTool() {
if (currentTool != null) {
currentTool.uninstallTool();
diff --git a/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/AbstractDocumentViewModel.java b/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/AbstractDocumentViewModel.java
index 237eafd45..895c9e69d 100644
--- a/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/AbstractDocumentViewModel.java
+++ b/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/AbstractDocumentViewModel.java
@@ -29,7 +29,9 @@
import java.util.HashMap;
import java.util.List;
import java.util.Set;
+import java.util.function.Predicate;
import java.util.logging.Logger;
+import java.util.stream.Collectors;
/**
* The AbstractDocumentViewModel is responsible for keeping the state of the
@@ -55,8 +57,10 @@ public abstract class AbstractDocumentViewModel implements DocumentViewModel {
private HashMap selectedPageText;
// select all state flag, optimization for painting select all state lazily
private boolean selectAll;
- protected List pageComponents;
+ protected List allComponents;
+ protected List filteredComponents;
protected HashMap> documentViewAnnotationComponents;
+
// scroll pane used to contain the view
protected JScrollPane documentViewScrollPane;
// annotation memento caretaker
@@ -90,8 +94,16 @@ public Document getDocument() {
return currentDocument;
}
- public List getPageComponents() {
- return pageComponents;
+ public List getFilteredPageComponents() {
+ return filteredComponents;
+ }
+
+ public List getAllPageComponents() {
+ return allComponents;
+ }
+
+ public void filterPageComponents(final Predicate filter) {
+ filteredComponents = allComponents.stream().filter(filter).collect(Collectors.toList());
}
@@ -296,8 +308,8 @@ public int getPageBoundary() {
}
public Rectangle getPageBounds(int pageIndex) {
- if (pageComponents != null && pageIndex < pageComponents.size()) {
- Component pageViewComponentImpl = pageComponents.get(pageIndex);
+ if (allComponents != null && pageIndex < allComponents.size()) {
+ Component pageViewComponentImpl = allComponents.get(pageIndex);
if (pageViewComponentImpl != null && pageViewComponentImpl.getParent() != null) {
Rectangle pageBounds = pageViewComponentImpl.getParent().getBounds();
return pageBounds;
@@ -308,13 +320,14 @@ public Rectangle getPageBounds(int pageIndex) {
public void dispose() {
- if (pageComponents != null) {
- for (AbstractPageViewComponent pageComponent : pageComponents) {
+ if (allComponents != null) {
+ for (AbstractPageViewComponent pageComponent : allComponents) {
if (pageComponent != null) {
pageComponent.dispose();
}
}
- pageComponents.clear();
+ allComponents.clear();
+ filteredComponents.clear();
}
if (documentViewAnnotationComponents != null) {
documentViewAnnotationComponents.clear();
diff --git a/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/AbstractPageViewComponent.java b/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/AbstractPageViewComponent.java
index 3cead268a..8c0354e10 100644
--- a/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/AbstractPageViewComponent.java
+++ b/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/AbstractPageViewComponent.java
@@ -225,7 +225,7 @@ public void updateView(String propertyConstant, Object oldValue, Object newValue
* @throws NullPointerException if the parent scrollPane is null.
*/
private boolean isPageIntersectViewport() {
- Rectangle pageBounds = (documentViewModel != null && documentViewModel.getPageComponents() != null) ?
+ Rectangle pageBounds = (documentViewModel != null && documentViewModel.getFilteredPageComponents() != null) ?
documentViewModel.getPageBounds(pageIndex) : getBounds();
JScrollPane parentScrollPane = documentViewModel.getDocumentViewScrollPane();
return pageBounds != null && this.isShowing() &&
diff --git a/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/CollectionDocumentView.java b/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/CollectionDocumentView.java
index b8c9fc6ba..291775328 100644
--- a/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/CollectionDocumentView.java
+++ b/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/CollectionDocumentView.java
@@ -129,6 +129,11 @@ public void updateDocumentView() {
}
+ @Override
+ public void pagesListChanged() {
+
+ }
+
public int getNextPageIncrement() {
return 0;
}
diff --git a/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/DocumentViewControllerImpl.java b/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/DocumentViewControllerImpl.java
index 2f0a65f65..e97c144f8 100644
--- a/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/DocumentViewControllerImpl.java
+++ b/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/DocumentViewControllerImpl.java
@@ -35,9 +35,11 @@
import java.beans.PropertyChangeSupport;
import java.util.ArrayList;
import java.util.List;
+import java.util.function.Predicate;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Pattern;
+import java.util.stream.Collectors;
/**
* The DocumentViewControllerImpl is responsible for controlling the four
@@ -116,6 +118,8 @@ public class DocumentViewControllerImpl
protected final PropertyChangeSupport changes = new PropertyChangeSupport(this);
+ private Predicate pageViewComponentFilter = pvc -> true;
+
public DocumentViewControllerImpl(final SwingController viewerController) {
this.viewerController = viewerController;
@@ -207,6 +211,7 @@ public void closeDocument() {
setZoom(1);
setRotation(0);
setViewCursor(DocumentViewControllerImpl.CURSOR_DEFAULT);
+ pageViewComponentFilter = pvc -> true;
}
public Adjustable getHorizontalScrollBar() {
@@ -626,7 +631,7 @@ public void propertyChange(PropertyChangeEvent evt) {
if (PropertyConstants.DOCUMENT_VIEW_REFRESH_CHANGE.equals(prop) ||
PropertyConstants.DOCUMENT_VIEW_ZOOM_CHANGE.equals(prop) ||
PropertyConstants.DOCUMENT_VIEW_ROTATION_CHANGE.equals(prop)) {
- List pageComponents = documentViewModel.getPageComponents();
+ List pageComponents = documentViewModel.getAllPageComponents();
for (AbstractPageViewComponent pageViewComponent : pageComponents) {
// pass in zoom, rotation etc. or get form model....
pageViewComponent.updateView(prop, oldValue, newValue);
@@ -721,6 +726,13 @@ public boolean setCurrentPageIndex(int pageIndex) {
pageIndex = document.getNumberOfPages() - 1;
}
int oldPageIndex = documentViewModel.getViewCurrentPageIndex();
+ if (documentViewModel.isFiltered()) {
+ final List filteredIndexes = documentViewModel.getFilteredPageComponents().stream().map(pvc -> pvc.pageIndex).collect(Collectors.toList());
+ final boolean forward = pageIndex > oldPageIndex;
+ if (!filteredIndexes.contains(pageIndex)) {
+ pageIndex = getClosestAvailablePage(forward, pageIndex);
+ }
+ }
changed = documentViewModel.setViewCurrentPageIndex(pageIndex);
if (documentView != null) {
@@ -758,12 +770,8 @@ public int setCurrentPageNext() {
int increment = 0;
if (documentViewModel != null) {
increment = documentView.getNextPageIncrement();
- int current = documentViewModel.getViewCurrentPageIndex();
- if ((current + increment) < document.getNumberOfPages()) {
- documentViewModel.setViewCurrentPageIndex(current + increment);
- } else {
- documentViewModel.setViewCurrentPageIndex(document.getNumberOfPages() - 1);
- }
+ final int current = documentViewModel.getFilteredCurrentPageIndex();
+ documentViewModel.setViewCurrentPageIndex(Math.min((current + increment), documentViewModel.getUpperBoundFilteredPages()));
}
return increment;
}
@@ -772,7 +780,7 @@ public int setCurrentPagePrevious() {
int decrement = 0;
if (documentViewModel != null) {
decrement = documentView.getPreviousPageIncrement();
- int current = documentViewModel.getViewCurrentPageIndex();
+ int current = documentViewModel.getFilteredCurrentPageIndex();
documentViewModel.setViewCurrentPageIndex(Math.max((current - decrement), 0));
}
return decrement;
@@ -895,7 +903,7 @@ public boolean setToolMode(final int viewToolMode) {
// notify the page components of the tool change.
List pageComponents =
- documentViewModel.getPageComponents();
+ documentViewModel.getAllPageComponents();
for (AbstractPageViewComponent page : pageComponents) {
((PageViewComponentImpl) page).setToolMode(viewToolMode);
}
@@ -1395,7 +1403,7 @@ public void addNewDestination(Destination destination) {
Page page = (Page) library.getObject(destination.getPageReference());
int pageIndex = page.getPageIndex();
PageViewComponentImpl pageViewComponent = (PageViewComponentImpl)
- documentViewModel.getPageComponents().get(pageIndex);
+ documentViewModel.getAllPageComponents().get(pageIndex);
pageViewComponent.refreshDestinationComponents(pageViewComponent.getPage(), false);
}
}
@@ -1409,7 +1417,7 @@ public void updateDestination(Destination oldDestination, Destination destinatio
// page is the same then we just do the update
if (oldDestination.getPageReference().equals(destination.getPageReference())) {
PageViewComponentImpl pageViewComponent = (PageViewComponentImpl)
- documentViewModel.getPageComponents().get(pageIndex);
+ documentViewModel.getAllPageComponents().get(pageIndex);
List destinationComponents = pageViewComponent.getDestinationComponents();
for (DestinationComponent destinationComponent : destinationComponents) {
if (destinationComponent.getDestination().getNamedDestination()
@@ -1425,7 +1433,7 @@ public void updateDestination(Destination oldDestination, Destination destinatio
Page oldPage = (Page) library.getObject(oldDestination.getPageReference());
int oldPagIndex = oldPage.getPageIndex();
PageViewComponentImpl pageViewComponent = (PageViewComponentImpl)
- documentViewModel.getPageComponents().get(oldPagIndex);
+ documentViewModel.getAllPageComponents().get(oldPagIndex);
List destinationComponents = pageViewComponent.getDestinationComponents();
for (DestinationComponent destinationComponent : destinationComponents) {
if (destinationComponent.getDestination().getNamedDestination()
@@ -1451,7 +1459,7 @@ public void deleteDestination(Destination destination) {
Page page = (Page) library.getObject(destination.getPageReference());
int pageIndex = page.getPageIndex();
PageViewComponentImpl pageViewComponent = (PageViewComponentImpl)
- documentViewModel.getPageComponents().get(pageIndex);
+ documentViewModel.getAllPageComponents().get(pageIndex);
List destinationComponents = pageViewComponent.getDestinationComponents();
for (DestinationComponent destinationComponent : destinationComponents) {
if (destinationComponent.getDestination().getNamedDestination().equals(destination.getNamedDestination())) {
@@ -1479,4 +1487,83 @@ public void redo() {
public void removePropertyChangeListener(PropertyChangeListener l) {
changes.removePropertyChangeListener(l);
}
+
+ public void filterPageComponents(final Predicate filter) {
+ this.pageViewComponentFilter = filter;
+ final List oldComponents = new ArrayList<>(documentViewModel.getFilteredPageComponents());
+ documentViewModel.filterPageComponents(pageViewComponentFilter);
+ final List filteredComponents = documentViewModel.getFilteredPageComponents();
+ if (!filteredComponents.equals(oldComponents)) {
+ final int currentIndex = documentViewModel.getViewCurrentPageIndex();
+ if (!filteredComponents.contains(documentViewModel.getAllPageComponents().get(currentIndex))) {
+ fixCurrentViewPageAfterFilter();
+ }
+ ((AbstractDocumentView) documentView).pagesListChanged();
+ ((JComponent) documentView).invalidate();
+ ((JComponent) documentView).firePropertyChange(PropertyConstants.DOCUMENT_VIEW_PAGES_CHANGE, viewType, viewType);
+ ((JComponent) documentView).revalidate();
+ documentView.repaint();
+ }
+ }
+
+ private int getClosestAvailablePage(final boolean forward, final int currentIndex) {
+ final List allComponents = documentViewModel.getAllPageComponents();
+ final List filteredComponents = documentViewModel.getFilteredPageComponents();
+ final int upperBound = documentViewModel.getUpperBoundFilteredPages();
+ final int lowerBound = documentViewModel.getLowerBoundFilteredPages();
+ int newIdx = -1;
+ if (forward) {
+ for (int i = currentIndex; i <= upperBound && newIdx == -1; ++i) {
+ if (filteredComponents.contains(allComponents.get(i))) {
+ newIdx = i;
+ }
+ }
+ if (newIdx == -1 && !filteredComponents.isEmpty()) {
+ newIdx = upperBound;
+ }
+ } else {
+ for (int i = currentIndex; i >= lowerBound && newIdx == -1; --i) {
+ if (filteredComponents.contains(allComponents.get(i))) {
+ newIdx = i;
+ }
+ }
+ if (newIdx == -1 && !filteredComponents.isEmpty()) {
+ newIdx = lowerBound;
+ }
+ }
+ if (newIdx == -1 && !filteredComponents.isEmpty()) {
+ newIdx = filteredComponents.get(0).getPageIndex();
+ }
+ return newIdx;
+ }
+
+ private void fixCurrentViewPageAfterFilter() {
+ final List allComponents = documentViewModel.getAllPageComponents();
+ final List filteredComponents = documentViewModel.getFilteredPageComponents();
+ final int currentIndex = documentViewModel.getViewCurrentPageIndex();
+ final int newIdx;
+ final int upperBound = documentViewModel.getUpperBoundFilteredPages();
+ final int lowerBound = documentViewModel.getLowerBoundFilteredPages();
+ if (upperBound > currentIndex) {
+ int tmpIdx = -1;
+ for (int i = currentIndex; i <= upperBound && tmpIdx == -1; ++i) {
+ if (filteredComponents.contains(allComponents.get(i))) {
+ tmpIdx = i;
+ }
+ }
+ newIdx = tmpIdx;
+ } else if (lowerBound < currentIndex) {
+ int tmpIdx = -1;
+ for (int i = currentIndex; i >= lowerBound && tmpIdx == -1; --i) {
+ if (filteredComponents.contains(allComponents.get(i))) {
+ tmpIdx = i;
+ }
+ }
+ newIdx = tmpIdx;
+ } else {
+ newIdx = -1;
+ }
+ documentViewModel.setViewCurrentPageIndex(newIdx);
+ }
+
}
diff --git a/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/DocumentViewModel.java b/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/DocumentViewModel.java
index eef703a2b..78df07afc 100644
--- a/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/DocumentViewModel.java
+++ b/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/DocumentViewModel.java
@@ -24,6 +24,7 @@
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
+import java.util.function.Predicate;
/**
* The DocumentViewModel interface contains common accessors and modifiers needed
@@ -172,11 +173,26 @@ public interface DocumentViewModel {
void clearSelectedPageText();
/**
- * Gets the page components associated with this view model.
+ * Gets the filtered page components associated with this view model.
*
* @return vector of page components.
*/
- List getPageComponents();
+ List getFilteredPageComponents();
+
+ /**
+ * Gets all the page components associated with this view model.
+ *
+ * @return vector of page components.
+ */
+ List getAllPageComponents();
+
+ /**
+ * Filters the page components using the given predicate
+ *
+ * @param filter The predicate to use
+ */
+ void filterPageComponents(final Predicate filter);
+
HashMap> getDocumentViewAnnotationComponents();
@@ -214,6 +230,34 @@ public interface DocumentViewModel {
*/
int getViewCurrentPageIndex();
+ /**
+ * @return The index of the current page in the filtered page components
+ */
+ default int getFilteredCurrentPageIndex() {
+ return isFiltered() ? getFilteredPageComponents().indexOf(getAllPageComponents().get(getViewCurrentPageIndex())) : getViewCurrentPageIndex();
+ }
+
+ /**
+ * @return The lower bound of the pages index in the filtered page components
+ */
+ default int getLowerBoundFilteredPages() {
+ return getFilteredPageComponents().isEmpty() ? -1 : getFilteredPageComponents().get(0).getPageIndex();
+ }
+
+ /**
+ * @return The upper bound of the pages index in the filtered page components
+ */
+ default int getUpperBoundFilteredPages() {
+ return getFilteredPageComponents().isEmpty() ? -1 : getFilteredPageComponents().get(getFilteredPageComponents().size() - 1).getPageIndex();
+ }
+
+ /**
+ * @return Whether the page components are currently filtered (i.e. filteredPageComponents != allPageComponents)
+ */
+ default boolean isFiltered() {
+ return getFilteredPageComponents().size() != getAllPageComponents().size();
+ }
+
/**
* Sets the models zoom level.
*
diff --git a/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/DocumentViewModelImpl.java b/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/DocumentViewModelImpl.java
index 8f0567b59..84eac4c12 100644
--- a/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/DocumentViewModelImpl.java
+++ b/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/DocumentViewModelImpl.java
@@ -46,7 +46,7 @@ public DocumentViewModelImpl(Document document) {
int avgPageHeight = 0;
// add components for every page in the document
- pageComponents = new ArrayList<>(numberOfPages);
+ allComponents = new ArrayList<>(numberOfPages);
for (int i = 0; i < numberOfPages; i++) {
// also a way to pass in an average document size.
if (i < MAX_PAGE_SIZE_READ_AHEAD) {
@@ -66,8 +66,9 @@ public DocumentViewModelImpl(Document document) {
pageViewComponent = buildPageViewComponent(this, pageTree, i,
avgPageWidth, avgPageHeight);
}
- pageComponents.add(pageViewComponent);
+ allComponents.add(pageViewComponent);
}
+ filteredComponents = new ArrayList<>(allComponents);
}
}
diff --git a/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/OneColumnPageView.java b/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/OneColumnPageView.java
index 131939b5e..0439ad047 100644
--- a/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/OneColumnPageView.java
+++ b/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/OneColumnPageView.java
@@ -55,7 +55,7 @@ public OneColumnPageView(DocumentViewController documentDocumentViewController,
// add the first of many tools need for this views and others like it.
currentPageChanger =
new CurrentPageChanger(documentScrollpane, this,
- documentViewModel.getPageComponents());
+ documentViewModel.getAllPageComponents());
// add page changing key listeners
keyListenerPageChanger =
@@ -69,7 +69,7 @@ private void buildGUI() {
this.setBorder(new EmptyBorder(layoutInserts, layoutInserts, layoutInserts, layoutInserts));
List pageComponents =
- documentViewController.getDocumentViewModel().getPageComponents();
+ documentViewController.getDocumentViewModel().getFilteredPageComponents();
if (pageComponents != null) {
for (AbstractPageViewComponent pageViewComponent : pageComponents) {
@@ -92,6 +92,13 @@ private void buildGUI() {
public void updateDocumentView() {
}
+ @Override
+ public void pagesListChanged() {
+ dispose();
+ disposing = false;
+ buildGUI();
+ }
+
/**
* Returns a next page increment of one.
*/
diff --git a/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/OnePageView.java b/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/OnePageView.java
index f426bd1ff..85461a622 100644
--- a/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/OnePageView.java
+++ b/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/OnePageView.java
@@ -72,9 +72,9 @@ private void buildGUI() {
public void updateDocumentView() {
DocumentViewModel documentViewModel = documentViewController.getDocumentViewModel();
- java.util.List pageComponents = documentViewModel.getPageComponents();
+ java.util.List pageComponents = documentViewModel.getFilteredPageComponents();
if (pageComponents != null) {
- AbstractPageViewComponent pageViewComponent = pageComponents.get(documentViewModel.getViewCurrentPageIndex());
+ AbstractPageViewComponent pageViewComponent = pageComponents.get(documentViewModel.getFilteredCurrentPageIndex());
if (pageViewComponent != null) {
// remove old component
this.removeAll();
@@ -98,6 +98,11 @@ public void updateDocumentView() {
}
}
+ @Override
+ public void pagesListChanged() {
+ updateDocumentView();
+ }
+
protected JComponent buildPageDecoration(AbstractPageViewComponent pageViewComponent) {
return new PageViewDecorator(pageViewComponent);
}
diff --git a/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/PageComponentSelector.java b/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/PageComponentSelector.java
index 38e6f2606..394551c67 100644
--- a/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/PageComponentSelector.java
+++ b/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/PageComponentSelector.java
@@ -71,7 +71,7 @@ public static AnnotationComponent SelectAnnotationComponent(Controller controlle
// so we need to do a deep search for the annotation.
Document document = controller.getDocument();
java.util.List pageViewComponentList =
- controller.getDocumentViewController().getDocumentViewModel().getPageComponents();
+ controller.getDocumentViewController().getDocumentViewModel().getAllPageComponents();
int pages = controller.getDocument().getPageTree().getNumberOfPages();
boolean found = false;
int pageIndex;
@@ -126,7 +126,7 @@ public static DestinationComponent SelectDestinationComponent(Controller control
// so we need to do a deep search for the annotation.
Document document = controller.getDocument();
java.util.List pageViewComponentList =
- controller.getDocumentViewController().getDocumentViewModel().getPageComponents();
+ controller.getDocumentViewController().getDocumentViewModel().getAllPageComponents();
Reference pageReference = destination.getPageReference();
if (pageReference != null) {
Library library = document.getCatalog().getLibrary();
@@ -155,8 +155,6 @@ public static DestinationComponent SelectDestinationComponent(Controller control
public static int AssignAnnotationPage(Controller controller, Annotation widgetAnnotation) {
Document document = controller.getDocument();
- java.util.List pageViewComponentList =
- controller.getDocumentViewController().getDocumentViewModel().getPageComponents();
int pages = controller.getDocument().getPageTree().getNumberOfPages();
int pageIndex;
for (pageIndex = 0; pageIndex < pages; pageIndex++) {
diff --git a/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/TwoColumnPageView.java b/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/TwoColumnPageView.java
index 036769b4b..eb6205e2a 100644
--- a/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/TwoColumnPageView.java
+++ b/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/TwoColumnPageView.java
@@ -59,7 +59,7 @@ public TwoColumnPageView(DocumentViewController documentDocumentViewController,
// add the first of many tools needed for this view and others like it.
currentPageChanger =
new CurrentPageChanger(documentScrollpane, this,
- documentViewModel.getPageComponents());
+ documentViewModel.getAllPageComponents());
// add page changing key listeners
keyListenerPageChanger =
@@ -78,7 +78,7 @@ private void buildGUI() {
// finally add all the components
// add components for every page in the document
java.util.List pageComponents =
- documentViewController.getDocumentViewModel().getPageComponents();
+ documentViewController.getDocumentViewModel().getFilteredPageComponents();
if (pageComponents != null) {
AbstractPageViewComponent pageViewComponent;
@@ -102,6 +102,13 @@ private void buildGUI() {
public void updateDocumentView() {
}
+ @Override
+ public void pagesListChanged() {
+ dispose();
+ disposing=false;
+ buildGUI();
+ }
+
/**
* Returns a next page increment of two.
*/
diff --git a/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/TwoPageView.java b/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/TwoPageView.java
index 9021c79fa..7fef3fe16 100644
--- a/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/TwoPageView.java
+++ b/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/TwoPageView.java
@@ -71,7 +71,7 @@ public TwoPageView(DocumentViewController documentDocumentViewController,
// add the first of many tools need for this views and others like it.
currentPageChanger =
new CurrentPageChanger(documentScrollpane, this,
- documentViewModel.getPageComponents(),
+ documentViewModel.getAllPageComponents(),
false);
}
@@ -89,7 +89,7 @@ private void buildGUI() {
public void updateDocumentView() {
DocumentViewModel documentViewModel = documentViewController.getDocumentViewModel();
- java.util.List pageComponents = documentViewModel.getPageComponents();
+ java.util.List pageComponents = documentViewModel.getFilteredPageComponents();
if (pageComponents != null) {
// remove old component
@@ -97,7 +97,7 @@ public void updateDocumentView() {
AbstractPageViewComponent pageViewComponent;
int count = 0;
- int index = documentViewModel.getViewCurrentPageIndex();
+ int index = documentViewModel.getFilteredCurrentPageIndex();
int docLength = pageComponents.size();
// adjust for 2 up view, so we don't page again to the 3 pages...
@@ -136,6 +136,11 @@ public void updateDocumentView() {
}
}
+ @Override
+ public void pagesListChanged() {
+ updateDocumentView();
+ }
+
/**
* Returns a next page increment of two.
*/
diff --git a/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/annotations/summary/AnnotationSummaryBox.java b/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/annotations/summary/AnnotationSummaryBox.java
index 96449d97b..482f5e2f6 100644
--- a/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/annotations/summary/AnnotationSummaryBox.java
+++ b/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/annotations/summary/AnnotationSummaryBox.java
@@ -122,7 +122,7 @@ public JPopupMenu getContextMenu(Frame frame, DraggableAnnotationPanel.MouseHand
int pageIndex = annotation.getParent().getPageIndex();
PageViewComponentImpl pageViewComponent = (PageViewComponentImpl)
documentViewController.getParentController().getDocumentViewController()
- .getDocumentViewModel().getPageComponents().get(pageIndex);
+ .getDocumentViewModel().getAllPageComponents().get(pageIndex);
pageViewComponent.refreshAnnotationComponents(pageViewComponent.getPage(), false);
ArrayList comps = pageViewComponent.getAnnotationComponents();
for (AbstractAnnotationComponent abstractComp : comps) {
diff --git a/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/annotations/summary/ColorLabelPanel.java b/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/annotations/summary/ColorLabelPanel.java
index 65cd40c3e..f399def6e 100644
--- a/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/annotations/summary/ColorLabelPanel.java
+++ b/viewer/viewer-awt/src/main/java/org/icepdf/ri/common/views/annotations/summary/ColorLabelPanel.java
@@ -59,7 +59,7 @@ public void addAnnotation(MarkupAnnotation markupAnnotation) {
PopupAnnotation popupAnnotation = markupAnnotation.getPopupAnnotation();
if (popupAnnotation != null) {
List pageComponents =
- controller.getDocumentViewController().getDocumentViewModel().getPageComponents();
+ controller.getDocumentViewController().getDocumentViewModel().getAllPageComponents();
int pageIndex = markupAnnotation.getPageIndex();
if (pageIndex >= 0) {
AnnotationSummaryBox popupAnnotationComponent =
diff --git a/viewer/viewer-awt/src/main/resources/org/icepdf/ri/images/filter_pages_a_24.png b/viewer/viewer-awt/src/main/resources/org/icepdf/ri/images/filter_pages_a_24.png
new file mode 100644
index 000000000..409232487
Binary files /dev/null and b/viewer/viewer-awt/src/main/resources/org/icepdf/ri/images/filter_pages_a_24.png differ
diff --git a/viewer/viewer-awt/src/main/resources/org/icepdf/ri/images/filter_pages_a_32.png b/viewer/viewer-awt/src/main/resources/org/icepdf/ri/images/filter_pages_a_32.png
new file mode 100644
index 000000000..cea9946f0
Binary files /dev/null and b/viewer/viewer-awt/src/main/resources/org/icepdf/ri/images/filter_pages_a_32.png differ
diff --git a/viewer/viewer-awt/src/main/resources/org/icepdf/ri/images/filter_pages_i_24.png b/viewer/viewer-awt/src/main/resources/org/icepdf/ri/images/filter_pages_i_24.png
new file mode 100644
index 000000000..ac832b7b2
Binary files /dev/null and b/viewer/viewer-awt/src/main/resources/org/icepdf/ri/images/filter_pages_i_24.png differ
diff --git a/viewer/viewer-awt/src/main/resources/org/icepdf/ri/images/filter_pages_i_32.png b/viewer/viewer-awt/src/main/resources/org/icepdf/ri/images/filter_pages_i_32.png
new file mode 100644
index 000000000..2e6bdffc5
Binary files /dev/null and b/viewer/viewer-awt/src/main/resources/org/icepdf/ri/images/filter_pages_i_32.png differ
diff --git a/viewer/viewer-awt/src/main/resources/org/icepdf/ri/images/filter_pages_r_24.png b/viewer/viewer-awt/src/main/resources/org/icepdf/ri/images/filter_pages_r_24.png
new file mode 100644
index 000000000..946b009d7
Binary files /dev/null and b/viewer/viewer-awt/src/main/resources/org/icepdf/ri/images/filter_pages_r_24.png differ
diff --git a/viewer/viewer-awt/src/main/resources/org/icepdf/ri/images/filter_pages_r_32.png b/viewer/viewer-awt/src/main/resources/org/icepdf/ri/images/filter_pages_r_32.png
new file mode 100644
index 000000000..9aa12227e
Binary files /dev/null and b/viewer/viewer-awt/src/main/resources/org/icepdf/ri/images/filter_pages_r_32.png differ
diff --git a/viewer/viewer-awt/src/main/resources/org/icepdf/ri/resources/MessageBundle.properties b/viewer/viewer-awt/src/main/resources/org/icepdf/ri/resources/MessageBundle.properties
index a78244083..0dce1129c 100644
--- a/viewer/viewer-awt/src/main/resources/org/icepdf/ri/resources/MessageBundle.properties
+++ b/viewer/viewer-awt/src/main/resources/org/icepdf/ri/resources/MessageBundle.properties
@@ -141,6 +141,9 @@ viewer.toolbar.tool.zoomDynamic.label=
viewer.toolbar.tool.zoomDynamic.tooltip=Zoom Dynamic Tool
viewer.toolbar.tool.zoomOut.label=
viewer.toolbar.tool.zoomOut.tooltip=Zoom Out Tool
+viewer.toolbar.tool.filterPages.label=
+viewer.toolbar.tool.filterPages.tooltip=Filter pages
+viewer.toolbar.tool.filterEmptyPages.label=Filter empty pages
viewer.toolbar.tool.annotationPreview.label=
viewer.toolbar.tool.annotationPreview.tooltip=Annotation Summary Window
viewer.toolbar.tool.annotationUtility.label=
diff --git a/viewer/viewer-awt/src/main/resources/org/icepdf/ri/resources/MessageBundle_de.properties b/viewer/viewer-awt/src/main/resources/org/icepdf/ri/resources/MessageBundle_de.properties
index 5959be0ff..167cda707 100644
--- a/viewer/viewer-awt/src/main/resources/org/icepdf/ri/resources/MessageBundle_de.properties
+++ b/viewer/viewer-awt/src/main/resources/org/icepdf/ri/resources/MessageBundle_de.properties
@@ -517,4 +517,6 @@ viewer.annotation.signature.properties.dialog.revocation.failure=- Revokations\u
viewer.annotation.signature.properties.dialog.certificateExpired.failure=- Signaturzertifikat ist abgelaufen.
viewer.annotation.signature.properties.dialog.showCertificates.label=Signaturzertifikat...
viewer.annotation.signature.properties.dialog.validity.title=G\u00FCltigkeitszusammenfassung
-viewer.annotation.signature.properties.dialog.signerInfo.title=Unterzeichnerinformationen
\ No newline at end of file
+viewer.annotation.signature.properties.dialog.signerInfo.title=Unterzeichnerinformationen
+viewer.toolbar.tool.filterPages.tooltip=Seiten filtern
+viewer.toolbar.tool.filterEmptyPages.label=Wei\u00DFe Seiten ausblenden
\ No newline at end of file
diff --git a/viewer/viewer-awt/src/main/resources/org/icepdf/ri/resources/MessageBundle_fr.properties b/viewer/viewer-awt/src/main/resources/org/icepdf/ri/resources/MessageBundle_fr.properties
index 024636356..93b3603e1 100644
--- a/viewer/viewer-awt/src/main/resources/org/icepdf/ri/resources/MessageBundle_fr.properties
+++ b/viewer/viewer-awt/src/main/resources/org/icepdf/ri/resources/MessageBundle_fr.properties
@@ -508,4 +508,6 @@ viewer.annotation.signature.properties.dialog.revocation.failure=- Aucune v\u00E
viewer.annotation.signature.properties.dialog.certificateExpired.failure=- Le certificat du signataire est \u00E9chu.
viewer.annotation.signature.properties.dialog.showCertificates.label=Certificat du signataire...
viewer.annotation.signature.properties.dialog.validity.title=R\u00E9sum\u00E9 de la validation
-viewer.annotation.signature.properties.dialog.signerInfo.title=Informations sur le signataire
\ No newline at end of file
+viewer.annotation.signature.properties.dialog.signerInfo.title=Informations sur le signataire
+viewer.toolbar.tool.filterPages.tooltip=Filtrer les pages
+viewer.toolbar.tool.filterEmptyPages.label=Cacher les pages blanches
\ No newline at end of file