/jEdit/tags/jedit-4-3-pre15/org/gjt/sp/jedit/menu/RecentFilesProvider.java

# · Java · 193 lines · 126 code · 21 blank · 46 comment · 12 complexity · d8a011a98d0412017d56b538fe7032ba MD5 · raw file

  1. /*
  2. * RecentFilesProvider.java - Recent file list menu
  3. * :tabSize=8:indentSize=8:noTabs=false:
  4. * :folding=explicit:collapseFolds=1:
  5. *
  6. * Copyright (C) 2000, 2003 Slava Pestov
  7. *
  8. * This program is free software; you can redistribute it and/or
  9. * modify it under the terms of the GNU General Public License
  10. * as published by the Free Software Foundation; either version 2
  11. * of the License, or any later version.
  12. *
  13. * This program is distributed in the hope that it will be useful,
  14. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16. * GNU General Public License for more details.
  17. *
  18. * You should have received a copy of the GNU General Public License
  19. * along with this program; if not, write to the Free Software
  20. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  21. */
  22. package org.gjt.sp.jedit.menu;
  23. //{{{ Imports
  24. import org.gjt.sp.jedit.*;
  25. import org.gjt.sp.jedit.browser.FileCellRenderer;
  26. import javax.swing.*;
  27. import javax.swing.event.ChangeEvent;
  28. import javax.swing.event.ChangeListener;
  29. import java.awt.event.ActionEvent;
  30. import java.awt.event.ActionListener;
  31. import java.awt.event.KeyAdapter;
  32. import java.awt.event.KeyEvent;
  33. import java.util.ArrayList;
  34. import java.util.Collections;
  35. import java.util.Iterator;
  36. import java.util.List;
  37. //}}}
  38. public class RecentFilesProvider implements DynamicMenuProvider
  39. {
  40. //{{{ updateEveryTime() method
  41. public boolean updateEveryTime()
  42. {
  43. return false;
  44. } //}}}
  45. //{{{ update() method
  46. public void update(JMenu menu)
  47. {
  48. final View view = GUIUtilities.getView(menu);
  49. //{{{ ActionListener...
  50. ActionListener actionListener = new ActionListener()
  51. {
  52. public void actionPerformed(ActionEvent evt)
  53. {
  54. jEdit.openFile(view,evt.getActionCommand());
  55. view.getStatus().setMessage(null);
  56. }
  57. }; //}}}
  58. //{{{ MouseListener...
  59. /*
  60. MouseListener mouseListener = new MouseAdapter()
  61. {
  62. public void mouseEntered(MouseEvent evt)
  63. {
  64. view.getStatus().setMessage(
  65. ((JMenuItem)evt.getSource())
  66. .getActionCommand());
  67. }
  68. public void mouseExited(MouseEvent evt)
  69. {
  70. view.getStatus().setMessage(null);
  71. }
  72. };
  73. */
  74. //}}}
  75. //{{{ ChangeListener...
  76. ChangeListener changeListener = new ChangeListener()
  77. {
  78. public void stateChanged(ChangeEvent e)
  79. {
  80. JMenuItem menuItem = (JMenuItem) e.getSource();
  81. view.getStatus().setMessage(menuItem.isArmed()?menuItem.getActionCommand():null);
  82. }
  83. }; //}}}
  84. List<BufferHistory.Entry> recentVector = BufferHistory.getHistory();
  85. if(recentVector.isEmpty())
  86. {
  87. JMenuItem menuItem = new JMenuItem(
  88. jEdit.getProperty("no-recent-files.label"));
  89. menuItem.setEnabled(false);
  90. menu.add(menuItem);
  91. return;
  92. }
  93. final List<JMenuItem> menuItems = new ArrayList<JMenuItem>();
  94. final JTextField text = new JTextField();
  95. text.setToolTipText(jEdit.getProperty("recent-files.textfield.tooltip"));
  96. menu.add(text);
  97. text.addKeyListener(new KeyAdapter()
  98. {
  99. public void keyReleased(KeyEvent e)
  100. {
  101. String typedText = text.getText();
  102. for (JMenuItem tempMenuItem : menuItems)
  103. {
  104. if (typedText.length() == 0)
  105. {
  106. tempMenuItem.setEnabled(true);
  107. }
  108. else
  109. {
  110. String fileName = tempMenuItem.getText();
  111. boolean matchesStart = fileName.toLowerCase().startsWith(typedText.toLowerCase());
  112. tempMenuItem.setEnabled(matchesStart);
  113. }
  114. }
  115. }
  116. });
  117. boolean sort = jEdit.getBooleanProperty("sortRecent");
  118. int maxItems = jEdit.getIntegerProperty("menu.spillover",20);
  119. Iterator<BufferHistory.Entry> iter = recentVector.iterator();
  120. while(iter.hasNext())
  121. {
  122. String path = iter.next().path;
  123. JMenuItem menuItem = new JMenuItem(MiscUtilities
  124. .getFileName(path));
  125. menuItem.setActionCommand(path);
  126. menuItem.addActionListener(actionListener);
  127. // menuItem.addMouseListener(mouseListener);
  128. menuItem.addChangeListener(changeListener);
  129. menuItem.setIcon(FileCellRenderer.fileIcon);
  130. menuItems.add(menuItem);
  131. if (!sort)
  132. {
  133. if (menu.getMenuComponentCount() >= maxItems
  134. && iter.hasNext())
  135. {
  136. JMenu newMenu = new JMenu(
  137. jEdit.getProperty("common.more"));
  138. menu.add(newMenu);
  139. menu = newMenu;
  140. }
  141. menu.add(menuItem);
  142. }
  143. }
  144. if(sort)
  145. {
  146. Collections.sort(menuItems, new MiscUtilities.MenuItemCompare());
  147. for(int i = 0; i < menuItems.size(); i++)
  148. {
  149. if(menu.getMenuComponentCount() >= maxItems
  150. && i != 0)
  151. {
  152. JMenu newMenu = new JMenu(
  153. jEdit.getProperty("common.more"));
  154. menu.add(newMenu);
  155. menu = newMenu;
  156. }
  157. menu.add(menuItems.get(i));
  158. }
  159. }
  160. JMenuItem menuItem = new JMenuItem(jEdit.getProperty("clear-recent-files.label"));
  161. menuItem.addActionListener(new ActionListener()
  162. {
  163. public void actionPerformed(ActionEvent e)
  164. {
  165. BufferHistory.clear();
  166. }
  167. });
  168. menu.addSeparator();
  169. menu.add(menuItem);
  170. } //}}}
  171. }