Package com.subgraph.vega.ui.console

Source Code of com.subgraph.vega.ui.console.ConsoleView

package com.subgraph.vega.ui.console;

import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StyleRange;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.part.ViewPart;

import com.subgraph.vega.api.console.IConsoleDisplay;
import com.subgraph.vega.ui.util.images.ImageCache;

public class ConsoleView extends ViewPart implements IConsoleDisplay {

  final private static String CONSOLE_ICON = "icons/console.png";
  final private static String CONSOLE_OUTPUT_ICON = "icons/console_output.png";
  final private static String CONSOLE_ERROR_ICON = "icons/console_error.png";
 
  final private static int ALERT_TIME = 4000;
  private final ImageCache imageCache = new ImageCache(Activator.PLUGIN_ID);

  private StyledText output;
  private MenuManager contextMenu;
 
  private long lastOutputTime = System.currentTimeMillis();
  private long lastErrorTime = System.currentTimeMillis();
  private boolean showingOutputIcon = false;
  private boolean showingErrorIcon = false;
 
  @Override
  public void createPartControl(Composite parent) {
    output = new StyledText(parent, SWT.READ_ONLY | SWT.V_SCROLL | SWT.H_SCROLL);

    output.setFont(JFaceResources.getTextFont());
   
    /* create and set context menu */
    contextMenu = new MenuManager("#PopupMenu");
    fillContextMenu(contextMenu);
    output.setMenu(contextMenu.createContextMenu(output));
    // createActions();
    Activator.getDefault().getConsoleService().registerDisplay(this);
  }

  @Override
  public void dispose() {
    imageCache.dispose();
    contextMenu.dispose();
    super.dispose();
  }
 
  @Override
  public void setFocus() {
    showingErrorIcon = false;
    showingOutputIcon = false;
    setTitleImage();
    output.setFocus();
  }

  @Override
  public void printOutput(final String message) {
    Display display = Display.getDefault();
    if (display.isDisposed()) {
      System.out.print(message);
      return;
    }
   
    display.asyncExec(new Runnable() {
      public void run() {
        if(output.isDisposed())
          return;
        output.append(message);
        output.setCaretOffset(output.getCharCount());
        output.showSelection();
       
        showOutputIcon();
      }
    });
  }
 
  @Override
  public void printError(final String message) {
    final Display display = Display.getDefault();
    if (display.isDisposed()) {
      System.err.print(message);
      return;
    }
   
    display.asyncExec(new Runnable() {
      public void run() {
        if(output.isDisposed())
          return;
        output.append(message);
        output.setStyleRange(new StyleRange(output.getCharCount()-message.length(), message.length(), display.getSystemColor(SWT.COLOR_RED), null));
        output.setCaretOffset(output.getCharCount());
        output.showSelection();
       
        showErrorIcon();
      }
    });
  }

  private void fillContextMenu(IMenuManager menuMgr) {
    menuMgr.add(new Action("Clear"){
      public void run() {
        output.setText("");
      }
    });
   
    /* add standard separator to handle additions */
    menuMgr.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
  }

  private void setTitleImage() {
    if (showingErrorIcon) {
      setTitleImage(imageCache.get(CONSOLE_ERROR_ICON));
    } else if (showingOutputIcon) {
      setTitleImage(imageCache.get(CONSOLE_OUTPUT_ICON));
    } else {
      setTitleImage(imageCache.get(CONSOLE_ICON));
    }
  }

  private void animateTitleImage() {
    setTitleImage();
   
    /*
     * if the Console doesnt have the focus, keep the title image static to show
     * output or errors until the user gives focus to it, otherwise schedule
     * a reset of the icon decoration for a few seconds after the last output
     * or error happened
     */
    if (!output.isFocusControl())
      return;
    final Display display = Display.getDefault();
    display.timerExec(ALERT_TIME/2, new Runnable() {
      public void run() {
        long now = System.currentTimeMillis();
        if (lastErrorTime + ALERT_TIME <= now)
          showingErrorIcon = false;
        if (lastOutputTime + ALERT_TIME <= now)
          showingOutputIcon = false;
        setTitleImage();
        if (showingErrorIcon || showingOutputIcon)
          display.timerExec(ALERT_TIME/2, this);
      }
    });
  }
 
  public void showErrorIcon() {
    lastErrorTime = System.currentTimeMillis();
    if (!showingErrorIcon) {
      showingErrorIcon = true;
      animateTitleImage();
    }
  }

  public void showOutputIcon() {
    lastOutputTime = System.currentTimeMillis();
    if (!showingOutputIcon) {
      showingOutputIcon = true;
      animateTitleImage();
    }
  }
  /*
    protected void createActions() {
        IViewSite viewSite = getViewSite();
        IActionBars actionBars = viewSite.getActionBars();
//    ResourceBundle bundle = ConsoleResourceBundleMessages.getBundle();
//        FindReplaceAction fraction = new FindReplaceAction(bundle, "find_replace_action_", this); //$NON-NLS-1$
//       actionBars.setGlobalActionHandler(ActionFactory.FIND.getId(), TestHandler);
        actionBars.updateActionBars();

    }
    */
  
  
}
TOP

Related Classes of com.subgraph.vega.ui.console.ConsoleView

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.