X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.suite.e4%2Fsrc%2Forg%2Fargeo%2Fsuite%2Fe4%2Fparts%2FDefaultDashboardEditor.java;h=dd1c2b084732003422bc110d68220a7f92c9d0af;hb=3c876e81b463a82e9ac7b456e126a3e5dd2fef09;hp=3a89fea5d97f0e32412cd389d69cd7e9d2bded2b;hpb=40776acccb8ac4457d96a4c7448cd6e5f404771c;p=gpl%2Fargeo-suite.git diff --git a/org.argeo.suite.e4/src/org/argeo/suite/e4/parts/DefaultDashboardEditor.java b/org.argeo.suite.e4/src/org/argeo/suite/e4/parts/DefaultDashboardEditor.java index 3a89fea..dd1c2b0 100644 --- a/org.argeo.suite.e4/src/org/argeo/suite/e4/parts/DefaultDashboardEditor.java +++ b/org.argeo.suite.e4/src/org/argeo/suite/e4/parts/DefaultDashboardEditor.java @@ -16,9 +16,11 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.argeo.activities.ActivitiesNames; import org.argeo.activities.ActivitiesService; +import org.argeo.activities.ActivitiesTypes; import org.argeo.activities.ui.TaskViewerContextMenu; +import org.argeo.api.NodeUtils; import org.argeo.cms.auth.CurrentUser; -import org.argeo.cms.util.CmsUtils; +import org.argeo.cms.ui.util.CmsUiUtils; import org.argeo.connect.ConnectException; import org.argeo.connect.ConnectNames; import org.argeo.connect.ui.ConnectWorkbenchUtils; @@ -26,15 +28,16 @@ import org.argeo.connect.ui.Refreshable; import org.argeo.connect.util.ConnectJcrUtils; import org.argeo.eclipse.ui.EclipseUiUtils; import org.argeo.jcr.JcrUtils; -import org.argeo.node.NodeUtils; +import org.argeo.suite.e4.SuiteMsg; import org.argeo.tracker.TrackerNames; import org.argeo.tracker.TrackerService; -import org.argeo.tracker.TrackerTypes; import org.argeo.tracker.core.TrackerUtils; import org.argeo.tracker.ui.TaskListLabelProvider; import org.argeo.tracker.ui.TaskVirtualListComposite; -import org.eclipse.e4.ui.di.Focus; +import org.eclipse.e4.core.di.annotations.Optional; import org.eclipse.jface.viewers.ColumnLabelProvider; +import org.eclipse.jface.viewers.DoubleClickEvent; +import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.TableViewer; @@ -62,7 +65,9 @@ public class DefaultDashboardEditor extends AbstractSuiteDashboard implements Re @Inject private ActivitiesService activitiesService; + @Inject + @Optional private TrackerService trackerService; private String datePattern = "dd MMM yyyy"; @@ -89,10 +94,10 @@ public class DefaultDashboardEditor extends AbstractSuiteDashboard implements Re @Override public void forceRefresh(Object object) { - CmsUtils.clear(headerCmp); - populateHeaderPart(headerCmp, NodeUtils.getUserHome(getSession())); + CmsUiUtils.clear(headerCmp); + populateHeaderPart(headerCmp, NodeUtils.getUserHome(getHomeSession())); - CmsUtils.clear(taskListCmp); + CmsUiUtils.clear(taskListCmp); populateTaskListCmp(taskListCmp); headerCmp.getParent().layout(true, true); @@ -100,41 +105,24 @@ public class DefaultDashboardEditor extends AbstractSuiteDashboard implements Re private void populateTaskListCmp(Composite parent) { parent.setLayout(EclipseUiUtils.noSpaceGridLayout()); - NodeIterator nit = activitiesService.getMyTasks(getSession(), true); + NodeIterator nit = activitiesService.getMyTasks(getMainSession(), true); if (!nit.hasNext()) { Composite noTaskCmp = new Composite(parent, SWT.NO_FOCUS); noTaskCmp.setLayoutData(EclipseUiUtils.fillAll()); noTaskCmp.setLayout(new GridLayout()); - Label noTaskLbl = new Label(noTaskCmp, SWT.CENTER); - noTaskLbl.setText(" You have no pending Task. "); - CmsUtils.markup(noTaskLbl); - noTaskLbl.setLayoutData(new GridData(SWT.CENTER, SWT.BOTTOM, true, true)); - - final Link createTaskLk = new Link(noTaskCmp, SWT.CENTER); - createTaskLk.setText(" Create a task "); - createTaskLk.setLayoutData(new GridData(SWT.CENTER, SWT.TOP, true, true)); - - createTaskLk.addSelectionListener(new SelectionAdapter() { - private static final long serialVersionUID = -9028457805156989935L; - - @Override - public void widgetSelected(SelectionEvent e) { - String mainMixin = TrackerTypes.TRACKER_TASK; - String pathCreated = ConnectWorkbenchUtils.createAndConfigureEntity(createTaskLk.getShell(), - getSession(), getSystemAppService(), getSystemWorkbenchService(), mainMixin); - if (EclipseUiUtils.notEmpty(pathCreated)) - forceRefresh(null); - } - }); + // Label noTaskLbl = new Label(noTaskCmp, SWT.CENTER); + // noTaskLbl.setText(" You have no pending Task. "); + // CmsUiUtils.markup(noTaskLbl); + // noTaskLbl.setLayoutData(new GridData(SWT.CENTER, SWT.BOTTOM, true, true)); } else { - TaskListLabelProvider labelProvider = new TaskListLabelProvider(trackerService); + TaskListLabelProvider labelProvider = new TaskListLabelProvider(getSystemAppService()); tvlc = new TaskVirtualListComposite(parent, SWT.NO_FOCUS, (ILabelProvider) labelProvider, 54); tvlc.setLayoutData(EclipseUiUtils.fillAll()); final TableViewer viewer = tvlc.getTableViewer(); viewer.setInput(JcrUtils.nodeIteratorToList(nit).toArray()); - final TaskViewerContextMenu contextMenu = new TaskViewerContextMenu(viewer, getSession(), + final TaskViewerContextMenu contextMenu = new TaskViewerContextMenu(viewer, getHomeSession(), activitiesService) { @Override public boolean performAction(String actionId) { @@ -161,7 +149,15 @@ public class DefaultDashboardEditor extends AbstractSuiteDashboard implements Re } } }); + viewer.addDoubleClickListener(new IDoubleClickListener() { + @Override + public void doubleClick(DoubleClickEvent event) { + IStructuredSelection sel = (IStructuredSelection) viewer.getSelection(); + Node task = (Node) sel.getFirstElement(); + getSystemWorkbenchService().openEntityEditor(task); + } + }); } } @@ -186,15 +182,37 @@ public class DefaultDashboardEditor extends AbstractSuiteDashboard implements Re // Title Label titleLbl = new Label(leftCmp, SWT.WRAP | SWT.LEAD); - CmsUtils.markup(titleLbl); - String titleStr = " Hello " + CurrentUser.getDisplayName() + " "; + CmsUiUtils.markup(titleLbl); + String titleStr = "" + CurrentUser.getDisplayName() + ""; titleLbl.setText(titleStr); - GridData gd = new GridData(SWT.TOP, SWT.BOTTOM, false, false); - gd.verticalIndent = 5; - gd.horizontalIndent = 10; + GridData gd = new GridData(SWT.BEGINNING, SWT.TOP, false, false); + // gd.verticalIndent = 5; + // gd.horizontalIndent = 10; titleLbl.setLayoutData(gd); - NodeIterator nit = activitiesService.getMyTasks(getSession(), true); + final Link createTaskLk = new Link(leftCmp, SWT.CENTER); + // createTaskLk.setText("Create a task"); + createTaskLk.setText("" + SuiteMsg.newTodo.lead() + ""); + gd = new GridData(SWT.BEGINNING, SWT.TOP, false, false); + // gd.verticalIndent = 5; + gd.horizontalIndent = 10; + createTaskLk.setLayoutData(gd); + + createTaskLk.addSelectionListener(new SelectionAdapter() { + private static final long serialVersionUID = -9028457805156989935L; + + @Override + public void widgetSelected(SelectionEvent e) { + // String mainMixin = TrackerTypes.TRACKER_TASK; + String mainMixin = ActivitiesTypes.ACTIVITIES_TASK; + String pathCreated = ConnectWorkbenchUtils.createAndConfigureEntity(createTaskLk.getShell(), + getHomeSession(), getSystemAppService(), getSystemWorkbenchService(), mainMixin); + if (EclipseUiUtils.notEmpty(pathCreated)) + forceRefresh(null); + } + }); + + NodeIterator nit = activitiesService.getMyTasks(getHomeSession(), true); if (nit.hasNext()) { List overdueTasks = new ArrayList<>(); while (nit.hasNext()) { @@ -210,41 +228,44 @@ public class DefaultDashboardEditor extends AbstractSuiteDashboard implements Re } } - nit = trackerService.getMyMilestones(getSession(), true); - List openMilestones = new ArrayList<>(); - - if (nit.hasNext()) { - List overdueMilestones = new ArrayList<>(); - while (nit.hasNext()) { - Node currNode = nit.nextNode(); - openMilestones.add(currNode); - if (isOverdue(currNode, TrackerNames.TRACKER_TARGET_DATE)) - overdueMilestones.add(currNode); - } - if (!overdueMilestones.isEmpty()) { - Composite overdueCmp = new Composite(leftCmp, SWT.NO_FOCUS); - long size = overdueMilestones.size(); - String overdueStr = "You have " + size + " overdue milestone" + (size > 1 ? "s" : "") + ": "; - populateMuliValueClickableList(overdueCmp, overdueMilestones.toArray(new Node[0]), new MilestoneLp(), - overdueStr); + if (trackerService != null) { + nit = trackerService.getMyMilestones(getHomeSession(), true); + List openMilestones = new ArrayList<>(); + + if (nit.hasNext()) { + List overdueMilestones = new ArrayList<>(); + while (nit.hasNext()) { + Node currNode = nit.nextNode(); + openMilestones.add(currNode); + if (isOverdue(currNode, TrackerNames.TRACKER_TARGET_DATE)) + overdueMilestones.add(currNode); + } + if (!overdueMilestones.isEmpty()) { + Composite overdueCmp = new Composite(leftCmp, SWT.NO_FOCUS); + long size = overdueMilestones.size(); + String overdueStr = "You have " + size + " overdue milestone" + (size > 1 ? "s" : "") + ": "; + populateMuliValueClickableList(overdueCmp, overdueMilestones.toArray(new Node[0]), + new MilestoneLp(), overdueStr); + } } - } - // My projects - List openProjects = JcrUtils.nodeIteratorToList(trackerService.getMyProjects(getSession(), true)); - if (!openProjects.isEmpty()) { - Group myProjectsGp = new Group(rightCmp, SWT.NO_FOCUS); - myProjectsGp.setText("My open projects"); - myProjectsGp.setLayoutData(EclipseUiUtils.fillWidth()); - populateMuliValueClickableList(myProjectsGp, openProjects.toArray(new Node[0]), new ProjectLp(), null); - } + // My projects + List openProjects = JcrUtils.nodeIteratorToList(trackerService.getMyProjects(getHomeSession(), true)); + if (!openProjects.isEmpty()) { + Group myProjectsGp = new Group(rightCmp, SWT.NO_FOCUS); + myProjectsGp.setText("My open projects"); + myProjectsGp.setLayoutData(EclipseUiUtils.fillWidth()); + populateMuliValueClickableList(myProjectsGp, openProjects.toArray(new Node[0]), new ProjectLp(), null); + } - // My Milestones - if (!openMilestones.isEmpty()) { - Group myMilestoneGp = new Group(rightCmp, SWT.NO_FOCUS); - myMilestoneGp.setText("My open milestones"); - myMilestoneGp.setLayoutData(EclipseUiUtils.fillWidth()); - populateMuliValueClickableList(myMilestoneGp, openMilestones.toArray(new Node[0]), new MilestoneLp(), null); + // My Milestones + if (!openMilestones.isEmpty()) { + Group myMilestoneGp = new Group(rightCmp, SWT.NO_FOCUS); + myMilestoneGp.setText("My open milestones"); + myMilestoneGp.setLayoutData(EclipseUiUtils.fillWidth()); + populateMuliValueClickableList(myMilestoneGp, openMilestones.toArray(new Node[0]), new MilestoneLp(), + null); + } } } @@ -349,23 +370,18 @@ public class DefaultDashboardEditor extends AbstractSuiteDashboard implements Re } } - @Focus - public void setFocus() { - // refreshDocListGadget(); - } - - public void setActivitiesService(ActivitiesService activitiesService) { - this.activitiesService = activitiesService; - } - - public void setTrackerService(TrackerService trackerService) { - this.trackerService = trackerService; - } + // public void setActivitiesService(ActivitiesService activitiesService) { + // this.activitiesService = activitiesService; + // } + // + // public void setTrackerService(TrackerService trackerService) { + // this.trackerService = trackerService; + // } // LOCAL HELPERS private void populateMuliValueClickableList(Composite parent, Node[] nodes, ColumnLabelProvider lp, String listLabel) { - CmsUtils.clear(parent); + CmsUiUtils.clear(parent); RowLayout rl = new RowLayout(SWT.HORIZONTAL | SWT.WRAP); rl.wrap = true; rl.marginLeft = rl.marginTop = rl.marginBottom = 0; @@ -381,7 +397,7 @@ public class DefaultDashboardEditor extends AbstractSuiteDashboard implements Re int i = 1; for (Node node : nodes) { Link link = new Link(parent, SWT.NONE); - CmsUtils.markup(link); + CmsUiUtils.markup(link); link.setText(lp.getText(node) + (i != nodes.length ? ", " : "")); i++; // Color fc = lp.getForeground(node);