PageRenderTime 49ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/jEdit/tags/jedit-4-5-pre1/org/gjt/sp/jedit/gui/ListModelEditor.java

#
Java | 108 lines | 100 code | 8 blank | 0 comment | 17 complexity | 5e3bab127aa9bb64d0621a4d3a2351a6 MD5 | raw file
Possible License(s): BSD-3-Clause, AGPL-1.0, Apache-2.0, LGPL-2.0, LGPL-3.0, GPL-2.0, CC-BY-SA-3.0, LGPL-2.1, GPL-3.0, MPL-2.0-no-copyleft-exception, IPL-1.0
  1. package org.gjt.sp.jedit.gui;
  2. import java.awt.event.KeyAdapter;
  3. import java.awt.event.KeyEvent;
  4. import javax.swing.DefaultListModel;
  5. import javax.swing.JOptionPane;
  6. import javax.swing.JTable;
  7. import javax.swing.ListSelectionModel;
  8. import javax.swing.table.DefaultTableModel;
  9. import org.gjt.sp.jedit.jEdit;
  10. public class ListModelEditor
  11. {
  12. public void open(DefaultListModel listModel)
  13. {
  14. final DefaultTableModel tableModel = createTableModel(listModel);
  15. final JTable table = new JTable(tableModel);
  16. table
  17. .setToolTipText("Move: PgUp/PgDown; Edit: Double-Click or Insert/Delete");
  18. table.addKeyListener(new KeyAdapter()
  19. {
  20. public void keyPressed(KeyEvent e)
  21. {
  22. int[] selRows = table.getSelectedRows();
  23. if (selRows.length == 0)
  24. {
  25. return;
  26. }
  27. int firstSelectedRow = selRows[0];
  28. int key = e.getKeyCode();
  29. ListSelectionModel selectionModel = table.getSelectionModel();
  30. switch (key)
  31. {
  32. case KeyEvent.VK_DELETE:
  33. for (int i = selRows.length - 1; i >= 0; i--)
  34. {
  35. tableModel.removeRow(selRows[i]);
  36. }
  37. if (firstSelectedRow >= 0
  38. && firstSelectedRow < tableModel.getRowCount())
  39. {
  40. selectionModel.addSelectionInterval(firstSelectedRow,
  41. firstSelectedRow);
  42. }
  43. e.consume();// avoid beep
  44. break;
  45. case KeyEvent.VK_INSERT:
  46. tableModel.insertRow(firstSelectedRow + 1, new String[] { "" });
  47. e.consume(); // Dont edit cell
  48. break;
  49. case KeyEvent.VK_PAGE_UP:
  50. case KeyEvent.VK_PAGE_DOWN:
  51. boolean isUp = key == KeyEvent.VK_PAGE_UP;
  52. int direction = isUp ? -1 : 1;
  53. int min = selectionModel.getMinSelectionIndex() + direction;
  54. int max = selectionModel.getMaxSelectionIndex() + direction;
  55. if (min < 0 || max >= tableModel.getRowCount())
  56. {
  57. return; // avoid ArrayIndexOutOfBoundsException
  58. }
  59. for (int i = 0; i < selRows.length; i++)
  60. {
  61. int row = selRows[isUp ? i : (selRows.length - 1 - i)];
  62. int to = row + direction;
  63. selectionModel.removeSelectionInterval(row, row);
  64. selectionModel.addSelectionInterval(to, to);
  65. tableModel.moveRow(row, row, to);
  66. }
  67. break;
  68. }
  69. }
  70. });
  71. int result = JOptionPane.showConfirmDialog(null, table, "Change "
  72. + jEdit.getProperty("history.caption"), JOptionPane.OK_CANCEL_OPTION);
  73. if (result == JOptionPane.OK_OPTION)
  74. {
  75. updatelistModel(listModel, tableModel);
  76. }
  77. }
  78. private DefaultTableModel createTableModel(DefaultListModel listModel)
  79. {
  80. Object[][] tableRowData = new String[listModel.size()][1];
  81. for (int i = 0; i < listModel.size(); i++)
  82. {
  83. tableRowData[i][0] = listModel.get(i);
  84. }
  85. return new DefaultTableModel(tableRowData, new String[] { "" });
  86. }
  87. private void updatelistModel(DefaultListModel listModel,
  88. DefaultTableModel tableModel)
  89. {
  90. listModel.removeAllElements();
  91. for (int i = 0; i < tableModel.getRowCount(); i++)
  92. {
  93. Object cellText = tableModel.getValueAt(i, 0);
  94. if (cellText != null && !cellText.equals(""))
  95. {
  96. listModel.addElement(cellText);
  97. }
  98. }
  99. }
  100. }