[Esbox-commits] r2250 - in branches/work_Ed: org.maemo.esbox.maemosdk.ui/src/org/maemo/esbox/internal/api/maemosdk/ui/preferences org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/wizard org.maemo.esbox.scratchbox.sb2/src/org/maemo/esbox/internal/scratchbox/sb2/ui/wizard org.maemo.esbox.vm/src/org/maemo/esbox/internal/api/vm/core org.maemo.esbox.vm/src/org/maemo/esbox/internal/vm org.maemo.esbox.vm.qemu/src/org/maemo/esbox/internal/vm/qemu org.maemo.esbox.vm.virtualbox/src/org/maemo/esbox/internal/vm/virtualbox org.maemo.esbox.vm.vmware/src/org/maemo/esbox/internal/vm/vmware org.maemo.esbox.vm.vmware/src/org/maemo/esbox/internal/vm/vmware/ui/wizards
eswartz at garage.maemo.org
eswartz at garage.maemo.org
Thu Oct 1 17:39:01 EEST 2009
Author: eswartz
Date: 2009-10-01 17:38:54 +0300 (Thu, 01 Oct 2009)
New Revision: 2250
Added:
branches/work_Ed/org.maemo.esbox.maemosdk.ui/src/org/maemo/esbox/internal/api/maemosdk/ui/preferences/MachineShareContentProvider.java
branches/work_Ed/org.maemo.esbox.maemosdk.ui/src/org/maemo/esbox/internal/api/maemosdk/ui/preferences/SelectMachineShareDialog.java
Modified:
branches/work_Ed/org.maemo.esbox.maemosdk.ui/src/org/maemo/esbox/internal/api/maemosdk/ui/preferences/SharedFolderTableViewer.java
branches/work_Ed/org.maemo.esbox.maemosdk.ui/src/org/maemo/esbox/internal/api/maemosdk/ui/preferences/SharedFoldersPreferencePage.java
branches/work_Ed/org.maemo.esbox.maemosdk.ui/src/org/maemo/esbox/internal/api/maemosdk/ui/preferences/ValidateMachineRunner.java
branches/work_Ed/org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/wizard/Scratchbox1SDKInstallerSelectionWizardPage.java
branches/work_Ed/org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/wizard/Scratchbox1TargetInstallerSelectionWizardPage.java
branches/work_Ed/org.maemo.esbox.scratchbox.sb2/src/org/maemo/esbox/internal/scratchbox/sb2/ui/wizard/TargetWizardRootstrapSb2Page.java
branches/work_Ed/org.maemo.esbox.vm.qemu/src/org/maemo/esbox/internal/vm/qemu/QemuMachineController.java
branches/work_Ed/org.maemo.esbox.vm.virtualbox/src/org/maemo/esbox/internal/vm/virtualbox/VirtualBoxMachineController.java
branches/work_Ed/org.maemo.esbox.vm.vmware/src/org/maemo/esbox/internal/vm/vmware/VMwareMachineController.java
branches/work_Ed/org.maemo.esbox.vm.vmware/src/org/maemo/esbox/internal/vm/vmware/ui/wizards/MaemoSDKVMSelectionWizardPage.java
branches/work_Ed/org.maemo.esbox.vm/src/org/maemo/esbox/internal/api/vm/core/BaseVirtualBuildMachine.java
branches/work_Ed/org.maemo.esbox.vm/src/org/maemo/esbox/internal/api/vm/core/BaseVirtualMachineController.java
branches/work_Ed/org.maemo.esbox.vm/src/org/maemo/esbox/internal/vm/ManualVirtualMachineController.java
Log:
Checkpoint for better shared folder behavior
-- cache IMachine mount points
-- allow for refreshing filesystem access (to recheck mounts and flush other caches)
-- rework SharedFolderManager to speak in terms of a validation phase and a mount phase (allowing for validation state to be reported, e.g., in UI)
-- factor out ISharedFolderHandler, allowing for other handlers in the future
-- check shared filesystems via mounts before testing the directory directly -- this avoids a really long delay when using bridged networking and shares are invalid due to the host IP changing
-- again remove the filesystem mount check from the build machine #getFileSystemAccess(). Almost always this is called too soon and can lead to annoying password prompts when they are not needed.
Also:
-- make LazyLoadingThreadTableContentProvider supply a method to attach the label listener, reducing duplicate code
-- reduce the amount of times we scan VM state, providing huge speedup in VMware
Added: branches/work_Ed/org.maemo.esbox.maemosdk.ui/src/org/maemo/esbox/internal/api/maemosdk/ui/preferences/MachineShareContentProvider.java
===================================================================
--- branches/work_Ed/org.maemo.esbox.maemosdk.ui/src/org/maemo/esbox/internal/api/maemosdk/ui/preferences/MachineShareContentProvider.java (rev 0)
+++ branches/work_Ed/org.maemo.esbox.maemosdk.ui/src/org/maemo/esbox/internal/api/maemosdk/ui/preferences/MachineShareContentProvider.java 2009-10-01 14:38:54 UTC (rev 2250)
@@ -0,0 +1,138 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Nokia Corporation
+ * 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:
+ * Ed Swartz (Nokia) - initial API and implementation
+ *******************************************************************************/
+
+package org.maemo.esbox.internal.api.maemosdk.ui.preferences;
+
+import java.util.Arrays;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.SubProgressMonitor;
+import org.eclipse.swt.graphics.Image;
+import org.maemo.mica.common.core.MicaException;
+import org.maemo.mica.common.core.machine.IMachine;
+import org.maemo.mica.common.core.machine.MachineUtils;
+import org.maemo.mica.internal.api.common.core.filesystem.SambaUtils;
+import org.maemo.mica.internal.api.common.core.filesystem.SambaUtils.MachineShare;
+import org.maemo.mica.internal.api.common.ui.LazyLoadingThreadTableContentProvider;
+
+/**
+ * Fetch the exposed shares from a machine.
+ * @author eswartz
+ *
+ */
+public class MachineShareContentProvider extends
+ LazyLoadingThreadTableContentProvider {
+
+ final static public int COLUMN_SHARENAME = 0;
+ final static public int COLUMN_PATH = 1;
+ final static public int COLUMN_COMMENT = 2;
+
+
+ protected class MachineShareFetchThread extends Thread {
+ protected Object newInput;
+
+ public MachineShareFetchThread(Object newInput) {
+ this.newInput = newInput;
+ }
+
+ protected MachineShare[] doScanFromMachine(final IMachine machine) throws MicaException {
+ IProgressMonitor monitor = new NullProgressMonitor();
+ MachineUtils.acquireMachine(machine, new SubProgressMonitor(monitor, 7));
+ if (monitor.isCanceled() || isInterrupted())
+ return null;
+
+ return SambaUtils.getMachineShares(machine, new SubProgressMonitor(monitor, 3));
+ }
+
+ public void run() {
+ IMachine machine = (IMachine) newInput;
+ try {
+ MachineShare[] shares = doScanFromMachine(machine);
+ synchronized (contents) {
+ contents.clear();
+ if (shares != null) {
+ contents.addAll(Arrays.asList(shares));
+ } else {
+ contents.add("Failed to find any shared folders on " + machine.getName());
+ }
+ }
+ } catch (MicaException e) {
+ synchronized (contents) {
+ contents.clear();
+ contents.add("Failed to fetch shared folders from " + machine.getName() + ": " + e.getMessage());
+ }
+ }
+ fetchThread = null;
+ doFireContentChanged();
+ }
+
+ }
+
+ /* (non-Javadoc)
+ * @see org.maemo.mica.internal.api.common.ui.LazyLoadingThreadTableContentProvider#createContentFetchThread(java.lang.Object)
+ */
+ @Override
+ protected Thread createContentFetchThread(Object newInput) {
+ return new MachineShareFetchThread(newInput);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
+ */
+ public Object[] getChildren(Object parentElement) {
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
+ */
+ public Object getParent(Object element) {
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
+ */
+ public boolean hasChildren(Object element) {
+ return false;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int)
+ */
+ public Image getColumnImage(Object element, int columnIndex) {
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int)
+ */
+ public String getColumnText(Object element, int columnIndex) {
+ if (element == LOADING_LABEL)
+ return super.getColumnText(element, columnIndex);
+
+ if (!(element instanceof MachineShare))
+ return null;
+
+ MachineShare share = (MachineShare) element;
+ switch (columnIndex) {
+ case COLUMN_SHARENAME:
+ return share.getShareName();
+ case COLUMN_PATH:
+ return share.getPath();
+ case COLUMN_COMMENT:
+ return share.getComment();
+ }
+ return null;
+ }
+
+}
Property changes on: branches/work_Ed/org.maemo.esbox.maemosdk.ui/src/org/maemo/esbox/internal/api/maemosdk/ui/preferences/MachineShareContentProvider.java
___________________________________________________________________
Name: svn:eol-style
+ native
Added: branches/work_Ed/org.maemo.esbox.maemosdk.ui/src/org/maemo/esbox/internal/api/maemosdk/ui/preferences/SelectMachineShareDialog.java
===================================================================
--- branches/work_Ed/org.maemo.esbox.maemosdk.ui/src/org/maemo/esbox/internal/api/maemosdk/ui/preferences/SelectMachineShareDialog.java (rev 0)
+++ branches/work_Ed/org.maemo.esbox.maemosdk.ui/src/org/maemo/esbox/internal/api/maemosdk/ui/preferences/SelectMachineShareDialog.java 2009-10-01 14:38:54 UTC (rev 2250)
@@ -0,0 +1,141 @@
+package org.maemo.esbox.internal.api.maemosdk.ui.preferences;
+
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.layout.GridDataFactory;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.maemo.mica.common.core.machine.IMachine;
+import org.maemo.mica.internal.api.common.core.filesystem.SambaUtils.MachineShare;
+
+/**
+ * This dialog lets the user select a share from a machine and configure the mount
+ * location as well.
+ * @author eswartz
+ *
+ */
+public final class SelectMachineShareDialog extends Dialog {
+
+ private MachineShare selectedShare;
+ private TableViewer viewer;
+ private final IMachine machine;
+
+ public SelectMachineShareDialog(Shell shell, IMachine machine) {
+ super(shell);
+ this.machine = machine;
+ setShellStyle(getShellStyle() | SWT.RESIZE);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.dialogs.Dialog#getInitialSize()
+ */
+ @Override
+ protected Point getInitialSize() {
+ return new Point(400, 300);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
+ */
+ @Override
+ protected void configureShell(Shell newShell) {
+ super.configureShell(newShell);
+ newShell.setText("Configure a share");
+ }
+ @Override
+ protected Control createDialogArea(Composite parent) {
+ Composite composite = (Composite) super.createDialogArea(parent);
+
+ Label label;
+
+ //label = new Label(composite, SWT.WRAP);
+ //GridDataFactory.fillDefaults().applyTo(label);
+ //label.setText(labelText);
+ //////
+
+ label = new Label(composite, SWT.WRAP);
+ GridDataFactory.fillDefaults().applyTo(label);
+ label.setText("Select one of the shares:");
+
+ viewer = new TableViewer(composite, SWT.READ_ONLY | SWT.FULL_SELECTION | SWT.BORDER);
+ Table table = viewer.getTable();
+ GridDataFactory.fillDefaults().grab(true, true).applyTo(table);
+
+ table.setHeaderVisible(true);
+ table.setLinesVisible(true);
+
+ TableColumn column;
+
+ column = new TableColumn(table, SWT.LEFT);
+ column.setText("Share name");
+ column = new TableColumn(table, SWT.LEFT);
+ column.setText("Path");
+ column = new TableColumn(table, SWT.LEFT);
+ column.setText("Comment");
+
+ MachineShareContentProvider provider = new MachineShareContentProvider();
+ viewer.setContentProvider(provider);
+ viewer.setLabelProvider(provider);
+ provider.attachContentChangedListener(viewer);
+
+ viewer.addDoubleClickListener(new IDoubleClickListener() {
+
+ public void doubleClick(DoubleClickEvent event) {
+ Object sel = ((IStructuredSelection) event.getSelection()).getFirstElement();
+ if (sel instanceof MachineShare) {
+ selectedShare = (MachineShare) sel;
+ close();
+ }
+ }
+ });
+
+ viewer.addSelectionChangedListener(new ISelectionChangedListener() {
+
+ public void selectionChanged(SelectionChangedEvent event) {
+ Object sel = ((IStructuredSelection) event.getSelection()).getFirstElement();
+ if (sel instanceof MachineShare) {
+ selectedShare = (MachineShare) sel;
+ validate();
+ }
+ }
+
+ });
+ viewer.setInput(machine);
+
+ table.pack();
+ for (TableColumn columnx : table.getColumns())
+ columnx.pack();
+
+ return composite;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
+ */
+ @Override
+ protected void createButtonsForButtonBar(Composite parent) {
+ super.createButtonsForButtonBar(parent);
+ validate();
+ }
+ protected void validate() {
+ Button button = getButton(IDialogConstants.OK_ID);
+ button.setEnabled(selectedShare != null);
+ }
+
+ public MachineShare getShare() {
+ return selectedShare;
+ }
+}
\ No newline at end of file
Property changes on: branches/work_Ed/org.maemo.esbox.maemosdk.ui/src/org/maemo/esbox/internal/api/maemosdk/ui/preferences/SelectMachineShareDialog.java
___________________________________________________________________
Name: svn:eol-style
+ native
Modified: branches/work_Ed/org.maemo.esbox.maemosdk.ui/src/org/maemo/esbox/internal/api/maemosdk/ui/preferences/SharedFolderTableViewer.java
===================================================================
--- branches/work_Ed/org.maemo.esbox.maemosdk.ui/src/org/maemo/esbox/internal/api/maemosdk/ui/preferences/SharedFolderTableViewer.java 2009-09-30 14:10:35 UTC (rev 2249)
+++ branches/work_Ed/org.maemo.esbox.maemosdk.ui/src/org/maemo/esbox/internal/api/maemosdk/ui/preferences/SharedFolderTableViewer.java 2009-10-01 14:38:54 UTC (rev 2250)
@@ -11,7 +11,9 @@
package org.maemo.esbox.internal.api.maemosdk.ui.preferences;
+import java.util.ArrayList;
import java.util.Collection;
+import java.util.List;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.viewers.BaseLabelProvider;
@@ -54,6 +56,8 @@
private Collection<ISharedFolder> mappings;
private TreeViewerColumn contentViewerColumn;
+ private static boolean SHOW_SHARE_TYPE = false;
+
static abstract class FieldItem {
String label;
ISharedFolder folder;
@@ -124,63 +128,6 @@
} else {
cellEditor = new TextCellEditor(tree);
}
-
- /* none of this stuff works... :p The validator is called only
- * less than half the time, and the tooltip doesn't show any text, ever
- cellEditor.setValidator(new ICellEditorValidator() {
-
- public String isValid(Object value) {
- IPath path = new Path(value.toString());
- if (!path.isAbsolute())
- return "Path must be absolute";
- if (isHostPath(folder) && !path.toFile().exists())
- return "Folder does not exist on host";
- return null;
- }
-
- });
- cellEditor.addListener(new ICellEditorListener() {
- ToolTip errorTip = null;
-
- public void applyEditorValue() {
- if (errorTip != null)
- errorTip.dispose();
- errorTip = null;
- }
-
- public void cancelEditor() {
- if (errorTip != null)
- errorTip.dispose();
- errorTip = null;
- }
-
- public void editorValueChanged(boolean oldValidState,
- final boolean newValidState) {
- Display.getDefault().asyncExec(new Runnable() {
-
- public void run() {
- if (cellEditor.getControl().isDisposed())
- return;
- // the "newValidState" seems to be bogus; we need to look at the message
- if (errorTip == null && cellEditor.getErrorMessage() != null) {
- errorTip = new ToolTip(cellEditor.getControl().getShell(), SWT.ICON_ERROR);
- errorTip.setLocation(cellEditor.getControl().toDisplay(cellEditor.getControl().getLocation()));
- errorTip.setVisible(true);
- }
- if (cellEditor.getErrorMessage() != null)
- errorTip.setText(cellEditor.getErrorMessage());
- else {
- if (errorTip != null)
- errorTip.dispose();
- errorTip = null;
- }
- }
-
- });
- }
-
- });
- */
return cellEditor;
}
}
@@ -342,6 +289,40 @@
*/
static class SharedFolderContentProvider implements ITreeContentProvider {
+ private Object[] getFields(ISharedFolder folder) {
+ List<Object> fieldList = new ArrayList();
+
+ fieldList.add(new SharePathFieldItem(
+ "Share path",
+ "The full path of the shared folder.",
+ folder));
+ fieldList.add(new HostProvidedFieldItem(
+ "Local share?",
+ "Tells whether this machine exports the share (yes), or the virtual machine exports it (no).\n\nThe other machine will mount the share.",
+ folder));
+ fieldList.add(new MountPathFieldItem(
+ "Mount path",
+ "The full path where the share will be mounted.",
+ folder));
+ fieldList.add(new ShareNameFieldItem(
+ "Share name",
+ "The name of the share (for SMB).",
+ folder));
+ if (SHOW_SHARE_TYPE) {
+ fieldList.add(new StaticFieldItem(
+ "Share type",
+ "The protocol by which the share is provided.",
+ folder));
+ }
+ fieldList.add(new AutoMountFieldItem(
+ "Auto mount?",
+ "If yes, attempt to mount this share when the virtual machine is started.\n\n(NOTE: ESbox may not be able to mount all folders automatically.)\n\nIf not set, make use of this share mapping for path conversion purposes only.",
+ folder));
+
+ return (Object[]) fieldList.toArray(new Object[fieldList.size()]);
+
+ }
+
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
*/
@@ -355,32 +336,7 @@
public Object[] getChildren(Object parentElement) {
if (parentElement instanceof ISharedFolder) {
ISharedFolder folder = (ISharedFolder) parentElement;
- return new Object[] {
- new SharePathFieldItem(
- "Share path",
- "The full path of the shared folder.",
- folder),
- new HostProvidedFieldItem(
- "Local share?",
- "Tells whether this machine exports the share (yes), or the virtual machine exports it (no).\n\nThe other machine will mount the share.",
- folder),
- new MountPathFieldItem(
- "Mount path",
- "The full path where the share will be mounted.",
- folder),
- new ShareNameFieldItem(
- "Share name",
- "The name of the share (for SMB).",
- folder),
- new StaticFieldItem(
- "Share type",
- "The protocol by which the share is provided.",
- folder),
- new AutoMountFieldItem(
- "Auto connect?",
- "If yes, attempt to mount this share when the virtual machine is started.\n\nOtherwise, make use of this share mapping for path conversion purposes only.",
- folder),
- };
+ return getFields(folder);
}
return null;
}
Modified: branches/work_Ed/org.maemo.esbox.maemosdk.ui/src/org/maemo/esbox/internal/api/maemosdk/ui/preferences/SharedFoldersPreferencePage.java
===================================================================
--- branches/work_Ed/org.maemo.esbox.maemosdk.ui/src/org/maemo/esbox/internal/api/maemosdk/ui/preferences/SharedFoldersPreferencePage.java 2009-09-30 14:10:35 UTC (rev 2249)
+++ branches/work_Ed/org.maemo.esbox.maemosdk.ui/src/org/maemo/esbox/internal/api/maemosdk/ui/preferences/SharedFoldersPreferencePage.java 2009-10-01 14:38:54 UTC (rev 2250)
@@ -11,42 +11,40 @@
package org.maemo.esbox.internal.api.maemosdk.ui.preferences;
+import java.text.MessageFormat;
+import java.util.List;
+
import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.SubProgressMonitor;
-import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.dialogs.ProgressMonitorDialog;
-import org.eclipse.jface.layout.GridDataFactory;
-import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.viewers.*;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.events.KeyAdapter;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.*;
-import org.maemo.esbox.internal.maemosdk.ui.UIActivator;
-import org.maemo.mica.common.core.MicaException;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Tree;
import org.maemo.mica.common.core.filesystem.EShareType;
import org.maemo.mica.common.core.filesystem.ISharedFolder;
import org.maemo.mica.common.core.machine.IMachine;
import org.maemo.mica.common.core.machine.MachineRegistry;
-import org.maemo.mica.common.core.machine.MachineUtils;
import org.maemo.mica.common.ui.preferences.BaseComposablePreferencePage;
import org.maemo.mica.internal.api.common.core.filesystem.BaseSharedFolder;
-import org.maemo.mica.internal.api.common.core.filesystem.SambaSharedFolderHandler;
import org.maemo.mica.internal.api.common.core.filesystem.SharedFolderPreferenceConverter;
-import org.maemo.mica.internal.api.common.core.filesystem.SambaSharedFolderHandler.MachineShare;
+import org.maemo.mica.internal.api.common.core.filesystem.SambaUtils.MachineShare;
+import org.maemo.mica.internal.api.common.core.ui.GridLayoutWrappedTextUtils;
-import java.lang.reflect.InvocationTargetException;
-import java.text.MessageFormat;
-import java.util.List;
-
/**
* This page is included inside a BuildMachineSelectionPreferencePage
* to configure the shared folder mappings between host and target.
@@ -155,11 +153,15 @@
composite.setLayoutData(layoutData);
// left side is the table
- Label label = new Label(composite, SWT.NONE);
- label.setText("Shared folder mappings:");
+ Label label = new Label(composite, SWT.WRAP);
+ label.setText(
+ "ESbox needs to create projects on the host, in a shared folder visible to the VM. "+
+ "For C/C++ indexing and C++ hover help, ESbox must be able to see SDK contents from a shared folder in the VM.\n\n"+
+ "Configure the shared folders to use:");
+
GridData labelLayout = new GridData(SWT.LEFT, SWT.TOP, true, false);
labelLayout.horizontalSpan = 2;
- label.setLayoutData(labelLayout);
+ GridLayoutWrappedTextUtils.setupLabel(parent, label, labelLayout);
treeViewer = new SharedFolderTableViewer(composite, SWT.BORDER);
treeViewer.addEditors();
@@ -178,7 +180,7 @@
addButton = new Button(buttonBox, SWT.PUSH);
addButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
- addButton.setText("&Add");
+ addButton.setText("&New");
addButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
@@ -301,196 +303,11 @@
addNewShare(share);
}
- protected MachineShare[] doScanFromMachine(final IMachine machine) {
- ProgressMonitorDialog dialog = new ProgressMonitorDialog(getShell());
- final MachineShare[][] shareArrays = { null };
-
- try {
- dialog.run(true, true, new IRunnableWithProgress() {
- public void run(IProgressMonitor monitor)
- throws InvocationTargetException, InterruptedException {
- monitor.beginTask("", 10);
-
- try {
- MachineUtils.acquireMachine(machine, new SubProgressMonitor(monitor, 7));
- } catch (MicaException e) {
- throw new InvocationTargetException(e);
- }
- if (monitor.isCanceled())
- return;
-
- SambaSharedFolderHandler handler = new SambaSharedFolderHandler();
- MachineShare[] shares;
- try {
- shares = handler.getMachineShares(machine, new SubProgressMonitor(monitor, 3));
- shareArrays[0] = shares;
- } catch (MicaException e) {
- throw new InvocationTargetException(e);
- }
- }
-
- });
- } catch (InvocationTargetException e) {
- UIActivator.getErrorLogger().logAndShowError("Unexpected error scanning shares", e);
- } catch (InterruptedException e) {
- }
-
- return shareArrays[0];
- }
- /**
- * @author eswartz
- *
- */
- public static final class SelectShareDialog extends Dialog {
- final static int COLUMN_SHARENAME = 0;
- final static int COLUMN_PATH = 1;
- final static int COLUMN_COMMENT = 2;
-
- public static final class MachineShareTableLabelProvider extends
- BaseLabelProvider implements ITableLabelProvider {
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int)
- */
- public Image getColumnImage(Object element, int columnIndex) {
- return null;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int)
- */
- public String getColumnText(Object element, int columnIndex) {
- if (!(element instanceof MachineShare))
- return null;
-
- MachineShare share = (MachineShare) element;
- switch (columnIndex) {
- case COLUMN_SHARENAME:
- return share.getShareName();
- case COLUMN_PATH:
- return share.getPath();
- case COLUMN_COMMENT:
- return share.getComment();
- }
- return null;
- }
- }
-
- private MachineShare selectedShare;
- private TableViewer viewer;
- private final MachineShare[] shares;
-
- public SelectShareDialog(Shell shell, MachineShare[] shares) {
- super(shell);
- this.shares = shares;
- setShellStyle(getShellStyle() | SWT.RESIZE);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.dialogs.Dialog#getInitialSize()
- */
- @Override
- protected Point getInitialSize() {
- return new Point(300, 200);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
- */
- @Override
- protected void configureShell(Shell newShell) {
- super.configureShell(newShell);
- newShell.setText("Select a share");
- }
- @Override
- protected Control createDialogArea(Composite parent) {
- Composite composite = (Composite) super.createDialogArea(parent);
-
- Label label = new Label(composite, SWT.WRAP);
- GridDataFactory.fillDefaults().applyTo(label);
- label.setText("Select one of the shares:");
-
- viewer = new TableViewer(composite, SWT.READ_ONLY | SWT.FULL_SELECTION | SWT.BORDER);
- Table table = viewer.getTable();
- GridDataFactory.fillDefaults().grab(true, true).applyTo(table);
-
- table.setHeaderVisible(true);
- table.setLinesVisible(true);
-
- TableColumn column;
-
- column = new TableColumn(table, SWT.LEFT);
- column.setText("Share name");
- column = new TableColumn(table, SWT.LEFT);
- column.setText("Path");
- column = new TableColumn(table, SWT.LEFT);
- column.setText("Comment");
-
- viewer.setContentProvider(new ArrayContentProvider());
- viewer.setLabelProvider(new MachineShareTableLabelProvider());
-
- viewer.addDoubleClickListener(new IDoubleClickListener() {
-
- public void doubleClick(DoubleClickEvent event) {
- Object sel = ((IStructuredSelection) event.getSelection()).getFirstElement();
- if (sel instanceof MachineShare) {
- selectedShare = (MachineShare) sel;
- close();
- }
- }
- });
-
- viewer.addSelectionChangedListener(new ISelectionChangedListener() {
-
- public void selectionChanged(SelectionChangedEvent event) {
- Object sel = ((IStructuredSelection) event.getSelection()).getFirstElement();
- if (sel instanceof MachineShare) {
- selectedShare = (MachineShare) sel;
- validate();
- }
- }
-
- });
- viewer.setInput(shares);
-
- table.pack();
- for (TableColumn columnx : table.getColumns())
- columnx.pack();
-
- return composite;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
- */
- @Override
- protected void createButtonsForButtonBar(Composite parent) {
- super.createButtonsForButtonBar(parent);
- validate();
- }
- protected void validate() {
- Button button = getButton(IDialogConstants.OK_ID);
- button.setEnabled(selectedShare != null);
- }
-
- public MachineShare getShare() {
- return selectedShare;
- }
- }
-
protected void doAddFromMachine(IMachine machine, boolean isLocal) {
- MachineShare[] shares = doScanFromMachine(machine);
+ SelectMachineShareDialog dialog = new SelectMachineShareDialog(getShell(), machine);
- if (shares == null || shares.length == 0) {
- MessageDialog.openInformation(getShell(), "No shares",
- "No shares are exposed on the machine.");
- return;
- }
-
- SelectShareDialog dialog = new SelectShareDialog(getShell(), shares);
-
int ret = dialog.open();
MachineShare share = dialog.getShare();
if (ret == IDialogConstants.OK_ID && share != null) {
Modified: branches/work_Ed/org.maemo.esbox.maemosdk.ui/src/org/maemo/esbox/internal/api/maemosdk/ui/preferences/ValidateMachineRunner.java
===================================================================
--- branches/work_Ed/org.maemo.esbox.maemosdk.ui/src/org/maemo/esbox/internal/api/maemosdk/ui/preferences/ValidateMachineRunner.java 2009-09-30 14:10:35 UTC (rev 2249)
+++ branches/work_Ed/org.maemo.esbox.maemosdk.ui/src/org/maemo/esbox/internal/api/maemosdk/ui/preferences/ValidateMachineRunner.java 2009-10-01 14:38:54 UTC (rev 2250)
@@ -38,6 +38,7 @@
import org.maemo.mica.common.core.filesystem.ISharedFilesystemProvider;
import org.maemo.mica.common.core.filesystem.ISharedFolder;
import org.maemo.mica.common.core.machine.IMachine;
+import org.maemo.mica.common.core.machine.MachineRegistry;
import org.maemo.mica.common.core.machine.MachineUtils;
import org.maemo.mica.common.core.process.CommandLineArguments;
import org.maemo.mica.common.core.process.IProcessLauncher;
@@ -208,6 +209,10 @@
* @return true for success
*/
private boolean testSharedFolders(IProgressMonitor monitor) {
+ // re-detect mounts each time
+ machine.getFileSystemAccess().refresh();
+ MachineRegistry.getInstance().getLocalMachine().getFileSystemAccess().refresh();
+
ISharedFilesystemProvider sharedFilesystemProvider = machine.getSharedFilesystemProvider();
if (sharedFilesystemProvider == null)
return true;
Modified: branches/work_Ed/org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/wizard/Scratchbox1SDKInstallerSelectionWizardPage.java
===================================================================
--- branches/work_Ed/org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/wizard/Scratchbox1SDKInstallerSelectionWizardPage.java 2009-09-30 14:10:35 UTC (rev 2249)
+++ branches/work_Ed/org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/wizard/Scratchbox1SDKInstallerSelectionWizardPage.java 2009-10-01 14:38:54 UTC (rev 2250)
@@ -133,22 +133,8 @@
sdkTable.setContentProvider(platformProvider);
sdkTable.setLabelProvider(platformProvider);
+ platformProvider.attachContentChangedListener(sdkTable);
- platformProvider.addListener(new ILabelProviderListener() {
-
- public void labelProviderChanged(LabelProviderChangedEvent event) {
- Display.getDefault().asyncExec(new Runnable() {
- public void run() {
- if (!sdkTable.getTable().isDisposed()) {
- for (TableColumn column : sdkTable.getTable().getColumns()) {
- column.pack();
- }
- }
- }
- });
- }
- });
-
Table table = sdkTable.getTable();
GridDataFactory.fillDefaults().grab(true, true).span(2, 1).applyTo(table);
Modified: branches/work_Ed/org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/wizard/Scratchbox1TargetInstallerSelectionWizardPage.java
===================================================================
--- branches/work_Ed/org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/wizard/Scratchbox1TargetInstallerSelectionWizardPage.java 2009-09-30 14:10:35 UTC (rev 2249)
+++ branches/work_Ed/org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/wizard/Scratchbox1TargetInstallerSelectionWizardPage.java 2009-10-01 14:38:54 UTC (rev 2250)
@@ -23,12 +23,10 @@
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ComboViewer;
-import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.IOpenListener;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.LabelProviderChangedEvent;
import org.eclipse.jface.viewers.OpenEvent;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
@@ -219,23 +217,8 @@
platformTable.setContentProvider(platformProvider);
platformTable.setLabelProvider(platformProvider);
+ platformProvider.attachContentChangedListener(platformTable);
- platformProvider.addListener(new ILabelProviderListener() {
-
- public void labelProviderChanged(LabelProviderChangedEvent event) {
- Display.getDefault().asyncExec(new Runnable() {
- public void run() {
- if (!platformTable.getTable().isDisposed()) {
- for (TableColumn column : platformTable.getTable().getColumns()) {
- column.pack();
- }
- }
- }
- });
- }
- });
-
-
Table table = platformTable.getTable();
GridDataFactory.fillDefaults().grab(true, true).span(2,1).applyTo(table);
Modified: branches/work_Ed/org.maemo.esbox.scratchbox.sb2/src/org/maemo/esbox/internal/scratchbox/sb2/ui/wizard/TargetWizardRootstrapSb2Page.java
===================================================================
--- branches/work_Ed/org.maemo.esbox.scratchbox.sb2/src/org/maemo/esbox/internal/scratchbox/sb2/ui/wizard/TargetWizardRootstrapSb2Page.java 2009-09-30 14:10:35 UTC (rev 2249)
+++ branches/work_Ed/org.maemo.esbox.scratchbox.sb2/src/org/maemo/esbox/internal/scratchbox/sb2/ui/wizard/TargetWizardRootstrapSb2Page.java 2009-10-01 14:38:54 UTC (rev 2250)
@@ -88,7 +88,8 @@
provider = new MaemoRootstrapContentLabelProvider(sdk);
rootstrapTargetViewer.setContentProvider(provider);
rootstrapTargetViewer.setLabelProvider(provider);
-
+ provider.attachContentChangedListener(rootstrapTargetViewer);
+
rootstrapTargetViewer
.addSelectionChangedListener(new ISelectionChangedListener() {
@@ -100,14 +101,6 @@
});
- provider.addListener(new ILabelProviderListener() {
-
- public void labelProviderChanged(LabelProviderChangedEvent event) {
- rootstrapTargetViewer.refresh();
- }
-
- });
-
rootstrapTargetViewer.getTree().setLinesVisible(true);
rootstrapTargetViewer.getTree().setHeaderVisible(true);
Modified: branches/work_Ed/org.maemo.esbox.vm/src/org/maemo/esbox/internal/api/vm/core/BaseVirtualBuildMachine.java
===================================================================
--- branches/work_Ed/org.maemo.esbox.vm/src/org/maemo/esbox/internal/api/vm/core/BaseVirtualBuildMachine.java 2009-09-30 14:10:35 UTC (rev 2249)
+++ branches/work_Ed/org.maemo.esbox.vm/src/org/maemo/esbox/internal/api/vm/core/BaseVirtualBuildMachine.java 2009-10-01 14:38:54 UTC (rev 2250)
@@ -12,10 +12,6 @@
package org.maemo.esbox.internal.api.vm.core;
-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.maemo.mica.common.core.filesystem.IFileSystemAccess;
import org.maemo.mica.common.core.filesystem.ISharedFilesystemProvider;
import org.maemo.mica.common.core.machine.IMachineController;
@@ -28,7 +24,7 @@
*
*/
public abstract class BaseVirtualBuildMachine extends BaseVirtualMachine implements IBuildMachineImpl {
- private Job validateSharesJob;
+ //private Job validateSharesJob;
public BaseVirtualBuildMachine(String id, String name, String os, String arch,
@@ -44,6 +40,7 @@
*/
@Override
public IFileSystemAccess getFileSystemAccess() {
+ /*
// EJS 090624: do this in a job to avoid using a null progress monitor;
// if network settings are not perfect, then smbmount will hang for a
// very long time and this will be uncancellable.
@@ -79,24 +76,7 @@
}
validateSharesJob = null;
}
-
- /*
- // for this kind of machine, check more proactively,
- // otherwise build-related stuff is likely to fail
-
- boolean shouldValidate;
- synchronized (this) {
- shouldValidate = !validatedShares && !isValidatingShares;
- }
- if (shouldValidate) {
- // now, verify shared folders
- ensureSharesMounted(new NullProgressMonitor());
-
- // maybe the user cancelled or there were errors... but don't keep asking
- validatedShares = true;
- }
*/
-
return super.getFileSystemAccess();
}
}
Modified: branches/work_Ed/org.maemo.esbox.vm/src/org/maemo/esbox/internal/api/vm/core/BaseVirtualMachineController.java
===================================================================
--- branches/work_Ed/org.maemo.esbox.vm/src/org/maemo/esbox/internal/api/vm/core/BaseVirtualMachineController.java 2009-09-30 14:10:35 UTC (rev 2249)
+++ branches/work_Ed/org.maemo.esbox.vm/src/org/maemo/esbox/internal/api/vm/core/BaseVirtualMachineController.java 2009-10-01 14:38:54 UTC (rev 2250)
@@ -62,7 +62,9 @@
public abstract class BaseVirtualMachineController extends SSHMachineControllerBase {
protected static final IStatus CANCEL_STATUS = Policy.getCancelStatus(Activator.getDefault());
-
+ private long nextVMAliveCheck;
+ private boolean isVMRunning;
+
protected IVirtualMachineConfiguration machineConfiguration;
public BaseVirtualMachineController(IVirtualMachineConfiguration configuration) {
@@ -80,16 +82,60 @@
return machineConfiguration.getSSHConfiguration();
}
-
/**
* Tell if the virtual machine or engine is running. This either detects
* existing instances of the machine running on the host, or verifies
* that a previously launched instance via {@link #startMachine(IProgressMonitor)}
* is still valid.
+ * <p>
+ * This check uses cached information that remains "true" for a long time
+ * after the machine is detected. Use {@link #scheduleProbe()} to reset.
* @return true if it is likely running, false if we either don't know
* or if it is not running. If unsure, return false.
*/
- abstract public boolean isMachineRunning();
+ final public boolean isMachineRunning() {
+ if (System.currentTimeMillis() >= nextVMAliveCheck) {
+ isVMRunning = doIsMachineRunning();
+ if (!isVMRunning) {
+ // check fairly often while it is not running
+ nextVMAliveCheck = System.currentTimeMillis() + getNextIsRunningDelay(false);
+ } else {
+ // don't check if it is working
+ nextVMAliveCheck = System.currentTimeMillis() + getNextIsRunningDelay(true);
+ }
+ }
+ return isVMRunning;
+ }
+
+ /**
+ * Get the delay before checking whether the VM is running.
+ * The time should be short is the machine is not running and
+ * longer if it is running.
+ * @param isRunning
+ * @return delay in ms
+ */
+ protected long getNextIsRunningDelay(boolean isRunning) {
+ return isRunning ? 60 * 1000 : 1 * 1000;
+ }
+
+ /**
+ * Implement the check for the virtual machine or engine is running. This either detects
+ * existing instances of the machine running on the host, or verifies
+ * that a previously launched instance via {@link #startMachine(IProgressMonitor)}
+ * is still valid.
+ * @return true if it is likely running, false if we either don't know
+ * or if it is not running. If unsure, return false.
+ */
+ abstract protected boolean doIsMachineRunning();
+
+ /* (non-Javadoc)
+ * @see org.maemo.mica.internal.api.protocol.ssh.SSHMachineControllerBase#scheduleProbe()
+ */
+ @Override
+ public void scheduleProbe() {
+ super.scheduleProbe();
+ nextVMAliveCheck = System.currentTimeMillis();
+ }
/**
* Probe the machine until the connection is established. Since this
Modified: branches/work_Ed/org.maemo.esbox.vm/src/org/maemo/esbox/internal/vm/ManualVirtualMachineController.java
===================================================================
--- branches/work_Ed/org.maemo.esbox.vm/src/org/maemo/esbox/internal/vm/ManualVirtualMachineController.java 2009-09-30 14:10:35 UTC (rev 2249)
+++ branches/work_Ed/org.maemo.esbox.vm/src/org/maemo/esbox/internal/vm/ManualVirtualMachineController.java 2009-10-01 14:38:54 UTC (rev 2250)
@@ -58,7 +58,7 @@
* @see org.maemo.esbox.internal.api.vm.core.BaseVirtualMachineController#isMachineRunning()
*/
@Override
- public boolean isMachineRunning() {
+ public boolean doIsMachineRunning() {
return false;
}
}
Modified: branches/work_Ed/org.maemo.esbox.vm.qemu/src/org/maemo/esbox/internal/vm/qemu/QemuMachineController.java
===================================================================
--- branches/work_Ed/org.maemo.esbox.vm.qemu/src/org/maemo/esbox/internal/vm/qemu/QemuMachineController.java 2009-09-30 14:10:35 UTC (rev 2249)
+++ branches/work_Ed/org.maemo.esbox.vm.qemu/src/org/maemo/esbox/internal/vm/qemu/QemuMachineController.java 2009-10-01 14:38:54 UTC (rev 2250)
@@ -85,7 +85,7 @@
* @see org.maemo.esbox.internal.api.vm.core.BaseLaunchableVirtualMachineController#isMachineRunning()
*/
@Override
- public boolean isMachineRunning() {
+ protected boolean doIsMachineRunning() {
if (launchInfo != null) {
return launchInfo.isAlive();
}
Modified: branches/work_Ed/org.maemo.esbox.vm.virtualbox/src/org/maemo/esbox/internal/vm/virtualbox/VirtualBoxMachineController.java
===================================================================
--- branches/work_Ed/org.maemo.esbox.vm.virtualbox/src/org/maemo/esbox/internal/vm/virtualbox/VirtualBoxMachineController.java 2009-09-30 14:10:35 UTC (rev 2249)
+++ branches/work_Ed/org.maemo.esbox.vm.virtualbox/src/org/maemo/esbox/internal/vm/virtualbox/VirtualBoxMachineController.java 2009-10-01 14:38:54 UTC (rev 2250)
@@ -186,7 +186,7 @@
* @see org.maemo.esbox.internal.api.vm.core.BaseLaunchableVirtualMachineController#isMachineRunning()
*/
@Override
- public boolean isMachineRunning() {
+ protected boolean doIsMachineRunning() {
LaunchResults results = launchAndRunVBoxManage(10, "list", "runningvms");
if (results == null)
return false;
Modified: branches/work_Ed/org.maemo.esbox.vm.vmware/src/org/maemo/esbox/internal/vm/vmware/VMwareMachineController.java
===================================================================
--- branches/work_Ed/org.maemo.esbox.vm.vmware/src/org/maemo/esbox/internal/vm/vmware/VMwareMachineController.java 2009-09-30 14:10:35 UTC (rev 2249)
+++ branches/work_Ed/org.maemo.esbox.vm.vmware/src/org/maemo/esbox/internal/vm/vmware/VMwareMachineController.java 2009-10-01 14:38:54 UTC (rev 2250)
@@ -90,10 +90,7 @@
return (IProcess[]) matches.toArray(new IProcess[matches.size()]);
}
- /* (non-Javadoc)
- * @see org.maemo.esbox.internal.api.vm.core.IVirtualMachineController#isMachineRunning()
- */
- public boolean isMachineRunning() {
+ protected boolean doIsMachineRunning() {
// We can't tell if the machine stopped running just based on the process stopping
// (VMware may have used another instance to host the machine, or, vmrun has exited
// right away)
@@ -133,6 +130,19 @@
}
/* (non-Javadoc)
+ * @see org.maemo.esbox.internal.api.vm.core.BaseVirtualMachineController#getNextIsRunningDelay(boolean)
+ */
+ @Override
+ protected long getNextIsRunningDelay(boolean isRunning) {
+ long delay = super.getNextIsRunningDelay(isRunning);
+ if (HostUtils.isWindows()) {
+ // longer delay because vmrun is sooooo slow here
+ delay *= 5;
+ }
+ return delay;
+ }
+
+ /* (non-Javadoc)
* @see org.maemo.esbox.internal.api.vm.core.BaseVirtualMachineController#constructLaunchParameters()
*/
@Override
Modified: branches/work_Ed/org.maemo.esbox.vm.vmware/src/org/maemo/esbox/internal/vm/vmware/ui/wizards/MaemoSDKVMSelectionWizardPage.java
===================================================================
--- branches/work_Ed/org.maemo.esbox.vm.vmware/src/org/maemo/esbox/internal/vm/vmware/ui/wizards/MaemoSDKVMSelectionWizardPage.java 2009-09-30 14:10:35 UTC (rev 2249)
+++ branches/work_Ed/org.maemo.esbox.vm.vmware/src/org/maemo/esbox/internal/vm/vmware/ui/wizards/MaemoSDKVMSelectionWizardPage.java 2009-10-01 14:38:54 UTC (rev 2250)
@@ -32,7 +32,6 @@
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.DirectoryDialog;
-import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Label;
@@ -195,25 +194,10 @@
platformProvider.addListener(this);
virtualImagesTable.setContentProvider(platformProvider);
virtualImagesTable.setLabelProvider(platformProvider);
-
virtualImagesTable.setComparator(new VirtualImagesComparator());
- platformProvider.addListener(new ILabelProviderListener() {
-
- public void labelProviderChanged(LabelProviderChangedEvent event) {
- Display.getDefault().asyncExec(new Runnable() {
- public void run() {
- if (!virtualImagesTable.getTable().isDisposed()) {
- for (TableColumn column : virtualImagesTable
- .getTable().getColumns()) {
- column.pack();
- }
- }
- }
- });
- }
- });
-
+ platformProvider.attachContentChangedListener(virtualImagesTable);
+
Table table = virtualImagesTable.getTable();
GridDataFactory.fillDefaults().grab(true, true).span(4, 1).applyTo(
table);
More information about the Esbox-commits
mailing list