/* * Copyright (c) 2014 tabletoptool.com team. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html * * Contributors: * rptools.com team - initial implementation * tabletoptool.com team - further development */ package com.t3.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 com.t3.client.TabletopTool; import com.t3.client.swing.AbeillePanel; import com.t3.language.I18N; import com.t3.model.LookupTable; import com.t3.persistence.PersistenceUtil; import com.t3.swing.ImagePanel; import com.t3.swing.SwingUtil; public class LookupTablePanel extends AbeillePanel<LookupTableImagePanelModel> { private static final long serialVersionUID = -4404834393567699280L; private ImagePanel imagePanel; private JDialog editorDialog; private EditLookupTablePanel editorPanel; public LookupTablePanel() { super("com/t3/client/ui/forms/lookupTablePanel.xml"); panelInit(); } public void updateView() { getButtonPanel().setVisible(TabletopTool.getPlayer().isGM()); revalidate(); repaint(); } public JDialog getEditorDialog() { if (editorDialog == null) { editorDialog = new JDialog(TabletopTool.getFrame(), true); editorDialog.setSize(500, 400); editorDialog.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE); editorDialog.add(editorPanel); SwingUtil.centerOver(editorDialog, TabletopTool.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 = TabletopTool.getCampaign().getLookupTableMap().get(ids.get(0)); if (lookupTable == null) { return; } TabletopTool.getFrame().getCommandPanel().getCommandTextArea().setText("/tbl " + lookupTable.getName()); TabletopTool.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() { @Override public void actionPerformed(ActionEvent e) { List<Object> ids = getImagePanel().getSelectedIds(); if (ids == null || ids.size() == 0) { return; } LookupTable lookupTable = new LookupTable(TabletopTool.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() { @Override public void actionPerformed(ActionEvent e) { List<Object> ids = getImagePanel().getSelectedIds(); if (ids == null || ids.size() == 0) { return; } LookupTable lookupTable = TabletopTool.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() { @Override 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() { @Override public void actionPerformed(ActionEvent e) { List<Object> ids = getImagePanel().getSelectedIds(); if (ids == null || ids.size() == 0) { return; } LookupTable lookupTable = TabletopTool.getCampaign().getLookupTableMap().get(ids.get(0)); if (TabletopTool.confirm("LookupTablePanel.confirm.delete", lookupTable.getName())) { TabletopTool.getCampaign().getLookupTableMap().remove(lookupTable.getName()); TabletopTool.serverCommand().updateCampaign(TabletopTool.getCampaign().getCampaignProperties()); imagePanel.clearSelection(); repaint(); } } }); } public void initImportButton() { getImportButton().setMargin(new Insets(0, 0, 0, 0)); getImportButton().addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JFileChooser chooser = TabletopTool.getFrame().getLoadTableFileChooser(); if (chooser.showOpenDialog(TabletopTool.getFrame()) != JFileChooser.APPROVE_OPTION) { return; } final File selectedFile = chooser.getSelectedFile(); EventQueue.invokeLater(new Runnable() { @Override public void run() { Map<String, LookupTable> lookupTables = TabletopTool.getCampaign().getLookupTableMap(); LookupTable newTable = PersistenceUtil.loadTable(selectedFile); Boolean alreadyExists = lookupTables.keySet().contains(newTable.getName()); if (alreadyExists) { if (TabletopTool.confirm("LookupTablePanel.confirm.import", newTable.getName())) { lookupTables.remove(newTable.getName()); } else { return; } } lookupTables.put(newTable.getName(), newTable); imagePanel.clearSelection(); imagePanel.repaint(); TabletopTool.serverCommand().updateCampaign(TabletopTool.getCampaign().getCampaignProperties()); } }); } }); } public void initExportButton() { getExportButton().setMargin(new Insets(0, 0, 0, 0)); getExportButton().addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JFileChooser chooser = TabletopTool.getFrame().getSaveTableFileChooser(); if (chooser.showSaveDialog(TabletopTool.getFrame()) != JFileChooser.APPROVE_OPTION) { return; } final File selectedFile = chooser.getSelectedFile(); EventQueue.invokeLater(new Runnable() { @Override public void run() { if (selectedFile.exists()) { if (selectedFile.getName().endsWith(".mttable")) { if (!TabletopTool.confirm("LookupTablePanel.confirm.export", selectedFile.getName())) { return; } } else if (!TabletopTool.confirm("LookupTablePanel.confirm.overwrite", selectedFile.getName())) { return; } } try { List<Object> ids = getImagePanel().getSelectedIds(); if (ids == null || ids.size() == 0) { return; } LookupTable lookupTable = TabletopTool.getCampaign().getLookupTableMap().get(ids.get(0)); PersistenceUtil.saveTable(lookupTable, selectedFile); TabletopTool.showInformation(I18N.getText("LookupTablePanel.info.saved", selectedFile.getName())); } catch (IOException ioe) { ioe.printStackTrace(); TabletopTool.showError("LookupTablePanel.error.saveFailed", ioe); } } }); } }); } }