package org.nightlabs.jfire.issuetimetracking.admin.ui; import javax.jdo.FetchPlan; 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.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.forms.editor.FormPage; import org.eclipse.ui.forms.widgets.ExpandableComposite; import org.nightlabs.base.ui.composite.ListComposite; import org.nightlabs.base.ui.composite.XComposite; import org.nightlabs.base.ui.editor.ToolBarSectionPart; import org.nightlabs.jdo.NLJDOHelper; import org.nightlabs.jfire.accounting.Currency; import org.nightlabs.jfire.accounting.PriceFragmentType; import org.nightlabs.jfire.accounting.dao.PriceFragmentTypeDAO; import org.nightlabs.jfire.idgenerator.IDGenerator; import org.nightlabs.jfire.issuetimetracking.ProjectCost; import org.nightlabs.jfire.issuetimetracking.ProjectCostValue; import org.nightlabs.jfire.security.User; import org.nightlabs.progress.NullProgressMonitor; /** * @author Chairat Kongarayawetchakun - chairat [AT] nightlabs [DOT] de */ public class UserCostSection extends ToolBarSectionPart { private XComposite client; private ListComposite<User> userList; // private Spinner costSpinner; // private Spinner revenueSpinner; private CostRevenueComposite costRevenueComposite; private User selectedUser; // private ProjectCostValue projectCostValue; /** * @param page * @param parent * @param style * @param title */ public UserCostSection(FormPage page, Composite parent) { super( page, parent, ExpandableComposite.EXPANDED | ExpandableComposite.TITLE_BAR | ExpandableComposite.TWISTIE, "User Cost"); getSection().setLayoutData(new GridData(GridData.FILL_BOTH)); getSection().setLayout(new GridLayout()); client = new XComposite(getSection(), SWT.NONE); client.getGridLayout().numColumns = 1; GridData gridData = new GridData(GridData.FILL_BOTH); client.setLayoutData(gridData); //User List XComposite userComposite = new XComposite(client, SWT.NONE); userComposite.getGridLayout().numColumns = 2; gridData = new GridData(GridData.FILL_BOTH); userComposite.setLayoutData(gridData); userList = new ListComposite<User>(userComposite, SWT.NONE); userList.setLabelProvider(new LabelProvider() { @Override public String getText(Object element) { if (element instanceof User) { User user = (User) element; return user.getName(); } return ""; } }); userList.addSelectionChangedListener(new ISelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent event) { selectedUser = userList.getSelectedElement(); if (selectedUser == null){ return; } ProjectCostValue projectCostValue = projectCost.getProjectCostValue(selectedUser.getUserID()); if (projectCostValue == null) projectCostValue = createProjectCostValue(selectedUser); costRevenueComposite.setCurrency(projectCost.getCurrency()); costRevenueComposite.setRevenue(projectCostValue.getRevenue().getAmount()); costRevenueComposite.setCost(projectCostValue.getCost().getAmount()); costRevenueComposite.setEnabled(true); // costSpinner.setEnabled(true); // revenueSpinner.setEnabled(true); // // costSpinner.setSelection((int)(projectCostValue.getCost().getAmount())); // revenueSpinner.setSelection((int)(projectCostValue.getRevenue().getAmount())); } }); gridData = new GridData(GridData.FILL_BOTH); userList.setLayoutData(gridData); XComposite c = new XComposite(userComposite, SWT.NONE); c.getGridLayout().numColumns = 2; //Cost costRevenueComposite = new CostRevenueComposite(c, SWT.NONE, false); costRevenueComposite.setEnabled(false); // Label monthlyCostLabel = new Label(c, SWT.NONE); // monthlyCostLabel.setText("Hourly Cost"); // costSpinner = new Spinner(c, SWT.NONE); // costSpinner.setEnabled(false); // costSpinner.addModifyListener(modifyListener); // gridData = new GridData(); // gridData.verticalAlignment = GridData.VERTICAL_ALIGN_CENTER; // gridData.widthHint = 150; // gridData.verticalIndent = 5; // costSpinner.setLayoutData(gridData); // costSpinner.setMinimum(0); // costSpinner.setMaximum(Integer.MAX_VALUE); //Revenue // Label monthlyRevenueLabel = new Label(c, SWT.NONE); // monthlyRevenueLabel.setText("Hourly Revenue"); // revenueSpinner = new Spinner(c, SWT.NONE); // revenueSpinner.setMinimum(0); // revenueSpinner.setMaximum(Integer.MAX_VALUE); // revenueSpinner.setEnabled(false); // revenueSpinner.addModifyListener(modifyListener); // gridData = new GridData(); // gridData.verticalAlignment = GridData.VERTICAL_ALIGN_CENTER; // gridData.widthHint = 150; // gridData.verticalIndent = 5; // revenueSpinner.setLayoutData(gridData); getSection().setClient(client); } public XComposite getClient() { return client; } private PriceFragmentType priceFragmentType; // private ModifyListener modifyListener = new ModifyListener() { // @Override // public void modifyText(ModifyEvent e) { // if (priceFragmentType == null) // priceFragmentType = // PriceFragmentTypeDAO.sharedInstance().getPriceFragmentType(PriceFragmentType.PRICE_FRAGMENT_TYPE_ID_TOTAL, // new String[] { FetchPlan.DEFAULT}, // NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT, // new NullProgressMonitor()); // // if (selectedUser != null) { // ProjectCostValue projectCostValue = projectCost.getProjectCostValue(selectedUser.getUserID()); // if (projectCostValue == null) { // projectCostValue = createProjectCostValue(selectedUser); // } // //// if (e.getSource() == costSpinner) //// projectCostValue.getCost().setAmount(priceFragmentType, costSpinner.getSelection()); //// if (e.getSource() == revenueSpinner) //// projectCostValue.getRevenue().setAmount(priceFragmentType, revenueSpinner.getSelection()); // // markDirty(); // } // } // }; protected void assertSWTThread() { if (Display.getCurrent() == null) throw new IllegalStateException("Thread mismatch! This method must be called on the SWT UI thread!"); } private ProjectCost projectCost; public void setProjectCost(final ProjectCost projectCost) { assertSWTThread(); this.projectCost = projectCost; userList.setInput(projectCost.getProject().getMembers()); } @Override public void refresh() { super.refresh(); if (projectCost != null) costRevenueComposite.setCurrency(projectCost.getCurrency()); } public void setCurrency(Currency currency) { // costSpinner.setDigits(currency.getDecimalDigitCount()); // revenueSpinner.setDigits(currency.getDecimalDigitCount()); } private ProjectCostValue createProjectCostValue(User user) { ProjectCostValue projectCostValue = new ProjectCostValue(selectedUser, projectCost, IDGenerator.nextID(ProjectCostValue.class)); if (priceFragmentType == null) priceFragmentType = PriceFragmentTypeDAO.sharedInstance().getPriceFragmentType(PriceFragmentType.PRICE_FRAGMENT_TYPE_ID_TOTAL, new String[] { FetchPlan.DEFAULT}, NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT, new NullProgressMonitor()); projectCostValue.getCost().setAmount(priceFragmentType, projectCost.getDefaultCost().getAmount()); projectCostValue.getRevenue().setAmount(priceFragmentType, projectCost.getDefaultRevenue().getAmount()); projectCost.addProjectCostValue(projectCostValue); return projectCostValue; } }