@Override public void actionPerformed(ActionEvent evt) { if (pluginModel.isDownloadingList()) return; boolean downloadSource = jEdit.getBooleanProperty("plugin-manager.downloadSource"); boolean installUser = jEdit.getBooleanProperty("plugin-manager.installUser"); Roster roster = new Roster(); String installDirectory; if (installUser) { installDirectory = MiscUtilities.constructPath(jEdit.getSettingsDirectory(), "jars"); } else { installDirectory = MiscUtilities.constructPath(jEdit.getJEditHome(), "jars"); } int length = pluginModel.entries.size(); int instcount = 0; for (int i = 0; i < length; i++) { Entry entry = (Entry) pluginModel.entries.get(i); if (entry.install) { entry.plugin.install(roster, installDirectory, downloadSource); if (updates) entry .plugin .getCompatibleBranch() .satisfyDependencies(roster, installDirectory, downloadSource); instcount++; } } if (roster.isEmpty()) return; boolean cancel = false; if (updates && roster.getOperationCount() > instcount) if (GUIUtilities.confirm( window, "install-plugins.depend", null, JOptionPane.OK_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE) == JOptionPane.CANCEL_OPTION) cancel = true; if (!cancel) { new PluginManagerProgress(window, roster); roster.performOperationsInAWTThread(window); pluginModel.update(); } }
// {{{ userInput() method protected void userInput(char ch) { lastActionCount = 0; JEditTextArea textArea = view.getTextArea(); /* Buffer buffer = view.getBuffer(); if(!buffer.insideCompoundEdit()) buffer.beginCompoundEdit(); */ if (repeatCount == 1) textArea.userInput(ch); else { // stop people doing dumb stuff like C+ENTER 100 C+n if (repeatCount > REPEAT_COUNT_THRESHOLD) { Object[] pp = {String.valueOf(ch), repeatCount}; if (GUIUtilities.confirm( view, "large-repeat-count.user-input", pp, JOptionPane.WARNING_MESSAGE, JOptionPane.YES_NO_OPTION) != JOptionPane.YES_OPTION) { repeatCount = 1; view.getStatus().setMessage(null); return; } } JEditBuffer buffer = view.getBuffer(); try { if (repeatCount != 1) buffer.beginCompoundEdit(); for (int i = 0; i < repeatCount; i++) textArea.userInput(ch); } finally { if (repeatCount != 1) buffer.endCompoundEdit(); } } Macros.Recorder recorder = view.getMacroRecorder(); if (recorder != null) { recorder.recordInput(repeatCount, ch, textArea.isOverwriteEnabled()); } repeatCount = 1; } // }}}
/** * Finds the next occurrence of the search string. * * @param view The view * @return True if the operation was successful, false otherwise */ public static boolean find(View view) { // component that will parent any dialog boxes Component comp = SearchDialog.getSearchDialog(view); if (comp == null || !comp.isShowing()) comp = view; String path = fileset.getNextFile(view, null); if (path == null) { GUIUtilities.error(comp, "empty-fileset", null); return false; } try { view.showWaitCursor(); SearchMatcher matcher = getSearchMatcher(); if (matcher == null) { view.getToolkit().beep(); return false; } record(view, "find(view)", false, true); boolean repeat = false; loop: for (; ; ) { while (path != null) { Buffer buffer = jEdit.openTemporary(view, null, path, false); /* this is stupid and misleading. * but 'path' is not used anywhere except * the above line, and if this is done * after the 'continue', then we will * either hang, or be forced to duplicate * it inside the buffer == null, or add * a 'finally' clause. you decide which one's * worse. */ if (reverse) { path = fileset.getPrevFile(view, path); } else { path = fileset.getNextFile(view, path); } if (buffer == null) continue loop; // Wait for the buffer to load if (!buffer.isLoaded()) VFSManager.waitForRequests(); int start; if (view.getBuffer() == buffer && !repeat) { JEditTextArea textArea = view.getTextArea(); Selection s = textArea.getSelectionAtOffset(textArea.getCaretPosition()); if (s == null) start = textArea.getCaretPosition(); else if (reverse) start = s.getStart(); else start = s.getEnd(); } else if (reverse) start = buffer.getLength(); else start = 0; if (find(view, buffer, start, repeat, reverse)) return true; } if (repeat) { if (!BeanShell.isScriptRunning()) { view.getStatus().setMessageAndClear(jEdit.getProperty("view.status.search-not-found")); view.getToolkit().beep(); } return false; } boolean restart; // if auto wrap is on, always restart search. // if auto wrap is off, and we're called from // a macro, stop search. If we're called // interactively, ask the user what to do. if (wrap) { if (!BeanShell.isScriptRunning()) { view.getStatus().setMessageAndClear(jEdit.getProperty("view.status.auto-wrap")); // beep if beep property set if (jEdit.getBooleanProperty("search.beepOnSearchAutoWrap")) { view.getToolkit().beep(); } } restart = true; } else if (BeanShell.isScriptRunning()) { restart = false; } else { Integer[] args = {Integer.valueOf(reverse ? 1 : 0)}; int result = GUIUtilities.confirm( comp, "keepsearching", args, JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); restart = (result == JOptionPane.YES_OPTION); } if (restart) { // start search from beginning path = fileset.getFirstFile(view); repeat = true; } else break loop; } } catch (Exception e) { handleError(comp, e); } finally { view.hideWaitCursor(); } return false; } // }}}
/** * Invokes the specified action, repeating and recording it as necessary. * * @param action The action */ @Override public void invokeAction(EditAction action) { JEditBuffer buffer = view.getBuffer(); /* if(buffer.insideCompoundEdit()) buffer.endCompoundEdit(); */ // remember the last executed action if (!action.noRememberLast()) { HistoryModel.getModel("action").addItem(action.getName()); if (lastAction == action) lastActionCount++; else { lastAction = action; lastActionCount = 1; } } // remember old values, in case action changes them int _repeatCount = repeatCount; // execute the action if (action.noRepeat() || _repeatCount == 1) action.invoke(view); else { // stop people doing dumb stuff like C+ENTER 100 C+n if (_repeatCount > REPEAT_COUNT_THRESHOLD) { String label = action.getLabel(); if (label == null) label = action.getName(); else label = GUIUtilities.prettifyMenuLabel(label); Object[] pp = {label, _repeatCount}; if (GUIUtilities.confirm( view, "large-repeat-count", pp, JOptionPane.WARNING_MESSAGE, JOptionPane.YES_NO_OPTION) != JOptionPane.YES_OPTION) { repeatCount = 1; view.getStatus().setMessage(null); return; } } try { buffer.beginCompoundEdit(); for (int i = 0; i < _repeatCount; i++) action.invoke(view); } finally { buffer.endCompoundEdit(); } } Macros.Recorder recorder = view.getMacroRecorder(); if (recorder != null && !action.noRecord()) recorder.record(_repeatCount, action.getCode()); // If repeat was true originally, clear it // Otherwise it might have been set by the action, etc if (_repeatCount != 1) { // first of all, if this action set a // readNextChar, do not clear the repeat if (readNextChar != null) return; repeatCount = 1; view.getStatus().setMessage(null); } } // }}}