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 a858f5c..8406b8e 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/PHPConsole.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/PHPConsole.java @@ -15,20 +15,34 @@ Contributors: import java.io.IOException; import java.io.InputStream; +import net.sourceforge.phpdt.internal.ui.PHPUiImages; import net.sourceforge.phpeclipse.PHPeclipsePlugin; import net.sourceforge.phpeclipse.actions.PHPActionMessages; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; 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.swt.SWT; import org.eclipse.swt.custom.StyledText; +import org.eclipse.swt.events.ModifyEvent; +import org.eclipse.swt.events.ModifyListener; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Menu; import org.eclipse.ui.IActionBars; import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.IWorkbenchPage; @@ -43,10 +57,39 @@ import org.eclipse.ui.part.ViewPart; public class PHPConsole extends ViewPart { public static final String CONSOLE_ID = "net.sourceforge.phpeclipse.views.phpconsoleview"; + private int COMMAND_COMBO_SIZE = 10; - private TextViewer viewer = null; - private Document document = null; + private TextViewer fViewer = null; + private Document fDocument = null; + private StyledText fStyledText; + private Combo fCommandCombo; + // 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(); + } + }; + private Action clearAction = new Action() { + public void run() { + fStyledText.setText(""); + } + }; /** * The constructor. */ @@ -58,35 +101,144 @@ public class PHPConsole extends ViewPart { * @see ViewPart#createPartControl */ public void createPartControl(Composite parent) { - viewer = new TextViewer(parent, SWT.WRAP | SWT.V_SCROLL | SWT.H_SCROLL); + 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(container, SWT.WRAP | SWT.V_SCROLL | SWT.H_SCROLL); GridData viewerData = new GridData(GridData.FILL_BOTH); - viewer.getControl().setLayoutData(viewerData); - viewer.setEditable(false); - - StyledText widget = viewer.getTextWidget(); - widget.setFont(JFaceResources.getFontRegistry().get(JFaceResources.TEXT_FONT)); - Action cutAction = new Action() { - public void run() { - viewer.getTextWidget().cut(); - } - }; - Action copyAction = new Action() { - public void run() { - viewer.getTextWidget().copy(); - } - }; - Action pasteAction = new Action() { - public void run() { - viewer.getTextWidget().paste(); - } - }; + fViewer.getControl().setLayoutData(viewerData); + fViewer.setEditable(true); + + 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(); + + } + + 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); + // ToolBar toolbar = new ToolBar(parent, SWT.FLAT | SWT.HORIZONTAL); + // toolBarManager = new ToolBarManager(toolbar); + // makeActions(); + // IToolBarManager localBar = + // getViewSite().getActionBars().getToolBarManager(); + // localBar.add(backwardAction); + // localBar.add(forwardAction); + } + + private void executeCommand(String command) { + command.trim(); + write( "Test: "+command ); + 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 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 @@ -98,17 +250,18 @@ public class PHPConsole extends ViewPart { * Set the text for the viewer */ public void setOutputText(String text) { - document = new Document(text); - viewer.setDocument(document); + fDocument = new Document(text); + fViewer.setDocument(fDocument); } public void appendOutputText(String text) { try { - if (document == null) { - document = new Document(text); - viewer.setDocument(document); + if (fDocument == null) { + fDocument = new Document(text); + fViewer.setDocument(fDocument); + } else { + fDocument.replace(fDocument.getLength(), 0, text); } - document.replace(document.getLength(), 0, text); } catch (BadLocationException e) { } // viewer.setDocument(document);