// Near Infinity - An Infinity Engine Browser and Editor // Copyright (C) 2001 - 2005 Jon Olav Hauglid // See LICENSE.txt for license information package org.infinity.gui; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; 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.util.List; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JOptionPane; import javax.swing.JPanel; import org.infinity.NearInfinity; import org.infinity.icon.Icons; import org.infinity.resource.ResourceFactory; import org.infinity.resource.Viewable; import org.infinity.resource.bcs.BcsResource; import org.infinity.resource.key.ResourceEntry; import org.infinity.util.IdsMap; import org.infinity.util.IdsMapCache; import org.infinity.util.IdsMapEntry; public final class IdsBrowser extends ChildFrame implements ActionListener { private final JButton binsert; private final JComboBox<ResourceEntry> idsfiles; private final TextListPanel list; public IdsBrowser() { super("IDS Browser"); setIconImage(Icons.getIcon(Icons.ICON_HISTORY_16).getImage()); List<ResourceEntry> resList = ResourceFactory.getResources("IDS"); idsfiles = new JComboBox<>(resList.toArray(new ResourceEntry[resList.size()])); idsfiles.setEditable(false); idsfiles.setSelectedIndex(0); idsfiles.addActionListener(this); binsert = new JButton("Insert reference", Icons.getIcon(Icons.ICON_PASTE_16)); binsert.setMnemonic('i'); binsert.addActionListener(this); binsert.setToolTipText("Inserts selected text into script displayed in main window"); getRootPane().setDefaultButton(binsert); IdsMap idsmap = IdsMapCache.get(idsfiles.getSelectedItem().toString()); list = new TextListPanel(idsmap.getAllValues()); list.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { if (e.getClickCount() == 2) insertString(((IdsMapEntry)list.getSelectedValue()).getString()); } }); JPanel pane = (JPanel)getContentPane(); GridBagLayout gbl = new GridBagLayout(); GridBagConstraints gbc = new GridBagConstraints(); pane.setLayout(gbl); gbc.insets = new Insets(6, 6, 6, 6); gbc.fill = GridBagConstraints.HORIZONTAL; gbc.weightx = 1.0; gbc.weighty = 0.0; gbc.gridwidth = GridBagConstraints.REMAINDER; gbl.setConstraints(idsfiles, gbc); pane.add(idsfiles); gbc.fill = GridBagConstraints.BOTH; gbc.weighty = 1.0; gbl.setConstraints(list, gbc); pane.add(list); gbc.fill = GridBagConstraints.HORIZONTAL; gbc.weighty = 0.0; gbl.setConstraints(binsert, gbc); pane.add(binsert); setSize(350, 500); Center.center(this, NearInfinity.getInstance().getBounds()); } // --------------------- Begin Interface ActionListener --------------------- @Override public void actionPerformed(ActionEvent event) { if (event.getSource() == idsfiles) refreshList(); else if (event.getSource() == binsert) insertString(((IdsMapEntry)list.getSelectedValue()).getString()); } // --------------------- End Interface ActionListener --------------------- public void refreshList() { IdsMap idsmap = IdsMapCache.get(idsfiles.getSelectedItem().toString()); list.setValues(idsmap.getAllValues()); } private void insertString(String s) { Viewable viewable = NearInfinity.getInstance().getViewable(); if (viewable == null || !(viewable instanceof BcsResource)) JOptionPane.showMessageDialog(this, "No script displayed in the main window", "Error", JOptionPane.ERROR_MESSAGE); else ((BcsResource)viewable).insertString(s); } }