/*
* Copyright (C) 2012 Armin Häberling
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
package com.aha.pdftools.gui;
import java.awt.BorderLayout;
import java.awt.Desktop;
import java.awt.EventQueue;
import java.awt.Rectangle;
import java.awt.dnd.DropTarget;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import java.io.IOException;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.DropMode;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JTable;
import javax.swing.JToolBar;
import javax.swing.KeyStroke;
import javax.swing.ListSelectionModel;
import javax.swing.UIManager;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableColumnModel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.aha.pdftools.FileUtils;
import com.aha.pdftools.Messages;
import com.aha.pdftools.PdfPermissionManager;
import com.aha.pdftools.PdfShrinker;
import com.aha.pdftools.ProgressDisplay;
import com.aha.pdftools.model.PdfFile;
import com.aha.pdftools.model.PdfFileTableModel;
import com.jgoodies.binding.list.SelectionInList;
public class PermissionManager implements FileSelection {
private static final Logger LOGGER = LoggerFactory.getLogger(PermissionManager.class);
// XXX table headers line wrap
private JFrame frame;
private JTable table;
private SelectionInList<PdfFile> openFiles;
private HashSet<String> openFileSet = new HashSet<String>();
private final Action openFilesAction = new OpenFilesAction();
private final Action openFolderAction = new OpenFolderAction();
private final Action saveAction = new SaveAction();
private final Action deleteAction = new DeleteAction();
private final Action allPermissionsAction = new AllPermissionsAction();
private final Action mergeAction = new MergeAction();
private final Action mergePagesAction = new MergePagesAction();
private final Action shrinkFilesAction = new ShrinkFilesAction();
private StatusPanel statusPanel;
private JFileChooser fileChooser;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
String os = System.getProperty("os.name").toLowerCase(); //$NON-NLS-1$
if (os.equals("linux")) { //$NON-NLS-1$
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
}
PermissionManager window = new PermissionManager();
window.frame.setVisible(true);
new DropTarget(window.frame, new PermissionManagerDropTarget(window));
} catch (Exception e) {
LOGGER.error(e.getMessage(), e);
}
}
});
}
/**
* Create the application.
*/
public PermissionManager() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setTitle(Messages.getString("PermissionManager.Title")); //$NON-NLS-1$
// SUPPRESS CHECKSTYLE MagicNumber
frame.setBounds(100, 100, 622, 410);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JMenuBar menuBar = new JMenuBar();
frame.setJMenuBar(menuBar);
JMenu mnFile = new JMenu(Messages.getString("PermissionManager.FileMenu")); //$NON-NLS-1$
mnFile.setMnemonic('F');
menuBar.add(mnFile);
JMenuItem mntmOpenFile = new JMenuItem(openFilesAction);
mntmOpenFile.setMnemonic(KeyEvent.VK_O);
mntmOpenFile.setText(Messages.getString("PermissionManager.OpenFiles")); //$NON-NLS-1$
mnFile.add(mntmOpenFile);
JMenuItem mntmOpenFolder = new JMenuItem(openFolderAction);
mntmOpenFolder.setText(Messages.getString("PermissionManager.OpenFolder")); //$NON-NLS-1$
mntmOpenFolder.setMnemonic(KeyEvent.VK_F);
mnFile.add(mntmOpenFolder);
JMenuItem mntmSave = new JMenuItem(saveAction);
mntmSave.setText(Messages.getString("PermissionManager.Save..")); //$NON-NLS-1$
mntmSave.setMnemonic(KeyEvent.VK_S);
JSeparator separator1 = new JSeparator();
mnFile.add(separator1);
mnFile.add(mntmSave);
JMenuItem mntmSaveAll = new JMenuItem(Messages.getString("PermissionManager.SaveAll")); //$NON-NLS-1$
mntmSaveAll.setMnemonic(KeyEvent.VK_A);
mntmSaveAll.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_MASK | InputEvent.SHIFT_MASK));
mntmSaveAll.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
saveAll();
}
});
mnFile.add(mntmSaveAll);
JMenuItem mntmQuit = new JMenuItem(Messages.getString("PermissionManager.Quit")); //$NON-NLS-1$
mntmQuit.setMnemonic(KeyEvent.VK_Q);
mntmQuit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, InputEvent.CTRL_MASK));
mntmQuit.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
frame.dispose();
}
});
JMenuItem mntmMergeFiles = new JMenuItem(mergeAction);
mntmMergeFiles.setText(Messages.getString("PermissionManager.CombineFiles")); //$NON-NLS-1$
mntmMergeFiles.setMnemonic(KeyEvent.VK_C);
mnFile.add(mntmMergeFiles);
JMenuItem mntmMergePages = new JMenuItem(mergePagesAction);
mntmMergePages.setMnemonic(KeyEvent.VK_P);
mntmMergePages.setText(Messages.getString("PermissionManager.CombinePages")); //$NON-NLS-1$
mnFile.add(mntmMergePages);
JMenuItem mntmShrinkFiles = new JMenuItem(shrinkFilesAction);
mntmShrinkFiles.setMnemonic(KeyEvent.VK_K);
mntmShrinkFiles.setText(Messages.getString("PermissionManager.ShrinkFiles")); //$NON-NLS-1$
mnFile.add(mntmShrinkFiles);
JSeparator separator = new JSeparator();
mnFile.add(separator);
JMenuItem mntmAbout = new JMenuItem(Messages.getString("PermissionManager.About")); //$NON-NLS-1$
mntmAbout.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
new AboutDialog().setVisible(true);
}
});
mnFile.add(mntmAbout);
mnFile.add(mntmQuit);
JMenu mnEdit = new JMenu(Messages.getString("PermissionManager.EditMenu")); //$NON-NLS-1$
mnEdit.setMnemonic('E');
menuBar.add(mnEdit);
JMenuItem mntmDelete = new JMenuItem(deleteAction);
mntmDelete.setText(Messages.getString("PermissionManager.Delete")); //$NON-NLS-1$
mntmDelete.setMnemonic(KeyEvent.VK_D);
mnEdit.add(mntmDelete);
JMenuItem mntmSelectAll = new JMenuItem(Messages.getString("PermissionManager.SelectAll")); //$NON-NLS-1$
mntmSelectAll.setMnemonic(KeyEvent.VK_A);
mntmSelectAll.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, InputEvent.CTRL_MASK));
mntmSelectAll.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
table.selectAll();
}
});
mnEdit.add(mntmSelectAll);
JSeparator separator2 = new JSeparator();
mnEdit.add(separator2);
JMenuItem mntmClearList = new JMenuItem(Messages.getString("PermissionManager.ClearList")); //$NON-NLS-1$
mntmClearList.setMnemonic(KeyEvent.VK_C);
mntmClearList.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, InputEvent.SHIFT_MASK));
mntmClearList.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
clearFiles();
}
});
mnEdit.add(mntmClearList);
JMenuItem mntmAllPermissions = new JMenuItem(allPermissionsAction);
mntmAllPermissions.setText(Messages.getString("PermissionManager.SetAllPermissions")); //$NON-NLS-1$
mntmAllPermissions.setMnemonic(KeyEvent.VK_P);
mnEdit.add(mntmAllPermissions);
openFiles = new SelectionInList<PdfFile>();
table = new JTable();
table.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
table.setModel(new PdfFileTableModel(openFiles));
table.setDragEnabled(true);
table.setDropMode(DropMode.INSERT_ROWS);
table.setTransferHandler(new TableMultiRowTransferHandler(table));
table.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
if (e.getClickCount() == 2) {
JTable target = (JTable) e.getSource();
int row = target.rowAtPoint(e.getPoint());
int column = target.columnAtPoint(e.getPoint());
if (row >= 0 && column >= 0 && column <= 1) {
openPdf(openFiles.getElementAt(row));
}
}
}
});
table.getTableHeader().addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
JTable table = ((JTableHeader) e.getSource()).getTable();
TableColumnModel colModel = table.getColumnModel();
// The index of the column whose header was clicked
int vColIndex = colModel.getColumnIndexAtX(e.getX());
// Return if not clicked on any column header
if (vColIndex == -1) {
return;
}
// Determine if mouse was clicked between column heads
Rectangle headerRect = table.getTableHeader().getHeaderRect(vColIndex);
if (vColIndex == 0) {
headerRect.width -= 3; // Hard-coded constant
} else {
headerRect.grow(-3, 0); // Hard-coded constant
}
if (headerRect.contains(e.getX(), e.getY())) {
// toggle column values
int mColIndex = table.convertColumnIndexToModel(vColIndex);
((PdfFileTableModel) table.getModel()).toggleColumn(mColIndex);
}
}
});
JScrollPane scrollPane = new JScrollPane(table);
frame.getContentPane().add(scrollPane, BorderLayout.CENTER);
JToolBar toolBar = new JToolBar();
toolBar.setFloatable(false);
frame.getContentPane().add(toolBar, BorderLayout.NORTH);
JButton btnOpenFileButton = new JButton(openFilesAction);
toolBar.add(btnOpenFileButton);
JButton btnSave = new JButton(saveAction);
toolBar.add(btnSave);
JButton btnMerge = new JButton(mergeAction);
toolBar.add(btnMerge);
JButton btnDelete = new JButton(deleteAction);
toolBar.add(btnDelete);
JButton btnAllPermissions = new JButton(allPermissionsAction);
toolBar.add(btnAllPermissions);
statusPanel = new StatusPanel();
frame.getContentPane().add(statusPanel, BorderLayout.SOUTH);
}
private void openFiles() {
JFileChooser chooser = getFileChooser();
chooser.setFileFilter(new PdfFileFilter());
chooser.setMultiSelectionEnabled(true);
int result = chooser.showOpenDialog(frame);
if (result == JFileChooser.APPROVE_OPTION) {
insertFiles(Arrays.asList(chooser.getSelectedFiles()));
}
}
private void openPdf(PdfFile pdfFile) {
try {
Desktop.getDesktop().open(pdfFile.getSourceFile());
} catch (IOException e) {
LOGGER.warn("Failed to open Pdf file", e); //$NON-NLS-1$
}
}
private void openFolder() {
JFileChooser chooser = getFileChooser();
chooser.setDialogTitle(Messages.getString("PermissionManager.ChooseFolder")); //$NON-NLS-1$
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int returnVal = chooser.showOpenDialog(frame);
if (returnVal == JFileChooser.APPROVE_OPTION) {
List<File> files = filesInFolder(chooser.getSelectedFile());
insertFiles(files);
}
}
private void saveSelected() {
save(getSelected());
}
private List<PdfFile> getSelected() {
List<PdfFile> selected = new ArrayList<PdfFile>();
for (int row : table.getSelectedRows()) {
selected.add(openFiles.getList().get(row));
}
return selected;
}
private void saveAll() {
save(openFiles.getList());
}
private void mergeSelected() {
List<File> sourceFiles = new ArrayList<File>();
for (PdfFile pdfFile : getSelected()) {
sourceFiles.add(pdfFile.getSourceFile());
}
if (!sourceFiles.isEmpty()) {
File file = chooseSaveFile(null, true);
if (file != null && checkOverwriteFile(file)) {
new MergeFilesTask(file, sourceFiles, statusPanel).execute();
}
}
}
@Override
public boolean checkOverwriteFile(File f) {
if (f.exists()) {
// ask if the file should be overwritten
String msg = MessageFormat.format(
Messages.getString("PermissionManager.AskOverwriteFile"), f.getAbsolutePath()); //$NON-NLS-1$
int resultVal = JOptionPane.showConfirmDialog(
frame,
msg,
Messages.getString("PermissionManager.SaveAs"), //$NON-NLS-1$
JOptionPane.YES_NO_OPTION);
if (resultVal == JOptionPane.NO_OPTION) {
return false;
}
}
return true;
}
private void save(List<PdfFile> files) {
List<SaveUnit> saveUnits = createSaveUnits(files);
if (!saveUnits.isEmpty()) {
new SaveFileTask(saveUnits, statusPanel).execute();
}
}
private List<SaveUnit> createSaveUnits(List<PdfFile> files) {
List<SaveUnit> saveUnits = new ArrayList<>();
if (files.size() == 1) {
File f = chooseSaveFile(null, true);
if (f != null && checkOverwriteFile(f)) {
saveUnits.add(new SaveUnit(files.get(0), f));
}
} else if (files.size() > 1) {
File f = chooseSaveFile(Messages.getString("PermissionManager.FileNameWillBeIgnored"), false); //$NON-NLS-1$
if (f != null) {
File targetDirectory = f.getParentFile();
List<File> overwrittenFiles = new ArrayList<File>();
for (PdfFile pdfFile : files) {
String name = pdfFile.getName();
File target = new File(targetDirectory.getAbsolutePath() + File.separator + name);
if (target.exists()) {
overwrittenFiles.add(target);
}
saveUnits.add(new SaveUnit(pdfFile, target));
}
if (!overwrittenFiles.isEmpty()) {
String format = Messages.getString("PermissionManager.AskOverwriteFiles"); //$NON-NLS-1$
String msg = MessageFormat.format(format, overwrittenFiles.size(),
targetDirectory.getAbsolutePath());
int result = JOptionPane.showConfirmDialog(
frame,
msg,
Messages.getString("PermissionManager.SaveAs"), //$NON-NLS-1$
JOptionPane.YES_NO_OPTION);
if (result == JOptionPane.NO_OPTION) {
return Collections.emptyList();
}
}
}
}
return saveUnits;
}
static List<File> filesInFolder(File folder) {
return FileUtils.listFiles(folder, true, new PdfFileFilter());
}
void insertFiles(List<File> files) {
new OpenFileTask(files, statusPanel).execute();
}
private synchronized void insertFile(File file) {
try {
String path = file.getAbsolutePath();
if (openFileSet.contains(path)) {
return;
}
openFiles.getList().add(PdfFile.openFile(file));
openFileSet.add(path);
// add file to selection
int index = openFiles.getSize() - 1;
table.getSelectionModel().addSelectionInterval(index, index);
} catch (IOException e) {
LOGGER.warn(e.getMessage(), e);
}
}
private void removeSelected() {
int[] selectedRows = table.getSelectedRows();
Arrays.sort(selectedRows);
for (int i = selectedRows.length - 1; i >= 0; i--) {
removeFile(selectedRows[i]);
}
}
private synchronized void removeFile(int index) {
PdfFile pdfFile = openFiles.getList().remove(index);
if (pdfFile != null) {
openFileSet.remove(pdfFile.getSourcePath());
}
}
private void clearFiles() {
openFileSet.clear();
openFiles.getList().clear();
}
private void setAllPermissions() {
boolean allowAll = true;
for (PdfFile pdfFile : openFiles.getList()) {
if (!allowAll) {
break;
}
allowAll = allowAll && pdfFile.isAllowAll();
}
for (PdfFile pdfFile : openFiles.getList()) {
pdfFile.setAllowAll(!allowAll);
}
// update table
((PdfFileTableModel) table.getModel()).firePermissionsUpdated();
}
private JFileChooser getFileChooser() {
JFileChooser chooser = new JFileChooser();
if (fileChooser != null) {
chooser.setCurrentDirectory(fileChooser.getCurrentDirectory());
}
fileChooser = chooser;
return chooser;
}
@Override
public File chooseSaveFile(String initalName, boolean addExtension) {
JFileChooser chooser = getFileChooser();
chooser.setFileFilter(new PdfFileFilter());
if (initalName != null) {
File f = new File(chooser.getCurrentDirectory().getAbsolutePath() + File.separator + initalName);
chooser.setSelectedFile(f);
}
int result = chooser.showSaveDialog(frame);
if (result == JFileChooser.APPROVE_OPTION) {
File file = chooser.getSelectedFile();
if (addExtension) {
String filename = file.getAbsolutePath();
if (!filename.endsWith(PdfFileFilter.PDF_EXTENSION)) {
filename += PdfFileFilter.PDF_EXTENSION;
file = new File(filename);
}
}
return file;
}
return null;
}
private void mergePages() {
int[] selectedRows = table.getSelectedRows();
List<PdfFile> files = new ArrayList<PdfFile>();
for (int i = 0; i < selectedRows.length; i++) {
files.add(openFiles.getElementAt(selectedRows[i]));
}
if (!files.isEmpty()) {
CombineDialog dialog = new CombineDialog(frame, this, statusPanel);
dialog.show(files);
}
}
private void shrinkSelected() {
List<SaveUnit> saveUnits = createSaveUnits(getSelected());
if (!saveUnits.isEmpty()) {
new ShrinkFileTask(saveUnits, statusPanel).execute();
}
}
private class OpenFileTask extends ReportingWorker<Void, Void> {
private final List<File> files;
private final ProgressDisplay progress;
public OpenFileTask(List<File> files, ProgressDisplay progress) {
super(frame);
this.files = files;
this.progress = progress;
}
@Override
protected Void doInBackground() throws Exception {
synchronized (progress) {
progress.startTask(Messages.getString("PermissionManager.Loading"), files.size(), true); //$NON-NLS-1$
int i = 0;
try {
for (File file : files) {
if (progress.isCanceled()) {
break;
}
progress.setNote(file.getName());
insertFile(file);
progress.setProgress(++i);
}
} finally {
progress.endTask();
}
}
return null;
}
}
private static class SaveUnit {
private final PdfFile pdfFile;
private final File target;
public SaveUnit(PdfFile pdfFile, File target) {
this.pdfFile = pdfFile;
this.target = target;
}
}
private class SaveFileTask extends ReportingWorker<Void, Void> {
private final List<SaveUnit> files;
private final ProgressDisplay progress;
public SaveFileTask(List<SaveUnit> files, ProgressDisplay progress) {
super(frame);
this.files = files;
this.progress = progress;
}
protected Void doInBackground() throws Exception {
synchronized (progress) {
progress.startTask(Messages.getString("PermissionManager.Saving"), files.size(), true); //$NON-NLS-1$
int i = 0;
try {
for (SaveUnit unit : files) {
if (progress.isCanceled()) {
break;
}
progress.setNote(unit.pdfFile.getName());
File source = unit.pdfFile.getSourceFile();
File target = unit.target;
PdfPermissionManager.processFile(source, target, unit.pdfFile, PdfPermissionManager.PASSWORD);
progress.setProgress(++i);
}
} finally {
progress.endTask();
}
}
return null;
}
}
private class MergeFilesTask extends ReportingWorker<Void, Void> {
private final File outputFile;
private final List<File> sourceFiles;
private final ProgressDisplay progress;
public MergeFilesTask(File outputFile, List<File> sourceFiles, ProgressDisplay progress) {
super(frame);
this.outputFile = outputFile;
this.sourceFiles = sourceFiles;
this.progress = progress;
}
@Override
protected Void doInBackground() throws Exception {
synchronized (progress) {
PdfPermissionManager.merge(outputFile, sourceFiles, progress);
}
return null;
}
}
private class ShrinkFileTask extends ReportingWorker<Void, Void> {
private final List<SaveUnit> files;
private final ProgressDisplay progress;
public ShrinkFileTask(List<SaveUnit> files, ProgressDisplay progress) {
super(frame);
this.files = files;
this.progress = progress;
}
protected Void doInBackground() throws Exception {
synchronized (progress) {
progress.startTask(Messages.getString("PermissionManager.Saving"), files.size(), true); //$NON-NLS-1$
int i = 0;
PdfShrinker shrinker = new PdfShrinker();
try {
for (SaveUnit unit : files) {
if (progress.isCanceled()) {
break;
}
progress.setNote(unit.pdfFile.getName());
File source = unit.pdfFile.getSourceFile();
File target = unit.target;
shrinker.process(source, target);
progress.setProgress(++i);
}
} finally {
progress.endTask();
}
}
return null;
}
}
@SuppressWarnings("serial")
private class OpenFilesAction extends AbstractAction {
public OpenFilesAction() {
putValue(LARGE_ICON_KEY, new ImageIcon(
PermissionManager.class.getResource("/com/aha/pdftools/icons/document-open.png"))); //$NON-NLS-1$
putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_O, InputEvent.CTRL_MASK));
putValue(SHORT_DESCRIPTION, Messages.getString("PermissionManager.OpenFilesDesc")); //$NON-NLS-1$
}
@Override
public void actionPerformed(ActionEvent e) {
openFiles();
}
}
@SuppressWarnings("serial")
private class OpenFolderAction extends AbstractAction {
public OpenFolderAction() {
putValue(ACCELERATOR_KEY,
KeyStroke.getKeyStroke(KeyEvent.VK_O, InputEvent.CTRL_MASK | InputEvent.SHIFT_MASK));
putValue(SHORT_DESCRIPTION, Messages.getString("PermissionManager.OpenFolderDesc")); //$NON-NLS-1$
}
@Override
public void actionPerformed(ActionEvent e) {
openFolder();
}
}
@SuppressWarnings("serial")
private class SaveAction extends AbstractAction {
public SaveAction() {
putValue(LARGE_ICON_KEY, new ImageIcon(
PermissionManager.class.getResource("/com/aha/pdftools/icons/document-save.png"))); //$NON-NLS-1$
putValue(SHORT_DESCRIPTION, Messages.getString("PermissionManager.SaveDesc")); //$NON-NLS-1$
putValue(NAME, Messages.getString("PermissionManager.Save")); //$NON-NLS-1$
putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_MASK));
}
@Override
public void actionPerformed(ActionEvent e) {
saveSelected();
}
}
@SuppressWarnings("serial")
private class DeleteAction extends AbstractAction {
public DeleteAction() {
putValue(LARGE_ICON_KEY, new ImageIcon(
PermissionManager.class.getResource("/com/aha/pdftools/icons/edit-delete.png"))); //$NON-NLS-1$
putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0));
putValue(SHORT_DESCRIPTION, Messages.getString("PermissionManager.DeleteDesc")); //$NON-NLS-1$
}
@Override
public void actionPerformed(ActionEvent e) {
removeSelected();
}
}
@SuppressWarnings("serial")
private class AllPermissionsAction extends AbstractAction {
public AllPermissionsAction() {
putValue(LARGE_ICON_KEY, new ImageIcon(PermissionManager
.class.getResource("/com/aha/pdftools/icons/stock_calc-accept.png"))); //$NON-NLS-1$
putValue(SHORT_DESCRIPTION, Messages.getString("PermissionManager.SetAllPermissionsDesc")); //$NON-NLS-1$
}
@Override
public void actionPerformed(ActionEvent e) {
setAllPermissions();
}
}
@SuppressWarnings("serial")
private class MergeAction extends AbstractAction {
public MergeAction() {
putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_M, InputEvent.CTRL_MASK));
putValue(LARGE_ICON_KEY, new ImageIcon(
PermissionManager.class.getResource("/com/aha/pdftools/icons/stock_save-pdf.png"))); //$NON-NLS-1$
putValue(SHORT_DESCRIPTION, Messages.getString("PermissionManager.CombineFilesDesc")); //$NON-NLS-1$
putValue(NAME, Messages.getString("PermissionManager.Combine")); //$NON-NLS-1$
}
@Override
public void actionPerformed(ActionEvent e) {
mergeSelected();
}
}
@SuppressWarnings("serial")
private class MergePagesAction extends AbstractAction {
public MergePagesAction() {
putValue(ACCELERATOR_KEY,
KeyStroke.getKeyStroke(KeyEvent.VK_M, InputEvent.CTRL_MASK | InputEvent.SHIFT_MASK));
putValue(SHORT_DESCRIPTION, Messages.getString("PermissionManager.CombinePagesDesc")); //$NON-NLS-1$
}
@Override
public void actionPerformed(ActionEvent e) {
mergePages();
}
}
@SuppressWarnings("serial")
private class ShrinkFilesAction extends AbstractAction {
public ShrinkFilesAction() {
putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_K, InputEvent.CTRL_MASK));
putValue(SHORT_DESCRIPTION, Messages.getString("PermissionManager.ShrinkFilesDesc")); //$NON-NLS-1$
}
@Override
public void actionPerformed(ActionEvent e) {
shrinkSelected();
}
}
}