📄 rtextpreferences.java~3~
字号:
/*
* RTextPreferences.java - A class representing several properties of
* an RText session.
*/
package org.fife.rtext;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Image;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.util.HashMap;
import java.util.Iterator;
import java.util.StringTokenizer;
import java.util.prefs.Preferences;
import javax.swing.Action;
import javax.swing.JSplitPane;
import javax.swing.JTabbedPane;
import javax.swing.KeyStroke;
import javax.swing.UIManager;
import org.fife.RUtilities;
import org.fife.ui.StatusBar;
import org.fife.ui.app.GUIApplication;
import org.fife.ui.app.GUIApplicationPreferences;
import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea;
import org.fife.ui.rsyntaxtextarea.SyntaxHighlightingColorScheme;
import org.fife.ui.rsyntaxtextarea.SyntaxScheme;
import org.fife.ui.rsyntaxtextarea.Token;
import org.fife.ui.rtextarea.ConfigurableCaret;
import org.fife.ui.rtextarea.RTextArea;
/**
* A class representing several properties of an RText session. This class
* is used for saving user preferences between RText sessions. It consists
* only of public data members for ease of use.
*/
public class RTextPreferences extends GUIApplicationPreferences
implements RTextActionInfo {
private static final String[] mainViewAcceleratorKeys = {
"findActionAccelerator",
"findNextActionAccelerator",
"replaceActionAccelerator",
"replaceNextActionAccelerator",
"replaceAllActionAccelerator",
"findInFilesActionAccelerator",
"printActionAccelerator",
"printPreviewActionAccelerator",
"closeActionAccelerator",
"closeAllActionAccelerator",
"gotoActionAccelerator"
};
private static final int defaultModifier = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
public static final KeyStroke[] defaultMainViewActionAccelerators = {
KeyStroke.getKeyStroke(KeyEvent.VK_F, defaultModifier),
KeyStroke.getKeyStroke(KeyEvent.VK_F3, 0),
KeyStroke.getKeyStroke(KeyEvent.VK_H, defaultModifier),
KeyStroke.getKeyStroke(KeyEvent.VK_F4, 0),
null,
null,
KeyStroke.getKeyStroke(KeyEvent.VK_P, defaultModifier),
null,
KeyStroke.getKeyStroke(KeyEvent.VK_L, defaultModifier),
null,
KeyStroke.getKeyStroke(KeyEvent.VK_G, defaultModifier)
};
private static final String NOTHING_STRING = "-";
public String iconGroupName;
public boolean lineNumbersVisible;
public int tabSize; // In spaces.
public boolean emulateTabsWithSpaces; // Whether or not to emulate tabs with spaces.
public int textMode; // Either RTextArea.INSERT_MODE (1) or RTextArea.OVERWRITE_MODE (2).
public int tabPlacement; // One of JTabbedPane.TOP/LEFT/BOTTOM/RIGHT.
public Font printFont; // The font ot use when printing.
public Object backgroundObject; // Either a Color or an Image.
public float imageAlpha; // How "translucent" to make a background image (0.0f - 1.0f).
public boolean wordWrap; // Whether or not word wrap is enabled.
public Color caretColor;
public Color selectionColor;
public SyntaxHighlightingColorScheme colorScheme; // Color scheme used in syntax highlighting.
public String syntaxFiltersString; // String representing the syntax filters.
public int maxFileHistorySize;
public String fileHistoryString; // String representing the file history.
public boolean currentLineHighlightEnabled;
public Color currentLineHighlightColor;
public int mainView; // Either RText.TABBED_VIEW or RText.SPLIT_PANE_VIEW.
public boolean highlightModifiedDocNames;
public Color modifiedDocumentNamesColor;
public boolean bracketMatchingEnabled;
public Color matchedBracketBGColor;
public Color matchedBracketBorderColor;
public boolean marginLineEnabled;
public int marginLinePosition;
public Color marginLineColor;
public boolean visibleWhitespace;
public boolean smoothTextEnabled;
public boolean fractionalMetricsEnabled;
public Color markAllHighlightColor;
public int statusBarStyle;
public boolean roundedSelectionEdges;
public String workingDirectory;
public int[] carets; // Index 0=>insert, 1=>overwrite.
public int caretBlinkRate;
public boolean searchToolBarVisible;
public int[] dividerLocations; // Dividers for plugin JSplitPanes.
public KeyStroke[] mainViewActionAccelerators;
/*****************************************************************************/
/**
* Constructor; initializes all values to "defaults."
*/
private RTextPreferences() {
setDefaults();
}
/*****************************************************************************/
/**
* Creates a properties object with all fields initialized to the values
* that the specified RText instance is currently running with.
*
* @return An <code>RTextPreferences</code> object initialized to contain
* the properties the specified RText instance is running with.
*/
public static GUIApplicationPreferences generatePreferences(RText rtext) {
AbstractMainView mainView = rtext.getMainView();
RTextMenuBar menuBar = (RTextMenuBar)rtext.getJMenuBar();
String lnfString = UIManager.getLookAndFeel().getClass().getName();
RTextPreferences props = new RTextPreferences();
props.location = rtext.getLocation();
props.location.translate(15,15);
props.size = rtext.isMaximized() ? new Dimension(-1,-1) : rtext.getSize();
props.lookAndFeel = lnfString;
props.iconGroupName = rtext.getIconGroup().getName();
props.toolbarVisible = rtext.getToolBar().isVisible();
props.statusBarVisible = rtext.getStatusBar().isVisible();
props.lineNumbersVisible = mainView.getLineNumbersEnabled();
props.tabSize = mainView.getTabSize();
props.emulateTabsWithSpaces = mainView.areTabsEmulated();
props.textMode = mainView.getTextMode();
props.tabPlacement = mainView.getDocumentSelectionPlacement();
props.printFont = mainView.getPrintFont();
props.backgroundObject = mainView.getBackgroundObject();
props.imageAlpha = mainView.getBackgroundImageAlpha();
props.wordWrap = mainView.getLineWrap();
props.caretColor = mainView.getCaretColor();
props.selectionColor = mainView.getSelectionColor();
props.colorScheme = rtext.getSyntaxHighlightingColorScheme();
props.syntaxFiltersString = mainView.getSyntaxFilters().toString();
props.maxFileHistorySize = menuBar.getMaximumFileHistorySize();
props.fileHistoryString = menuBar.getFileHistoryString();
props.currentLineHighlightEnabled = mainView.isCurrentLineHighlightEnabled();
props.currentLineHighlightColor = mainView.getCurrentLineHighlightColor();
props.mainView = rtext.getMainViewStyle();
props.highlightModifiedDocNames = mainView.highlightModifiedDocumentDisplayNames();
props.modifiedDocumentNamesColor = mainView.getModifiedDocumentDisplayNamesColor();
props.language = rtext.getLanguage();
props.bracketMatchingEnabled = mainView.isBracketMatchingEnabled();
props.matchedBracketBGColor = mainView.getMatchedBracketBGColor();
props.matchedBracketBorderColor = mainView.getMatchedBracketBorderColor();
props.marginLineEnabled = mainView.isMarginLineEnabled();
props.marginLinePosition = mainView.getMarginLinePosition();
props.marginLineColor = mainView.getMarginLineColor();
props.visibleWhitespace = mainView.isWhitespaceVisible();
props.smoothTextEnabled = mainView.isSmoothTextEnabled();
props.fractionalMetricsEnabled = mainView.isFractionalFontMetricsEnabled();
props.markAllHighlightColor = mainView.getMarkAllHighlightColor();
props.statusBarStyle = rtext.getStatusBar().getStyle();
props.roundedSelectionEdges = mainView.getRoundedSelectionEdges();
props.workingDirectory = rtext.getWorkingDirectory();
props.carets[RTextArea.INSERT_MODE]= mainView.getCaretStyle(RTextArea.INSERT_MODE);
props.carets[RTextArea.OVERWRITE_MODE]= mainView.getCaretStyle(RTextArea.OVERWRITE_MODE);
props.caretBlinkRate = mainView.getCaretBlinkRate();
props.searchToolBarVisible = rtext.isSearchToolBarVisible();
props.dividerLocations[RText.TOP] = rtext.getSplitPaneDividerLocation(RText.TOP);
props.dividerLocations[RText.LEFT] = rtext.getSplitPaneDividerLocation(RText.LEFT);
props.dividerLocations[RText.BOTTOM] = rtext.getSplitPaneDividerLocation(RText.BOTTOM);
props.dividerLocations[RText.RIGHT]= rtext.getSplitPaneDividerLocation(RText.RIGHT);
// Save the actions owned by RText.
props.accelerators = new HashMap();
for (int i=0; i<RText.actionNames.length; i++) {
String actionName = rtext.actionNames[i];
props.accelerators.put(actionName,
(KeyStroke)rtext.getAction(actionName).
getValue(Action.ACCELERATOR_KEY));
}
// Save the actions owned by the main view.
Action[] mainViewActions = mainView.getActions();
for (int i=0; i<AbstractMainView.NUM_ACTIONS; i++)
props.mainViewActionAccelerators[i] =
(KeyStroke)mainViewActions[i].getValue(Action.ACCELERATOR_KEY);
return props;
}
/*****************************************************************************/
/**
* Returns the keystroke from the passed-in string of the form
* "<keycode> <modifiers>".
*
* @param string The string from which to get the keystroke. This string
* was saved by a previous <code>RTextPreferences</code>.
* @return The keystroke.
* @see #getKeyStrokeString
*/
private static final KeyStroke getKeyStrokeFromString(String string) {
int space = string.indexOf(' ');
if (space>-1) {
return KeyStroke.getKeyStroke(
Integer.parseInt(string.substring(0,space)),
Integer.parseInt(string.substring(space+1)));
}
return null;
}
/*****************************************************************************/
/**
* Returns a string suitable for saving this keystroke via the Java
* Preferences API of the form "<keycode> <modifiers>".
*
* @param stroke The keystroke for which to get the string.
* @return A <code>String</code> representing the keystroke.
* @see #getKeySTrokeFromString
*/
private static final String getKeyStrokeString(KeyStroke stroke) {
if (stroke!=null)
return stroke.getKeyCode() + " " + stroke.getModifiers();
else
return NOTHING_STRING;
}
/*****************************************************************************/
/**
* Returns a preferences instance with data saved previously via the
* Java Preferences API. If the load fails, this preferences instance
* will be populated with default values.
*
* @return If the load went okay, <code>true</code> is returned. If the
* load failed default values will be set.
*/
public static GUIApplicationPreferences loadPreferences() {
RTextPreferences props = new RTextPreferences();
try {
// Get all properties assiciated with the RText class.
Preferences prefs = Preferences.userNodeForPackage(RText.class);
loadCommonPreferences(props, prefs);
props.iconGroupName = prefs.get("iconGroupName", props.iconGroupName);
props.lineNumbersVisible = prefs.getBoolean("lineNumbersVisible", props.lineNumbersVisible);
props.mainView = prefs.getInt("mainView", props.mainView);
String temp = prefs.get("colorScheme", null);
props.colorScheme = SyntaxHighlightingColorScheme.loadFromString(temp);
props.statusBarStyle = prefs.getInt("statusBarStyle", props.statusBarStyle);
props.workingDirectory = prefs.get("workingDirectory", props.workingDirectory);
props.searchToolBarVisible = prefs.getBoolean("searchToolBarVisible", props.searchToolBarVisible);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -