1 21 22 package org.armedbear.j; 23 24 import java.awt.event.KeyEvent ; 25 import javax.swing.ButtonGroup ; 26 import javax.swing.JRadioButtonMenuItem ; 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; 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 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 sortByName = new JRadioButtonMenuItem ("Sort by Name"); 143 sortByName.setMnemonic('N'); 144 sortByName.setActionCommand("DirectoryMode.dirSortByName"); 145 sortByName.addActionListener(editor.getDispatcher()); 146 JRadioButtonMenuItem sortByDate = new JRadioButtonMenuItem ("Sort by Date"); 147 sortByDate.setMnemonic('T'); 148 sortByDate.setActionCommand("DirectoryMode.dirSortByDate"); 149 sortByDate.addActionListener(editor.getDispatcher()); 150 JRadioButtonMenuItem sortBySize = new JRadioButtonMenuItem ("Sort by Size"); 151 sortBySize.setMnemonic('S'); 152 sortBySize.setActionCommand("DirectoryMode.dirSortBySize"); 153 sortBySize.addActionListener(editor.getDispatcher()); 154 ButtonGroup group = new ButtonGroup (); 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 |