X-Git-Url: http://secure.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/PHPConsole.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/PHPConsole.java index ad72992..2e98d5d 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/PHPConsole.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/PHPConsole.java @@ -9,34 +9,40 @@ http://www.eclipse.org/legal/cpl-v10.html Contributors: IBM Corporation - Initial implementation - Klaus Hartlage - www.eclipseproject.de + www.phpeclipse.de **********************************************************************/ +import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; -import java.text.MessageFormat; +import java.io.InputStreamReader; +import net.sourceforge.phpdt.internal.ui.PHPUiImages; import net.sourceforge.phpeclipse.PHPeclipsePlugin; import net.sourceforge.phpeclipse.actions.PHPActionMessages; -import org.eclipse.core.runtime.CoreException; + import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.preference.IPreferenceStore; +import org.eclipse.jface.action.Action; +import org.eclipse.jface.action.IMenuListener; +import org.eclipse.jface.action.IMenuManager; +import org.eclipse.jface.action.IToolBarManager; +import org.eclipse.jface.action.MenuManager; +import org.eclipse.jface.action.Separator; +import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.Document; import org.eclipse.jface.text.TextViewer; -import org.eclipse.jface.viewers.ISelection; import org.eclipse.swt.SWT; +import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Menu; +import org.eclipse.ui.IActionBars; +import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.IWorkbenchWindow; -import org.eclipse.ui.IWorkbenchWindowActionDelegate; import org.eclipse.ui.PartInitException; -import org.eclipse.ui.PlatformUI; import org.eclipse.ui.part.ViewPart; -import sun.security.krb5.internal.crypto.e; /** * The PHPConsole is used to display the output if you start MySQL/Apache @@ -44,78 +50,368 @@ import sun.security.krb5.internal.crypto.e; */ public class PHPConsole extends ViewPart { - public static final String CONSOLE_ID = "net.sourceforge.phpeclipse.views.phpconsoleview"; - - private TextViewer viewer = null; - private Document document = null; - - /** - * The constructor. - */ - public PHPConsole() { - } - - /** - * Insert the method's description here. - * @see ViewPart#createPartControl - */ - public void createPartControl(Composite parent) { - viewer = new TextViewer(parent, SWT.WRAP | SWT.V_SCROLL | SWT.H_SCROLL); - GridData viewerData = new GridData(GridData.FILL_BOTH); - viewer.getControl().setLayoutData(viewerData); - viewer.setEditable(false); - } - - /** - * Insert the method's description here. - * @see ViewPart#setFocus - */ - public void setFocus() { - } - - /** - * Set the text for the viewer - */ - public void setOutputText(String text) { - document = new Document(text); - viewer.setDocument(document); - } + public static final String CONSOLE_ID = + "net.sourceforge.phpeclipse.views.phpconsoleview"; + private int COMMAND_COMBO_SIZE = 10; - public void appendOutputText(String text) { - try { - document.replace(document.getLength(), 0, text); - } catch (BadLocationException e) { + private TextViewer fViewer = null; + private Document fDocument = null; + private StyledText fStyledText; + // private Combo fCommandCombo; + // private ProcessOutputWriter consoleOut; + // private ProcessOutputWriter consoleErr; + + // private Action goAction; + + private Action cutAction = new Action() { + public void run() { + fViewer.getTextWidget().cut(); + } + }; + private Action copyAction = new Action() { + public void run() { + fStyledText.copy(); + } + }; + // private Action pasteAction = new Action() { + // public void run() { + // fViewer.getTextWidget().paste(); + // } + // }; + private Action selectAllAction = new Action() { + public void run() { + fStyledText.selectAll(); } - // viewer.setDocument(document); + }; + private Action clearAction = new Action() { + public void run() { + fStyledText.setText(""); + } + }; + /** + * The constructor. + */ + public PHPConsole() { + } + + /** + * Insert the method's description here. + * @see ViewPart#createPartControl + */ + public void createPartControl(Composite parent) { + // Composite container = new Composite(parent, SWT.NULL); + // // control = container; + // GridLayout layout = new GridLayout(); + // layout.marginWidth = 0; + // layout.marginHeight = 0; + // layout.verticalSpacing = 0; + // container.setLayout(layout); + // Composite navContainer = new Composite(container, SWT.NONE); + // layout = new GridLayout(); + // layout.numColumns = 2; + // layout.marginHeight = 1; + // navContainer.setLayout(layout); + // createCommandBar(navContainer); + // navContainer.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + + fViewer = new TextViewer(parent, SWT.WRAP | SWT.V_SCROLL | SWT.H_SCROLL); + GridData viewerData = new GridData(GridData.FILL_BOTH); + fViewer.getControl().setLayoutData(viewerData); + fViewer.setEditable(false); + + fStyledText = fViewer.getTextWidget(); + fStyledText.setFont( + JFaceResources.getFontRegistry().get(JFaceResources.TEXT_FONT)); + + cutAction.setText("Cut"); + copyAction.setText("Copy"); + // pasteAction.setText("Paste"); + selectAllAction.setText("Select All"); + clearAction.setText("Clear PHP Console"); + clearAction.setImageDescriptor(PHPUiImages.DESC_CLEAR); + clearAction.setToolTipText("Clear PHP Console"); + + IActionBars bars = this.getViewSite().getActionBars(); + bars.setGlobalActionHandler(IWorkbenchActionConstants.CUT, cutAction); + bars.setGlobalActionHandler(IWorkbenchActionConstants.COPY, copyAction); + // bars.setGlobalActionHandler(IWorkbenchActionConstants.PASTE, pasteAction); + + hookContextMenu(); + // hookDoubleClickAction(); + contributeToActionBars(); + + // appendOutputText("This is the PHP console.\n"); + // appendOutputText("Type: \"php $f\" to run the current editor file.\n"); + + } + + private void createCommandBar(Composite parent) { + // Label addressLabel = new Label(parent, SWT.NONE); + // addressLabel.setText("Command:"); + + // fCommandCombo = new Combo(parent, SWT.DROP_DOWN | SWT.BORDER); + // fCommandCombo.addModifyListener(new ModifyListener() { + // public void modifyText(ModifyEvent e) { + // String text = fCommandCombo.getText(); + // // goAction.setEnabled(text.length() > 0); + // } + // }); + // fCommandCombo.addSelectionListener(new SelectionListener() { + // public void widgetSelected(SelectionEvent e) { + // String text = fCommandCombo.getItem(fCommandCombo.getSelectionIndex()); + // if (text.length() > 0) { + // fCommandCombo.setText(text); + // // executeCommand(text); + // } + // } + // public void widgetDefaultSelected(SelectionEvent e) { + // executeCommand(fCommandCombo.getText()); + // } + // }); + GridData gd = new GridData(GridData.FILL_HORIZONTAL); + // fCommandCombo.setLayoutData(gd); + } + + // private void executeCommand(String command) { + // command.trim(); + // if (command.equals("")) { + // fCommandCombo.forceFocus(); + // return; + // } + // execute(command); + // + // fCommandCombo.forceFocus(); + // // add to Combo history + // String[] items = fCommandCombo.getItems(); + // int loc = -1; + // String normURL = command; + // for (int i = 0; i < items.length; i++) { + // String normItem = items[i]; + // if (normURL.equals(normItem)) { + // // match + // loc = i; + // break; + // } + // } + // if (loc != -1) { + // fCommandCombo.remove(loc); + // } + // fCommandCombo.add(command, 0); + // if (fCommandCombo.getItemCount() > COMMAND_COMBO_SIZE) { + // fCommandCombo.remove(fCommandCombo.getItemCount() - 1); + // } + // fCommandCombo.getParent().layout(true); + // } + + // private void execute(String command) { + // + // ArrayList args = new ArrayList(); + // + // command = command.replace('\\', '§'); + // + // StreamTokenizer tokenizer = new StreamTokenizer(new StringReader(command)); + // tokenizer.resetSyntax(); + // + // tokenizer.whitespaceChars(0, ' '); + // tokenizer.wordChars('!', 255); + // + // tokenizer.quoteChar('"'); + // tokenizer.quoteChar('\''); + // + // int token; + // try { + // while ((token = tokenizer.nextToken()) != StreamTokenizer.TT_EOF) { + // if (token == StreamTokenizer.TT_WORD) { + // args.add(tokenizer.sval); + // } + // } + // } catch (IOException e) { + // // + // } + // String arg = ""; + // // replace variables in arguments + // + //// IFile file = getFile(); + // IFile file = PHPeclipsePlugin.getDefault().getLastEditorFile(); + // if (file != null) { + // String fileLocation = file.getLocation().toString(); + // for (int i = 0; i < args.size(); i++) { + // arg = args.get(i).toString(); + // if (arg.equals("$f")) { + // //current php editor file + // if (File.separatorChar == '\\') { + // fileLocation = fileLocation.replace('/', '\\'); + // } + // args.set(i, fileLocation); + // } + // } + // } + // + // final IPreferenceStore store = PHPeclipsePlugin.getDefault().getPreferenceStore(); + // + // String arg0 = ""; + // String temp; + // StringBuffer commandBuffer = new StringBuffer(1024); + // // Program.launch(command); + // if (args.size() > 0) { + // arg0 = (String) args.get(0); + // arg0 = arg0.replace('§', '\\'); + // args.remove(0); + // if (arg0.equals("php")) { + // temp = store.getString(PHPeclipsePlugin.PHP_RUN_PREF); + // if (temp != null) { + // arg0 = temp; + // } + // } + // commandBuffer.append(arg0 + " "); + // } + // String[] stringArgs = new String[args.size()]; + // for (int i = 0; i < args.size(); i++) { + // arg = (String) args.get(i); + // arg = arg.replace('§', '\\'); + // stringArgs[i] = arg; + // commandBuffer.append(arg + " "); + // } + // commandBuffer.append("\n"); + // + // try { + // command = commandBuffer.toString(); + // write(command+"\n"); + // Runtime runtime = Runtime.getRuntime(); + // + // // runs the command + // Process process = runtime.exec(command); + // + // consoleOut = new ProcessOutputWriter(process.getInputStream()); + // consoleOut.start(); + // consoleErr = new ProcessOutputWriter(process.getErrorStream()); + // consoleErr.start(); + // + // //process.waitFor(); + //// InputStream in = process.getInputStream(); + //// String output = getStringFromStream(in); + //// write(output); + //// in.close(); + //// } catch (InterruptedException e) { + //// write(e.toString()); + // } catch (IOException e) { + // write(e.toString()); + // } + // } + + private void hookContextMenu() { + MenuManager menuMgr = new MenuManager("#PopupMenu"); + menuMgr.setRemoveAllWhenShown(true); + menuMgr.addMenuListener(new IMenuListener() { + public void menuAboutToShow(IMenuManager manager) { + PHPConsole.this.fillContextMenu(manager); + } + }); + Menu menu = menuMgr.createContextMenu(fViewer.getControl()); + fViewer.getControl().setMenu(menu); + getSite().registerContextMenu(menuMgr, fViewer); + } + + private void contributeToActionBars() { + IActionBars bars = getViewSite().getActionBars(); + fillLocalPullDown(bars.getMenuManager()); + fillLocalToolBar(bars.getToolBarManager()); } - + + private void fillLocalPullDown(IMenuManager manager) { + manager.add(cutAction); + manager.add(copyAction); + // manager.add(pasteAction); + manager.add(selectAllAction); + } + + private void fillContextMenu(IMenuManager manager) { + manager.add(cutAction); + manager.add(copyAction); + // manager.add(pasteAction); + manager.add(selectAllAction); + // Other plug-ins can contribute there actions here + manager.add(new Separator("Additions")); + } + + private void fillLocalToolBar(IToolBarManager manager) { + manager.add(clearAction); + } + /** + * Insert the method's description here. + * @see ViewPart#setFocus + */ + public void setFocus() { + // fCommandCombo.forceFocus(); + } + /** - * Prints out the string represented by the string buffer + * Set the text for the viewer */ - static public void write(String output) { + public void setOutputText(String text) { + fDocument = new Document(text); + fViewer.setDocument(fDocument); + } + + public void appendOutputText(String text) { try { - IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); - PHPConsole console = (PHPConsole) page.findView(PHPConsole.CONSOLE_ID); + if (fDocument == null) { + fDocument = new Document(text); + fViewer.setDocument(fDocument); + } else { + fDocument.replace(fDocument.getLength(), 0, text); + } + } catch (BadLocationException e) { + } + // viewer.setDocument(document); + } + + public static PHPConsole getInstance() { + // IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); + IWorkbenchPage page = + PHPeclipsePlugin + .getDefault() + .getWorkbench() + .getActiveWorkbenchWindow() + .getActivePage(); + PHPConsole console = (PHPConsole) page.findView(PHPConsole.CONSOLE_ID); - if (console != null) { - console.appendOutputText(output); - } else if ( - PHPeclipsePlugin.getDefault().getPreferenceStore().getBoolean(PHPeclipsePlugin.SHOW_OUTPUT_IN_CONSOLE) == true) { + if (PHPeclipsePlugin + .getDefault() + .getPreferenceStore() + .getBoolean(PHPeclipsePlugin.SHOW_OUTPUT_IN_CONSOLE) + == true) { + try { page.showView(PHPConsole.CONSOLE_ID); - console = (PHPConsole) page.findView(PHPConsole.CONSOLE_ID); - console.setOutputText(output); + if (console == null) { + console = (PHPConsole) page.findView(PHPConsole.CONSOLE_ID); + } + } catch (PartInitException e) { + PHPeclipsePlugin.getDefault().getLog().log( + new Status( + IStatus.ERROR, + PHPeclipsePlugin.getPluginId(), + 0, + PHPActionMessages.getString( + "PHPStartApacheAction.consoleViewOpeningProblem"), + e)); } - } catch (PartInitException e) { - PHPeclipsePlugin.getDefault().getLog().log( - new Status(IStatus.ERROR, PHPeclipsePlugin.getPluginId(), 0, PHPActionMessages.getString("PHPStartApacheAction.consoleViewOpeningProblem"), e)); } + return console; + } + /** + * Prints out the string represented by the string + */ + public synchronized void write(String output) { + appendOutputText(output); } /** * Creates a string buffer from the given input stream */ - static public String getStringFromStream(InputStream stream) throws IOException { + public static String getStringFromStream(InputStream stream) + throws IOException { StringBuffer buffer = new StringBuffer(); byte[] b = new byte[100]; int finished = 0; @@ -129,7 +425,59 @@ public class PHPConsole extends ViewPart { return buffer.toString(); } + /** + * Finds the file that's currently opened in the PHP Text Editor + */ + // protected IFile getFile() { + // ITextEditor editor = PHPeclipsePlugin.getDefault().getLastEditorFile(); + // + // IEditorInput editorInput = null; + // if (editor != null) { + // editorInput = editor.getEditorInput(); + // } + // + // if (editorInput instanceof IFileEditorInput) + // return ((IFileEditorInput) editorInput).getFile(); + // + // // if nothing was found, which should never happen + // return null; + // } + + class ProcessOutputWriter extends Thread { + boolean fStreamClosed; + InputStream fInputStream; + ProcessOutputWriter(InputStream inputStream) { + fInputStream = inputStream; + fStreamClosed = false; + } + + public void closeStream() { + fStreamClosed = true; + try { + fInputStream.close(); + } catch (IOException io) { + } + } + public void run() { + try { + BufferedReader in = + new BufferedReader(new InputStreamReader(fInputStream)); + + String line; + while ((line = in.readLine()) != null) { + write(line); + } + in.close(); + } catch (Exception e) { + e.printStackTrace(System.out); + if (!fStreamClosed) { + // write("\nPHP Console Exception: "+ e.toString() ); + } + } finally { + } + } + } }