Use SWT hierarchical part
authorMathieu Baudier <mbaudier@argeo.org>
Fri, 3 Jun 2022 03:49:36 +0000 (05:49 +0200)
committerMathieu Baudier <mbaudier@argeo.org>
Fri, 3 Jun 2022 03:49:36 +0000 (05:49 +0200)
org.argeo.app.ui/src/org/argeo/app/ui/people/UsersEntryArea.java

index b7720aefa9fa9cbc9366150769b0ea3cd5dbdaf7..7e043776a70825d3c62173cea203be09b5b72c86 100644 (file)
@@ -7,6 +7,7 @@ import javax.jcr.RepositoryException;
 
 import org.argeo.api.acr.Content;
 import org.argeo.api.cms.CmsTheme;
+import org.argeo.api.cms.CmsView;
 import org.argeo.app.ui.SuiteEvent;
 import org.argeo.app.ui.SuiteIcon;
 import org.argeo.app.ui.dialogs.NewUserWizard;
@@ -16,21 +17,18 @@ import org.argeo.cms.swt.CmsSwtUtils;
 import org.argeo.cms.swt.Selected;
 import org.argeo.cms.swt.acr.SwtUiProvider;
 import org.argeo.cms.swt.dialogs.CmsWizardDialog;
+import org.argeo.cms.swt.widgets.SwtHierarchicalPart;
 import org.argeo.cms.ui.CmsUiProvider;
 import org.eclipse.jface.window.Window;
 import org.eclipse.jface.wizard.Wizard;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.ToolBar;
 import org.eclipse.swt.widgets.ToolItem;
-import org.eclipse.swt.widgets.Tree;
 import org.eclipse.swt.widgets.TreeItem;
-import org.osgi.service.useradmin.Group;
 import org.osgi.service.useradmin.User;
 
 /** Entry to the admin area. */
@@ -41,28 +39,56 @@ public class UsersEntryArea implements SwtUiProvider, CmsUiProvider {
        @Override
        public Control createUiPart(Composite parent, Content context) {
                CmsTheme theme = CmsSwtUtils.getCmsTheme(parent);
+               CmsView cmsView = CmsSwtUtils.getCmsView(parent);
                parent.setLayout(new GridLayout());
 
                List<User> orgs = cmsUserManager.listGroups(null, true, false);
 
-               final Tree tree = new Tree(parent, SWT.VIRTUAL | SWT.BORDER);
-               tree.addListener(SWT.SetData, event -> {
-                       TreeItem item = (TreeItem) event.item;
-                       TreeItem parentItem = item.getParentItem();
-                       String text = null;
-                       if (parentItem == null) {
-                               int index = tree.indexOf(item);
+               SwtHierarchicalPart tree = new SwtHierarchicalPart(parent, SWT.NONE) {
+
+                       @Override
+                       protected void refreshRootItem(TreeItem item) {
+                               int index = getTree().indexOf(item);
                                User org = (User) orgs.get(index);
                                item.setData(org);
-                               text = org.getName();
-                       } else {
-                               text = parentItem.getText() + " - " + parentItem.indexOf(item);
+                               item.setText(org.getName());
+
+                               item.setItemCount(10);
                        }
-                       item.setText(text);
-                       item.setItemCount(10);
-               });
-               tree.setItemCount(orgs.size());
-               tree.setLayoutData(CmsSwtUtils.fillAll());
+
+                       @Override
+                       protected void refreshItem(TreeItem parentItem, TreeItem item) {
+                               String text = parentItem.getText() + " - " + parentItem.indexOf(item);
+                               item.setText(text);
+                               item.setItemCount(10);
+                       }
+
+                       @Override
+                       protected int getRootItemCount() {
+                               return orgs.size();
+                       }
+
+               };
+
+//             final Tree tree = new Tree(parent, SWT.VIRTUAL | SWT.BORDER);
+//             tree.addListener(SWT.SetData, event -> {
+//                     TreeItem item = (TreeItem) event.item;
+//                     TreeItem parentItem = item.getParentItem();
+//                     String text = null;
+//                     if (parentItem == null) {
+//                             int index = tree.indexOf(item);
+//                             User org = (User) orgs.get(index);
+//                             item.setData(org);
+//                             text = org.getName();
+//                     } else {
+//                             text = parentItem.getText() + " - " + parentItem.indexOf(item);
+//                     }
+//                     item.setText(text);
+//                     item.setItemCount(10);
+//             });
+//             tree.setItemCount(orgs.size());
+//             tree.setLayoutData(CmsSwtUtils.fillAll());
+               CmsSwtUtils.fill(tree);
 
                Composite bottom = new Composite(parent, SWT.NONE);
                bottom.setLayoutData(CmsSwtUtils.fillWidth());
@@ -94,31 +120,48 @@ public class UsersEntryArea implements SwtUiProvider, CmsUiProvider {
 //                     }
 //
 //             });
-               
-               tree.addSelectionListener(new SelectionListener() {
-                       
-                       @Override
-                       public void widgetSelected(SelectionEvent e) {
-                               User user = (User) e.item.getData();
-                               if (user != null) {
-                                       CmsSwtUtils.getCmsView(parent).sendEvent(SuiteEvent.refreshPart.topic(),
-                                                       SuiteEvent.eventProperties(user));
-                                       deleteItem.setEnabled(true);
-                               } else {
-                                       deleteItem.setEnabled(false);
-                               }
+
+               tree.onSelected((o) -> {
+                       User user = (User) o;
+                       if (user != null) {
+                               cmsView.sendEvent(SuiteEvent.refreshPart.topic(), SuiteEvent.eventProperties(user));
+                               deleteItem.setEnabled(true);
+                       } else {
+                               deleteItem.setEnabled(false);
                        }
-                       
-                       @Override
-                       public void widgetDefaultSelected(SelectionEvent e) {
-                               User user = (User) e.item.getData();
-                               if (user != null) {
-                                       CmsSwtUtils.getCmsView(parent).sendEvent(SuiteEvent.openNewPart.topic(),
-                                                       SuiteEvent.eventProperties(user));
-                               }
+               });
+
+               tree.onAction((o) -> {
+                       User user = (User) o;
+                       if (user != null) {
+                               cmsView.sendEvent(SuiteEvent.openNewPart.topic(), SuiteEvent.eventProperties(user));
                        }
                });
 
+//             tree.addSelectionListener(new SelectionListener() {
+//
+//                     @Override
+//                     public void widgetSelected(SelectionEvent e) {
+//                             User user = (User) e.item.getData();
+//                             if (user != null) {
+//                                     CmsSwtUtils.getCmsView(parent).sendEvent(SuiteEvent.refreshPart.topic(),
+//                                                     SuiteEvent.eventProperties(user));
+//                                     deleteItem.setEnabled(true);
+//                             } else {
+//                                     deleteItem.setEnabled(false);
+//                             }
+//                     }
+//
+//                     @Override
+//                     public void widgetDefaultSelected(SelectionEvent e) {
+//                             User user = (User) e.item.getData();
+//                             if (user != null) {
+//                                     CmsSwtUtils.getCmsView(parent).sendEvent(SuiteEvent.openNewPart.topic(),
+//                                                     SuiteEvent.eventProperties(user));
+//                             }
+//                     }
+//             });
+
                addItem.addSelectionListener((Selected) (e) -> {
                        // SuiteUtils.getOrCreateUserNode(adminSession, userDn);
                        Wizard wizard = new NewUserWizard(null);
@@ -129,6 +172,8 @@ public class UsersEntryArea implements SwtUiProvider, CmsUiProvider {
                        }
                });
 
+               tree.refresh();
+
                return tree;
        }