Package org.nodeclipse.debug.launch

Source Code of org.nodeclipse.debug.launch.NodeArgumentsTab$WidgetListener

package org.nodeclipse.debug.launch;


import java.io.File;

import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.variables.IStringVariableManager;
import org.eclipse.core.variables.VariablesPlugin;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.debug.ui.AbstractLaunchConfigurationTab;
import org.eclipse.debug.ui.StringVariableSelectionDialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.SWT;
import org.eclipse.swt.accessibility.AccessibleAdapter;
import org.eclipse.swt.accessibility.AccessibleEvent;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.TraverseEvent;
import org.eclipse.swt.events.TraverseListener;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.DirectoryDialog;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.dialogs.ContainerSelectionDialog;
import org.eclipse.ui.dialogs.ResourceSelectionDialog;
import org.nodeclipse.debug.util.Constants;
import org.nodeclipse.debug.util.VariablesUtil;
import org.nodeclipse.ui.util.NodeclipseConsole;

/**
* These sources definitely came from some example like
* https://eclipse.googlesource.com/pdt/org.eclipse.pdt/+/508aebe616434cff2b7ba10178d818e9db7d3399/plugins/org.eclipse.php.debug.ui/src/org/eclipse/php/internal/debug/ui/launching/PHPExecutableLaunchTab.java
* @author ?
*
*/
public class NodeArgumentsTab  extends AbstractLaunchConfigurationTab {
  protected Label fPrgmArgumentsLabel;
  protected Text fPrgmArgumentsText;

  // Node arguments widgets
  protected Label fNodeArgumentsLabel;
  protected Text fNodeArgumentsText;

  protected Text locationField;
  protected Text workDirectoryField;
  //protected Button fileLocationButton;
  protected Button workspaceLocationButton;
  protected Button fileWorkingDirectoryButton;
  protected Button workspaceWorkingDirectoryButton;
  protected Button variablesWorkingDirectoryButton;

  protected boolean fInitializing= false;
  private boolean userEdited= false;

  protected WidgetListener fListener= new WidgetListener();

  /**
   * A listener to update for text modification and widget selection.
   */
  protected class WidgetListener extends SelectionAdapter implements ModifyListener {
    public void modifyText(ModifyEvent e) {
      if (!fInitializing) {
        setDirty(true);
        userEdited= true;
        updateLaunchConfigurationDialog();
      }
    }
    public void widgetSelected(SelectionEvent e) {
      setDirty(true);
      Object source= e.getSource();
      if (source == workspaceLocationButton) {
        handleWorkspaceLocationButtonSelected();
//      } else if (source == fileLocationButton) {
//        handleFileLocationButtonSelected();
      } else if (source == workspaceWorkingDirectoryButton) {
        handleWorkspaceWorkingDirectoryButtonSelected();
      } else if (source == fileWorkingDirectoryButton) {
        handleFileWorkingDirectoryButtonSelected();
//      } else if (source == argumentVariablesButton) {
//        handleVariablesButtonSelected(argumentField);
//      } else if (source == variablesLocationButton) {
//        handleVariablesButtonSelected(locationField);
      } else if (source == variablesWorkingDirectoryButton) {
        handleVariablesButtonSelected(workDirectoryField);
      }
    }

  }
 
  /**
   * Prompts the user to choose a location from the filesystem and
   * sets the location as the full path of the selected file.
   */
//  protected void handleFileLocationButtonSelected() {
//    FileDialog fileDialog = new FileDialog(getShell(), SWT.NONE);
//    fileDialog.setFileName(locationField.getText());
//    String text= fileDialog.open();
//    if (text != null) {
//      locationField.setText(text);
//    }
//  }
 
  /**
   * Prompts the user for a workspace location within the workspace and sets
   * the location as a String containing the workspace_loc variable or
   * <code>null</code> if no location was obtained from the user.
   */
  protected void handleWorkspaceLocationButtonSelected() {
    ResourceSelectionDialog dialog;
    dialog = new ResourceSelectionDialog(getShell(), ResourcesPlugin.getWorkspace().getRoot(), ExternalToolsLaunchConfigurationMessages.ExternalToolsMainTab_Select_a_resource_22);
    dialog.open();
    Object[] results = dialog.getResult();
    if (results == null || results.length < 1) {
      return;
    }
    IResource resource = (IResource)results[0];
    locationField.setText(newVariableExpression("workspace_loc", resource.getFullPath().toString())); //$NON-NLS-1$
  }
 
  /**
   * Prompts the user for a working directory location within the workspace
   * and sets the working directory as a String containing the workspace_loc
   * variable or <code>null</code> if no location was obtained from the user.
   */
  protected void handleWorkspaceWorkingDirectoryButtonSelected() {
    ContainerSelectionDialog containerDialog;
    containerDialog = new ContainerSelectionDialog(
      getShell(),
      ResourcesPlugin.getWorkspace().getRoot(),
      false,
      ExternalToolsLaunchConfigurationMessages.ExternalToolsMainTab_23);
    containerDialog.open();
    Object[] resource = containerDialog.getResult();
    String text= null;
    if (resource != null && resource.length > 0) {
      text= newVariableExpression("workspace_loc", ((IPath)resource[0]).toString()); //$NON-NLS-1$
    }
    if (text != null) {
      workDirectoryField.setText(text);
    }
  }
 
  /**
   * Returns a new variable expression with the given variable and the given argument.
   * @see IStringVariableManager#generateVariableExpression(String, String)
   */
  protected String newVariableExpression(String varName, String arg) {
    return VariablesPlugin.getDefault().getStringVariableManager().generateVariableExpression(varName, arg);
  }
 
  /**
   * Prompts the user to choose a working directory from the filesystem.
   */
  protected void handleFileWorkingDirectoryButtonSelected() {
    DirectoryDialog dialog = new DirectoryDialog(getShell(), SWT.SAVE);
    dialog.setMessage(ExternalToolsLaunchConfigurationMessages.ExternalToolsMainTab_23);
    dialog.setFilterPath(workDirectoryField.getText());
    String text= dialog.open();
    if (text != null) {
      workDirectoryField.setText(text);
    }
  }
 
  /**
   * A variable entry button has been pressed for the given text
   * field. Prompt the user for a variable and enter the result
   * in the given field.
   */
  private void handleVariablesButtonSelected(Text textField) {
    String variable = getVariable();
    if (variable != null) {
      textField.insert(variable);
    }
  }

  /**
   * Prompts the user to choose and configure a variable and returns
   * the resulting string, suitable to be used as an attribute.
   */
  private String getVariable() {
    StringVariableSelectionDialog dialog = new StringVariableSelectionDialog(getShell());
    dialog.open();
    return dialog.getVariableExpression();
  }
 
  @Override
  public void createControl(Composite parent) {
    Font font = parent.getFont();
    Composite comp = new Composite(parent, SWT.NONE);
    GridLayout layout = new GridLayout(1, true);
    comp.setLayout(layout);
    comp.setFont(font);
   
    GridData gd = new GridData(GridData.FILL_BOTH);
    comp.setLayoutData(gd);
    setControl(comp);
    //setHelpContextId();
   
    Group group = new Group(comp, SWT.NONE);
    group.setFont(font);
    layout = new GridLayout();
    group.setLayout(layout);
    group.setLayoutData(new GridData(GridData.FILL_BOTH));
   
    group.setText("Program Arguments");
   
    fPrgmArgumentsText = new Text(group, SWT.MULTI | SWT.WRAP | SWT.BORDER | SWT.V_SCROLL);
    fPrgmArgumentsText.addTraverseListener(new TraverseListener() {
      public void keyTraversed(TraverseEvent e) {
        switch (e.detail) {
          case SWT.TRAVERSE_ESCAPE:
          case SWT.TRAVERSE_PAGE_NEXT:
          case SWT.TRAVERSE_PAGE_PREVIOUS:
            e.doit = true;
            break;
          case SWT.TRAVERSE_RETURN:
          case SWT.TRAVERSE_TAB_NEXT:
          case SWT.TRAVERSE_TAB_PREVIOUS:
            if ((fPrgmArgumentsText.getStyle() & SWT.SINGLE) != 0) {
              e.doit = true;
            } else {
              if (!fPrgmArgumentsText.isEnabled() || (e.stateMask & SWT.MODIFIER_MASK) != 0) {
                e.doit = true;
              }
            }
            break;
        }
      }
    });
    gd = new GridData(GridData.FILL_BOTH);
    gd.heightHint = 40;
    gd.widthHint = 100;
    fPrgmArgumentsText.setLayoutData(gd);
    fPrgmArgumentsText.setFont(font);
    fPrgmArgumentsText.addModifyListener(new ModifyListener() {
      public void modifyText(ModifyEvent evt) {
        scheduleUpdateJob();
      }
    });
    //ControlAccessibleListener.addListener(fPrgmArgumentsText, group.getText());
   
    String buttonLabel = "Variables..."
    Button pgrmArgVariableButton = createPushButton(group, buttonLabel, null);
    pgrmArgVariableButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END));
    pgrmArgVariableButton.addSelectionListener(new SelectionAdapter() {
      public void widgetSelected(SelectionEvent e) {
        StringVariableSelectionDialog dialog = new StringVariableSelectionDialog(getShell());
        dialog.open();
        String variable = dialog.getVariableExpression();
        if (variable != null) {
                    fPrgmArgumentsText.insert(variable);
        }
      }
    });
   
    Group groupNode = new Group(comp, SWT.NONE);
    groupNode.setFont(font);
    groupNode.setLayout(new GridLayout());
    groupNode.setLayoutData(new GridData(GridData.FILL_BOTH));
   
    groupNode.setText("Node Arguments");
   
    fNodeArgumentsText = new Text(groupNode, SWT.MULTI | SWT.WRAP | SWT.BORDER | SWT.V_SCROLL);
    fNodeArgumentsText.addTraverseListener(new TraverseListener() {
      public void keyTraversed(TraverseEvent e) {
        switch (e.detail) {
          case SWT.TRAVERSE_ESCAPE:
          case SWT.TRAVERSE_PAGE_NEXT:
          case SWT.TRAVERSE_PAGE_PREVIOUS:
            e.doit = true;
            break;
          case SWT.TRAVERSE_RETURN:
          case SWT.TRAVERSE_TAB_NEXT:
          case SWT.TRAVERSE_TAB_PREVIOUS:
            if ((fPrgmArgumentsText.getStyle() & SWT.SINGLE) != 0) {
              e.doit = true;
            } else {
              if (!fPrgmArgumentsText.isEnabled() || (e.stateMask & SWT.MODIFIER_MASK) != 0) {
                e.doit = true;
              }
            }
            break;
        }
      }
    });
    GridData gd2 = new GridData(GridData.FILL_BOTH);
    gd2.heightHint = 40;
    gd2.widthHint = 100;
    fNodeArgumentsText.setLayoutData(gd2);
    fNodeArgumentsText.setFont(font);
    fNodeArgumentsText.addModifyListener(new ModifyListener() {
      public void modifyText(ModifyEvent evt) {
        scheduleUpdateJob();
      }
    });
    //ControlAccessibleListener.addListener(fPrgmArgumentsText, group.getText());
   
    String buttonLabel2 = "Variables..."
    Button pgrmArgVariableButton2 = createPushButton(groupNode, buttonLabel2, null);
    pgrmArgVariableButton2.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END));
    pgrmArgVariableButton2.addSelectionListener(new SelectionAdapter() {
      public void widgetSelected(SelectionEvent e) {
        StringVariableSelectionDialog dialog = new StringVariableSelectionDialog(getShell());
        dialog.open();
        String variable = dialog.getVariableExpression();
        if (variable != null) {
                    fNodeArgumentsText.insert(variable);
        }
      }
    });
   
    createWorkDirectoryComponent(comp);
  }

  /**
   * Creates the controls needed to edit the working directory
   * attribute of an external tool
   *
   * @param parent the composite to create the controls in
   */
  protected void createWorkDirectoryComponent(Composite parent) {
    Group group = new Group(parent, SWT.NONE);
    String groupName = getWorkingDirectoryLabel();
    group.setText(groupName);
    GridLayout layout = new GridLayout();
    layout.numColumns = 1;
    GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
    group.setLayout(layout);
    group.setLayoutData(gridData);
   
    workDirectoryField = new Text(group, SWT.BORDER);
    GridData data = new GridData(GridData.FILL_HORIZONTAL);
    data.widthHint = IDialogConstants.ENTRY_FIELD_WIDTH;
    workDirectoryField.setLayoutData(data);
    workDirectoryField.addModifyListener(fListener);
    addControlAccessibleListener(workDirectoryField,group.getText());
   
    Composite buttonComposite = new Composite(group, SWT.NONE);
    layout = new GridLayout();
        layout.marginWidth = 0;
        layout.marginHeight = 0;
    layout.numColumns = 3;
    gridData = new GridData(GridData.HORIZONTAL_ALIGN_END);
    buttonComposite.setLayout(layout);
    buttonComposite.setLayoutData(gridData);
    buttonComposite.setFont(parent.getFont());
   
    workspaceWorkingDirectoryButton= createPushButton(buttonComposite, ExternalToolsLaunchConfigurationMessages.ExternalToolsMainTab_Browse_Wor_kspace____6, null);
    workspaceWorkingDirectoryButton.addSelectionListener(fListener);
    addControlAccessibleListener(workspaceWorkingDirectoryButton, group.getText() + " " + workspaceWorkingDirectoryButton.getText()); //$NON-NLS-1$
   
    fileWorkingDirectoryButton= createPushButton(buttonComposite, ExternalToolsLaunchConfigurationMessages.ExternalToolsMainTab_Browse_F_ile_System____7, null);
    fileWorkingDirectoryButton.addSelectionListener(fListener);
    //addControlAccessibleListener(fileWorkingDirectoryButton, group.getText() + " " + fileLocationButton.getText()); //$NON-NLS-1$
   
    variablesWorkingDirectoryButton = createPushButton(buttonComposite, ExternalToolsLaunchConfigurationMessages.ExternalToolsMainTab_32, null);
    variablesWorkingDirectoryButton.addSelectionListener(fListener);
    addControlAccessibleListener(variablesWorkingDirectoryButton, group.getText() + " " + variablesWorkingDirectoryButton.getText()); //$NON-NLS-1$
  }
 
  /**
   * Return the String to use as the label for the working directory field.
   * Subclasses may wish to override.
   */
  protected String getWorkingDirectoryLabel() {
    return ExternalToolsLaunchConfigurationMessages.ExternalToolsMainTab_Working__Directory__5;
  }

  /*
   * Fix for Bug 60163 Accessibility: New Builder Dialog missing object info for textInput controls
   */
  public void addControlAccessibleListener(Control control, String controlName) {
    //strip mnemonic (&)
    String[] strs = controlName.split("&"); //$NON-NLS-1$
    StringBuffer stripped = new StringBuffer();
    for (int i = 0; i < strs.length; i++) {
      stripped.append(strs[i]);
    }
    control.getAccessible().addAccessibleListener(new ControlAccessibleListener(stripped.toString()));
  }
 
  private class ControlAccessibleListener extends AccessibleAdapter {
    private String controlName;
    ControlAccessibleListener(String name) {
      controlName = name;
    }
    public void getName(AccessibleEvent e) {
      e.result = controlName;
    }
   
  }
 
  public boolean isValid(ILaunchConfiguration launchConfig) {
    setErrorMessage(null);
    setMessage(null);
    return validateWorkDirectory();
  }

  /**
   * Validates the content of the working directory field.
   */
  protected boolean validateWorkDirectory() {
    String dir = workDirectoryField.getText().trim();
    if (dir.length() <= 0) {
      return true;
    }

    String expandedDir= null;
    try {
      expandedDir= VariablesUtil.resolveValue(dir);
      if (expandedDir == null) { //a variable that needs to be resolved at runtime
        return true;
      }
    } catch (CoreException e) {
      setErrorMessage(e.getStatus().getMessage());
      return false;
    }
     
    File file = new File(expandedDir);
    if (!file.exists()) { // The directory does not exist.
      setErrorMessage(ExternalToolsLaunchConfigurationMessages.ExternalToolsMainTab_External_tool_working_directory_does_not_exist_or_is_invalid_21);
      return false;
    }
    if (!file.isDirectory()) {
      setErrorMessage(ExternalToolsLaunchConfigurationMessages.ExternalToolsMainTab_Not_a_directory);
      return false;
    }
    return true;
  }
 
  @Override
  public void setDefaults(ILaunchConfigurationWorkingCopy configuration) {
  }

  @Override
  public void initializeFrom(ILaunchConfiguration configuration) {
    try {
      fPrgmArgumentsText.setText((String)configuration.getAttribute(Constants.ATTR_PROGRAM_ARGUMENTS, ""));
      fNodeArgumentsText.setText((String)configuration.getAttribute(Constants.ATTR_NODE_ARGUMENTS, ""));
      workDirectoryField.setText((String)configuration.getAttribute(Constants.ATTR_WORKING_DIRECTORY, ""));
    } catch (CoreException e) {
      //e.printStackTrace();
      NodeclipseConsole.write(e.getLocalizedMessage()+"\n");
    }
  }

  @Override
  public void performApply(ILaunchConfigurationWorkingCopy configuration) {
    configuration.setAttribute(Constants.ATTR_PROGRAM_ARGUMENTS, getAttributeValueFrom(fPrgmArgumentsText));
    configuration.setAttribute(Constants.ATTR_NODE_ARGUMENTS, getAttributeValueFrom(fNodeArgumentsText));
    configuration.setAttribute(Constants.ATTR_WORKING_DIRECTORY, getAttributeValueFrom(workDirectoryField));
  }

  @Override
  public String getName() {
    return "Arguments";
  }

  /**
   * Returns the string in the text widget, or <code>null</code> if empty.
   *
   * @return text or <code>null</code>
   */
  protected String getAttributeValueFrom(Text text) {
    String content = text.getText().trim();
    if (content.length() > 0) {
      return content;
    }
    return null;
  }
}
TOP

Related Classes of org.nodeclipse.debug.launch.NodeArgumentsTab$WidgetListener

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.