/** * Copyright (c) 2005-2012 by Appcelerator, Inc. All Rights Reserved. * Licensed under the terms of the Eclipse Public License (EPL). * Please see the license.txt included with this distribution for details. * Any modifications to this file must keep this entire header intact. */ /* * Created on 14/08/2005 */ package org.python.pydev.debug.ui; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import org.eclipse.debug.ui.AbstractLaunchConfigurationTab; import org.eclipse.debug.ui.ILaunchConfigurationDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.python.pydev.debug.core.Constants; import org.python.pydev.debug.ui.blocks.MainModuleBlock; import org.python.pydev.debug.ui.blocks.ProjectBlock; import org.python.pydev.debug.ui.blocks.PythonPathBlock; import org.python.pydev.plugin.PydevPlugin; /** * Tab where user chooses project and Python module for launch * * <p> * Also show PYTHONPATH information * </p> * * TODO: Fix code completion job scheduling problem with this tab. * Show progress dialog when ASTManager and thus PYTHONPATH information * is not yet available. * * @author Mikko Ohtamaa */ public class MainModuleTab extends AbstractLaunchConfigurationTab { // Widget blocks public final ProjectBlock fProjectBlock; public final MainModuleBlock fMainModuleBlock; public final PythonPathBlock fPythonPathBlock; public MainModuleTab() { fProjectBlock = new ProjectBlock(); fMainModuleBlock = new MainModuleBlock(); fPythonPathBlock = new PythonPathBlock(); } /* * (non-Javadoc) * @see org.eclipse.debug.ui.ILaunchConfigurationTab#createControl(org.eclipse.swt.widgets.Composite) */ @Override public void createControl(Composite parent) { Composite composite = new Composite(parent, SWT.NONE); setControl(composite); GridLayout gridLayout = new GridLayout(); composite.setLayout(gridLayout); fProjectBlock.createControl(composite); fMainModuleBlock.createControl(composite); fPythonPathBlock.createControl(composite); // Add a modify listener, that updates the module block // when the selected project changes fProjectBlock.addModifyListener(fMainModuleBlock.getProjectModifyListener()); } /* * (non-Javadoc) * @see org.eclipse.debug.ui.ILaunchConfigurationTab#setDefaults(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy) */ @Override public void setDefaults(ILaunchConfigurationWorkingCopy configuration) { // No defaults to set } /* * (non-Javadoc) * @see org.eclipse.debug.ui.ILaunchConfigurationTab#initializeFrom(org.eclipse.debug.core.ILaunchConfiguration) */ @Override public void initializeFrom(ILaunchConfiguration configuration) { fProjectBlock.initializeFrom(configuration); fMainModuleBlock.initializeFrom(configuration); fPythonPathBlock.initializeFrom(configuration); } /* * (non-Javadoc) * @see org.eclipse.debug.ui.ILaunchConfigurationTab#performApply(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy) */ @Override public void performApply(ILaunchConfigurationWorkingCopy configuration) { fProjectBlock.performApply(configuration); fMainModuleBlock.performApply(configuration); fPythonPathBlock.performApply(configuration); } /* * (non-Javadoc) * @see org.eclipse.debug.ui.AbstractLaunchConfigurationTab#setLaunchConfigurationDialog(org.eclipse.debug.ui.ILaunchConfigurationDialog) */ @Override public void setLaunchConfigurationDialog(ILaunchConfigurationDialog dialog) { super.setLaunchConfigurationDialog(dialog); fProjectBlock.setLaunchConfigurationDialog(dialog); fMainModuleBlock.setLaunchConfigurationDialog(dialog); fPythonPathBlock.setLaunchConfigurationDialog(dialog); } /* * (non-Javadoc) * @see org.eclipse.debug.ui.AbstractLaunchConfigurationTab#getErrorMessage() */ @Override public String getErrorMessage() { String result = super.getErrorMessage(); if (result == null) { result = fProjectBlock.getErrorMessage(); } if (result == null) { result = fMainModuleBlock.getErrorMessage(); } if (result == null) { result = fPythonPathBlock.getErrorMessage(); } return result; } /* * (non-Javadoc) * @see org.eclipse.debug.ui.AbstractLaunchConfigurationTab#getMessage() */ @Override public String getMessage() { String result = super.getMessage(); if (result == null) { result = fProjectBlock.getMessage(); } if (result == null) { result = fMainModuleBlock.getMessage(); } if (result == null) { result = fPythonPathBlock.getMessage(); } return result; } /* * (non-Javadoc) * @see org.eclipse.debug.ui.AbstractLaunchConfigurationTab#isValid(org.eclipse.debug.core.ILaunchConfiguration) */ @Override public boolean isValid(ILaunchConfiguration launchConfig) { boolean result = super.isValid(launchConfig); if (result) { result = fProjectBlock.isValid(launchConfig); } if (result) { result = fMainModuleBlock.isValid(launchConfig); } if (result) { result = fPythonPathBlock.isValid(launchConfig); } return result; } /* * (non-Javadoc) * @see org.eclipse.debug.ui.ILaunchConfigurationTab#getName() */ @Override public String getName() { return "Main"; } /* * (non-Javadoc) * @see org.eclipse.debug.ui.AbstractLaunchConfigurationTab#getImage() */ @Override public Image getImage() { return PydevPlugin.getImageCache().get(Constants.MAIN_ICON); } }