| /******************************************************************************* |
| * Copyright (c) 2009, 2014 Xored Software Inc and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Xored Software Inc - initial API and implementation and/or initial documentation |
| *******************************************************************************/ |
| package org.eclipse.rcptt.internal.launching.remote.ui; |
| |
| import org.eclipse.core.runtime.IProgressMonitor; |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.core.runtime.Status; |
| import org.eclipse.core.runtime.jobs.Job; |
| import org.eclipse.debug.core.ILaunchConfiguration; |
| import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; |
| import org.eclipse.debug.ui.AbstractLaunchConfigurationTab; |
| import org.eclipse.jface.dialogs.Dialog; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.custom.ScrolledComposite; |
| import org.eclipse.swt.graphics.Point; |
| import org.eclipse.swt.graphics.Rectangle; |
| import org.eclipse.swt.layout.GridData; |
| import org.eclipse.swt.layout.GridLayout; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Control; |
| import org.eclipse.swt.widgets.Event; |
| import org.eclipse.swt.widgets.Listener; |
| |
| public class RemoteAUTMainTab extends AbstractLaunchConfigurationTab { |
| |
| private AUTArgumentsBlock fLocationBlock; |
| // private ILaunchConfigurationTab[] tabs; |
| // private RemoteTabGroup group; |
| private final Job validateJob = new Job("Connection validate job") { |
| { |
| setSystem(true); |
| } |
| @Override |
| protected IStatus run(IProgressMonitor monitor) { |
| String lastMessage = getErrorMessage(); |
| String msg = fLocationBlock.validate(); |
| if ((msg == null && lastMessage == null) || msg != null && msg.equals(lastMessage)) { |
| return Status.OK_STATUS; |
| } |
| setErrorMessage(msg); |
| final Control control = RemoteAUTMainTab.super.getControl(); |
| if (control.isDisposed()) { |
| return Status.OK_STATUS; |
| } |
| control.getDisplay().asyncExec(new Runnable() { |
| @Override |
| public void run() { |
| if (!control.isDisposed()) { |
| updateLaunchConfigurationDialog(); |
| } |
| } |
| }); |
| return Status.OK_STATUS; |
| } |
| |
| }; |
| |
| |
| public RemoteAUTMainTab() { |
| super(); |
| createLocationBlock(); |
| } |
| |
| @Override |
| protected long getUpdateJobDelay() { |
| return 200; |
| } |
| |
| @Override |
| protected void updateLaunchConfigurationDialog() { |
| validateJob.cancel(); |
| validateJob.schedule(); |
| super.updateLaunchConfigurationDialog(); |
| } |
| |
| private void createLocationBlock() { |
| fLocationBlock = new AUTArgumentsBlock(this); |
| } |
| |
| @Override |
| public void createControl(Composite parent) { |
| final ScrolledComposite scrollContainer = new ScrolledComposite(parent, |
| SWT.V_SCROLL); |
| scrollContainer.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); |
| |
| Composite composite = new Composite(scrollContainer, SWT.NONE); |
| scrollContainer.setContent(composite); |
| composite.setLayout(new GridLayout()); |
| composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); |
| |
| fLocationBlock.createControl(composite); |
| |
| // Add listener for each control to recalculate scroll bar when it is |
| // entered. |
| // This results in scrollbar scrolling when user tabs to a control that |
| // is not in the field of view. |
| Listener listener = new Listener() { |
| @Override |
| public void handleEvent(Event e) { |
| Control child = (Control) e.widget; |
| Rectangle bounds = child.getBounds(); |
| Rectangle area = scrollContainer.getClientArea(); |
| Point origin = scrollContainer.getOrigin(); |
| if (origin.x > bounds.x) |
| origin.x = Math.max(0, bounds.x); |
| if (origin.y > bounds.y) |
| origin.y = Math.max(0, bounds.y); |
| if (origin.x + area.width < bounds.x + bounds.width) |
| origin.x = Math |
| .max(0, bounds.x + bounds.width - area.width); |
| if (origin.y + area.height < bounds.y + bounds.height) |
| origin.y = Math.max(0, bounds.y + bounds.height |
| - area.height); |
| scrollContainer.setOrigin(origin); |
| } |
| }; |
| Control[] controls = composite.getChildren(); |
| for (int i = 0; i < controls.length; i++) |
| controls[i].addListener(SWT.Activate, listener); |
| |
| Dialog.applyDialogFont(composite); |
| composite.setSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT)); |
| scrollContainer.setExpandHorizontal(true); |
| setControl(scrollContainer); |
| } |
| |
| @Override |
| public void initializeFrom(ILaunchConfiguration config) { |
| fLocationBlock.initializeFrom(config); |
| } |
| |
| @Override |
| public void performApply(ILaunchConfigurationWorkingCopy config) { |
| fLocationBlock.performApply(config); |
| } |
| |
| @Override |
| public void setDefaults(ILaunchConfigurationWorkingCopy config) { |
| fLocationBlock.setDefaults(config); |
| } |
| |
| @Override |
| public String getName() { |
| return "Remote AUT Launch configuration"; |
| } |
| } |