Skip to content

Pull Request to create/update 'rebased/feature/reshape-ui' branch #91

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,12 @@
<version>${itext.version}</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>net.sourceforge.mydoggy</groupId>
<artifactId>mydoggy-plaf</artifactId>
<version>1.5.0-beta-r1389</version>
</dependency>
</dependencies>

<repositories>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,13 +72,11 @@ This file is part of the iText (R) project.
import com.itextpdf.rups.view.icons.IconTreeNode;
import com.itextpdf.rups.view.itext.FormTree;
import com.itextpdf.rups.view.itext.OutlineTree;
import com.itextpdf.rups.view.itext.PagesTable;
import com.itextpdf.rups.view.itext.PdfObjectPanel;
import com.itextpdf.rups.view.itext.PdfTree;
import com.itextpdf.rups.view.itext.PlainText;
import com.itextpdf.rups.view.itext.StructureTree;
import com.itextpdf.rups.view.itext.SyntaxHighlightedStreamPane;
import com.itextpdf.rups.view.itext.XRefTable;
import com.itextpdf.rups.view.itext.treenodes.PdfObjectTreeNode;
import com.itextpdf.rups.view.itext.treenodes.PdfTrailerTreeNode;

Expand Down Expand Up @@ -110,10 +108,6 @@ public class PdfReaderController extends Observable implements Observer {
* Tabbed Pane containing other components.
*/
protected JTabbedPane navigationTabs;
/**
* JTable with all the pages and their labels.
*/
protected PagesTable pages;
/**
* Treeview of the outlines.
*/
Expand All @@ -126,10 +120,6 @@ public class PdfReaderController extends Observable implements Observer {
* Treeview of the form.
*/
protected FormTree form;
/**
* JTable corresponding with the CrossReference table.
*/
protected XRefTable xref;
/**
* A panel that will show PdfObjects.
*/
Expand Down Expand Up @@ -174,23 +164,17 @@ public PdfReaderController(TreeSelectionListener treeSelectionListener,
pdfTree.setComponentPopupMenu(menu);
pdfTree.addMouseListener(new PdfTreeContextMenuMouseListener(menu, pdfTree));
addObserver(pdfTree);

pages = new PagesTable(this, pageSelectionListener);
addObserver(pages);
outlines = new OutlineTree(this);
addObserver(outlines);
structure = new StructureTree(this);
addObserver(structure);
form = new FormTree(this);
addObserver(form);
xref = new XRefTable(this);
addObserver(xref);
text = new PlainText();
addObserver(text);

navigationTabs = new JTabbedPane();
final String pagesString = Language.PAGES.getString();
navigationTabs.addTab(pagesString, null, new JScrollPane(pages), pagesString);
navigationTabs.addTab(Language.OUTLINES.getString(), null, new JScrollPane(outlines),
Language.OUTLINES_BOOKMARKS.getString());
navigationTabs.addTab(Language.STRUCTURE.getString(), null, new JScrollPane(structure),
Expand All @@ -199,8 +183,6 @@ public PdfReaderController(TreeSelectionListener treeSelectionListener,
Language.FORM_INTERACTIVE.getString());
navigationTabs.addTab(Language.FORM_XFA.getString(), null, new JScrollPane(form.getXfaTree()),
Language.FORM_XFA_DESCRIPTION.getString());
navigationTabs.addTab(Language.XREF.getString(), null, new JScrollPane(xref),
Language.XREF_DESCRIPTION.getString());
navigationTabs.addTab(Language.PLAINTEXT.getString(), null, new JScrollPane(text),
Language.PLAINTEXT_DESCRIPTION.getString());
navigationTabs.addChangeListener(new ChangeListener() {
Expand Down Expand Up @@ -406,7 +388,7 @@ public void render(PdfObjectTreeNode node) {
* @param pageNumber the page number that needs to be selected
*/
public void gotoPage(int pageNumber) {
pageNumber--;
/**pageNumber--;

if (pages == null
|| pages.getSelectedRow() == pageNumber) {
Expand All @@ -415,7 +397,7 @@ public void gotoPage(int pageNumber) {

if (pageNumber < pages.getRowCount()) {
pages.setRowSelectionInterval(pageNumber, pageNumber);
}
}*/
}

protected void highlightChanges(CompareTool.CompareResult compareResult) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ public final void openNewFile(File file) {
return;
}

this.rupsTabbedPane.openNewFile(file, this.dimension, false);
this.rupsTabbedPane.openNewFile(file, false);
this.update(this, new OpenFileEvent(file));
}
}
Expand Down
144 changes: 32 additions & 112 deletions src/main/java/com/itextpdf/rups/controller/RupsInstanceController.java
Original file line number Diff line number Diff line change
Expand Up @@ -44,41 +44,36 @@ This file is part of the iText (R) project.

import com.itextpdf.kernel.exceptions.PdfException;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.utils.CompareTool;
import com.itextpdf.rups.event.CloseDocumentEvent;
import com.itextpdf.rups.event.PostCompareEvent;
import com.itextpdf.rups.event.RupsEvent;
import com.itextpdf.rups.event.TreeNodeClickedEvent;
import com.itextpdf.rups.model.LoggerHelper;
import com.itextpdf.rups.model.ObjectLoader;
import com.itextpdf.rups.model.PdfFile;
import com.itextpdf.rups.model.ProgressDialog;
import com.itextpdf.rups.view.Console;
import com.itextpdf.rups.view.Language;
import com.itextpdf.rups.view.PageSelectionListener;
import com.itextpdf.rups.view.contextmenu.ConsoleContextMenu;
import com.itextpdf.rups.view.contextmenu.ContextMenuMouseListener;
import com.itextpdf.rups.view.dock.InfoDockPanel;
import com.itextpdf.rups.view.dock.XRefTable;
import com.itextpdf.rups.view.dock.PagesTable;
import com.itextpdf.rups.view.itext.treenodes.PdfObjectTreeNode;
import com.itextpdf.rups.view.itext.treenodes.PdfTrailerTreeNode;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.*;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.Map;
import java.util.Observable;
import java.util.Observer;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTabbedPane;
import javax.swing.SwingUtilities;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
Expand Down Expand Up @@ -108,7 +103,7 @@ public class RupsInstanceController extends Observable
/**
* Contains all other components: the page panel, the outline tree, etc.
*/
private final JSplitPane masterComponent;
private final JPanel masterComponent;

/**
* The Pdf file that is currently open in the application.
Expand All @@ -117,55 +112,27 @@ public class RupsInstanceController extends Observable

private ObjectLoader loader;

private Map<Class, Component> dockedComponentsMap;

// constructor

/**
* Constructs the GUI components of the RUPS application.
*
* @param dimension the dimension
* @param owner the jpanel
*/
public RupsInstanceController(Dimension dimension, JPanel owner) {
public RupsInstanceController(JPanel owner) {
// creating components and controllers
this.ownerPanel = owner;
final Console console = Console.getInstance();
addObserver(console);
console.addObserver(this);
readerController = new PdfReaderController(this, this);
this.dockedComponentsMap = new HashMap<>();
this.readerController = new PdfReaderController(this, this);

addObserver(readerController);

// creating the master component
masterComponent = new JSplitPane();
masterComponent.setOrientation(JSplitPane.VERTICAL_SPLIT);
masterComponent.setDividerLocation((int) (dimension.getHeight() * .70));
masterComponent.setDividerSize(2);

final JSplitPane content = new JSplitPane();
masterComponent.add(content, JSplitPane.TOP);
final JSplitPane info = new JSplitPane();
masterComponent.add(info, JSplitPane.BOTTOM);

content.setOrientation(JSplitPane.HORIZONTAL_SPLIT);
content.setDividerLocation((int) (dimension.getWidth() * .6));
content.setDividerSize(1);
JPanel treePanel = new JPanel(new BorderLayout());
treePanel.add(new JScrollPane(readerController.getPdfTree()), BorderLayout.CENTER);
content.add(treePanel, JSplitPane.LEFT);
content.add(readerController.getNavigationTabs(), JSplitPane.RIGHT);

info.setDividerLocation((int) (dimension.getWidth() * .3));
info.setDividerSize(1);
info.add(readerController.getObjectPanel(), JSplitPane.LEFT);
final JTabbedPane editorPane = readerController.getEditorTabs();
final JScrollPane cons = new JScrollPane(console.getTextArea());
console.getTextArea().addMouseListener(
new ContextMenuMouseListener(ConsoleContextMenu.getPopupMenu(console.getTextArea()),
console.getTextArea()));
editorPane.addTab(Language.CONSOLE.getString(), null, cons, Language.CONSOLE_TOOL_TIP.getString());
editorPane.setSelectedComponent(cons);
info.add(editorPane, JSplitPane.RIGHT);

ownerPanel.add(masterComponent, BorderLayout.CENTER);
this.masterComponent = new JPanel(new BorderLayout());
this.masterComponent.add(new JScrollPane(readerController.getPdfTree()), BorderLayout.CENTER);

ownerPanel.add(this.masterComponent, BorderLayout.CENTER);
}

public final void update(Observable o, Object arg) {
Expand All @@ -174,19 +141,11 @@ public final void update(Observable o, Object arg) {
final RupsEvent event = (RupsEvent) arg;
switch (event.getType()) {
case RupsEvent.OPEN_DOCUMENT_POST_EVENT:
setChanged();
setChanged();
super.notifyObservers(event);
break;
}
}
//Events from observable classes
if (o != null && arg instanceof RupsEvent) {
final RupsEvent event = (RupsEvent) arg;
if (RupsEvent.CONSOLE_WRITE_EVENT == event.getType()) {
readerController.getEditorTabs()
.setSelectedIndex(readerController.getEditorTabs().getComponentCount() - 1);
}
}
}

/**
Expand All @@ -200,6 +159,17 @@ public void loadFile(File file, boolean readOnly) {
final Path filePath = Paths.get(file.toURI());
final byte[] contents = Files.readAllBytes(filePath);
loadRawContent(contents, file.getName(), file.getParentFile(), readOnly);

// TODO refactor this!
InfoDockPanel infoDockPanel = new InfoDockPanel(pdfFile);
this.dockedComponentsMap.put(InfoDockPanel.class, infoDockPanel);

XRefTable xRefTable = new XRefTable(readerController, loader);
this.dockedComponentsMap.put(XRefTable.class, xRefTable);

PagesTable pagesTable = new PagesTable(readerController, this, loader);
this.dockedComponentsMap.put(PagesTable.class, pagesTable);
this.readerController.addObserver(pagesTable);
} catch (IOException ioe) {
JOptionPane.showMessageDialog(masterComponent, ioe.getMessage(), Language.DIALOG.getString(),
JOptionPane.ERROR_MESSAGE);
Expand Down Expand Up @@ -283,59 +253,6 @@ public final void closeRoutine() {
readerController.getParser().setDocument(null);
}

public final CompareTool.CompareResult compareWithDocument(PdfDocument document) {
if (getPdfFile() == null || getPdfFile().getPdfDocument() == null) {
LoggerHelper.warn(Language.ERROR_NO_OPEN_DOCUMENT_COMPARE.getString(), getClass());
} else if (document == null) {
LoggerHelper.warn(Language.ERROR_COMPARED_DOCUMENT_NULL.getString(), getClass());
} else if (document.isClosed()) {
LoggerHelper.warn(Language.ERROR_COMPARED_DOCUMENT_CLOSED.getString(), getClass());
} else {
final CompareTool compareTool =
new CompareTool().setCompareByContentErrorsLimit(100).disableCachedPagesComparison();
return compareTool.compareByCatalog(getPdfFile().getPdfDocument(), document);
}
return null;
}

public final CompareTool.CompareResult compareWithFile(File file) {
try (PdfReader readerPdf = new PdfReader(file.getAbsolutePath());
final PdfDocument cmpDocument = new PdfDocument(readerPdf)) {
return compareWithDocument(cmpDocument);
} catch (IOException e) {
LoggerHelper.warn(Language.ERROR_COMPARE_DOCUMENT_CREATION.getString(), e, getClass());
return null;
}
}

public final CompareTool.CompareResult compareWithStream(InputStream is) {
try (PdfReader reader = new PdfReader(is);
PdfDocument cmpDocument = new PdfDocument(reader)) {
reader.setCloseStream(false);
return compareWithDocument(cmpDocument);
} catch (IOException e) {
LoggerHelper.warn(Language.ERROR_COMPARE_DOCUMENT_CREATION.getString(), e, getClass());
return null;
}
}

/**
* Clear all previous highlights and highlights the changes from the compare result.
* If compare result is null will just clear all previous highlights.
*
* @param compareResult the compare result
*/
public void highlightChanges(CompareTool.CompareResult compareResult) {
readerController.update(this, new PostCompareEvent(compareResult));
if (compareResult != null) {
if (compareResult.isOk()) {
LoggerHelper.info(Language.COMPARE_EQUAL.getString(), getClass());
} else {
LoggerHelper.info(compareResult.getReport(), getClass());
}
}
}

private void startObjectLoader() {
final ProgressDialog dialog =
new ProgressDialog(this.ownerPanel, Language.PDF_READING.getString(), null);
Expand Down Expand Up @@ -379,4 +296,7 @@ public PdfFile getPdfFile() {
return pdfFile;
}

public Component getDockedComponent(Class infoDockPanelClass) {
return this.dockedComponentsMap.get(infoDockPanelClass);
}
}
8 changes: 6 additions & 2 deletions src/main/java/com/itextpdf/rups/model/ObjectLoader.java
Original file line number Diff line number Diff line change
Expand Up @@ -56,18 +56,22 @@ public class ObjectLoader extends BackgroundTask {
* This is the object that wait for task to complete.
*/
protected Observer observer;

/**
* RUPS's PdfFile object.
*/
protected PdfFile file;

/**
* The factory that can provide PDF objects.
*/
protected IndirectObjectFactory objects;

/**
* The factory that can provide tree nodes.
*/
protected TreeNodeFactory nodes;

/**
* a human readable name for this loaded
*/
Expand All @@ -91,9 +95,9 @@ public ObjectLoader(Observer observer, PdfFile file, String loaderName, IProgres
}

/**
* Getter for the PdfReader object.
* Getter for the PdfFile object.
*
* @return a reader object
* @return a PdfFile object
*/
public PdfFile getFile() {
return file;
Expand Down
5 changes: 4 additions & 1 deletion src/main/java/com/itextpdf/rups/view/RupsPanel.java
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,8 @@ This file is part of the iText (R) project.
import com.itextpdf.rups.controller.RupsInstanceController;
import com.itextpdf.rups.model.PdfFile;

import java.awt.BorderLayout;
import java.awt.*;
import java.util.Map;
import javax.swing.JPanel;

/**
Expand All @@ -54,6 +55,8 @@ This file is part of the iText (R) project.
*/
public class RupsPanel extends JPanel {

private Map<Class, Component> dockingMap;

private RupsInstanceController rupsInstanceController;

public RupsPanel() {
Expand Down
Loading