/* * This software copyright by various authors including the RPTools.net * development team, and licensed under the LGPL Version 3 or, at your option, * any later version. * * Portions of this software were originally covered under the Apache Software * License, Version 1.1 or Version 2.0. * * See the file LICENSE elsewhere in this distribution for license details. */ package net.rptools.maptool.client.ui.lookuptable; import java.awt.Color; import java.awt.EventQueue; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.File; import java.io.IOException; import java.util.List; import java.util.Map; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFileChooser; import javax.swing.JPanel; import javax.swing.JScrollPane; import net.rptools.lib.swing.ImagePanel; import net.rptools.lib.swing.SwingUtil; import net.rptools.maptool.client.MapTool; import net.rptools.maptool.client.swing.AbeillePanel; import net.rptools.maptool.language.I18N; import net.rptools.maptool.model.LookupTable; import net.rptools.maptool.util.PersistenceUtil; public class LookupTablePanel extends AbeillePanel<LookupTableImagePanelModel> { private static final long serialVersionUID = -4404834393567699280L; private ImagePanel imagePanel; private JDialog editorDialog; private EditLookupTablePanel editorPanel; public LookupTablePanel() { super("net/rptools/maptool/client/ui/forms/lookupTablePanel.xml"); panelInit(); } public void updateView() { getButtonPanel().setVisible(MapTool.getPlayer().isGM()); revalidate(); repaint(); } public JDialog getEditorDialog() { if (editorDialog == null) { editorDialog = new JDialog(MapTool.getFrame(), true); editorDialog.setSize(500, 400); editorDialog.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE); editorDialog.add(editorPanel); SwingUtil.centerOver(editorDialog, MapTool.getFrame()); } return editorDialog; } public void initImagePanel() { imagePanel = new ImagePanel(); imagePanel.setBackground(Color.white); imagePanel.setModel(new LookupTableImagePanelModel(this)); imagePanel.setSelectionMode(ImagePanel.SelectionMode.SINGLE); imagePanel.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { if (e.getClickCount() == 2) { List<Object> ids = getImagePanel().getSelectedIds(); if (ids == null || ids.size() == 0) { return; } LookupTable lookupTable = MapTool.getCampaign().getLookupTableMap().get(ids.get(0)); if (lookupTable == null) { return; } MapTool.getFrame().getCommandPanel().getCommandTextArea().setText("/tbl \"" + lookupTable.getName() + "\""); MapTool.getFrame().getCommandPanel().commitCommand(); } } }); replaceComponent("mainForm", "imagePanel", new JScrollPane(imagePanel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER)); } public JPanel getButtonPanel() { return (JPanel) getComponent("buttonPanel"); } public void initEditorPanel() { editorPanel = new EditLookupTablePanel(); } public JButton getNewButton() { return (JButton) getComponent("newButton"); } public JButton getEditButton() { return (JButton) getComponent("editButton"); } public JButton getDeleteButton() { return (JButton) getComponent("deleteButton"); } public JButton getDuplicateButton() { return (JButton) getComponent("duplicateButton"); } public JButton getRunButton() { return (JButton) getComponent("runButton"); } public ImagePanel getImagePanel() { return imagePanel; } public JButton getImportButton() { return (JButton) getComponent("importButton"); } public JButton getExportButton() { return (JButton) getComponent("exportButton"); } public void initDuplicateButton() { getDuplicateButton().setMargin(new Insets(0, 0, 0, 0)); getDuplicateButton().addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { List<Object> ids = getImagePanel().getSelectedIds(); if (ids == null || ids.size() == 0) { return; } LookupTable lookupTable = new LookupTable(MapTool.getCampaign().getLookupTableMap().get(ids.get(0))); lookupTable.setName("Copy of " + lookupTable.getName()); editorPanel.attach(lookupTable); getEditorDialog().setTitle(I18N.getString("LookupTablePanel.msg.titleNew")); getEditorDialog().setVisible(true); imagePanel.clearSelection(); repaint(); } }); } public void initEditTableButton() { getEditButton().setMargin(new Insets(0, 0, 0, 0)); getEditButton().addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { List<Object> ids = getImagePanel().getSelectedIds(); if (ids == null || ids.size() == 0) { return; } LookupTable lookupTable = MapTool.getCampaign().getLookupTableMap().get(ids.get(0)); editorPanel.attach(lookupTable); getEditorDialog().setTitle(I18N.getString("LookupTablePanel.msg.titleEdit")); getEditorDialog().setVisible(true); } }); } public void initNewTableButton() { getNewButton().setMargin(new Insets(0, 0, 0, 0)); getNewButton().addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { editorPanel.attach(null); getEditorDialog().setTitle(I18N.getString("LookupTablePanel.msg.titleNew")); getEditorDialog().setVisible(true); imagePanel.clearSelection(); repaint(); } }); } public void initDeleteTableButton() { getDeleteButton().setMargin(new Insets(0, 0, 0, 0)); getDeleteButton().addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { List<Object> ids = getImagePanel().getSelectedIds(); if (ids == null || ids.size() == 0) { return; } LookupTable lookupTable = MapTool.getCampaign().getLookupTableMap().get(ids.get(0)); if (MapTool.confirm("LookupTablePanel.confirm.delete", lookupTable.getName())) { MapTool.getCampaign().getLookupTableMap().remove(lookupTable.getName()); MapTool.serverCommand().updateCampaign(MapTool.getCampaign().getCampaignProperties()); imagePanel.clearSelection(); repaint(); } } }); } public void initImportButton() { getImportButton().setMargin(new Insets(0, 0, 0, 0)); getImportButton().addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JFileChooser chooser = MapTool.getFrame().getLoadTableFileChooser(); if (chooser.showOpenDialog(MapTool.getFrame()) != JFileChooser.APPROVE_OPTION) { return; } final File selectedFile = chooser.getSelectedFile(); EventQueue.invokeLater(new Runnable() { public void run() { try { Map<String, LookupTable> lookupTables = MapTool.getCampaign().getLookupTableMap(); LookupTable newTable = PersistenceUtil.loadTable(selectedFile); Boolean alreadyExists = lookupTables.keySet().contains(newTable.getName()); if (alreadyExists) { if (MapTool.confirm("LookupTablePanel.confirm.import", newTable.getName())) { lookupTables.remove(newTable.getName()); } else { return; } } lookupTables.put(newTable.getName(), newTable); imagePanel.clearSelection(); imagePanel.repaint(); MapTool.serverCommand().updateCampaign(MapTool.getCampaign().getCampaignProperties()); } catch (IOException ioe) { MapTool.showError("LookupTablePanel.error.loadFailed", ioe); } } }); } }); } public void initExportButton() { getExportButton().setMargin(new Insets(0, 0, 0, 0)); getExportButton().addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JFileChooser chooser = MapTool.getFrame().getSaveTableFileChooser(); if (chooser.showSaveDialog(MapTool.getFrame()) != JFileChooser.APPROVE_OPTION) { return; } final File selectedFile = chooser.getSelectedFile(); EventQueue.invokeLater(new Runnable() { public void run() { if (selectedFile.exists()) { if (selectedFile.getName().endsWith(".mttable")) { if (!MapTool.confirm("LookupTablePanel.confirm.export", selectedFile.getName())) { return; } } else if (!MapTool.confirm("LookupTablePanel.confirm.overwrite", selectedFile.getName())) { return; } } try { List<Object> ids = getImagePanel().getSelectedIds(); if (ids == null || ids.size() == 0) { return; } LookupTable lookupTable = MapTool.getCampaign().getLookupTableMap().get(ids.get(0)); PersistenceUtil.saveTable(lookupTable, selectedFile); MapTool.showInformation(I18N.getText("LookupTablePanel.info.saved", selectedFile.getName())); } catch (IOException ioe) { ioe.printStackTrace(); MapTool.showError("LookupTablePanel.error.saveFailed", ioe); } } }); } }); } }