📄 searchdialog.java
字号:
multifile.add(filter); cons.gridwidth = 1; cons.weightx = 0.0f; cons.insets = new Insets(0,0,3,0); synchronize = new JButton(jEdit.getProperty( "search.synchronize")); synchronize.setMnemonic(jEdit.getProperty( "search.synchronize.mnemonic") .charAt(0)); synchronize.addActionListener(actionListener); layout.setConstraints(synchronize,cons); multifile.add(synchronize); cons.gridy++; directory = new HistoryTextField("search.directory"); directory.setColumns(25); directory.addActionListener(actionListener); label = new JLabel(jEdit.getProperty("search.directoryField"), SwingConstants.RIGHT); label.setBorder(new EmptyBorder(0,0,0,12)); label.setDisplayedMnemonic(jEdit.getProperty("search.directoryField.mnemonic") .charAt(0)); label.setLabelFor(directory); cons.insets = new Insets(0,0,3,0); cons.weightx = 0.0f; layout.setConstraints(label,cons); multifile.add(label); cons.insets = new Insets(0,0,3,6); cons.weightx = 1.0f; cons.gridwidth = 2; layout.setConstraints(directory,cons); multifile.add(directory); choose = new JButton(jEdit.getProperty("search.choose")); choose.setMnemonic(jEdit.getProperty("search.choose.mnemonic") .charAt(0)); cons.insets = new Insets(0,0,3,0); cons.weightx = 0.0f; cons.gridwidth = 1; layout.setConstraints(choose,cons); multifile.add(choose); choose.addActionListener(actionListener); cons.insets = new Insets(0,0,0,0); cons.gridy++; cons.gridwidth = 3; searchSubDirectories = new JCheckBox(jEdit.getProperty( "search.subdirs")); layout.setConstraints(searchSubDirectories,cons); multifile.add(searchSubDirectories); return multifile; } //}}} //{{{ createButtonsPanel() method private Box createButtonsPanel() { Box box = new Box(BoxLayout.Y_AXIS); ButtonActionHandler actionHandler = new ButtonActionHandler(); box.add(Box.createVerticalStrut(12)); JPanel grid = new JPanel(new GridLayout(5,1,0,12)); findBtn = new JButton(jEdit.getProperty("search.findBtn")); getRootPane().setDefaultButton(findBtn); grid.add(findBtn); findBtn.addActionListener(actionHandler); /* replaceBtn = new JButton(jEdit.getProperty("search.replaceBtn")); replaceBtn.setMnemonic(jEdit.getProperty("search.replaceBtn.mnemonic") .charAt(0)); grid.add(replaceBtn); replaceBtn.addActionListener(actionHandler); */ replaceAndFindBtn = new JButton(jEdit.getProperty("search.replaceAndFindBtn")); replaceAndFindBtn.setMnemonic(jEdit.getProperty("search.replaceAndFindBtn.mnemonic") .charAt(0)); grid.add(replaceAndFindBtn); replaceAndFindBtn.addActionListener(actionHandler); replaceAllBtn = new JButton(jEdit.getProperty("search.replaceAllBtn")); replaceAllBtn.setMnemonic(jEdit.getProperty("search.replaceAllBtn.mnemonic") .charAt(0)); grid.add(replaceAllBtn); replaceAllBtn.addActionListener(actionHandler); closeBtn = new JButton(jEdit.getProperty("common.close")); grid.add(closeBtn); closeBtn.addActionListener(actionHandler); grid.setMaximumSize(grid.getPreferredSize()); box.add(grid); box.add(Box.createGlue()); return box; } //}}} //{{{ updateEnabled() method private void updateEnabled() { wrap.setEnabled(!hyperSearch.isSelected() && !searchSelection.isSelected()); boolean reverseEnabled = !hyperSearch.isSelected() && searchCurrentBuffer.isSelected() && !regexp.isSelected(); searchBack.setEnabled(reverseEnabled); searchForward.setEnabled(reverseEnabled); if(!reverseEnabled) searchForward.setSelected(true); filter.setEnabled(searchAllBuffers.isSelected() || searchDirectory.isSelected()); directory.setEnabled(searchDirectory.isSelected()); choose.setEnabled(searchDirectory.isSelected()); searchSubDirectories.setEnabled(searchDirectory.isSelected()); synchronize.setEnabled(searchAllBuffers.isSelected() || searchDirectory.isSelected()); findBtn.setEnabled(!searchSelection.isSelected() || hyperSearch.isSelected()); replaceAndFindBtn.setEnabled(!hyperSearch.isSelected() && !searchSelection.isSelected()); } //}}} //{{{ save() method /** * @param cancel If true, we don't bother the user with warning messages */ private boolean save(boolean cancel) { try { // prevents us from handling SearchSettingsChanged // as a result of below saving = true; SearchAndReplace.setIgnoreCase(ignoreCase.isSelected()); SearchAndReplace.setRegexp(regexp.isSelected()); SearchAndReplace.setReverseSearch(searchBack.isSelected()); SearchAndReplace.setAutoWrapAround(wrap.isSelected()); String filter = this.filter.getText(); this.filter.addCurrentToHistory(); if(filter.length() == 0) filter = "*"; SearchFileSet fileset = SearchAndReplace.getSearchFileSet(); boolean recurse = searchSubDirectories.isSelected(); if(searchSelection.isSelected()) fileset = new CurrentBufferSet(); else if(searchCurrentBuffer.isSelected()) { fileset = new CurrentBufferSet(); jEdit.setBooleanProperty("search.hypersearch.toggle", hyperSearch.isSelected()); } else if(searchAllBuffers.isSelected()) fileset = new AllBufferSet(filter); else if(searchDirectory.isSelected()) { String directory = this.directory.getText(); this.directory.addCurrentToHistory(); directory = MiscUtilities.constructPath( view.getBuffer().getDirectory(),directory); if((VFSManager.getVFSForPath(directory).getCapabilities() & VFS.LOW_LATENCY_CAP) == 0) { if(cancel) return false; int retVal = GUIUtilities.confirm( SearchDialog.this,"remote-dir-search", null,JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE); if(retVal != JOptionPane.YES_OPTION) return false; } if(fileset instanceof DirectoryListSet) { DirectoryListSet dset = (DirectoryListSet)fileset; dset.setDirectory(directory); dset.setFileFilter(filter); dset.setRecursive(recurse); EditBus.send(new SearchSettingsChanged(null)); } else fileset = new DirectoryListSet(directory,filter,recurse); } else { // can't happen fileset = null; } jEdit.setBooleanProperty("search.subdirs.toggle", recurse); jEdit.setBooleanProperty("search.keepDialog.toggle", keepDialog.isSelected()); SearchAndReplace.setSearchFileSet(fileset); replace.addCurrentToHistory(); SearchAndReplace.setReplaceString(replace.getText()); if(find.getText().length() == 0) { if(!cancel) getToolkit().beep(); return false; } find.addCurrentToHistory(); SearchAndReplace.setSearchString(find.getText()); return true; } finally { saving = false; } } //}}} //{{{ synchronizeMultiFileSettings() method private void synchronizeMultiFileSettings() { directory.setText(view.getBuffer().getDirectory()); SearchFileSet fileset = SearchAndReplace.getSearchFileSet(); if(fileset instanceof AllBufferSet) { filter.setText(((AllBufferSet)fileset) .getFileFilter()); } else { filter.setText("*" + MiscUtilities .getFileExtension(view.getBuffer() .getName())); } } //}}} //{{{ closeOrKeepDialog() method private void closeOrKeepDialog() { if(keepDialog.isSelected()) { // Windows bug workaround in case a YES/NO confirm // was shown // ... but if HyperSearch results window is floating, // the workaround causes problems! if(!hyperSearch.isSelected()) { toFront(); requestFocus(); find.requestFocus(); } return; } else { GUIUtilities.saveGeometry(this,"search"); setVisible(false); } } //}}} //{{{ load() method private void load() { ignoreCase.setSelected(SearchAndReplace.getIgnoreCase()); regexp.setSelected(SearchAndReplace.getRegexp()); wrap.setSelected(SearchAndReplace.getAutoWrapAround()); if(SearchAndReplace.getReverseSearch()) searchBack.setSelected(true); else searchForward.setSelected(true); if(SearchAndReplace.getBeanShellReplace()) { replace.setModel("replace.script"); beanShellReplace.setSelected(true); } else { replace.setModel("replace"); stringReplace.setSelected(true); } SearchFileSet fileset = SearchAndReplace.getSearchFileSet(); HistoryModel model = filter.getModel(); if(model.getSize() != 0) filter.setText(model.getItem(0)); else { filter.setText("*" + MiscUtilities .getFileExtension(view.getBuffer() .getName())); } model = directory.getModel(); if(model.getSize() != 0) directory.setText(model.getItem(0)); else directory.setText(view.getBuffer().getDirectory()); searchSubDirectories.setSelected(jEdit.getBooleanProperty( "search.subdirs.toggle")); if(fileset instanceof DirectoryListSet) { filter.setText(((DirectoryListSet)fileset) .getFileFilter()); directory.setText(((DirectoryListSet)fileset) .getDirectory()); searchSubDirectories.setSelected(((DirectoryListSet)fileset) .isRecursive()); } else if(fileset instanceof AllBufferSet) { filter.setText(((AllBufferSet)fileset) .getFileFilter()); } directory.addCurrentToHistory(); keepDialog.setSelected(jEdit.getBooleanProperty( "search.keepDialog.toggle")); } //}}} //}}} //{{{ Inner classes //{{{ MyJRadioButton class // used for the stringReplace and beanShell replace radio buttons, // so that the user can press tab to go from the find field to the // replace field in one go class MyJRadioButton extends JRadioButton { MyJRadioButton(String label) { super(label); } public boolean isFocusTraversable() { return false; } } //}}} //{{{ ReplaceActionHandler class class ReplaceActionHandler implements ActionListener { public void actionPerformed(ActionEvent evt) { replace.setModel(beanShellReplace.isSelected() ? "replace.script" : "replace"); SearchAndReplace.setBeanShellReplace( beanShellReplace.isSelected()); } } //}}} //{{{ SettingsActionHandler class class SettingsActionHandler implements ActionListener { public void actionPerformed(ActionEvent evt) { Object source = evt.getSource(); if(source == searchCurrentBuffer) hyperSearch.setSelected(false); else if(source == searchSelection || source == searchAllBuffers || source == searchDirectory) hyperSearch.setSelected(true); save(true); updateEnabled(); } } //}}} //{{{ MultiFileActionHandler class class MultiFileActionHandler implements ActionListener { public void actionPerformed(ActionEvent evt) { if(evt.getSource() == choose) { String[] dirs = GUIUtilities.showVFSFileDialog( view,directory.getText(), VFSBrowser.CHOOSE_DIRECTORY_DIALOG, false); if(dirs != null) directory.setText(dirs[0]); } else if(evt.getSource() == synchronize) { synchronizeMultiFileSettings(); } else // source is directory or filter field { // just as if Enter was pressed in another // text field ok(); } } } //}}} //{{{ ButtonActionHandler class class ButtonActionHandler implements ActionListener { public void actionPerformed(ActionEvent evt) { Object source = evt.getSource(); if(source == closeBtn) cancel(); else if(source == findBtn || source == find || source == replace) { ok(); } else if(source == replaceAndFindBtn) { save(false); if(SearchAndReplace.replace(view)) ok(); else getToolkit().beep(); } else if(source == replaceAllBtn) { if(searchSelection.isSelected() && view.getTextArea().getSelectionCount() == 0) { GUIUtilities.error(view,"search-no-selection",null); return; } setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); if(!save(false)) { setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); getToolkit().beep(); return; } if(searchSelection.isSelected()) { if(SearchAndReplace.replace(view)) closeOrKeepDialog(); else getToolkit().beep(); } else { if(SearchAndReplace.replaceAll(view)) closeOrKeepDialog(); else getToolkit().beep(); } setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); } } } //}}} //}}}}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -