/* * MegaMekLab - Copyright (C) 2010 * * Original author - jtighe (torren@users.sourceforge.net) * * 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 2 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. */ package megameklab.com.ui.dialog; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.io.File; import java.util.Vector; import javax.swing.BorderFactory; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JDialog; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.ScrollPaneConstants; import javax.swing.WindowConstants; import javax.swing.filechooser.FileNameExtensionFilter; import megamek.client.ui.swing.UnitLoadingDialog; import megamek.client.ui.swing.UnitSelectorDialog; import megamek.common.Entity; import megamek.common.MechFileParser; import megameklab.com.util.UnitPrintManager; /* * Allows a user to Select Multiple units to print */ public class UnitPrintQueueDialog extends JDialog implements ActionListener, KeyListener { /** * */ private static final long serialVersionUID = 4812586858732825464L; JList<String> unitList = new JList<String>(); JScrollPane listScrollPane; private JButton bCancel = new JButton("Close"); private JButton bPrint = new JButton("Print"); private JButton bSelectFile = new JButton("Select From File"); private JButton bSelectCache = new JButton("Select From Cache"); private JButton bRemove = new JButton("Remove"); private JCheckBox chSinglePrint = new JCheckBox("Print Single"); private JFrame clientgui; private JPanel buttonPanel = new JPanel(); private Vector<Entity> units = new Vector<Entity>(); public UnitPrintQueueDialog(JFrame frame) { super(frame, "Unit Print Queue", true); clientgui = frame; // construct a model and list JPanel masterPanel = new JPanel(); masterPanel.add(unitList); // set list/scroll options listScrollPane = new JScrollPane(unitList); listScrollPane.setAlignmentX(LEFT_ALIGNMENT); listScrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); // listScrollPane.setViewportView(masterPanel); listScrollPane.setBorder(BorderFactory.createEmptyBorder()); buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.Y_AXIS)); buttonPanel.add(chSinglePrint); buttonPanel.add(bSelectCache); buttonPanel.add(bSelectFile); buttonPanel.add(bRemove); buttonPanel.add(bPrint); buttonPanel.add(bCancel); Dimension newSize = new Dimension(121, 23); /* * bSelectFile.setSize(newSize); bRemove.setSize(newSize); * bCancel.setSize(newSize); bPrint.setSize(newSize); * * bSelectFile.setMinimumSize(newSize); bRemove.setMinimumSize(newSize); * bCancel.setMinimumSize(newSize); bPrint.setMinimumSize(newSize); * * bSelectFile.setPreferredSize(newSize); * bRemove.setPreferredSize(newSize); bCancel.setPreferredSize(newSize); * bPrint.setPreferredSize(newSize); */ bSelectFile.setMaximumSize(newSize); bRemove.setMaximumSize(newSize); bCancel.setMaximumSize(newSize); bPrint.setMaximumSize(newSize); masterPanel.setLayout(new BoxLayout(masterPanel, BoxLayout.X_AXIS)); setSize(295, 280); setResizable(false); setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); masterPanel.add(listScrollPane); masterPanel.add(buttonPanel); this.add(masterPanel); // add all the listeners bCancel.addActionListener(this); bPrint.addActionListener(this); bSelectCache.addActionListener(this); bSelectFile.addActionListener(this); bRemove.addActionListener(this); bCancel.setMnemonic('c'); bSelectCache.setMnemonic('s'); bSelectFile.setMnemonic('s'); bPrint.setMnemonic('p'); bRemove.setMnemonic('r'); // pPreview.setVisible(true); setLocationRelativeTo(clientgui); setModal(true); setVisible(true); unitList.requestFocus(); } public void actionPerformed(ActionEvent ae) { if (ae.getSource() == bCancel) { dispose(); } if (ae.getSource() == bPrint) { UnitPrintManager.printAllUnits(units, chSinglePrint.isSelected()); dispose(); } if (ae.getSource().equals(bSelectCache)) { UnitLoadingDialog unitLoadingDialog = new UnitLoadingDialog(clientgui); unitLoadingDialog.setVisible(true); UnitSelectorDialog viewer = new UnitSelectorDialog(clientgui, unitLoadingDialog, true); viewer.setVisible(false); Entity entity = viewer.getChosenEntity(); if (entity != null) { units.add(entity); refresh(); } } else if (ae.getSource().equals(bSelectFile)) { String filePathName = System.getProperty("user.dir").toString() + "/data/mechfiles/"; JFileChooser f = new JFileChooser(filePathName); f.setLocation(clientgui.getLocation().x + 150, clientgui.getLocation().y + 100); f.setDialogTitle("Print Unit File"); f.setMultiSelectionEnabled(true); FileNameExtensionFilter filter = new FileNameExtensionFilter("Unit Files", "blk", "mtf"); // Add a filter f.setFileFilter(filter); int returnVal = f.showOpenDialog(clientgui); if ((returnVal != JFileChooser.APPROVE_OPTION) || (f.getSelectedFile() == null)) { // I want a file, y'know! return; } for (File entityFile : f.getSelectedFiles()) { try { Entity tempEntity = new MechFileParser(entityFile).getEntity(); units.add(tempEntity); } catch (Exception ex) { ex.printStackTrace(); } } refresh(); } else if (ae.getSource().equals(bRemove)) { if (unitList.getSelectedIndices().length > 0) { for (int pos = unitList.getSelectedIndices().length - 1; pos >= 0; pos--) { units.remove(unitList.getSelectedIndices()[pos]); } refresh(); } } } public void keyReleased(java.awt.event.KeyEvent ke) { // no action on release } public void keyPressed(java.awt.event.KeyEvent ke) { if (ke.getKeyCode() == KeyEvent.VK_ENTER) { ActionEvent event = new ActionEvent(bPrint, ActionEvent.ACTION_PERFORMED, ""); actionPerformed(event); } if (ke.getKeyCode() == KeyEvent.VK_ESCAPE) { ActionEvent event = new ActionEvent(bCancel, ActionEvent.ACTION_PERFORMED, ""); actionPerformed(event); } } private void refresh() { unitList.removeAll(); Vector<String> unitNameList = new Vector<String>(); for (Entity ent : units) { unitNameList.add(String.format("%1$s %2$s", ent.getChassis(), ent.getModel()).trim()); } unitList.setListData(unitNameList); unitList.repaint(); } public void keyTyped(java.awt.event.KeyEvent ke) { } // WindowListener public void windowActivated(java.awt.event.WindowEvent windowEvent) { } public void windowClosed(java.awt.event.WindowEvent windowEvent) { } public void windowClosing(java.awt.event.WindowEvent windowEvent) { dispose(); } public void windowDeactivated(java.awt.event.WindowEvent windowEvent) { } public void windowDeiconified(java.awt.event.WindowEvent windowEvent) { } public void windowIconified(java.awt.event.WindowEvent windowEvent) { } public void windowOpened(java.awt.event.WindowEvent windowEvent) { } }