📄 rtextmenubar.java
字号:
KeyStroke.getKeyStroke(KeyEvent.VK_TAB, shift));
RUtilities.setDescription(menuItem, menuMsg, "DescDecreaseIndent");
menuItem.addMouseListener(mouseListener);
indentMenu.add(menuItem);
menu.add(indentMenu);
// 1.5.2004/pwy: On OS X the Options menu item is in the standard
// application menu and is always generated by the system. No need
// to have an additional Options in the menu.
if (rtext.getOS()!=RText.OS_MAC_OSX) {
menu.addSeparator();
optionsItem = createMenuItem(rtext.getAction(RText.OPTIONS_ACTION),
null, msg.getString("DescOptions"), mouseListener);
menu.add(optionsItem);
}
// Search menu.
menu = RUtilities.createMenu(menuMsg, "MenuSearch", "MenuSearchMnemonic");
add(menu);
// Search menu's items.
findItem = createMenuItem(mainView.getAction(AbstractMainView.FIND_ACTION),
null, msg.getString("DescFind"), mouseListener);
menu.add(findItem);
findNextItem = createMenuItem(mainView.getAction(AbstractMainView.FIND_NEXT_ACTION),
null, msg.getString("DescFindNext"), mouseListener);
menu.add(findNextItem);
replaceItem = createMenuItem(mainView.getAction(AbstractMainView.REPLACE_ACTION),
null, msg.getString("DescReplace"), mouseListener);
menu.add(replaceItem);
replaceNextItem = createMenuItem(mainView.getAction(AbstractMainView.REPLACE_NEXT_ACTION),
null, msg.getString("DescReplaceNext"), mouseListener);
menu.add(replaceNextItem);
menu.addSeparator();
findInFilesItem = createMenuItem(mainView.getAction(AbstractMainView.FIND_IN_FILES_ACTION),
null, msg.getString("DescFindInFiles"), mouseListener);
menu.add(findInFilesItem);
menu.addSeparator();
goToItem = createMenuItem(mainView.getAction(AbstractMainView.GOTO_ACTION),
null, msg.getString("DescGoTo"), mouseListener);
menu.add(goToItem);
menuItem = RUtilities.createMenuItem(
new RSyntaxTextAreaEditorKit.GoToMatchingBracketAction(),
menuMsg, "GoToMatchingBracket", "GoToMatchingBracketMnemonic",
KeyStroke.getKeyStroke(KeyEvent.VK_OPEN_BRACKET, defaultModifier));
RUtilities.setDescription(menuItem, menuMsg, "DescGoToMatchingBracket");
menuItem.addMouseListener(mouseListener);
menu.add(menuItem);
// View submenu.
menu = RUtilities.createMenu(menuMsg, "MenuView", "MenuViewMnemonic");
add(menu);
// View submenu's items.
JMenu toolbarsMenu = new JMenu(menuMsg.getString("Toolbars"));
Action a = new GUIApplication.ToggleToolBarAction("foo", rtext);
cbMenuItem = new JCheckBoxMenuItem(a);
cbMenuItem.setText(msg.getString("Toolbar"));
cbMenuItem.setSelected(properties.toolbarVisible);
cbMenuItem.getAccessibleContext().setAccessibleDescription(msg.getString("DescToolbar"));
cbMenuItem.addMouseListener(mouseListener);
toolbarsMenu.add(cbMenuItem);
searchToolbarMenuItem = new JCheckBoxMenuItem(new SearchToolBarAction(
menuMsg.getString("QuickSearchBar"), null,
null, null, null, rtext));
searchToolbarMenuItem.setSelected(properties.searchToolBarVisible);
searchToolbarMenuItem.getAccessibleContext().setAccessibleDescription(
menuMsg.getString("DescQuickSearch"));
searchToolbarMenuItem.addMouseListener(mouseListener);
toolbarsMenu.add(searchToolbarMenuItem);
menu.add(toolbarsMenu);
a = new GUIApplication.ToggleStatusBarAction("foo", rtext);
cbMenuItem = new JCheckBoxMenuItem(a);
cbMenuItem.setText(msg.getString("StatusBar"));
cbMenuItem.setSelected(properties.statusBarVisible);
cbMenuItem.getAccessibleContext().setAccessibleDescription(msg.getString("DescStatusBar"));
cbMenuItem.addMouseListener(mouseListener);
menu.add(cbMenuItem);
lineNumbersItem = new JCheckBoxMenuItem(rtext.getAction(RText.LINE_NUMBER_ACTION));
lineNumbersItem.setState(properties.lineNumbersVisible);
lineNumbersItem.setToolTipText(null);
lineNumbersItem.getAccessibleContext().setAccessibleDescription(msg.getString("DescLineNumbers"));
lineNumbersItem.addMouseListener(mouseListener);
menu.add(lineNumbersItem);
// Font sizes submenu.
JMenu fontSizesMenu = RUtilities.createMenu(menuMsg, "MenuFontSizes",
"MenuFontSizesMnemonic");
a = new RSyntaxTextAreaEditorKit.DecreaseFontSizeAction();
decreaseFontSizesItem = RUtilities.createMenuItem(a, menuMsg,
"DecreaseFontSizes", "DecreaseFontSizesMnemonic",
KeyStroke.getKeyStroke(KeyEvent.VK_F6, defaultModifier));
decreaseFontSizesItem.getAccessibleContext().
setAccessibleDescription(menuMsg.getString("DescDecFontSizes"));
decreaseFontSizesItem.addMouseListener(mouseListener);
fontSizesMenu.add(decreaseFontSizesItem);
a = new RSyntaxTextAreaEditorKit.IncreaseFontSizeAction();
increaseFontSizesItem = RUtilities.createMenuItem(a, menuMsg,
"IncreaseFontSizes", "IncreaseFontSizesMnemonic",
KeyStroke.getKeyStroke(KeyEvent.VK_F7, defaultModifier));
increaseFontSizesItem.getAccessibleContext().
setAccessibleDescription(menuMsg.getString("DescIncFontSizes"));
increaseFontSizesItem.addMouseListener(mouseListener);
fontSizesMenu.add(increaseFontSizesItem);
menu.add(fontSizesMenu);
menu.addSeparator();
menuItem = new JMenuItem(new FilePropertiesAction(
menuMsg.getString("DocProperties"), null,
menuMsg.getString("DocPropertiesDesc"),
new Integer(menuMsg.getString("DocPropertiesMnemonic").charAt(0)),
null, rtext));
menu.add(menuItem);
// Macros menu.
menu = RUtilities.createMenu(menuMsg, "MenuMacros", "MenuMacrosMnemonic");
add(menu);
int ctrlshift = InputEvent.CTRL_MASK | InputEvent.SHIFT_MASK;
a = new BeginRecordingMacroAction(menuMsg.getString("MacroBegin"),
null, // icon
null, // desc
null, // mnemonic
KeyStroke.getKeyStroke(KeyEvent.VK_R,ctrlshift),
rtext,
false); // false => NOT temporary.
JMenuItem item = new JMenuItem(a);
item.setToolTipText(null);
item.getAccessibleContext().setAccessibleDescription(menuMsg.getString("MacroBeginDesc"));
item.addMouseListener(mouseListener);
menu.add(item);
a = new BeginRecordingMacroAction(menuMsg.getString("MacroBeginTemp"),
null, // icon
null, // desc
null, // mnemonic
null,//KeyStroke.getKeyStroke(KeyEvent.VK_R,ctrlshift),
rtext,
true); // true => temporary.
item = new JMenuItem(a);
item.setToolTipText(null);
item.getAccessibleContext().setAccessibleDescription(menuMsg.getString("MacroBeginTempDesc"));
item.addMouseListener(mouseListener);
menu.add(item);
a = new EndRecordingMacroAction(menuMsg.getString("MacroEnd"),
null, // icon
null, // desc
null, // mnemonic
KeyStroke.getKeyStroke(KeyEvent.VK_S,ctrlshift),
rtext);
item = new JMenuItem(a);
item.setToolTipText(null);
item.getAccessibleContext().setAccessibleDescription(menuMsg.getString("MacroEndDesc"));
item.addMouseListener(mouseListener);
menu.add(item);
menu.addSeparator();
a = new RTextAreaEditorKit.PlaybackLastMacroAction(
menuMsg.getString("MacroPlay"),
null, // icon
null, // desc
null, // mnemonic
KeyStroke.getKeyStroke(KeyEvent.VK_M,ctrlshift));
item = new JMenuItem(a);
item.setToolTipText(null);
item.getAccessibleContext().setAccessibleDescription(menuMsg.getString("MacroPlayDesc"));
item.addMouseListener(mouseListener);
menu.add(item);
savedMacroMenu = RUtilities.createMenu(menuMsg, "MenuSavedMacro", "MenuSavedMacroMnemonic");
savedMacroMenu.getPopupMenu().addPopupMenuListener(this);
menu.add(savedMacroMenu);
// Window menu (only visible when in MDI mode).
windowMenu = RUtilities.createMenu(menuMsg, "MenuWindow", "MenuWindowMnemonic");
add(windowMenu);
item = new JMenuItem("Tile Vertically");
item.getAccessibleContext().setAccessibleDescription(msg.getString("DescTileVertically"));
item.setActionCommand("TileVertically");
item.addActionListener(rtext);
item.addMouseListener(mouseListener);
windowMenu.add(item);
item = new JMenuItem("Tile Horizontally");
item.getAccessibleContext().setAccessibleDescription(msg.getString("DescTileHorizontally"));
item.setActionCommand("TileHorizontally");
item.addActionListener(rtext);
item.addMouseListener(mouseListener);
windowMenu.add(item);
item = new JMenuItem("Cascade");
item.getAccessibleContext().setAccessibleDescription(msg.getString("DescCascade"));
item.setActionCommand("Cascade");
item.addActionListener(rtext);
item.addMouseListener(mouseListener);
windowMenu.add(item);
windowMenu.addSeparator();
// Add listener that will create open document list.
windowMenu.getPopupMenu().addPopupMenuListener(this);
// Plugin menu.
pluginMenu = new PluginMenu(rtext, true);
//RUtilities.createMenu(menuMsg, "MenuPlugins", "MenuPluginsMnemonic");
add(pluginMenu);
// Help submenu.
menu = RUtilities.createMenu(menuMsg, "MenuHelp", "MenuHelpMnemonic");
add(menu);
// Help submenu's items.
helpItem = createMenuItem(rtext.getAction(RText.HELP_ACTION),
null, msg.getString("DescHelp"), mouseListener);
menu.add(helpItem);
menu.addSeparator();
aboutItem = createMenuItem(rtext.getAction(RText.ABOUT_ACTION),
null, msg.getString("DescAbout"), mouseListener);
menu.add(aboutItem);
menuMsg = null; // May help in GC.
}
/*****************************************************************************/
/**
* Adds the file specified to the file history.
*
* @param fileFullPath Full path to a file to add to the file history in
* the File menu.
* @see #getFileHistoryString
*/
private void addFileToFileHistory(String fileFullPath) {
// We don't remember just-created empty text files.
// Also, due to the Preferences API needing a non-null key for all
// values, a "-" filename means no files were found for the file
// history. So, we won't add this file in either.
if (fileFullPath.endsWith(File.separatorChar + rtext.getNewFileName())
|| fileFullPath.equals("-"))
return;
JMenuItem menuItem;
// If the file history already contains this file, remove it and add
// it back to the top of the list; this keeps the list in a "most
// recently opened" order.
int index = fileHistory.indexOf(fileFullPath);
if (index>-1) {
menuItem = (JMenuItem)recentFilesMenu.getMenuComponent(index); // Get the menu item.
recentFilesMenu.remove(index); // Remove it.
recentFilesMenu.insert(menuItem, 0); // Add it back at the top.
Object temp = fileHistory.remove(index); // Remove its path from the path list.
fileHistory.add(0, temp); // Add its path to the top of the path list.
return;
}
// If the path name is too long, make an "abbrevriated name" to put in the menu.
String displayPath = getDisplayPath(fileFullPath);
// Create an action to open the file.
OpenFileFromHistoryAction tempAction = new OpenFileFromHistoryAction(displayPath, null, null,
null, null, rtext,fileFullPath);
// Add the new file to the top of the file history list.
menuItem = new JMenuItem(tempAction);
recentFilesMenu.insert(menuItem, 0);
fileHistory.add(0, fileFullPath); // 0th position is top of the list.
// If there are still some spaces in the file history, just remember we've added a new file.
if (numFilesInHistory < maxFileHistorySize) {
numFilesInHistory++;
}
// If there are now too many files, oust the file in history added least recently.
else {
recentFilesMenu.remove(recentFilesMenu.getItemCount()-1);
fileHistory.remove(fileHistory.size()-1); // Last item.
}
}
/*****************************************************************************/
/**
* Attempts to return an "attractive" shortened version of
* <code>fullPath</code>. For example,
* <code>/home/lobster/dir1/dir2/dir3/dir4/file.out</code> could be
* abbreviated as <code>/home/lobster/dir1/.../file.out</code>. Note that
* this method is still in the works, and isn't fully cooked yet.
*/
private String getDisplayPath(String longPath) {
// Initialize some variables.
FontMetrics fontMetrics = getFontMetrics(getFont());
int textWidth = getTextWidth(longPath, fontMetrics);
// If the text width is already short enough to fit, don't do anything to it.
if (textWidth <= MAX_FILE_PATH_LENGTH) {
return longPath;
}
// If it's too long, we'll have to trim it down some...
else {
// Will be '\' for Windows, '/' for Unix and derivatives.
String separator = System.getProperty("file.separator");
// What we will eventually return.
String displayString = longPath;
// If there is no directory separator, then the string is just a file name,
// and so we can't shorten it. Just return the sucker.
int lastSeparatorPos = displayString.lastIndexOf(separator);
if (lastSeparatorPos==-1)
return displayString;
// Get the length of just the file name.
String justFileName = displayString.substring(lastSeparatorPos+1, displayString.length());
int justFileNameLength = getTextWidth(justFileName, fontMetrics);
// If even just the file name is too long, return it.
if (justFileNameLength > MAX_FILE_PATH_LENGTH)
return "..." + separator + justFileName;
// Otherwise, just keep adding levels in the directory hierarchy until the name
// gets too long.
String endPiece = "..." + separator + justFileName;
int endPieceLength = getTextWidth(endPiece, fontMetrics);
int separatorPos = displayString.indexOf(separator, 0);
String firstPart = displayString.substring(0, separatorPos+1);
int firstPartLength = getTextWidth(firstPart, fontMetrics);
String tempFirstPart = firstPart;
int tempFirstPartLength = firstPartLength;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -