org.icepdf.ri.common.utility.thumbs.ThumbnailsPanel Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of icepdf-viewer Show documentation
Show all versions of icepdf-viewer Show documentation
ICEpdf PDF Viewer Reference Implementation (RI)
/*
* Copyright 2006-2017 ICEsoft Technologies Canada Corp.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the
* License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an "AS
* IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language
* governing permissions and limitations under the License.
*/
package org.icepdf.ri.common.utility.thumbs;
import org.icepdf.core.pobjects.Document;
import org.icepdf.core.pobjects.PageTree;
import org.icepdf.ri.common.PageThumbnailComponent;
import org.icepdf.ri.common.SwingController;
import org.icepdf.ri.common.views.DocumentViewController;
import org.icepdf.ri.common.views.DocumentViewModel;
import org.icepdf.ri.common.views.ModifiedFlowLayout;
import org.icepdf.ri.util.PropertiesManager;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.*;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;
/**
* The ThumbnailsPanel class is responsible for showing a document preview
* of all pages in a document. This panel is show as a tab in the utility
* panel of the Viewer RI.
*
* @since 4.3
*/
@SuppressWarnings("serial")
public class ThumbnailsPanel extends JPanel {
protected DocumentViewController documentViewController;
protected Document currentDocument;
protected PropertiesManager propertiesManager;
protected DocumentViewModel documentViewModel;
protected float thumbNailZoom = 0.1f; // default zoom is 10%
protected static final int MAX_PAGE_SIZE_READ_AHEAD = 10;
private SwingController controller;
public ThumbnailsPanel(SwingController controller,
PropertiesManager propertiesManager) {
this.controller = controller;
this.propertiesManager = propertiesManager;
// assign thumbnail zoom from propertiesManager if available
if (propertiesManager != null) {
thumbNailZoom = propertiesManager.getFloat(
PropertiesManager.PROPERTY_UTILITYPANE_THUMBNAILS_ZOOM);
}
}
public void setDocument(Document document) {
this.currentDocument = document;
documentViewController = controller.getDocumentViewController();
if (document != null) {
buildUI();
} else {
// tear down the old container.
this.removeAll();
}
}
public void dispose() {
this.removeAll();
}
private void buildUI() {
final ModifiedFlowLayout layout = new ModifiedFlowLayout();
final JPanel pageThumbsPanel = new JPanel(layout);
this.setLayout(new BorderLayout());
JScrollPane scrollPane = new JScrollPane(pageThumbsPanel,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scrollPane.getVerticalScrollBar().setUnitIncrement(20);
scrollPane.getHorizontalScrollBar().setUnitIncrement(20);
this.add(scrollPane,
BorderLayout.CENTER);
scrollPane.getViewport().addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
JViewport tmp = (JViewport) e.getSource();
Dimension dim = layout.computeSize(tmp.getWidth(), pageThumbsPanel);
pageThumbsPanel.setPreferredSize(dim);
}
});
scrollPane.getVerticalScrollBar().addAdjustmentListener(
new AdjustmentListener() {
public void adjustmentValueChanged(AdjustmentEvent e) {
if (!e.getValueIsAdjusting()) {
repaint();
}
}
});
// load the page components into the layout
PageThumbnailComponent pageThumbnailComponent = null;
PageTree pageTree = currentDocument.getPageTree();
int numberOfPages = currentDocument.getNumberOfPages();
int avgPageWidth = 0;
int avgPageHeight = 0;
// add components for every page in the document
for (int i = 0; i < numberOfPages; i++) {
// also a way to pass in an average document size.
if (i < MAX_PAGE_SIZE_READ_AHEAD) {
pageThumbnailComponent =
new PageThumbnailComponent(
controller, scrollPane, pageTree, i, thumbNailZoom);
avgPageWidth += pageThumbnailComponent.getPreferredSize().width;
avgPageHeight += pageThumbnailComponent.getPreferredSize().height;
} else if (i > MAX_PAGE_SIZE_READ_AHEAD) {
pageThumbnailComponent =
new PageThumbnailComponent(controller, scrollPane, pageTree, i,
avgPageWidth, avgPageHeight, thumbNailZoom);
}
// calculate average page size
else if (i == MAX_PAGE_SIZE_READ_AHEAD) {
avgPageWidth /= (MAX_PAGE_SIZE_READ_AHEAD);
avgPageHeight /= (MAX_PAGE_SIZE_READ_AHEAD);
pageThumbnailComponent =
new PageThumbnailComponent(controller, scrollPane, pageTree, i,
avgPageWidth, avgPageHeight, thumbNailZoom);
}
pageThumbsPanel.add(pageThumbnailComponent);
}
pageThumbsPanel.revalidate();
scrollPane.validate();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy