/*******************************************************************************
* Copyright (c) 2013 Dirk Fauth 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:
* Dirk Fauth <dirk.fauth@gmail.com> - initial API and implementation
*******************************************************************************/
package org.eclipse.nebula.widgets.nattable.edit.gui;
import org.eclipse.jface.window.Window;
import org.eclipse.nebula.widgets.nattable.selection.SelectionLayer.MoveDirectionEnum;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.FileDialog;
/**
* This implementation is a proof of concept for special cell editors that wrap
* dialogs. The {@link FileDialog} is wrapped by this implementation. It will
* open the default file selection dialog on trying to activate the cell editor.
*
* @author Dirk Fauth
*
*/
public class FileDialogCellEditor extends AbstractDialogCellEditor {
/**
* The selection result of the {@link FileDialog}. Needed to update the data
* model after closing the dialog.
*/
private String selectedFile;
/**
* Flag to determine whether the dialog was closed or if it is still open.
*/
private boolean closed = false;
/*
* (non-Javadoc)
*
* @see
* org.eclipse.nebula.widgets.nattable.edit.editor.AbstractDialogCellEditor
* #open()
*/
@Override
public int open() {
this.selectedFile = getDialogInstance().open();
if (this.selectedFile == null) {
this.closed = true;
return Window.CANCEL;
} else {
commit(MoveDirectionEnum.NONE);
this.closed = true;
return Window.OK;
}
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.nebula.widgets.nattable.edit.editor.AbstractDialogCellEditor
* #createDialogInstance()
*/
@Override
public FileDialog createDialogInstance() {
this.closed = false;
return new FileDialog(this.parent.getShell(), SWT.OPEN);
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.nebula.widgets.nattable.edit.editor.AbstractDialogCellEditor
* #getDialogInstance()
*/
@Override
public FileDialog getDialogInstance() {
return (FileDialog) this.dialog;
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.nebula.widgets.nattable.edit.editor.AbstractDialogCellEditor
* #getEditorValue()
*/
@Override
public Object getEditorValue() {
return this.selectedFile;
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.nebula.widgets.nattable.edit.editor.AbstractDialogCellEditor
* #setEditorValue(java.lang.Object)
*/
@Override
public void setEditorValue(Object value) {
getDialogInstance()
.setFileName(value != null ? value.toString() : null);
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.nebula.widgets.nattable.edit.editor.AbstractDialogCellEditor
* #close()
*/
@Override
public void close() {
// as the FileDialog does not support a programmatically way of closing,
// this method is forced to do nothing
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.nebula.widgets.nattable.edit.editor.AbstractDialogCellEditor
* #isClosed()
*/
@Override
public boolean isClosed() {
return this.closed;
}
}