org.icepdf.ri.viewer.WindowManager 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.viewer;
import org.icepdf.core.pobjects.Document;
import org.icepdf.core.util.Defs;
import org.icepdf.ri.common.*;
import org.icepdf.ri.common.views.DocumentViewController;
import org.icepdf.ri.common.views.DocumentViewControllerImpl;
import org.icepdf.ri.util.PropertiesManager;
import javax.swing.*;
import java.awt.*;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import java.util.ResourceBundle;
/**
* An implementation of WindowManagementCallback to manage the viewer applications
* windows.
*
* @since 1.0
*/
public class WindowManager implements WindowManagementCallback {
private static WindowManager windowManager;
private PropertiesManager properties;
private ArrayList controllers;
private long newWindowInvocationCounter = 0;
private ResourceBundle messageBundle = null;
private WindowManager() {
}
public static WindowManager getInstance() {
return windowManager;
}
//window management functions
public static WindowManager createInstance(PropertiesManager properties, ResourceBundle messageBundle) {
windowManager = new WindowManager();
windowManager.properties = properties;
windowManager.controllers = new ArrayList();
if (messageBundle != null) {
windowManager.messageBundle = messageBundle;
} else {
windowManager.messageBundle = ResourceBundle.getBundle(
PropertiesManager.DEFAULT_MESSAGE_BUNDLE);
}
// Annouce ourselves...
if (Defs.booleanProperty("org.icepdf.core.verbose", true)) {
System.out.println("\nICEsoft ICEpdf Viewer " + Document.getLibraryVersion());
System.out.println("Copyright ICEsoft Technologies, Inc.\n");
}
return windowManager;
}
public PropertiesManager getProperties() {
return properties;
}
public long getNumberOfWindows() {
return newWindowInvocationCounter;
}
public void newWindow(final String location) {
SwingController controller = commonWindowCreation();
controller.openDocument(location);
}
public void newWindow(final Document document, final String fileName) {
SwingController controller = commonWindowCreation();
controller.openDocument(document, fileName);
}
public void newWindow(URL location) {
SwingController controller = commonWindowCreation();
controller.openDocument(location);
}
protected SwingController commonWindowCreation() {
SwingController controller = new SwingController(messageBundle);
controller.setWindowManagementCallback(this);
// assign properties manager.
controller.setPropertiesManager(properties);
// add interactive mouse link annotation support
controller.getDocumentViewController().setAnnotationCallback(
new MyAnnotationCallback(controller.getDocumentViewController()));
controllers.add(controller);
// guild a new swing viewer with remembered view settings.
int viewType = DocumentViewControllerImpl.ONE_PAGE_VIEW;
int pageFit = DocumentViewController.PAGE_FIT_WINDOW_WIDTH;
try {
viewType = getProperties().getInt("document.viewtype",
DocumentViewControllerImpl.ONE_PAGE_VIEW);
pageFit = getProperties().getInt(
PropertiesManager.PROPERTY_DEFAULT_PAGEFIT,
DocumentViewController.PAGE_FIT_WINDOW_WIDTH);
} catch (NumberFormatException e) {
// eating error, as we can continue with out alarm
}
SwingViewBuilder factory =
new SwingViewBuilder(controller, viewType, pageFit);
JFrame frame = factory.buildViewerFrame();
if (frame != null) {
int width = getProperties().getInt("application.width", 800);
int height = getProperties().getInt("application.height", 600);
frame.setSize(width, height);
int x = getProperties().getInt("application.x", 1);
int y = getProperties().getInt("application.y", 1);
frame.setLocation((int) (x + (newWindowInvocationCounter * 10)),
(int) (y + (newWindowInvocationCounter * 10)));
++newWindowInvocationCounter;
frame.setVisible(true);
}
return controller;
}
public void disposeWindow(SwingController controller, JFrame viewer,
Properties properties) {
if (controllers.size() <= 1) {
quit(controller, viewer, properties);
return;
}
//gets the window to close from the list
int index = controllers.indexOf(controller);
if (index >= 0) {
controllers.remove(index);
newWindowInvocationCounter--;
if (viewer != null) {
viewer.setVisible(false);
viewer.dispose();
}
}
}
public void quit(SwingController controller, JFrame viewer,
Properties properties) {
if (controller != null && viewer != null) {
//save width & height
Rectangle sz = viewer.getBounds();
getProperties().setInt("application.x", sz.x);
getProperties().setInt("application.y", sz.y);
getProperties().setInt("application.height", sz.height);
getProperties().setInt("application.width", sz.width);
if (properties != null) {
getProperties().set(PropertiesManager.PROPERTY_DEFAULT_PAGEFIT,
properties.getProperty(PropertiesManager.PROPERTY_DEFAULT_PAGEFIT));
int viewType = Integer.parseInt(properties.getProperty("document.viewtype"));
// don't save the attachments view as it only applies to specific
// document types.
if (viewType != DocumentViewControllerImpl.USE_ATTACHMENTS_VIEW) {
getProperties().set("document.viewtype",
properties.getProperty("document.viewtype"));
}
}
getProperties().setDefaultFilePath(ViewModel.getDefaultFilePath());
getProperties().setDefaultURL(ViewModel.getDefaultURL());
}
// save all the rest, cookies, bookmarks, etc.
getProperties().saveAndEnd();
// make sure all the controllers have been disposed.
for (SwingController c : controllers) {
if (c == null)
continue;
c.dispose();
}
System.exit(0);
}
public void minimiseAllWindows() {
for (SwingController controller : controllers) {
JFrame frame = controller.getViewerFrame();
if (frame != null)
frame.setState(Frame.ICONIFIED);
}
}
public void bringAllWindowsToFront(SwingController frontMost) {
JFrame frontMostFrame = null;
for (SwingController controller : controllers) {
JFrame frame = controller.getViewerFrame();
if (frame != null) {
if (frontMost == controller) {
frontMostFrame = frame;
continue;
}
frame.setState(Frame.NORMAL);
frame.toFront();
}
}
if (frontMostFrame != null) {
frontMostFrame.setState(Frame.NORMAL);
frontMostFrame.toFront();
}
}
public void bringWindowToFront(int index) {
if (index >= 0 && index < controllers.size()) {
SwingController controller = controllers.get(index);
JFrame frame = controller.getViewerFrame();
if (frame != null) {
frame.setState(Frame.NORMAL);
frame.toFront();
}
}
}
/**
* As long as no windows have openned or closed, then the indexes in the
* returned list should still be valid for doing operations on
* the respective Controller objects
*
* @param giveIndex Give this SwingControllers index in the list as an Integer appended to the List
* @return List of String objects, each representing an open Document's origin. The last element may be an Integer
*/
public List getWindowDocumentOriginList(SwingController giveIndex) {
Integer foundIndex = null;
int count = controllers.size();
List
© 2015 - 2025 Weber Informatics LLC | Privacy Policy