/** * */ package org.nightlabs.jfire.issuetracking.ui.project; import java.util.Set; import org.eclipse.jface.action.Action; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; 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.resource.SharedImages; import org.nightlabs.jfire.base.ui.security.UserSearchDialog; import org.nightlabs.jfire.base.ui.security.UserTable; import org.nightlabs.jfire.issue.project.Project; import org.nightlabs.jfire.issuetracking.ui.IssueTrackingPlugin; import org.nightlabs.jfire.issuetracking.ui.resource.Messages; import org.nightlabs.jfire.security.User; /** * @author Chairat Kongarayawetchakun <!-- chairat [AT] nightlabs [DOT] de --> * */ public class ProjectMemberSection extends ToolBarSectionPart { private Label projectManagerNameLabel; private UserTable userTable; public ProjectMemberSection(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.ProjectMemberSection.section.text")); //$NON-NLS-1$ getSection().setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); getSection().setLayout(new GridLayout()); XComposite client = new XComposite(getSection(), SWT.NONE, LayoutMode.TIGHT_WRAPPER); projectManagerNameLabel = new Label(client, SWT.WRAP); projectManagerNameLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); projectManagerNameLabel.setText(Messages.getString("org.nightlabs.jfire.issuetracking.ui.project.ProjectMemberSection.label.projectManagerName.text")); //$NON-NLS-1$ userTable = new UserTable(client, SWT.NONE); GridData gd = new GridData(GridData.FILL_BOTH); gd.heightHint = 200; userTable.setLayoutData(gd); getSection().setClient(client); getToolBarManager().add(new AssignPMAction()); getToolBarManager().add(new AddMemberAction()); updateToolBarManager(); } private Project project; public void setProject(final Project project) { this.project = project; Display.getDefault().asyncExec(new Runnable() { @Override public void run() { Display.getDefault().asyncExec(new Runnable() { @Override public void run() { User p = project.getProjectManager(); projectManagerNameLabel.setText( String.format( Messages.getString("org.nightlabs.jfire.issuetracking.ui.project.ProjectMemberSection.label.projectManagerName.fill.text"), //$NON-NLS-1$ p == null? "" : p.getName()) //$NON-NLS-1$ ); Set<User> members = project.getMembers(); userTable.setInput(members); if (project.getObjectId().equals(Project.PROJECT_ID_DEFAULT)) { userTable.setEnabled(false); getToolBarManager().getControl().setEnabled(false); } } }); } }); } public Project getProject() { return project; } private ModifyListener modifyListener = new ModifyListener() { public void modifyText(ModifyEvent arg0) { markDirty(); } }; private User projectManager; public class AssignPMAction extends Action { public AssignPMAction() { super(); setId(AssignPMAction.class.getName()); setImageDescriptor(SharedImages.getSharedImageDescriptor( IssueTrackingPlugin.getDefault(), ProjectMemberSection.class, "Assign")); //$NON-NLS-1$ setToolTipText(Messages.getString("org.nightlabs.jfire.issuetracking.ui.project.ProjectMemberSection.AssignPMAction.toolTipText")); //$NON-NLS-1$ setText(Messages.getString("org.nightlabs.jfire.issuetracking.ui.project.ProjectMemberSection.AssignPMAction.text")); //$NON-NLS-1$ } @Override public void run() { UserSearchDialog userSearchDialog = new UserSearchDialog(getSection().getShell(), null); int returnCode = userSearchDialog.open(); if (returnCode == Dialog.OK) { projectManager = userSearchDialog.getSelectedUser(); if (projectManager != null) { project.setProjectManager(projectManager); project.addMember(projectManager); } setProject(project); markDirty(); }//if } } public class AddMemberAction extends Action { public AddMemberAction() { super(); setId(AddMemberAction.class.getName()); setImageDescriptor(SharedImages.getSharedImageDescriptor( IssueTrackingPlugin.getDefault(), ProjectMemberSection.class, "Add")); //$NON-NLS-1$ setToolTipText(Messages.getString("org.nightlabs.jfire.issuetracking.ui.project.ProjectMemberSection.AddMemberAction.toolTipText")); //$NON-NLS-1$ setText(Messages.getString("org.nightlabs.jfire.issuetracking.ui.project.ProjectMemberSection.AddMemberAction.text")); //$NON-NLS-1$ } @Override public void run() { UserSearchDialog userSearchDialog = new UserSearchDialog(getSection().getShell(), null); int returnCode = userSearchDialog.open(); if (returnCode == Dialog.OK) { User user = userSearchDialog.getSelectedUser(); if (user != null) { project.addMember(user); } userTable.setInput(project.getMembers()); markDirty(); }//if } } }