PageRenderTime 50ms CodeModel.GetById 22ms RepoModel.GetById 1ms app.codeStats 0ms

/jEdit/tags/jedit-4-2-pre4/org/gjt/sp/jedit/gui/FilesChangedDialog.java

#
Java | 221 lines | 153 code | 31 blank | 37 comment | 15 complexity | 473d44ac845e6dc99d610a4ce92e85c2 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. /*
  2. * FilesChangedDialog.java - Files changed on disk
  3. * :tabSize=8:indentSize=8:noTabs=false:
  4. * :folding=explicit:collapseFolds=1:
  5. *
  6. * Copyright (C) 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.gui;
  23. //{{{ Imports
  24. import javax.swing.border.*;
  25. import javax.swing.event.*;
  26. import javax.swing.tree.*;
  27. import javax.swing.*;
  28. import java.awt.event.*;
  29. import java.awt.*;
  30. import org.gjt.sp.jedit.io.*;
  31. import org.gjt.sp.jedit.*;
  32. //}}}
  33. /**
  34. * Files changed on disk dialog.
  35. *
  36. * @author Slava Pestov
  37. * @version $Id: FilesChangedDialog.java 4755 2003-06-03 22:02:40Z spestov $
  38. */
  39. public class FilesChangedDialog extends EnhancedDialog
  40. {
  41. //{{{ FilesChangedDialog constructor
  42. public FilesChangedDialog(View view, int[] states)
  43. {
  44. super(view,jEdit.getProperty("files-changed.title"),false);
  45. this.view = view;
  46. JPanel content = new JPanel(new BorderLayout(12,12));
  47. content.setBorder(new EmptyBorder(12,12,12,12));
  48. setContentPane(content);
  49. Box iconBox = new Box(BoxLayout.Y_AXIS);
  50. iconBox.add(new JLabel(UIManager.getIcon("OptionPane.warningIcon")));
  51. iconBox.add(Box.createGlue());
  52. content.add(BorderLayout.WEST,iconBox);
  53. JPanel centerPanel = new JPanel(new BorderLayout());
  54. JLabel label = new JLabel(jEdit.getProperty("files-changed.caption"));
  55. label.setBorder(new EmptyBorder(0,0,6,0));
  56. centerPanel.add(BorderLayout.NORTH,label);
  57. DefaultMutableTreeNode deleted = new DefaultMutableTreeNode(
  58. jEdit.getProperty("files-changed.deleted"),true);
  59. DefaultMutableTreeNode changed = new DefaultMutableTreeNode(
  60. jEdit.getProperty("files-changed.changed"),true);
  61. DefaultMutableTreeNode changedDirty = new DefaultMutableTreeNode(
  62. jEdit.getProperty("files-changed.changed-dirty"),true);
  63. Buffer[] buffers = jEdit.getBuffers();
  64. for(int i = 0; i < states.length; i++)
  65. {
  66. Buffer buffer = buffers[i];
  67. DefaultMutableTreeNode addTo;
  68. switch(states[i])
  69. {
  70. case Buffer.FILE_DELETED:
  71. addTo = deleted;
  72. break;
  73. case Buffer.FILE_CHANGED:
  74. addTo = (buffer.isDirty() ? changedDirty : changed);
  75. break;
  76. default:
  77. addTo = null;
  78. break;
  79. }
  80. if(addTo != null)
  81. addTo.add(new DefaultMutableTreeNode(buffer));
  82. }
  83. DefaultMutableTreeNode root = new DefaultMutableTreeNode("",true);
  84. if(deleted.getChildCount() != 0)
  85. root.add(deleted);
  86. if(changed.getChildCount() != 0)
  87. root.add(changed);
  88. if(changedDirty.getChildCount() != 0)
  89. root.add(changedDirty);
  90. bufferTree = new JTree(new DefaultTreeModel(root));
  91. bufferTree.setRootVisible(false);
  92. bufferTree.setVisibleRowCount(10);
  93. bufferTree.setCellRenderer(new Renderer());
  94. bufferTree.getSelectionModel().addTreeSelectionListener(new TreeHandler());
  95. bufferTree.getSelectionModel().setSelectionMode(
  96. ListSelectionModel.SINGLE_SELECTION);
  97. centerPanel.add(BorderLayout.CENTER,new JScrollPane(bufferTree));
  98. content.add(BorderLayout.CENTER,centerPanel);
  99. Box buttons = new Box(BoxLayout.X_AXIS);
  100. buttons.add(Box.createGlue());
  101. JButton close = new JButton(jEdit.getProperty("common.close"));
  102. getRootPane().setDefaultButton(close);
  103. buttons.add(close);
  104. close.addActionListener(new ActionHandler());
  105. buttons.add(Box.createGlue());
  106. content.add(BorderLayout.SOUTH,buttons);
  107. bufferTree.expandPath(new TreePath(
  108. new Object[] {
  109. root,
  110. deleted
  111. }));
  112. bufferTree.expandPath(new TreePath(
  113. new Object[] {
  114. root,
  115. changed
  116. }));
  117. bufferTree.expandPath(new TreePath(
  118. new Object[] {
  119. root,
  120. changedDirty
  121. }));
  122. GUIUtilities.requestFocus(this,bufferTree);
  123. pack();
  124. setLocationRelativeTo(view);
  125. show();
  126. } //}}}
  127. //{{{ ok() method
  128. public void ok()
  129. {
  130. dispose();
  131. } //}}}
  132. //{{{ cancel() method
  133. public void cancel()
  134. {
  135. dispose();
  136. } //}}}
  137. //{{{ Private members
  138. private View view;
  139. private JTree bufferTree;
  140. //}}}
  141. //{{{ ActionHandler class
  142. class ActionHandler implements ActionListener
  143. {
  144. public void actionPerformed(ActionEvent evt)
  145. {
  146. dispose();
  147. }
  148. } //}}}
  149. //{{{ TreeHandler class
  150. class TreeHandler implements TreeSelectionListener
  151. {
  152. public void valueChanged(TreeSelectionEvent evt)
  153. {
  154. TreePath path = bufferTree.getSelectionPath();
  155. if(path != null)
  156. {
  157. DefaultMutableTreeNode node = (DefaultMutableTreeNode)path.getLastPathComponent();
  158. if(node.getUserObject() instanceof Buffer)
  159. view.goToBuffer((Buffer)node.getUserObject());
  160. }
  161. }
  162. } //}}}
  163. //{{{ Renderer class
  164. class Renderer extends DefaultTreeCellRenderer
  165. {
  166. public Renderer()
  167. {
  168. entryFont = UIManager.getFont("Tree.font");
  169. if(entryFont == null)
  170. entryFont = jEdit.getFontProperty("metal.secondary.font");
  171. groupFont = entryFont.deriveFont(Font.BOLD);
  172. }
  173. public Component getTreeCellRendererComponent(JTree tree,
  174. Object value, boolean selected, boolean expanded,
  175. boolean leaf, int row, boolean hasFocus)
  176. {
  177. super.getTreeCellRendererComponent(tree,value,
  178. selected,expanded,leaf,row,hasFocus);
  179. DefaultMutableTreeNode node = (DefaultMutableTreeNode)value;
  180. if (node.getUserObject() instanceof String)
  181. this.setFont(groupFont);
  182. else
  183. this.setFont(entryFont);
  184. setIcon(null);
  185. return this;
  186. }
  187. private Font entryFont;
  188. private Font groupFont;
  189. } //}}}
  190. }