⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rtextmenubar.java

📁 具有不同语法高亮的编辑器实例
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
						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 + -