[Esbox-commits] r1107 - in branches/work_Ed: org.maemo.esbox.maemosdk.ui/META-INF org.maemo.esbox.maemosdk.ui/src/org/maemo/esbox/internal/api/maemosdk/ui/preferences org.maemo.esbox.maemosdk.ui/src/org/maemo/esbox/internal/maemosdk/ui/preferences org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/preferences org.maemo.esbox.vm/conf org.maemo.esbox.vm/src/org/maemo/esbox/internal/api/vm/ui/preferences
eswartz at garage.maemo.org
eswartz at garage.maemo.org
Wed Dec 31 23:23:02 EET 2008
Author: eswartz
Date: 2008-12-31 23:22:59 +0200 (Wed, 31 Dec 2008)
New Revision: 1107
Modified:
branches/work_Ed/org.maemo.esbox.maemosdk.ui/META-INF/MANIFEST.MF
branches/work_Ed/org.maemo.esbox.maemosdk.ui/src/org/maemo/esbox/internal/api/maemosdk/ui/preferences/SharedFolderPreferenceConverter.java
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/maemosdk/ui/preferences/BuildMachinePreferencePage.java
branches/work_Ed/org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/preferences/Scratchbox1PreferencesPage.java
branches/work_Ed/org.maemo.esbox.vm/conf/vm_prefs.xml
branches/work_Ed/org.maemo.esbox.vm/src/org/maemo/esbox/internal/api/vm/ui/preferences/CommonVirtualMachineSettingsPreferencePage.java
Log:
Fix bug 3193. Make it easier to edit shared folders in the pref page by editing items in a tree rather than a table.
Also, rename the confusing "local" and "host" paths of a share to "share path" and "mount path".
Finally, rename EShareType.SAMBA to SMB to be more generic.
Modified: branches/work_Ed/org.maemo.esbox.maemosdk.ui/META-INF/MANIFEST.MF
===================================================================
--- branches/work_Ed/org.maemo.esbox.maemosdk.ui/META-INF/MANIFEST.MF 2008-12-31 16:28:05 UTC (rev 1106)
+++ branches/work_Ed/org.maemo.esbox.maemosdk.ui/META-INF/MANIFEST.MF 2008-12-31 21:22:59 UTC (rev 1107)
@@ -11,7 +11,8 @@
org.maemo.mica.common.project.core;bundle-version="2.0.0",
org.maemo.mica.common.ui;bundle-version="2.0.0",
org.maemo.esbox.maemosdk.core;bundle-version="2.0.0",
- org.eclipse.ui.ide;bundle-version="3.4.1"
+ org.eclipse.ui.ide;bundle-version="3.4.1",
+ org.eclipse.ui.views;bundle-version="3.3.0"
Bundle-RequiredExecutionEnvironment: J2SE-1.5
Bundle-ActivationPolicy: lazy
Export-Package: org.maemo.esbox.internal.api.maemosdk.ui.preferences,
Modified: branches/work_Ed/org.maemo.esbox.maemosdk.ui/src/org/maemo/esbox/internal/api/maemosdk/ui/preferences/SharedFolderPreferenceConverter.java
===================================================================
--- branches/work_Ed/org.maemo.esbox.maemosdk.ui/src/org/maemo/esbox/internal/api/maemosdk/ui/preferences/SharedFolderPreferenceConverter.java 2008-12-31 16:28:05 UTC (rev 1106)
+++ branches/work_Ed/org.maemo.esbox.maemosdk.ui/src/org/maemo/esbox/internal/api/maemosdk/ui/preferences/SharedFolderPreferenceConverter.java 2008-12-31 21:22:59 UTC (rev 1107)
@@ -72,7 +72,7 @@
IPath host, target;
boolean isAlias = false;
boolean isHostProvided = true;
- EShareType type = EShareType.SAMBA;
+ EShareType type = EShareType.SMB;
String shareName = null;
if (hostTarget.length >= 2) {
@@ -86,7 +86,10 @@
try {
type = EShareType.valueOf(hostTarget[4]);
} catch (IllegalArgumentException e) {
- UIActivator.getErrorLogger().logError("Invalid shared folder type in: " + entry, null);
+ if (hostTarget[4].equals("SAMBA"))
+ type = EShareType.SMB;
+ else
+ UIActivator.getErrorLogger().logError("Invalid shared folder type in: " + entry, null);
}
if (hostTarget.length >= 6) {
shareName = hostTarget[5];
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 2008-12-31 16:28:05 UTC (rev 1106)
+++ branches/work_Ed/org.maemo.esbox.maemosdk.ui/src/org/maemo/esbox/internal/api/maemosdk/ui/preferences/SharedFolderTableViewer.java 2008-12-31 21:22:59 UTC (rev 1107)
@@ -15,148 +15,385 @@
import org.eclipse.jface.viewers.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;
+import org.eclipse.swt.graphics.*;
import org.eclipse.swt.widgets.*;
import org.maemo.mica.common.core.machine.EShareType;
import org.maemo.mica.common.core.machine.ISharedFolder;
+import org.maemo.mica.common.ui.TextAndDialogCellEditor;
+import org.maemo.mica.common.ui.ViewerTooltipSupport;
import java.util.Collection;
/**
- * A table viewer for shared folder mappings. The content should be Collection<Pair<IPath,IPath>>
+ * A table viewer for shared folder mappings. The content should be
+ * ISharedFolder entries.
* @author eswartz
*
*/
-public class SharedFolderTableViewer extends TableViewer {
-
- final int HOST_COLUMN = 0;
- final int FROMTO_COLUMN = 1;
- final int TARGET_COLUMN = 2;
- final int NAME_COLUMN = 3;
- final int AUTO_COLUMN = 4;
- final int TYPE_COLUMN = 5;
+public class SharedFolderTableViewer extends TreeViewer {
+ /**
+ *
+ */
private Collection<ISharedFolder> mappings;
- private TableColumn targetColumn;
- private TableColumn fromToColumn;
- private TableColumn hostColumn;
- private TableColumn nameColumn;
- private TableColumn autoColumn;
- private TableColumn typeColumn;
- private TableViewerColumn hostViewerColumn;
- private TableViewerColumn targetViewerColumn;
- private TableViewerColumn fromToViewerColumn;
- private TableViewerColumn nameViewerColumn;
- private TableViewerColumn autoViewerColumn;
- private TableViewerColumn typeViewerColumn;
+ private TreeViewerColumn contentViewerColumn;
- public SharedFolderTableViewer(Composite parent, int style) {
- super(parent, style | SWT.FULL_SELECTION | SWT.SINGLE);
+ static abstract class FieldItem {
+ String label;
+ ISharedFolder folder;
+ String tooltip;
- final Table table = getTable();
+ /**
+ * @param label
+ * @param parent
+ */
+ public FieldItem(String label, String tooltip, ISharedFolder parent) {
+ super();
+ this.label = label;
+ this.tooltip = tooltip;
+ this.folder = parent;
+ }
- table.setLinesVisible (true);
- table.setHeaderVisible (true);
+ protected CellEditor getCellEditor(ISharedFolder folder, Tree tree) {
+ return new TextCellEditor(tree);
+ }
- hostColumn = new TableColumn(table, SWT.LEFT);
- hostColumn.setText("Host");
- hostColumn.pack();
- hostColumn.setToolTipText("This is the host path matched with the target.");
+ abstract protected void setField(Object value);
+ abstract protected Object getField();
+
+ public String getLabel() {
+ return getField().toString();
+ }
+ }
+
+ static class DirectoryBrowserCellEditor extends TextAndDialogCellEditor {
- fromToColumn = new TableColumn(table, SWT.LEFT);
- fromToColumn.setText("");
- fromToColumn.pack();
- fromToColumn.setToolTipText("This tells who provides the shared folder.\n\"<-\" means the target provides the share, \"->\" means the host provides the share.");
+ public DirectoryBrowserCellEditor(Tree tree) {
+ super(tree);
+ }
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.DialogCellEditor#openDialogBox(org.eclipse.swt.widgets.Control)
+ */
+ @Override
+ protected Object openDialogBox(Control cellEditorWindow) {
+ DirectoryDialog dialog = new DirectoryDialog(cellEditorWindow.getShell());
+ Object current = getValue();
+ dialog.setFilterPath(current instanceof String
+ ? new Path((String)current).toOSString() : Path.ROOT.toOSString());
+ return dialog.open();
+ }
+ }
+
+ static abstract class PathFieldItem extends FieldItem {
+ public PathFieldItem(String label, String tooltip, ISharedFolder parent) {
+ super(label, tooltip, parent);
+ }
+ protected abstract boolean isHostPath(ISharedFolder folder);
+ /* (non-Javadoc)
+ * @see org.maemo.esbox.internal.api.maemosdk.ui.preferences.SharedFolderTableViewer.FieldItem#getCellEditor(org.eclipse.swt.widgets.Tree)
+ */
+ @Override
+ protected CellEditor getCellEditor(ISharedFolder folder, Tree tree) {
+ if (isHostPath(folder))
+ return new DirectoryBrowserCellEditor(tree);
+ else
+ return new TextCellEditor(tree);
+ }
+ }
+
+ static class SharePathFieldItem extends PathFieldItem {
+ public SharePathFieldItem(String label, String tooltip, ISharedFolder parent) {
+ super(label, tooltip, parent);
+ }
+ /* (non-Javadoc)
+ * @see org.maemo.esbox.internal.api.maemosdk.ui.preferences.SharedFolderTableViewer.PathFieldItem#isHostPath()
+ */
+ @Override
+ protected boolean isHostPath(ISharedFolder folder) {
+ return folder.isHostProvidedShare();
+ }
+ @Override
+ protected Object getField() {
+ return isHostPath(folder) ? folder.getSharePath().toOSString()
+ : folder.getSharePath().toPortableString();
+ }
+ @Override
+ protected void setField(Object value) {
+ folder.setSharePath(new Path((String)value).makeAbsolute());
+ }
+ }
+
+ static class MountPathFieldItem extends PathFieldItem {
+ public MountPathFieldItem(String label, String tooltip, ISharedFolder parent) {
+ super(label, tooltip, parent);
+ }
+ /* (non-Javadoc)
+ * @see org.maemo.esbox.internal.api.maemosdk.ui.preferences.SharedFolderTableViewer.PathFieldItem#isHostPath(org.maemo.mica.common.core.machine.ISharedFolder)
+ */
+ @Override
+ protected boolean isHostPath(ISharedFolder folder) {
+ return !folder.isHostProvidedShare();
+ }
+ @Override
+ protected Object getField() {
+ return isHostPath(folder) ? folder.getMountPath().toOSString()
+ : folder.getMountPath().toPortableString();
+ }
+ @Override
+ protected void setField(Object value) {
+ folder.setMountPath(new Path((String) value).makeAbsolute());
+ }
+ }
+
+ static class ShareNameFieldItem extends FieldItem {
+ public ShareNameFieldItem(String label, String tooltip, ISharedFolder parent) {
+ super(label, tooltip, parent);
+ }
+ @Override
+ protected Object getField() {
+ return folder.getShareName();
+ }
+ @Override
+ protected void setField(Object value) {
+ folder.setShareName((String) value);
+ }
+ }
+
+ static abstract class BooleanFieldItem extends FieldItem {
+ public BooleanFieldItem(String label, String tooltip, ISharedFolder parent) {
+ super(label, tooltip, parent);
+ }
+ @Override
+ protected CellEditor getCellEditor(ISharedFolder folder, Tree tree) {
+ return new CheckboxCellEditor(tree);
+ }
+ @Override
+ public String getLabel() {
+ return ((Boolean) getField()) ? "yes" : "no";
+ }
+ }
+
+ static class AutoMountFieldItem extends BooleanFieldItem {
+ public AutoMountFieldItem(String label, String tooltip, ISharedFolder parent) {
+ super(label, tooltip, parent);
+ }
+ @Override
+ protected Object getField() {
+ return !folder.isManual();
+ }
+ @Override
+ protected void setField(Object value) {
+ folder.setManual(!(Boolean)value);
+ }
+ }
+
+ static class HostProvidedFieldItem extends BooleanFieldItem {
+ public HostProvidedFieldItem(String label, String tooltip, ISharedFolder parent) {
+ super(label, tooltip, parent);
+ }
+ @Override
+ protected Object getField() {
+ return folder.isHostProvidedShare();
+ }
+ @Override
+ protected void setField(Object value) {
+ folder.setHostProvidedShare((Boolean)value);
+ }
+ }
+
+ static class StaticFieldItem extends FieldItem {
+ public StaticFieldItem(String label, String tooltip, ISharedFolder parent) {
+ super(label, tooltip, parent);
+ }
+ /* (non-Javadoc)
+ * @see org.maemo.esbox.internal.api.maemosdk.ui.preferences.SharedFolderTableViewer.FieldItem#getCellEditor(org.eclipse.swt.widgets.Tree)
+ */
+ @Override
+ protected CellEditor getCellEditor(ISharedFolder folder, Tree tree) {
+ return null;
+ }
+ @Override
+ protected Object getField() {
+ return folder.getShareType().toString();
+ }
+ @Override
+ protected void setField(Object value) {
+ folder.setShareType(EShareType.valueOf((String) value));
+ }
+ }
+
+ /**
+ * This content provider simply provides a "tree" where each root
+ * node is an ISharedFolder whose label provider is a summary of its
+ * structure and whose children are Strings providing details about
+ * the entry. The node as a whole is edited separately in a dialog.
+ * @author eswartz
+ *
+ */
+ static class SharedFolderContentProvider implements ITreeContentProvider {
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
+ */
+ public Object[] getElements(Object inputElement) {
+ return ((Collection) inputElement).toArray();
+ }
- targetColumn = new TableColumn(table, SWT.LEFT);
- targetColumn.setText("Target");
- targetColumn.pack();
- targetColumn.setToolTipText("This is the target-side path matched with the host.");
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
+ */
+ 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 on the other machine.",
+ 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 null;
+ }
- nameColumn = new TableColumn(table, SWT.LEFT);
- nameColumn.setText("Name");
- nameColumn.pack();
- nameColumn.setToolTipText("This is the name of the share exposed by the provider.");
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
+ */
+ public Object getParent(Object element) {
+ if (element instanceof FieldItem)
+ return ((FieldItem) element).folder;
+ else
+ return null;
+ }
- autoColumn = new TableColumn(table, SWT.CENTER);
- autoColumn.setText("Auto?");
- autoColumn.pack();
- autoColumn.setToolTipText("If \"yes\", ESbox will attempt to mount the share itself. Otherwise, you must do this on your own.");
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
+ */
+ public boolean hasChildren(Object element) {
+ return element instanceof Collection || element instanceof ISharedFolder;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+ */
+ public void dispose() {
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
+ */
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ }
- typeColumn = new TableColumn(table, SWT.LEFT);
- typeColumn.setText("Type");
- typeColumn.pack();
- typeColumn.setToolTipText("The method for mounting the share.\nCurrently only used when auto-mounting the share,\nbut may serve other purposes later.");
+ }
+
+ static class SharedFolderLabelProvider extends BaseLabelProvider implements
+ ITableLabelProvider {
- hostViewerColumn = new TableViewerColumn(this, hostColumn);
- hostViewerColumn.setLabelProvider(new ColumnLabelProvider() {
- @Override
- public String getText(Object element) {
- ISharedFolder entry = (ISharedFolder) element;
- return entry.getLocalPath().toOSString();
+ /* (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 ISharedFolder) {
+ if (columnIndex == 0) {
+ ISharedFolder folder = (ISharedFolder) element;
+ return (folder.isHostProvidedShare()
+ ? folder.getLocalPath().toOSString()
+ : folder.getRemotePath().toPortableString());
+ }
}
- });
- fromToViewerColumn = new TableViewerColumn(this, fromToColumn);
- fromToViewerColumn.setLabelProvider(new ColumnLabelProvider() {
- @Override
- public String getText(Object element) {
- ISharedFolder entry = (ISharedFolder) element;
- return entry.isHostProvidedShare() ? "->" : "<-";
+ if (element instanceof FieldItem) {
+ FieldItem item = (FieldItem) element;
+ if (columnIndex == 0)
+ return item.label;
+ else
+ return item.getLabel();
}
- });
- targetViewerColumn = new TableViewerColumn(this, targetColumn);
- targetViewerColumn.setLabelProvider(new ColumnLabelProvider() {
- @Override
- public String getText(Object element) {
- ISharedFolder entry = (ISharedFolder) element;
- return entry.getRemotePath().toPortableString();
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.ITableFontProvider#getFont(java.lang.Object, int)
+ */
+ /*
+ public Font getFont(Object element, int columnIndex) {
+ if (element instanceof DescriptionItem && columnIndex == 0) {
+ return JFaceResources.getFontRegistry().getBold(
+ JFaceResources.DIALOG_FONT);
}
- });
- nameViewerColumn = new TableViewerColumn(this, nameColumn);
- nameViewerColumn.setLabelProvider(new ColumnLabelProvider() {
- @Override
- public String getText(Object element) {
- ISharedFolder entry = (ISharedFolder) element;
- return entry.getShareName();
- }
- });
- autoViewerColumn = new TableViewerColumn(this, autoColumn);
- autoViewerColumn.setLabelProvider(new ColumnLabelProvider() {
- @Override
- public String getText(Object element) {
- ISharedFolder entry = (ISharedFolder) element;
- return entry.isManual() ? "no" : "yes";
- }
- });
- typeViewerColumn = new TableViewerColumn(this, typeColumn);
- typeViewerColumn.setLabelProvider(new ColumnLabelProvider() {
- @Override
- public String getText(Object element) {
- ISharedFolder entry = (ISharedFolder) element;
- if (entry.getShareType() == EShareType.SAMBA) {
- return "SMB";
- } else {
- return entry.getShareType().toString();
- }
- }
- });
+ return JFaceResources.getFontRegistry().get(
+ JFaceResources.DIALOG_FONT);
+ }*/
+ }
+
+ public SharedFolderTableViewer(Composite parent, int style) {
+ super(parent, style | SWT.FULL_SELECTION | SWT.SINGLE);
- table.addControlListener(new ControlAdapter() {
+ final Tree tree = getTree();
+
+ tree.setLinesVisible(true);
+ tree.setHeaderVisible(true);
+
+ final TreeColumn fieldColumn = new TreeColumn(tree, SWT.LEFT);
+ fieldColumn.setText("");
+ fieldColumn.pack();
+ fieldColumn.setResizable(true);
+
+ final TreeColumn contentColumn = new TreeColumn(tree, SWT.LEFT);
+ contentColumn.setText("");
+ contentColumn.pack();
+ contentColumn.setResizable(true);
+
+ contentViewerColumn = new TreeViewerColumn(this, contentColumn);
+
+ tree.addControlListener(new ControlAdapter() {
@Override
public void controlResized(ControlEvent e) {
- int fullSize = table.getSize().x - 48 - 24 - 64;
+ int fullSize = tree.getSize().x;
- // allocate 4/5 for the paths and 1/5 for the share name
- hostColumn.setWidth(fullSize * 2 / 5 - 3);
- targetColumn.setWidth(fullSize * 2 / 5 - 3);
- nameColumn.setWidth(fullSize / 5);
-
- fromToColumn.setWidth(24);
- autoColumn.setWidth(48);
- typeColumn.setWidth(64);
+ fieldColumn.pack();
+ contentColumn.setWidth(fullSize - fieldColumn.getWidth() - 3);
}
});
- setContentProvider(new ArrayContentProvider());
+ ViewerTooltipSupport.addTooltipSupport(this, new ViewerTooltipSupport.ITooltipProvider() {
+
+ public String getTooltip(Object element) {
+ if (element instanceof FieldItem)
+ return ((FieldItem) element).tooltip;
+ return null;
+ }
+
+ });
+
+ setContentProvider(new SharedFolderContentProvider());
+ setLabelProvider(new SharedFolderLabelProvider());
}
public Collection<ISharedFolder> getMappings() {
@@ -167,200 +404,44 @@
* Add cell editors to the viewer.
*/
public void addEditors() {
- hostViewerColumn.setEditingSupport(new EditingSupport(this) {
+ contentViewerColumn.setEditingSupport(new EditingSupport(this) {
- @Override
- protected boolean canEdit(Object element) {
- return true;
+ protected ISharedFolder getFolder(Object element) {
+ return ((FieldItem) element).folder;
}
-
@Override
- protected CellEditor getCellEditor(final Object element) {
- // allow TAB to go to next field (table seems to hide this functionality away)
- final TextCellEditor editor = new TextCellEditor(getTable());
- ((Text) editor.getControl()).addTraverseListener(new TraverseListener() {
-
- public void keyTraversed(TraverseEvent e) {
- int column;
- if (e.detail == SWT.TRAVERSE_ARROW_NEXT || e.detail == SWT.TRAVERSE_TAB_NEXT
- || e.detail == SWT.TRAVERSE_RETURN)
- column = TARGET_COLUMN;
- else if (e.detail == SWT.TRAVERSE_ARROW_PREVIOUS || e.detail == SWT.TRAVERSE_TAB_PREVIOUS)
- column = NAME_COLUMN;
- else
- return;
-
- editor.deactivate();
- editElement(element, column);
- }
-
- });
- return editor;
- }
-
- @Override
- protected Object getValue(Object element) {
- ISharedFolder pair = (ISharedFolder) element;
- return pair.getLocalPath().toOSString();
- }
-
- @Override
- protected void setValue(Object element, Object value) {
- ISharedFolder pair = (ISharedFolder) element;
- pair.setLocalPath(new Path(value.toString()));
- refresh(pair);
- }
-
- });
-
- fromToViewerColumn.setEditingSupport(new EditingSupport(this) {
-
- @Override
protected boolean canEdit(Object element) {
- return true;
+ if (element instanceof FieldItem) {
+ return ((FieldItem) element).getCellEditor(getFolder(element), getTree()) != null;
+ }
+ return false;
}
-
- @Override
- protected CellEditor getCellEditor(Object element) {
- return new CheckboxCellEditor(getTable());
- }
-
- @Override
- protected Object getValue(Object element) {
- ISharedFolder pair = (ISharedFolder) element;
- return pair.isHostProvidedShare();
- }
-
- @Override
- protected void setValue(Object element, Object value) {
- ISharedFolder pair = (ISharedFolder) element;
- pair.setHostProvidedShare((Boolean) value);
- refresh(pair);
- }
-
- });
- targetViewerColumn.setEditingSupport(new EditingSupport(this) {
-
@Override
- protected boolean canEdit(Object element) {
- return true;
- }
-
- @Override
protected CellEditor getCellEditor(final Object element) {
- // allow TAB to go to next field (table seems to hide this functionality away)
- final TextCellEditor editor = new TextCellEditor(getTable());
- ((Text) editor.getControl()).addTraverseListener(new TraverseListener() {
-
- public void keyTraversed(TraverseEvent e) {
- int column;
- if (e.detail == SWT.TRAVERSE_ARROW_NEXT || e.detail == SWT.TRAVERSE_TAB_NEXT
- || e.detail == SWT.TRAVERSE_RETURN)
- column = NAME_COLUMN;
- else if (e.detail == SWT.TRAVERSE_ARROW_PREVIOUS || e.detail == SWT.TRAVERSE_TAB_PREVIOUS)
- column = HOST_COLUMN;
- else
- return;
-
- editor.deactivate();
- editElement(element, column);
- }
-
- });
- return editor;
+ if (element instanceof FieldItem) {
+ return ((FieldItem) element).getCellEditor(getFolder(element), getTree());
+ }
+ return null;
}
@Override
protected Object getValue(Object element) {
- ISharedFolder pair = (ISharedFolder) element;
- return pair.getRemotePath().toPortableString();
+ if (element instanceof FieldItem) {
+ return ((FieldItem) element).getField();
+ }
+ return null;
}
@Override
protected void setValue(Object element, Object value) {
- ISharedFolder pair = (ISharedFolder) element;
- pair.setRemotePath(new Path(value.toString()));
- refresh(pair);
+ if (element instanceof FieldItem) {
+ ((FieldItem) element).setField(value);
+ refresh(getFolder(element));
+ }
}
});
- nameViewerColumn.setEditingSupport(new EditingSupport(this) {
-
- @Override
- protected boolean canEdit(Object element) {
- return true;
- }
-
- @Override
- protected CellEditor getCellEditor(final Object element) {
- // allow TAB to go to next field (table seems to hide this functionality away)
- final TextCellEditor editor = new TextCellEditor(getTable());
- ((Text) editor.getControl()).addTraverseListener(new TraverseListener() {
-
- public void keyTraversed(TraverseEvent e) {
- int column;
- if (e.detail == SWT.TRAVERSE_ARROW_NEXT || e.detail == SWT.TRAVERSE_TAB_NEXT
- || e.detail == SWT.TRAVERSE_RETURN) {
- // do NOT automatically proceed to the next cell -- boolean cells CHANGE when you enter them
- return;
- }
- else if (e.detail == SWT.TRAVERSE_ARROW_PREVIOUS || e.detail == SWT.TRAVERSE_TAB_PREVIOUS)
- column = TARGET_COLUMN;
- else
- return;
-
- editor.deactivate();
- editElement(element, column);
- }
-
- });
- return editor;
- }
-
- @Override
- protected Object getValue(Object element) {
- ISharedFolder pair = (ISharedFolder) element;
- return pair.getShareName();
- }
-
- @Override
- protected void setValue(Object element, Object value) {
- ISharedFolder pair = (ISharedFolder) element;
- pair.setShareName(value.toString());
- refresh(pair);
- }
-
- });
-
- autoViewerColumn.setEditingSupport(new EditingSupport(this) {
-
- @Override
- protected boolean canEdit(Object element) {
- return true;
- }
-
- @Override
- protected CellEditor getCellEditor(Object element) {
- return new CheckboxCellEditor(getTable());
- }
-
- @Override
- protected Object getValue(Object element) {
- ISharedFolder pair = (ISharedFolder) element;
- return pair.isManual();
- }
-
- @Override
- protected void setValue(Object element, Object value) {
- ISharedFolder pair = (ISharedFolder) element;
- pair.setManual((Boolean) value);
- refresh(pair);
- }
-
- });
-
- // no editing support for type yet
}
}
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 2008-12-31 16:28:05 UTC (rev 1106)
+++ branches/work_Ed/org.maemo.esbox.maemosdk.ui/src/org/maemo/esbox/internal/api/maemosdk/ui/preferences/SharedFoldersPreferencePage.java 2008-12-31 21:22:59 UTC (rev 1107)
@@ -11,11 +11,11 @@
package org.maemo.esbox.internal.api.maemosdk.ui.preferences;
+import org.eclipse.core.runtime.Path;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.viewers.*;
import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.*;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
@@ -33,11 +33,11 @@
*/
public class SharedFoldersPreferencePage extends BaseComposablePreferencePage {
- private SharedFolderTableViewer tableViewer;
+ private SharedFolderTableViewer treeViewer;
private Composite composite;
private Button addButton;
private Button removeButton;
- private Table table;
+ private Tree tree;
private SharedFolderPreferenceConverter preferenceConverter;
private List<ISharedFolder> model;
private final String preferenceName;
@@ -79,8 +79,8 @@
protected void loadModel(boolean isDefault) {
String info = getStoredPreference(isDefault);
model = preferenceConverter.convertPreferenceToModel(info);
- if (tableViewer != null) {
- tableViewer.setInput(model);
+ if (treeViewer != null) {
+ treeViewer.setInput(model);
}
}
@@ -132,13 +132,13 @@
labelLayout.horizontalSpan = 2;
label.setLayoutData(labelLayout);
- tableViewer = new SharedFolderTableViewer(composite, SWT.BORDER);
- tableViewer.addEditors();
+ treeViewer = new SharedFolderTableViewer(composite, SWT.BORDER);
+ treeViewer.addEditors();
GridData tableLayoutData = new GridData(SWT.FILL, SWT.FILL, true, true);
tableLayoutData.heightHint = 64;
- table = tableViewer.getTable();
- table.setLayoutData(tableLayoutData);
+ tree = treeViewer.getTree();
+ tree.setLayoutData(tableLayoutData);
// right side is buttons
Composite buttonBox = new Composite(composite, SWT.NONE);
@@ -167,7 +167,7 @@
}
});
- tableViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+ treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
*/
@@ -176,26 +176,45 @@
}
});
+ treeViewer.getControl().addKeyListener(new KeyAdapter() {
+ /* (non-Javadoc)
+ * @see org.eclipse.swt.events.KeyAdapter#keyReleased(org.eclipse.swt.events.KeyEvent)
+ */
+ @Override
+ public void keyReleased(KeyEvent e) {
+ if (e.character == 127) {
+ // delete
+ doRemove();
+ }
+ }
+ });
+
loadModel(false);
+
+ treeViewer.expandAll();
}
- /**
- *
- */
protected void doAdd() {
ISharedFolder share = new BaseSharedFolder();
+ share.setSharePath(new Path("/fill/in/a/path"));
model.add(share);
- tableViewer.refresh();
- tableViewer.setSelection(new StructuredSelection(share));
- tableViewer.editElement(share, 0);
+
+ treeViewer.refresh();
+ treeViewer.setSelection(new StructuredSelection(share));
+ treeViewer.expandToLevel(share, TreeViewer.ALL_LEVELS);
+ treeViewer.reveal(share);
+
+ // hmm, this is a no-op... we'd really like to edit into the
+ // first field of the share.
+ treeViewer.editElement(share, 0);
}
protected void doRemove() {
- IStructuredSelection ss = (IStructuredSelection) tableViewer.getSelection();
+ IStructuredSelection ss = (IStructuredSelection) treeViewer.getSelection();
if (ss.isEmpty())
return;
model.remove(ss.getFirstElement());
- tableViewer.refresh();
+ treeViewer.refresh();
}
Modified: branches/work_Ed/org.maemo.esbox.maemosdk.ui/src/org/maemo/esbox/internal/maemosdk/ui/preferences/BuildMachinePreferencePage.java
===================================================================
--- branches/work_Ed/org.maemo.esbox.maemosdk.ui/src/org/maemo/esbox/internal/maemosdk/ui/preferences/BuildMachinePreferencePage.java 2008-12-31 16:28:05 UTC (rev 1106)
+++ branches/work_Ed/org.maemo.esbox.maemosdk.ui/src/org/maemo/esbox/internal/maemosdk/ui/preferences/BuildMachinePreferencePage.java 2008-12-31 21:22:59 UTC (rev 1107)
@@ -168,7 +168,7 @@
machineConfigComposite = new Composite(selectorComposite, SWT.NONE);
- machineConfigComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+ machineConfigComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
machineConfigStackLayout = new StackLayout();
machineConfigStackLayout.marginWidth = 0;
machineConfigStackLayout.marginHeight = 0;
Modified: branches/work_Ed/org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/preferences/Scratchbox1PreferencesPage.java
===================================================================
--- branches/work_Ed/org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/preferences/Scratchbox1PreferencesPage.java 2008-12-31 16:28:05 UTC (rev 1106)
+++ branches/work_Ed/org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/preferences/Scratchbox1PreferencesPage.java 2008-12-31 21:22:59 UTC (rev 1107)
@@ -108,6 +108,12 @@
});
}
+ feSandboxRootStr
+ .getTextControl(getFieldEditorParent())
+ .setToolTipText(
+ "Specify the base path to scratchbox. Leave ${USER} as is (it is substituted with the active user on the build machine).");
+
+
feSboxCommands = new StringFieldEditor(
SB1PreferenceConstants.SB1_LOGIN_COMMAND.toString(),
"Command template:", getFieldEditorParent());
Modified: branches/work_Ed/org.maemo.esbox.vm/conf/vm_prefs.xml
===================================================================
--- branches/work_Ed/org.maemo.esbox.vm/conf/vm_prefs.xml 2008-12-31 16:28:05 UTC (rev 1106)
+++ branches/work_Ed/org.maemo.esbox.vm/conf/vm_prefs.xml 2008-12-31 21:22:59 UTC (rev 1107)
@@ -12,8 +12,8 @@
<entry key="VM_SSH_HOST_ADDR">10.0.2.2</entry>
<entry key="VM_CIFS_TARGET_PORT">4445</entry>
- <entry key="VM_SHARED_FOLDERS_WIN32">c:\maemo\shared|/home/maemo/shared|false|true|SAMBA|shared,c:\maemo\shared|/scratchbox/users/maemo/home/maemo/shared|false|true|SAMBA|shared</entry>
- <entry key="VM_SHARED_FOLDERS_UNIX">$(user.home)/maemo/shared|/home/maemo/shared|false|true|SAMBA|shared,$(user.home)/maemo/shared|/scratchbox/users/maemo/home/maemo/shared|false|true|SAMBA|shared</entry>
- <entry key="VM_SHARED_FOLDERS_OSX">$(user.home)/Public|/home/maemo/shared|false|true|SAMBA|$(user.name)'s Public Folder,$(user.home)/Public|/scratchbox/users/maemo/home/maemo/shared|false|true|SAMBA|$(user.name)'s Public Folder</entry>
+ <entry key="VM_SHARED_FOLDERS_WIN32">c:\maemo\shared|/home/maemo/shared|false|true|SMB|shared,c:\maemo\shared|/scratchbox/users/maemo/home/maemo/shared|false|true|SMB|shared</entry>
+ <entry key="VM_SHARED_FOLDERS_UNIX">$(user.home)/maemo/shared|/home/maemo/shared|false|true|SMB|shared,$(user.home)/maemo/shared|/scratchbox/users/maemo/home/maemo/shared|false|true|SMB|shared</entry>
+ <entry key="VM_SHARED_FOLDERS_OSX">$(user.home)/Public|/home/maemo/shared|false|true|SMB|$(user.name)'s Public Folder,$(user.home)/Public|/scratchbox/users/maemo/home/maemo/shared|false|true|SMB|$(user.name)'s Public Folder</entry>
</properties>
\ No newline at end of file
Modified: branches/work_Ed/org.maemo.esbox.vm/src/org/maemo/esbox/internal/api/vm/ui/preferences/CommonVirtualMachineSettingsPreferencePage.java
===================================================================
--- branches/work_Ed/org.maemo.esbox.vm/src/org/maemo/esbox/internal/api/vm/ui/preferences/CommonVirtualMachineSettingsPreferencePage.java 2008-12-31 16:28:05 UTC (rev 1106)
+++ branches/work_Ed/org.maemo.esbox.vm/src/org/maemo/esbox/internal/api/vm/ui/preferences/CommonVirtualMachineSettingsPreferencePage.java 2008-12-31 21:22:59 UTC (rev 1107)
@@ -53,7 +53,7 @@
getFieldEditorParent());
addField(feUserName);
text = feUserName.getTextControl(getFieldEditorParent());
- text.setToolTipText("The user under whose control processes are launched and files are accessed. This user must be capable of 'sudo' for commands that require root privileges.");
+ text.setToolTipText("The user under whose control processes are launched and files are accessed.\n\nThis user must be capable of 'sudo' for commands that require root privileges.");
feUserPassword = new StringFieldEditor(
VirtualMachinePreferenceConstants.VM_USER_PASSWORD,
@@ -107,7 +107,7 @@
addField(feUserPassword);
text = feUserPassword.getTextControl(getFieldEditorParent());
text.setEchoChar('\u25CF'); // Black Circle
- text.setToolTipText("Password for the user mentioned above.\nNOTE: the password is encrypted for storage but can still show up in the UI.");
+ text.setToolTipText("Password for the user mentioned above.\n\nNOTE: the password is encrypted for storage but can still show up in the UI.");
feSshTargetAddr = new StringFieldEditor(
VirtualMachinePreferenceConstants.VM_SSH_TARGET_ADDR,
@@ -116,7 +116,7 @@
getFieldEditorParent());
addField(feSshTargetAddr);
text = feSshTargetAddr.getTextControl(getFieldEditorParent());
- text.setToolTipText("Specify the address of the machine as seen from the host.\nThis may be localhost (127.0.0.1) if the machine shares a network with the host,\nbut be sure the SSH port is configured as well.");
+ text.setToolTipText("Specify the address of the machine as seen from the host.\n\nThis may be localhost (127.0.0.1) if the machine shares a network with the host,\nbut be sure the SSH port is configured as well.");
feSshTargetPort = new IntegerFieldEditor(
VirtualMachinePreferenceConstants.VM_SSH_TARGET_PORT,
@@ -125,7 +125,7 @@
5);
addField(feSshTargetPort);
text = feSshTargetPort.getTextControl(getFieldEditorParent());
- text.setToolTipText("Specify the SSH port visible in the machine.\nThis may be different from the port seen inside the machine,\nespecially if the port is redirected to be visible to the host.");
+ text.setToolTipText("Specify the SSH port visible in the machine.\n\nThis may be different from the port seen inside the machine,\nespecially if the port is redirected to be visible to the host.");
feSshHostAddr = new StringFieldEditor(
VirtualMachinePreferenceConstants.VM_SSH_HOST_ADDR,
@@ -145,6 +145,7 @@
text = feSshHostPort.getTextControl(getFieldEditorParent());
text.setToolTipText("Specify the SSH port visible in the machine.\nThis may be different from the port seen inside the machine,\nespecially if the port is redirected to be visible to the host.");
*/
+ /*
feCifsHostPort = new IntegerFieldEditor(
VirtualMachinePreferenceConstants.VM_CIFS_TARGET_PORT,
"Target Samba port:",
@@ -153,6 +154,6 @@
addField(feCifsHostPort);
text = feCifsHostPort.getTextControl(getFieldEditorParent());
text.setToolTipText("Specify the Samba/CIFS port used in the machine.\nThis may be different from the port seen outside the machine,\nespecially if the port is redirected to be visible to the host.");
-
+ */
}
}
More information about the Esbox-commits
mailing list