20 package net.sf.gridarta.gui.dialog.gomap;
22 import java.awt.BorderLayout;
23 import java.awt.Component;
24 import java.awt.Dialog.ModalityType;
25 import java.awt.Window;
26 import java.awt.event.MouseEvent;
27 import java.awt.event.MouseListener;
28 import java.awt.event.WindowEvent;
29 import java.awt.event.WindowListener;
30 import java.io.IOException;
31 import java.util.Collection;
32 import java.util.Comparator;
33 import java.util.List;
34 import java.util.TreeSet;
35 import javax.swing.JComponent;
36 import javax.swing.JDialog;
37 import javax.swing.JList;
38 import javax.swing.JPanel;
39 import javax.swing.JScrollPane;
40 import javax.swing.JTextField;
41 import javax.swing.ListSelectionModel;
42 import javax.swing.ScrollPaneConstants;
43 import javax.swing.SwingUtilities;
44 import javax.swing.border.EmptyBorder;
45 import javax.swing.event.DocumentEvent;
46 import javax.swing.event.DocumentListener;
47 import javax.swing.text.JTextComponent;
60 import net.
sf.japi.swing.action.ActionBuilder;
61 import net.
sf.japi.swing.action.ActionBuilderFactory;
62 import net.
sf.japi.swing.action.ActionMethod;
63 import org.jetbrains.annotations.NotNull;
75 private static final ActionBuilder
ACTION_BUILDER = ActionBuilderFactory.getInstance().getActionBuilder(
"net.sf.gridarta");
87 private final JTextComponent
input;
125 public int compare(@NotNull
final MapFile o1, @NotNull
final MapFile o2) {
131 return name2 ==
null ? 0 : -1;
138 final int cmp = name1.compareToIgnoreCase(name2);
139 return cmp == 0 ? o1.getFile().compareTo(o2.getFile()) : cmp;
153 public void valueAdded(@NotNull
final MapFile value) {
158 public void valueRemoved(@NotNull
final MapFile value) {
163 public void nameChanged() {
168 public void pendingChanged() {
173 public void indexingFinished() {
189 public void windowOpened(
final WindowEvent e) {
198 public void windowClosing(
final WindowEvent e) {
203 public void windowClosed(
final WindowEvent e) {
211 public void windowIconified(
final WindowEvent e) {
216 public void windowDeiconified(
final WindowEvent e) {
221 public void windowActivated(
final WindowEvent e) {
226 public void windowDeactivated(
final WindowEvent e) {
240 public void change() {
245 SwingUtilities.invokeLater(
new Runnable() {
271 input =
new JTextField();
282 final DocumentListener documentListener =
new DocumentListener() {
285 public void changedUpdate(@NotNull
final DocumentEvent e) {
290 public void insertUpdate(@NotNull
final DocumentEvent e) {
295 public void removeUpdate(@NotNull
final DocumentEvent e) {
300 input.getDocument().addDocumentListener(documentListener);
303 final JComponent inputPanel =
new JPanel(
new BorderLayout());
304 inputPanel.add(label, BorderLayout.NORTH);
305 inputPanel.add(
input, BorderLayout.CENTER);
306 inputPanel.setBorder(
new EmptyBorder(3, 3, 3, 3));
308 list.setFocusable(
false);
309 final Component scrollPane =
new JScrollPane(
list, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
311 list.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
312 final MouseListener mouseListener =
new MouseListener() {
315 public void mouseClicked(
final MouseEvent e) {
320 public void mousePressed(
final MouseEvent e) {
321 if (e.getClickCount() > 1) {
327 public void mouseReleased(
final MouseEvent e) {
332 public void mouseEntered(
final MouseEvent e) {
337 public void mouseExited(
final MouseEvent e) {
342 list.addMouseListener(mouseListener);
344 dialog =
new JDialog(parent);
345 dialog.setResizable(
false);
347 dialog.setLocationRelativeTo(parent);
348 dialog.setUndecorated(
true);
349 dialog.setLayout(
new BorderLayout());
350 dialog.add(inputPanel, BorderLayout.NORTH);
351 dialog.add(scrollPane, BorderLayout.CENTER);
352 dialog.setModalityType(ModalityType.DOCUMENT_MODAL);
367 final String mapName =
input.getText();
368 if (mapName.isEmpty()) {
375 sortedMaps.addAll(maps);
378 for (
final MapFile map : sortedMaps) {
382 list.setSelectedIndex(0);
383 list.ensureIndexIsVisible(0);
411 final int index =
list.getMinSelectionIndex();
412 final int newIndex = (index > 0 ? index :
listModel.size()) - 1;
413 list.setSelectedIndex(newIndex);
414 list.ensureIndexIsVisible(newIndex);
422 final int index =
list.getMaxSelectionIndex() + 1;
423 final int newIndex = index <
listModel.size() ? index : 0;
424 list.setSelectedIndex(newIndex);
425 list.ensureIndexIsVisible(newIndex);
433 final int index =
list.getMinSelectionIndex();
434 final int firstIndex =
list.getFirstVisibleIndex();
436 if (firstIndex == -1) {
438 }
else if (index == -1) {
439 newIndex = firstIndex;
440 }
else if (index > firstIndex) {
441 newIndex = firstIndex;
443 newIndex = Math.max(firstIndex - (
list.getLastVisibleIndex() - firstIndex), 0);
445 list.setSelectedIndex(newIndex);
446 list.ensureIndexIsVisible(newIndex);
454 final int index =
list.getMaxSelectionIndex();
455 final int lastIndex =
list.getLastVisibleIndex();
457 if (lastIndex == -1) {
459 }
else if (index == -1) {
460 newIndex = lastIndex;
461 }
else if (index < lastIndex) {
462 newIndex = lastIndex;
464 newIndex = Math.min(lastIndex + (lastIndex -
list.getFirstVisibleIndex()),
listModel.size() - 1);
466 list.setSelectedIndex(newIndex);
467 list.ensureIndexIsVisible(newIndex);
475 final int newIndex = 0;
476 list.setSelectedIndex(newIndex);
477 list.ensureIndexIsVisible(newIndex);
485 final int newIndex =
listModel.size() - 1;
486 list.setSelectedIndex(newIndex);
487 list.ensureIndexIsVisible(newIndex);
495 final int index =
list.getMinSelectionIndex();
497 final int newIndex = (index > 0 ? index :
listModel.size()) - 1;
498 list.addSelectionInterval(newIndex, newIndex);
499 list.ensureIndexIsVisible(newIndex);
508 final int index =
list.getMaxSelectionIndex();
510 final int newIndex = index + 1;
511 list.addSelectionInterval(newIndex, newIndex);
512 list.ensureIndexIsVisible(newIndex);
521 final List<MapFile> selectedValues =
list.getSelectedValuesList();
522 boolean result =
false;
523 for (
final MapFile selectedValue : selectedValues) {
527 }
catch (
final IOException ex) {