package org.nightlabs.jfire.issuetracking.ui.project;
import java.util.Collection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
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.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.forms.editor.FormPage;
import org.eclipse.ui.forms.widgets.ExpandableComposite;
import org.nightlabs.base.ui.composite.XComposite;
import org.nightlabs.base.ui.composite.XComposite.LayoutMode;
import org.nightlabs.base.ui.editor.ToolBarSectionPart;
import org.nightlabs.base.ui.language.I18nTextEditor;
import org.nightlabs.base.ui.language.I18nTextEditorMultiLine;
import org.nightlabs.base.ui.language.I18nTextEditor.EditMode;
import org.nightlabs.jfire.issue.project.Project;
import org.nightlabs.jfire.issue.project.ProjectType;
import org.nightlabs.jfire.issuetracking.ui.resource.Messages;
/**
* @author Chairat Kongarayawetchakun <!-- chairat [AT] nightlabs [DOT] de -->
*
*/
public class ProjectSection
extends ToolBarSectionPart
{
private Label projectTypeLabel;
private ProjectTypeComboComposite projectTypeCombo;
private Label nameLabel;
private I18nTextEditor nameText;
private Label descriptionLabel;
private I18nTextEditor descriptionText;
private Label createdTimeLabel;
private Label createdTimeTextLabel;
private Label updatedTimeLabel;
private Label updatedTimeTextLabel;
private Collection<ProjectType> projectTypes;
private ProjectType selectedProjectType;
private Button activeButton;
public ProjectSection(FormPage page, Composite parent, final ProjectEditorPageController controller) {
super(page, parent, ExpandableComposite.EXPANDED | ExpandableComposite.TWISTIE | ExpandableComposite.TITLE_BAR, Messages.getString("org.nightlabs.jfire.issuetracking.ui.project.ProjectSection.section.text")); //$NON-NLS-1$
getSection().setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
XComposite client = new XComposite(getSection(), SWT.NONE, LayoutMode.TIGHT_WRAPPER);
GridLayout gl = new GridLayout();
gl.numColumns = 2;
client.setLayout(gl);
projectTypeLabel = new Label(client, SWT.WRAP);
projectTypeLabel.setText(Messages.getString("org.nightlabs.jfire.issuetracking.ui.project.ProjectSection.label.projectType.text")); //$NON-NLS-1$
projectTypeCombo = new ProjectTypeComboComposite(client, SWT.NONE);
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
projectTypeCombo.setLayoutData(gd);
projectTypeCombo.addSelectionChangedListener(new ISelectionChangedListener(){
public void selectionChanged(SelectionChangedEvent e) {
controller.getProject().setProjectType(projectTypeCombo.getSelectedProjectType());
markDirty();
}
});
nameLabel = new Label(client, SWT.WRAP);
nameLabel.setText(Messages.getString("org.nightlabs.jfire.issuetracking.ui.project.ProjectSection.label.name.text")); //$NON-NLS-1$
nameText = new I18nTextEditor(client);
nameText.addModifyListener(modifyListener);
descriptionLabel = new Label(client, SWT.WRAP);
descriptionLabel.setText(Messages.getString("org.nightlabs.jfire.issuetracking.ui.project.ProjectSection.label.description.text")); //$NON-NLS-1$
descriptionText = new I18nTextEditorMultiLine(client, nameText.getLanguageChooser());
descriptionText.addModifyListener(modifyListener);
new Label(client, SWT.NONE).setText(""); //$NON-NLS-1$
activeButton = new Button(client, SWT.CHECK);
activeButton.setText(Messages.getString("org.nightlabs.jfire.issuetracking.ui.project.ProjectSection.button.active.text")); //$NON-NLS-1$
activeButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
controller.getProject().setActive(activeButton.getSelection());
markDirty();
}
});
createdTimeLabel = new Label(client, SWT.WRAP);
createdTimeLabel.setText(Messages.getString("org.nightlabs.jfire.issuetracking.ui.project.ProjectSection.label.createdTime.text")); //$NON-NLS-1$
createdTimeTextLabel = new Label(client, SWT.NONE);
createdTimeTextLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
updatedTimeLabel = new Label(client, SWT.WRAP);
updatedTimeLabel.setText(Messages.getString("org.nightlabs.jfire.issuetracking.ui.project.ProjectSection.label.updatedTime.text")); //$NON-NLS-1$
updatedTimeTextLabel = new Label(client, SWT.NONE);
updatedTimeTextLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
getSection().setClient(client);
}
private Project project;
public void setProject(final Project project) {
this.project = project;
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
ProjectType projectType = project.getProjectType();
if (projectType != null) {
projectTypeCombo.setSelectedProjectType(projectType);
}
nameText.setI18nText(project.getName(), EditMode.DIRECT);
descriptionText.setI18nText(project.getDescription(), EditMode.DIRECT);
createdTimeTextLabel.setText(project.getCreateTimestamp().toString());
updatedTimeTextLabel.setText(project.getUpdateTimestamp() == null? "-" : project.getUpdateTimestamp().toString()); //$NON-NLS-1$
activeButton.setSelection(project.isActive());
if (project.getObjectId().equals(Project.PROJECT_ID_DEFAULT)) {
projectTypeCombo.setEnabled(false);
nameText.setEnabled(false);
descriptionText.setEnabled(false);
}
}
});
}
public Project getProject() {
return project;
}
public ProjectType getSelectedProjectType() {
return selectedProjectType;
}
private ModifyListener modifyListener = new ModifyListener() {
public void modifyText(ModifyEvent arg0) {
markDirty();
}
};
public class ProjectTypeLabelProvider extends LabelProvider{
@Override
public String getText(Object element)
{
if (element instanceof ProjectType) {
ProjectType projectType = (ProjectType) element;
return projectType.getName().getText();
}
return super.getText(element);
}
}
}