package org.nightlabs.jfire.issuetracking.ui.issue;
import java.io.File;
import java.io.IOException;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.FileDialog;
import org.nightlabs.base.ui.composite.ListComposite;
import org.nightlabs.base.ui.composite.XComposite;
import org.nightlabs.base.ui.util.RCPUtil;
import org.nightlabs.jfire.idgenerator.IDGenerator;
import org.nightlabs.jfire.issue.Issue;
import org.nightlabs.jfire.issue.IssueFileAttachment;
import org.nightlabs.jfire.issuetracking.ui.issue.editor.IssueFileAttachmentUtil;
import org.nightlabs.jfire.issuetracking.ui.resource.Messages;
/**
* @author Chairat Kongarayawetchakun <!-- chairat [AT] nightlabs [DOT] de -->
*/
@Deprecated
public class IssueFileAttachmentComposite
extends XComposite
{
private ListComposite<IssueFileAttachment> issueFileAttachmentListComposite;
private Issue issue;
public static enum IssueFileAttachmentCompositeStyle {
withAddRemoveButton,
withoutAddRemoveButton
}
private IssueFileAttachmentCompositeStyle style;
/**
*
* @param parent
* @param compositeStyle
* @param layoutMode
* @param style
*/
public IssueFileAttachmentComposite(Composite parent, int compositeStyle, LayoutMode layoutMode, IssueFileAttachmentCompositeStyle style) {
super(parent, compositeStyle, layoutMode);
this.style = style;
createContents();
}
private void createContents() {
XComposite mainComposite = new XComposite(this, SWT.NONE, LayoutMode.TIGHT_WRAPPER);
mainComposite.getGridLayout().numColumns = 2;
issueFileAttachmentListComposite = new ListComposite<IssueFileAttachment>(mainComposite, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
issueFileAttachmentListComposite.setLabelProvider(new LabelProvider() {
@Override
public String getText(Object element) {
if (element instanceof IssueFileAttachment) {
IssueFileAttachment issueFileAttachment = (IssueFileAttachment)element;
return String.format("%s (%s)", issueFileAttachment.getFileName(), IssueFileAttachmentUtil.getFileSizeString(issueFileAttachment)); //$NON-NLS-1$
}
return null;
}
});
GridData gridData = new GridData(GridData.FILL_BOTH);
mainComposite.setLayoutData(gridData);
if (style == IssueFileAttachmentCompositeStyle.withAddRemoveButton) {
XComposite buttonComposite = new XComposite(mainComposite, SWT.NONE, LayoutMode.TIGHT_WRAPPER);
GridData gd = new GridData(GridData.FILL_VERTICAL);
// gd.verticalAlignment = GridData.VERTICAL_ALIGN_BEGINNING;
buttonComposite.setLayoutData(gd);
Button addButton = new Button(buttonComposite, SWT.PUSH);
addButton.setText(Messages.getString("org.nightlabs.jfire.issuetracking.ui.issue.IssueFileAttachmentComposite.button.addFile.text")); //$NON-NLS-1$
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.verticalAlignment = GridData.VERTICAL_ALIGN_BEGINNING;
addButton.setLayoutData(gd);
addButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent event)
{
FileDialog fileDialog = new FileDialog(RCPUtil.getActiveShell(), SWT.OPEN);
final String selectedFile = fileDialog.open();
if (selectedFile != null) {
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
File file = new File(selectedFile);
IssueFileAttachment issueFileAttachment = new IssueFileAttachment(issue.getOrganisationID(), IDGenerator.nextID(IssueFileAttachment.class), issue);
try {
issueFileAttachment.loadFile(file);
} catch (IOException e) {
throw new RuntimeException(e);
}
addIssueFileAttachment(issueFileAttachment);
}
});
}
}
});
Button removeButton = new Button(buttonComposite, SWT.PUSH);
removeButton.setText(Messages.getString("org.nightlabs.jfire.issuetracking.ui.issue.IssueFileAttachmentComposite.button.removeFile.text")); //$NON-NLS-1$
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.verticalAlignment = GridData.VERTICAL_ALIGN_BEGINNING;
removeButton.setLayoutData(gd);
removeButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent event) {
issue.removeIssueFileAttachment(issueFileAttachmentListComposite.getSelectedElement());
issueFileAttachmentListComposite.removeSelected();
}
});
// buttonComposite.setLayoutData(new GridData());
}
gridData = new GridData(GridData.FILL_BOTH);
gridData.grabExcessHorizontalSpace = true;
mainComposite.setLayoutData(gridData);
}
/**
*
* @param issue
*/
public void setIssue(Issue issue) {
this.issue = issue;
issueFileAttachmentListComposite.setInput(issue.getIssueFileAttachments());
}
/**
*
* @return
*/
public IssueFileAttachment getSelectedIssueFileAttachment() {
return issueFileAttachmentListComposite.getSelectedElement();
}
/**
*
* @param issueFileAttachment
*/
public void addIssueFileAttachment(IssueFileAttachment issueFileAttachment) {
issueFileAttachmentListComposite.addElement(issueFileAttachment);
issue.addIssueFileAttachment(issueFileAttachment);
}
}