📄 optionsforprojectsdialog.java
字号:
package com.xrefactory.jedit;import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.io.*;import com.xrefactory.jedit.Options.*;import org.gjt.sp.jedit.*;public class OptionsForProjectsDialog extends JDialog { public static class OptionsForProjectsPanel extends JPanel { class OptionsForProjectsNoFilePanel extends JPanel { class GraphicOption extends Container { class ButtonBrowse extends JButton implements ActionListener { String browseMode; ButtonBrowse() { super("Browse"); setToolTipText("Browse"); setFont(s.optionsBrowseButtonFont); addActionListener(this); } public void actionPerformed( ActionEvent e) { String mm = browseMode.toLowerCase(); if (mm.equals("d") || mm.equals("f") || mm.equals("fd")) { // file / directory chooser int mode; JFileChooser fc = new JFileChooser(); if (mm.equals("d")) mode = JFileChooser.DIRECTORIES_ONLY; else if (mm.equals("f")) mode = JFileChooser.FILES_ONLY; else mode = JFileChooser.FILES_AND_DIRECTORIES; fc.setFileSelectionMode(mode); fc.setApproveButtonText("Select"); //OptionsPanel.this.add(fc); int i = fc.showOpenDialog(s.getParentDialog(this)); tf.setText(fc.getSelectedFile().getPath()); } else if (mm.equals("p")) { // path chooser PathSelectionDialog np = new PathSelectionDialog( s.getParentDialog(this), tf.getText()); tf.setText(np.resultString); } updateAndSelectCheckBox(); } } class checkBoxActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { checkBoxChanged(); } } class TextFieldKeyListener implements KeyListener { public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_ENTER) { updateAndSelectCheckBox(); e.consume(); } } public void keyReleased(KeyEvent e) {} public void keyTyped(KeyEvent e) {} } class TextFieldFocusListener implements FocusListener { public void focusGained(FocusEvent e) { } public void focusLost(FocusEvent e) { updateAndSelectCheckBox(); } } // ------------------------ GraphicOption ------------------ Option option; JCheckBox jb; JTextField tf; ButtonBrowse bb; void checkBoxChanged() { if (jb.isSelected()) { options.add(option); } else { options.delete(option); } updateStringOption(); } void updateAndSelectCheckBox() { int index; String val = tf.getText(); if (jb.isSelected()) { index = options.delete(option); option.fulltext[1] = tf.getText(); if (val.equals("")) { jb.setSelected(false); } else { options.add(option, index); } updateStringOption(); } else { option.fulltext[1] = val; if (! val.equals("")) { jb.setSelected(true); checkBoxChanged(); } } update(val); if (! jb.isSelected() && !val.equals("")) { jb.setSelected(true); checkBoxChanged(); } } public void update(String newText) { int index; if (jb.isSelected()) { index = options.delete(option); option.fulltext[1] = tf.getText(); options.add(option, index); updateStringOption(); } else { option.fulltext[1] = tf.getText(); } } GraphicOption(OptionDescription opt, Option option) { if (option==null) { this.option = new Option(opt, ""); } else { this.option = option; } setLayout(new BoxLayout(this, BoxLayout.X_AXIS)); //&jb = new JCheckBox(opt.name + " ( " + opt.shortDescription + " )"); if (opt.arity==1) { jb = new JCheckBox(opt.shortDescription); jb.addActionListener(new checkBoxActionListener()); add(jb); } else { jb = new JCheckBox(); add(new JLabel(opt.shortDescription)); } if (option!=null) jb.setSelected(true); if (opt.arity>1) { // just for now it should be O.K. s.assertt(opt.arity == 2); String val; tf = new JTextField(this.option.fulltext[1]); tf.setPreferredSize(new Dimension(300,20)); add(tf); tf.addFocusListener(new TextFieldFocusListener()); tf.addKeyListener(new TextFieldKeyListener()); } if (opt.fileSystemBrowseOptions!=null) { bb = new ButtonBrowse(); bb.browseMode = opt.fileSystemBrowseOptions; add(bb); } } } OptionsForProjectsNoFilePanel(Options options, int kind) { int y = -1; setLayout(new GridBagLayout()); y++; for(int i=0; i<Options.allOptions.length; i++) { OptionDescription od = Options.allOptions[i]; if (od.interactive && (kind==od.kind || od.kind==Options.OPT_BOTH)) { Option oo = null; for(int j=0; j<options.optioni; j++) { Option o = options.option[j]; if (o.option == od) { oo = o; } } GraphicOption go = new GraphicOption(od, oo); s.addGbcComponent(this, 0, y++, 1, 1, 10000, 10000, GridBagConstraints.HORIZONTAL, go); } } } } class StringOptionFocusListener implements FocusListener { public void focusGained(FocusEvent e) { } public void focusLost(FocusEvent e) { updateOptionsFromOptionsString(); updateStringOption(); } } class StringOptionKeyListener implements KeyListener { public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_ENTER) { stringOption.insert("\n", stringOption.getCaretPosition()); updateOptionsFromOptionsString(); e.consume(); } } public void keyReleased(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_ENTER) { e.consume(); } } public void keyTyped(KeyEvent e) {} } // ------------------------ OptionPanel ------------------ boolean displayString; Options options; int kind; JTextArea stringOption; OptionsForProjectsNoFilePanel optionsPanel; public void addOptionsPanel() { s.addGbcComponent(this, 0, 0, 1, 1, 10000, 10000, GridBagConstraints.BOTH, optionsPanel); } void updateStringOption() { int cp = stringOption.getCaretPosition(); stringOption.setText(options.toString()); stringOption.setCaretPosition(cp); } public void updateOptionsFromOptionsString() { try { Options.OptionParser pp = new Options.OptionParser(stringOption.getText()); pp.reParseSingleProject(options); OptionsForProjectsPanel.this.remove(optionsPanel); optionsPanel = new OptionsForProjectsNoFilePanel(options, kind); addOptionsPanel(); OptionsForProjectsPanel.this.revalidate(); } catch (Exception ee) { JOptionPane.showMessageDialog(s.getParentDialog(stringOption), ee, "Xrefactory Error", JOptionPane.ERROR_MESSAGE); if (s.debug) ee.printStackTrace(System.err); } } public OptionsForProjectsPanel(Options options, int kind, boolean displayString) { int y = -1; this.displayString = displayString; this.options = options; this.kind = kind; optionsPanel = new OptionsForProjectsNoFilePanel(options, kind); stringOption = new JTextArea(options.toString()); stringOption.addFocusListener(new StringOptionFocusListener()); stringOption.addKeyListener(new StringOptionKeyListener()); setLayout(new GridBagLayout()); addOptionsPanel(); Component disp; if (displayString) { JScrollPane sp = new JScrollPane(stringOption); sp.setMinimumSize(new Dimension(100,80)); sp.setPreferredSize(new Dimension(300,200)); disp = sp; } else { disp = new JPanel(); } s.addGbcComponent(this, 0, 1, 1, 1, 100, 5000, GridBagConstraints.BOTH, disp); } } public static class ProjectOptionsPanel extends JPanel { void saveProjectSettings() { checkConfigurationFile(); if (checkOptionsConsistency()) { Options.saveOptions(projects, s.configurationFile); checkProjectsModifications(); originalProjects = crOptionsArrayCopy(projects); Opt.setActiveProject((String)activeProject.getSelectedItem()); } } class ButtonNewProject extends JButton implements ActionListener { ButtonNewProject() {super("Add"); addActionListener(this);} public void actionPerformed(ActionEvent e) { addNewProject(s.getProbableParent(this)); } } class ButtonDelProject extends JButton implements ActionListener { ButtonDelProject() {super("Del"); addActionListener(this);} public void actionPerformed(ActionEvent e) { int i = projectsPanel.getSelectedIndex(); if (i==0) { JOptionPane.showMessageDialog(s.getProbableParent(this), "This project can not be deleted"); } else { int confirm = JOptionPane.YES_OPTION; confirm = JOptionPane.showConfirmDialog( s.getProbableParent(this), "Really delete project "+projectsPanel.getTitleAt(projectsPanel.getSelectedIndex()), "Confirmation", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); if (confirm == JOptionPane.YES_OPTION) { if (i>0) { Options[] no = new Options[projects.length-1]; s.arrayCopyDelElement(projects, no, i); projects = no; if (activeProject.getSelectedIndex()==i) { // removing active project activeProject.setSelectedIndex(0); } activeProject.removeItemAt(i); projectsPanel.removeTabAt(i);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -