From ac377cea07c67a92994ec08b1c216f9e7843cacd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Demey?= Date: Mon, 6 Feb 2023 14:59:39 +0100 Subject: [PATCH] MyDoggy :snickers: --- pom.xml | 6 + .../rups/controller/PdfReaderController.java | 22 +-- .../rups/controller/RupsController.java | 2 +- .../controller/RupsInstanceController.java | 144 ++++-------------- .../com/itextpdf/rups/model/ObjectLoader.java | 8 +- .../com/itextpdf/rups/view/RupsPanel.java | 5 +- .../itextpdf/rups/view/RupsTabbedPane.java | 47 +++++- .../rups/view/dock/InfoDockPanel.java | 24 +++ .../rups/view/{itext => dock}/PagesTable.java | 11 +- .../rups/view/dock/TabChangeListener.java | 43 ++++++ .../rups/view/{itext => dock}/XRefTable.java | 12 +- .../rups/view/itext/PageEnumerator.java | 2 +- .../rups/controller/RupsControllerTest.java | 2 +- .../rups/view/RupsTabbedPaneTest.java | 14 +- 14 files changed, 185 insertions(+), 157 deletions(-) create mode 100644 src/main/java/com/itextpdf/rups/view/dock/InfoDockPanel.java rename src/main/java/com/itextpdf/rups/view/{itext => dock}/PagesTable.java (96%) create mode 100644 src/main/java/com/itextpdf/rups/view/dock/TabChangeListener.java rename src/main/java/com/itextpdf/rups/view/{itext => dock}/XRefTable.java (93%) diff --git a/pom.xml b/pom.xml index eab2bbbb..91b4e21f 100644 --- a/pom.xml +++ b/pom.xml @@ -97,6 +97,12 @@ ${itext.version} test + + + net.sourceforge.mydoggy + mydoggy-plaf + 1.5.0-beta-r1389 + diff --git a/src/main/java/com/itextpdf/rups/controller/PdfReaderController.java b/src/main/java/com/itextpdf/rups/controller/PdfReaderController.java index 9aede3b6..c4dd6553 100644 --- a/src/main/java/com/itextpdf/rups/controller/PdfReaderController.java +++ b/src/main/java/com/itextpdf/rups/controller/PdfReaderController.java @@ -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; @@ -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. */ @@ -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. */ @@ -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), @@ -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() { @@ -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) { @@ -415,7 +397,7 @@ public void gotoPage(int pageNumber) { if (pageNumber < pages.getRowCount()) { pages.setRowSelectionInterval(pageNumber, pageNumber); - } + }*/ } protected void highlightChanges(CompareTool.CompareResult compareResult) { diff --git a/src/main/java/com/itextpdf/rups/controller/RupsController.java b/src/main/java/com/itextpdf/rups/controller/RupsController.java index 855bf788..48bcb808 100644 --- a/src/main/java/com/itextpdf/rups/controller/RupsController.java +++ b/src/main/java/com/itextpdf/rups/controller/RupsController.java @@ -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)); } } diff --git a/src/main/java/com/itextpdf/rups/controller/RupsInstanceController.java b/src/main/java/com/itextpdf/rups/controller/RupsInstanceController.java index 675aed01..ef5577f8 100644 --- a/src/main/java/com/itextpdf/rups/controller/RupsInstanceController.java +++ b/src/main/java/com/itextpdf/rups/controller/RupsInstanceController.java @@ -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; @@ -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. @@ -117,55 +112,27 @@ public class RupsInstanceController extends Observable private ObjectLoader loader; + private Map 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) { @@ -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); - } - } } /** @@ -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); @@ -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); @@ -379,4 +296,7 @@ public PdfFile getPdfFile() { return pdfFile; } + public Component getDockedComponent(Class infoDockPanelClass) { + return this.dockedComponentsMap.get(infoDockPanelClass); + } } diff --git a/src/main/java/com/itextpdf/rups/model/ObjectLoader.java b/src/main/java/com/itextpdf/rups/model/ObjectLoader.java index 87e26fe8..c62f777e 100644 --- a/src/main/java/com/itextpdf/rups/model/ObjectLoader.java +++ b/src/main/java/com/itextpdf/rups/model/ObjectLoader.java @@ -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 */ @@ -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; diff --git a/src/main/java/com/itextpdf/rups/view/RupsPanel.java b/src/main/java/com/itextpdf/rups/view/RupsPanel.java index e759540f..38b3a124 100644 --- a/src/main/java/com/itextpdf/rups/view/RupsPanel.java +++ b/src/main/java/com/itextpdf/rups/view/RupsPanel.java @@ -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; /** @@ -54,6 +55,8 @@ This file is part of the iText (R) project. */ public class RupsPanel extends JPanel { + private Map dockingMap; + private RupsInstanceController rupsInstanceController; public RupsPanel() { diff --git a/src/main/java/com/itextpdf/rups/view/RupsTabbedPane.java b/src/main/java/com/itextpdf/rups/view/RupsTabbedPane.java index 83ecb863..c1622096 100644 --- a/src/main/java/com/itextpdf/rups/view/RupsTabbedPane.java +++ b/src/main/java/com/itextpdf/rups/view/RupsTabbedPane.java @@ -44,13 +44,15 @@ This file is part of the iText (R) project. import com.itextpdf.rups.controller.RupsInstanceController; import com.itextpdf.rups.model.PdfFile; +import com.itextpdf.rups.view.dock.TabChangeListener; +import org.noos.xing.mydoggy.ToolWindow; +import org.noos.xing.mydoggy.ToolWindowAnchor; +import org.noos.xing.mydoggy.plaf.MyDoggyToolWindowManager; import java.awt.Component; import java.awt.Dimension; import java.io.File; -import javax.swing.JLabel; -import javax.swing.JPanel; -import javax.swing.JTabbedPane; +import javax.swing.*; /** * The class holding the JTabbedPane that holds the Rups tabs. This class is responsible for loading, closing, and @@ -62,22 +64,55 @@ public class RupsTabbedPane { private final JPanel defaultTab; private final JTabbedPane jTabbedPane; + private MyDoggyToolWindowManager toolWindowManager; public RupsTabbedPane() { + MyDoggyToolWindowManager myDoggyToolWindowManager = new MyDoggyToolWindowManager(); + this.toolWindowManager = myDoggyToolWindowManager; + + // Register a Tool. + toolWindowManager.registerToolWindow("Info", // Id + "Info Tab", // Title + null, // Icon + new JLabel("No open file."), // Component + ToolWindowAnchor.RIGHT); // Anchor + + toolWindowManager.registerToolWindow("XREF", + "XREF Table", + null, + new JLabel("No open file."), + ToolWindowAnchor.RIGHT); + + toolWindowManager.registerToolWindow("Pages", + "Pages", + null, + new JLabel("No open file."), + ToolWindowAnchor.RIGHT); + + // Made all tools available + for (ToolWindow window : toolWindowManager.getToolWindows()) { + window.setAvailable(true); + window.setActive(false); + } + this.jTabbedPane = new JTabbedPane(); this.defaultTab = new JPanel(); this.defaultTab.add(new JLabel(Language.DEFAULT_TAB_TEXT.getString())); this.jTabbedPane.addTab(Language.DEFAULT_TAB_TITLE.getString(), defaultTab); + TabChangeListener l = new TabChangeListener(); + l.setDoggy(toolWindowManager); + this.jTabbedPane.addChangeListener(l); + myDoggyToolWindowManager.setMainContent(jTabbedPane); } - public void openNewFile(File file, Dimension dimension, boolean readonly) { + public void openNewFile(File file, boolean readonly) { if (file != null) { if (this.defaultTab.equals(this.jTabbedPane.getSelectedComponent())) { this.jTabbedPane.removeTabAt(this.jTabbedPane.getSelectedIndex()); } RupsPanel rupsPanel = new RupsPanel(); - RupsInstanceController rupsInstanceController = new RupsInstanceController(dimension, rupsPanel); + RupsInstanceController rupsInstanceController = new RupsInstanceController(rupsPanel); rupsPanel.setRupsInstanceController(rupsInstanceController); rupsInstanceController.loadFile(file, readonly); this.jTabbedPane.addTab(file.getName(), null, rupsPanel); @@ -109,7 +144,7 @@ public void saveCurrentFile(File file) { } public Component getJTabbedPane() { - return this.jTabbedPane; + return this.toolWindowManager; } /** diff --git a/src/main/java/com/itextpdf/rups/view/dock/InfoDockPanel.java b/src/main/java/com/itextpdf/rups/view/dock/InfoDockPanel.java new file mode 100644 index 00000000..973b5fb4 --- /dev/null +++ b/src/main/java/com/itextpdf/rups/view/dock/InfoDockPanel.java @@ -0,0 +1,24 @@ +package com.itextpdf.rups.view.dock; + +import com.itextpdf.kernel.pdf.PdfDocument; +import com.itextpdf.kernel.pdf.PdfDocumentInfo; +import com.itextpdf.rups.model.PdfFile; + +import javax.swing.*; +import java.awt.*; + +public class InfoDockPanel extends JPanel { + + public InfoDockPanel(PdfFile pdfFile) { + Box box = Box.createVerticalBox(); + add(box); + + PdfDocument pdfDocument = pdfFile.getPdfDocument(); + PdfDocumentInfo documentInfo = pdfDocument.getDocumentInfo(); + + box.add(new JLabel(pdfFile.getFilename())); + box.add(new JLabel(documentInfo.getProducer())); + box.add(new JLabel(documentInfo.getAuthor())); + box.add(new JLabel(documentInfo.getTitle())); + } +} diff --git a/src/main/java/com/itextpdf/rups/view/itext/PagesTable.java b/src/main/java/com/itextpdf/rups/view/dock/PagesTable.java similarity index 96% rename from src/main/java/com/itextpdf/rups/view/itext/PagesTable.java rename to src/main/java/com/itextpdf/rups/view/dock/PagesTable.java index cbf1e723..28204928 100644 --- a/src/main/java/com/itextpdf/rups/view/itext/PagesTable.java +++ b/src/main/java/com/itextpdf/rups/view/dock/PagesTable.java @@ -40,16 +40,18 @@ This file is part of the iText (R) project. For more information, please contact iText Software Corp. at this address: sales@itextpdf.com */ -package com.itextpdf.rups.view.itext; +package com.itextpdf.rups.view.dock; import com.itextpdf.kernel.pdf.PdfDictionary; import com.itextpdf.kernel.pdf.PdfName; import com.itextpdf.rups.controller.PdfReaderController; +import com.itextpdf.rups.controller.RupsInstanceController; import com.itextpdf.rups.event.RupsEvent; import com.itextpdf.rups.model.ObjectLoader; import com.itextpdf.rups.model.TreeNodeFactory; import com.itextpdf.rups.view.Language; import com.itextpdf.rups.view.PageSelectionListener; +import com.itextpdf.rups.view.itext.PageEnumerator; import com.itextpdf.rups.view.itext.treenodes.PdfObjectTreeNode; import com.itextpdf.rups.view.itext.treenodes.PdfPageTreeNode; import com.itextpdf.rups.view.itext.treenodes.PdfTrailerTreeNode; @@ -69,6 +71,7 @@ This file is part of the iText (R) project. */ public class PagesTable extends JTable implements JTableAutoModelInterface, Observer { + private final ObjectLoader loader; /** * A list with page nodes. */ @@ -85,10 +88,12 @@ public class PagesTable extends JTable implements JTableAutoModelInterface, Obse * * @param controller the pdf reader controller * @param listener the page navigation listener + * @param loader */ - public PagesTable(PdfReaderController controller, PageSelectionListener listener) { + public PagesTable(PdfReaderController controller, PageSelectionListener listener, ObjectLoader loader) { this.controller = controller; this.listener = listener; + this.loader = loader; setModel(new JTableAutoModel(this)); } @@ -201,4 +206,4 @@ public void valueChanged(ListSelectionEvent evt) { } } } -} +} \ No newline at end of file diff --git a/src/main/java/com/itextpdf/rups/view/dock/TabChangeListener.java b/src/main/java/com/itextpdf/rups/view/dock/TabChangeListener.java new file mode 100644 index 00000000..e16ad9b1 --- /dev/null +++ b/src/main/java/com/itextpdf/rups/view/dock/TabChangeListener.java @@ -0,0 +1,43 @@ +package com.itextpdf.rups.view.dock; + +import com.itextpdf.rups.controller.RupsInstanceController; +import com.itextpdf.rups.view.RupsPanel; +import org.noos.xing.mydoggy.ToolWindow; +import org.noos.xing.mydoggy.ToolWindowTab; +import org.noos.xing.mydoggy.plaf.MyDoggyToolWindowManager; + +import javax.swing.*; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import java.awt.*; +import java.util.Observable; + +public class TabChangeListener extends Observable implements ChangeListener { + private MyDoggyToolWindowManager doggy; + + @Override + public void stateChanged(ChangeEvent e) { + JTabbedPane tabbedPane = (JTabbedPane) e.getSource(); + if ( tabbedPane.getSelectedComponent() instanceof RupsPanel) { + RupsPanel rupsPanel = ((RupsPanel) (tabbedPane.getSelectedComponent())); + RupsInstanceController controller = rupsPanel.getRupsInstanceController(); + + ToolWindow info = doggy.getToolWindow("Info"); + info.getToolWindowTabs()[0].setComponent(controller.getDockedComponent(InfoDockPanel.class)); + + ToolWindow xref = doggy.getToolWindow("XREF"); + ToolWindowTab[] toolWindowTabs = xref.getToolWindowTabs(); + Component dockedComponent = controller.getDockedComponent(XRefTable.class); + toolWindowTabs[0].setComponent(dockedComponent); + + ToolWindow pages = doggy.getToolWindow("Pages"); + pages.getToolWindowTabs()[0].setComponent(controller.getDockedComponent(PagesTable.class)); + + doggy.repaint(); + } + } + + public void setDoggy(MyDoggyToolWindowManager toolWindowManager) { + this.doggy = toolWindowManager; + } +} diff --git a/src/main/java/com/itextpdf/rups/view/itext/XRefTable.java b/src/main/java/com/itextpdf/rups/view/dock/XRefTable.java similarity index 93% rename from src/main/java/com/itextpdf/rups/view/itext/XRefTable.java rename to src/main/java/com/itextpdf/rups/view/dock/XRefTable.java index f53f0b06..c1a8d2d0 100644 --- a/src/main/java/com/itextpdf/rups/view/itext/XRefTable.java +++ b/src/main/java/com/itextpdf/rups/view/dock/XRefTable.java @@ -40,11 +40,12 @@ This file is part of the iText (R) project. For more information, please contact iText Software Corp. at this address: sales@itextpdf.com */ -package com.itextpdf.rups.view.itext; +package com.itextpdf.rups.view.dock; import com.itextpdf.kernel.pdf.PdfNull; import com.itextpdf.kernel.pdf.PdfObject; import com.itextpdf.rups.controller.PdfReaderController; +import com.itextpdf.rups.controller.RupsInstanceController; import com.itextpdf.rups.event.RupsEvent; import com.itextpdf.rups.model.IndirectObjectFactory; import com.itextpdf.rups.model.ObjectLoader; @@ -77,18 +78,23 @@ public class XRefTable extends JTable implements JTableAutoModelInterface, Obser * Creates a JTable visualizing xref table. * * @param controller the pdf reader controller + * @param loader the ObjectLoader that loads the references */ - public XRefTable(PdfReaderController controller) { + public XRefTable(PdfReaderController controller, ObjectLoader loader) { super(); this.controller = controller; + objects = loader.getObjects(); setModel(new JTableAutoModel(this)); + final TableColumn col = getColumnModel().getColumn(0); + col.setPreferredWidth(5); + repaint(); } /** * @see java.util.Observer#update(java.util.Observable, java.lang.Object) */ public void update(Observable observable, Object obj) { - if (observable instanceof PdfReaderController && obj instanceof RupsEvent) { + if (observable instanceof RupsInstanceController && obj instanceof RupsEvent) { final RupsEvent event = (RupsEvent) obj; switch (event.getType()) { case RupsEvent.CLOSE_DOCUMENT_EVENT: diff --git a/src/main/java/com/itextpdf/rups/view/itext/PageEnumerator.java b/src/main/java/com/itextpdf/rups/view/itext/PageEnumerator.java index 54f641e1..5ae525d2 100644 --- a/src/main/java/com/itextpdf/rups/view/itext/PageEnumerator.java +++ b/src/main/java/com/itextpdf/rups/view/itext/PageEnumerator.java @@ -53,7 +53,7 @@ This file is part of the iText (R) project. import java.util.Enumeration; import java.util.List; -class PageEnumerator implements Enumeration { +public class PageEnumerator implements Enumeration { protected List pages = new ArrayList<>(); protected TreeNodeFactory factory; diff --git a/src/test/java/com/itextpdf/rups/controller/RupsControllerTest.java b/src/test/java/com/itextpdf/rups/controller/RupsControllerTest.java index ddde20ef..18e558fc 100644 --- a/src/test/java/com/itextpdf/rups/controller/RupsControllerTest.java +++ b/src/test/java/com/itextpdf/rups/controller/RupsControllerTest.java @@ -106,7 +106,7 @@ public void saveCurrentFile(File file) { } @Override - public void openNewFile(File file, Dimension dimension, boolean readonly) { + public void openNewFile(File file, boolean readonly) { opened = true; } } diff --git a/src/test/java/com/itextpdf/rups/view/RupsTabbedPaneTest.java b/src/test/java/com/itextpdf/rups/view/RupsTabbedPaneTest.java index 83e04247..ad9e3f1d 100644 --- a/src/test/java/com/itextpdf/rups/view/RupsTabbedPaneTest.java +++ b/src/test/java/com/itextpdf/rups/view/RupsTabbedPaneTest.java @@ -80,7 +80,7 @@ public void initializationTest() { @Test public void openNullFileTest() { - this.tabbedPane.openNewFile(null, this.dimension, false); + this.tabbedPane.openNewFile(null, false); JTabbedPane jTabbedPane = (JTabbedPane) this.tabbedPane.getJTabbedPane(); Assert.assertEquals(1, jTabbedPane.getTabCount()); Assert.assertEquals(Language.DEFAULT_TAB_TITLE.getString(), jTabbedPane.getTitleAt(0)); @@ -89,7 +89,7 @@ public void openNullFileTest() { @Test public void openNewFileTest() { File file = new File(INPUT_1); - this.tabbedPane.openNewFile(file, this.dimension, false); + this.tabbedPane.openNewFile(file, false); JTabbedPane jTabbedPane = (JTabbedPane) this.tabbedPane.getJTabbedPane(); Assert.assertEquals(1, jTabbedPane.getTabCount()); Assert.assertEquals(EXPECTED_TAB_TITLE, jTabbedPane.getTitleAt(0)); @@ -98,9 +98,9 @@ public void openNewFileTest() { @Test public void openTwoFiles() { File file = new File(INPUT_1); - this.tabbedPane.openNewFile(file, this.dimension, false); + this.tabbedPane.openNewFile(file, false); File file2 = new File(INPUT_2); - this.tabbedPane.openNewFile(file2, this.dimension, false); + this.tabbedPane.openNewFile(file2, false); JTabbedPane jTabbedPane = (JTabbedPane) this.tabbedPane.getJTabbedPane(); Assert.assertEquals(2, jTabbedPane.getTabCount()); Assert.assertEquals(EXPECTED_TAB_TITLE, jTabbedPane.getTitleAt(0)); @@ -110,9 +110,9 @@ public void openTwoFiles() { @Test public void openTwoFilesAndCloseAllTest() { File file = new File(INPUT_1); - this.tabbedPane.openNewFile(file, this.dimension, false); + this.tabbedPane.openNewFile(file, false); File file2 = new File(INPUT_2); - this.tabbedPane.openNewFile(file2, this.dimension, false); + this.tabbedPane.openNewFile(file2, false); this.tabbedPane.closeCurrentFile(); this.tabbedPane.closeCurrentFile(); JTabbedPane jTabbedPane = (JTabbedPane) this.tabbedPane.getJTabbedPane(); @@ -127,7 +127,7 @@ public void isFileDuplicateTest() { RupsConfiguration.INSTANCE.saveConfiguration(); File file = new File(INPUT_1); - this.tabbedPane.openNewFile(file, this.dimension, false); + this.tabbedPane.openNewFile(file, false); boolean isAlreadyOpened = this.tabbedPane.isFileAlreadyOpen(file); RupsConfiguration.INSTANCE.setOpenDuplicateFiles(originalValue);