KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > armedbear > j > DirectoryMode


1 /*
2  * DirectoryMode.java
3  *
4  * Copyright (C) 1998-2003 Peter Graves
5  * $Id: DirectoryMode.java,v 1.8 2003/10/15 14:53:25 piso Exp $
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20  */

21
22 package org.armedbear.j;
23
24 import java.awt.event.KeyEvent JavaDoc;
25 import javax.swing.ButtonGroup JavaDoc;
26 import javax.swing.JRadioButtonMenuItem JavaDoc;
27
28 public final class DirectoryMode extends AbstractMode implements Constants, Mode
29 {
30     private static final DirectoryMode mode = new DirectoryMode();
31
32     private DirectoryMode()
33     {
34         super(DIRECTORY_MODE, DIRECTORY_MODE_NAME);
35         setProperty(Property.VERTICAL_RULE, 0);
36         setProperty(Property.SHOW_LINE_NUMBERS, false);
37         setProperty(Property.SHOW_CHANGE_MARKS, false);
38         setProperty(Property.HIGHLIGHT_MATCHING_BRACKET, false);
39         setProperty(Property.HIGHLIGHT_BRACKETS, false);
40     }
41
42     public static final DirectoryMode getMode()
43     {
44         return mode;
45     }
46
47     public NavigationComponent getSidebarComponent(Editor editor)
48     {
49         Debug.assertTrue(editor.getBuffer().getMode() == mode);
50         if (!editor.getBuffer().getBooleanProperty(Property.ENABLE_TREE))
51             return null;
52         View view = editor.getCurrentView();
53         if (view == null)
54             return null; // Shouldn't happen.
55
if (view.getSidebarComponent() == null)
56             view.setSidebarComponent(DirectoryTree.getDirectoryTree(editor));
57         return view.getSidebarComponent();
58     }
59
60     public Formatter getFormatter(Buffer buffer)
61     {
62         return new DirectoryFormatter(buffer);
63     }
64
65     protected void setKeyMapDefaults(KeyMap km)
66     {
67         km.mapKey(KeyEvent.VK_ENTER, 0, "dirOpenFile");
68         km.mapKey(KeyEvent.VK_G, CTRL_MASK | SHIFT_MASK, "dirOpenFile");
69         km.mapKey(VK_DOUBLE_MOUSE_1, 0, "dirOpenFile");
70         km.mapKey(VK_MOUSE_2, 0, "dirOpenFile");
71         km.mapKey(KeyEvent.VK_ENTER, CTRL_MASK, "dirOpenFileAndKillDirectory");
72         km.mapKey(KeyEvent.VK_B, CTRL_MASK | SHIFT_MASK, "dirBrowseFile");
73         km.mapKey(KeyEvent.VK_BACK_SPACE, 0, "dirUpDir");
74         km.mapKey('u', "dirUpDir");
75         km.mapKey('l', "dirLimit");
76         km.mapKey('L', "dirUnlimit");
77         km.mapKey(KeyEvent.VK_S, CTRL_MASK, "dirCycleSortBy");
78         km.mapKey(KeyEvent.VK_R, CTRL_MASK, "dirRescan");
79         km.mapKey(KeyEvent.VK_DELETE, 0, "dirDeleteFiles");
80         km.mapKey('c', "dirCopyFile");
81         km.mapKey('g', "dirGetFile");
82         km.mapKey('m', "dirMoveFile");
83         km.mapKey('t', "dirTagFile");
84         km.mapKey('!', "dirDoShellCommand");
85         km.mapKey(KeyEvent.VK_HOME, 0, "dirHome");
86         km.mapKey('b', "dirBack");
87         km.mapKey('f', "dirForward");
88     }
89
90     public void populateMenu(Editor editor, Menu menu)
91     {
92         final String JavaDoc text = menu.getText();
93         if (text == "File") {
94             menu.add(editor, "New", 'N', "newBuffer");
95             menu.add(editor, "Open...", 'O', "openFile");
96             menu.add(editor, "Recent Files...", 'R', "recentFiles");
97             menu.addSeparator();
98             menu.add(editor, "Save All", 'A', "saveAll");
99             menu.add(editor, "Close", 'C', "killBuffer");
100             menu.add(editor, "Close All", 'L', "closeAll");
101             menu.add(editor, "Close Others", 'H', "closeOthers");
102             menu.addSeparator();
103             menu.add(editor, "Next Buffer", 'T', "nextBuffer");
104             menu.add(editor, "Previous Buffer", 'R', "prevBuffer");
105             menu.addSeparator();
106             menu.add(editor, "New Frame", 'M', "newFrame");
107             menu.add(editor, "Execute Command...", 'D', "executeCommand");
108             menu.addSeparator();
109             menu.add(editor, "Save Session", 'S', "saveSession");
110             menu.add(editor, "Load Session...", 'L', "loadSession");
111             menu.addSeparator();
112             menu.add(editor, "Print...", 'P', "print");
113             menu.addSeparator();
114             menu.add(editor, "Save All/Exit", '/', "saveAllExit");
115             menu.add(editor, "Exit", 'X', "quit");
116         } else if (text == "Edit") {
117             menu.add(editor, "Copy", 'C', "copyRegion");
118             menu.add(editor, "Copy Append", 'D', "copyAppend");
119         } else if (text == "Search") {
120             populateSearchMenu(editor, menu);
121         } else if (text == "Go") {
122             menu.add(editor, "Go Back", 'B', "dirBack");
123             menu.add(editor, "Go Forward", 'F', "dirForward");
124             menu.add(editor, "Go To Parent Directory", 'P', "dirUpDir");
125         } else
126             super.populateMenu(editor, menu);
127     }
128
129     public void populateModeMenu(Editor editor, Menu menu)
130     {
131         Buffer buffer = editor.getBuffer();
132         Directory dir = buffer instanceof Directory ? (Directory) buffer : null;
133         menu.add(editor, "Copy File...", 'C', "dirCopyFile");
134         menu.add(editor, "Move File...", 'M', "dirMoveFile");
135         menu.add(editor, "Delete File", 'D', "dirDeleteFiles");
136         menu.addSeparator();
137         menu.add(editor, "Limit...", 'L', "dirLimit");
138         MenuItem unlimit = menu.add(editor, "Unlimit", 'U', "dirUnlimit");
139         boolean enabled = (dir != null && dir.getLimitPattern() != null);
140         unlimit.setEnabled(enabled);
141         menu.addSeparator();
142         JRadioButtonMenuItem JavaDoc sortByName = new JRadioButtonMenuItem JavaDoc("Sort by Name");
143         sortByName.setMnemonic('N');
144         sortByName.setActionCommand("DirectoryMode.dirSortByName");
145         sortByName.addActionListener(editor.getDispatcher());
146         JRadioButtonMenuItem JavaDoc sortByDate = new JRadioButtonMenuItem JavaDoc("Sort by Date");
147         sortByDate.setMnemonic('T');
148         sortByDate.setActionCommand("DirectoryMode.dirSortByDate");
149         sortByDate.addActionListener(editor.getDispatcher());
150         JRadioButtonMenuItem JavaDoc sortBySize = new JRadioButtonMenuItem JavaDoc("Sort by Size");
151         sortBySize.setMnemonic('S');
152         sortBySize.setActionCommand("DirectoryMode.dirSortBySize");
153         sortBySize.addActionListener(editor.getDispatcher());
154         ButtonGroup JavaDoc group = new ButtonGroup JavaDoc();
155         group.add(sortByName);
156         group.add(sortByDate);
157         group.add(sortBySize);
158         menu.add(sortByName);
159         menu.add(sortByDate);
160         menu.add(sortBySize);
161         if (dir != null) {
162             int sortBy = dir.getSortBy();
163             if (sortBy == Directory.SORT_BY_NAME)
164                 sortByName.setSelected(true);
165             else if (sortBy == Directory.SORT_BY_DATE)
166                 sortByDate.setSelected(true);
167             else if (sortBy == Directory.SORT_BY_SIZE)
168                 sortBySize.setSelected(true);
169         }
170         menu.addSeparator();
171         menu.add(editor, "Rescan Directory", 'R', "dirRescan");
172     }
173
174     public static void dirSortByName()
175     {
176         resort(Directory.SORT_BY_NAME);
177     }
178
179     public static void dirSortByDate()
180     {
181         resort(Directory.SORT_BY_DATE);
182     }
183
184     public static void dirSortBySize()
185     {
186         resort(Directory.SORT_BY_SIZE);
187     }
188
189     private static void resort(int sortBy)
190     {
191         final Editor editor = Editor.currentEditor();
192         final Buffer buffer = editor.getBuffer();
193         if (buffer instanceof Directory) {
194             editor.setWaitCursor();
195             ((Directory)buffer).resort(sortBy);
196             editor.setDefaultCursor();
197         }
198     }
199
200     protected ToolBar getDefaultToolBar(Frame frame)
201     {
202         return new DirectoryModeToolBar(frame);
203     }
204 }
205
Popular Tags