/*
* Copyright (c) 1998-2017 by Richard A. Wilkes. All rights reserved.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, version 2.0. If a copy of the MPL was not distributed with
* this file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This Source Code Form is "Incompatible With Secondary Licenses", as
* defined by the Mozilla Public License, version 2.0.
*/
package com.trollworks.gcs.preferences;
import com.trollworks.gcs.pdfview.PdfRef;
import com.trollworks.toolkit.annotation.Localize;
import com.trollworks.toolkit.ui.UIUtilities;
import com.trollworks.toolkit.ui.border.EmptyBorder;
import com.trollworks.toolkit.ui.border.LineBorder;
import com.trollworks.toolkit.ui.layout.ColumnLayout;
import com.trollworks.toolkit.ui.preferences.PreferencePanel;
import com.trollworks.toolkit.ui.preferences.PreferencesWindow;
import com.trollworks.toolkit.ui.widget.BandedPanel;
import com.trollworks.toolkit.ui.widget.EditorField;
import com.trollworks.toolkit.utility.Localization;
import com.trollworks.toolkit.utility.text.IntegerFormatter;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.SwingConstants;
import javax.swing.border.CompoundBorder;
import javax.swing.text.DefaultFormatterFactory;
/** The page reference lookup preferences panel. */
public class ReferenceLookupPreferences extends PreferencePanel {
@Localize("Page References")
private static String TITLE;
@Localize("Remove")
private static String REMOVE;
@Localize("If your PDF is opening up to the wrong page when opening page references, enter an offset here to compensate.")
private static String OFFSET_FIELD_TOOLTIP;
static {
Localization.initialize();
}
private BandedPanel mPanel;
/**
* Creates a new {@link ReferenceLookupPreferences}.
*
* @param owner The owning {@link PreferencesWindow}.
*/
public ReferenceLookupPreferences(PreferencesWindow owner) {
super(TITLE, owner);
setLayout(new BorderLayout());
mPanel = new BandedPanel(TITLE);
mPanel.setLayout(new ColumnLayout(4, 5, 0));
mPanel.setBorder(new EmptyBorder(2, 5, 2, 5));
mPanel.setOpaque(true);
mPanel.setBackground(Color.WHITE);
for (PdfRef ref : PdfRef.getKnown(false)) {
JButton button = new JButton(REMOVE);
UIUtilities.setOnlySize(button, button.getPreferredSize());
button.addActionListener(event -> {
ref.remove();
Component[] children = mPanel.getComponents();
for (int i = 0; i < children.length; i++) {
if (children[i] == button) {
for (int j = i + 4; --j >= i;) {
mPanel.remove(j);
}
mPanel.setSize(mPanel.getPreferredSize());
break;
}
}
});
mPanel.add(button);
JLabel idLabel = new JLabel(ref.getId(), SwingConstants.CENTER);
idLabel.setBorder(new CompoundBorder(new LineBorder(), new EmptyBorder(1, 4, 1, 4)));
idLabel.setOpaque(true);
idLabel.setBackground(Color.YELLOW);
mPanel.add(idLabel);
EditorField field = new EditorField(new DefaultFormatterFactory(new IntegerFormatter(-9999, 9999, true)), event -> {
ref.setPageToIndexOffset(((Integer) event.getNewValue()).intValue());
}, SwingConstants.RIGHT, Integer.valueOf(ref.getPageToIndexOffset()), Integer.valueOf(-9999), OFFSET_FIELD_TOOLTIP);
mPanel.add(field);
mPanel.add(new JLabel(ref.getFile().getAbsolutePath()));
}
mPanel.setSize(mPanel.getPreferredSize());
JScrollPane scroller = new JScrollPane(mPanel);
Dimension preferredSize = scroller.getPreferredSize();
if (preferredSize.height > 200) {
preferredSize.height = 200;
}
scroller.setPreferredSize(preferredSize);
add(scroller);
}
@Override
public boolean isSetToDefaults() {
return PdfRef.isSetToDefaults();
}
@Override
public void reset() {
PdfRef.reset();
mPanel.removeAll();
mPanel.setSize(mPanel.getPreferredSize());
}
}