Experimental focus listener
authorBruno Sinou <bsinou@argeo.org>
Tue, 5 May 2015 09:25:36 +0000 (09:25 +0000)
committerBruno Sinou <bsinou@argeo.org>
Tue, 5 May 2015 09:25:36 +0000 (09:25 +0000)
git-svn-id: https://svn.argeo.org/commons/trunk@8088 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

org.argeo.cms/src/org/argeo/cms/maintenance/Browse.java
org.argeo.cms/src/org/argeo/cms/viewers/AbstractPageViewer.java
org.argeo.cms/src/org/argeo/cms/widgets/StyledControl.java

index c6dd755f0f8c3b0531310160eecd4f7e03932e8d..98792575bf92e982521eb4b16d7cb84cc5be5362 100644 (file)
@@ -256,6 +256,9 @@ public class Browse implements CmsUiProvider {
                        currParPath = JcrUtils.parentPath(currNodePath);
                if ("".equals(currParPath))
                        currParPath = "/";
+               
+               
+               
 
                Object[][] colMatrix = new Object[browserCols.size()][2];
 
@@ -292,6 +295,15 @@ public class Browse implements CmsUiProvider {
                                ((FilterEntitiesVirtualTable) colMatrix[l][1]).dispose();
                        }
 
+               // Remove disposed columns
+               // TODO investigate and fix the mechanism that leave them there after
+               // disposal
+               if (browserCols.containsKey(currNodePath)) {
+                       FilterEntitiesVirtualTable currCol = browserCols.get(currNodePath);
+                       if (currCol.isDisposed())
+                               browserCols.remove(currNodePath);
+               }
+
                if (!browserCols.containsKey(currNodePath))
                        createBrowserColumn(colViewer, node);
 
@@ -330,6 +342,10 @@ public class Browse implements CmsUiProvider {
 
        private Point imageWidth = new Point(250, 0);
 
+       /**
+        * Recreates the content of the box that displays information about the
+        * current selected node.
+        */
        private Control createNodeView(Composite parent, Node context)
                        throws RepositoryException {
 
index 21f259c8882d22be81695533091c93be57e4fee5..b52f76be52f5afe769c436d5cdbed3e5dfc0b11f 100644 (file)
@@ -16,6 +16,8 @@ import org.eclipse.jface.viewers.ContentViewer;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.FocusEvent;
+import org.eclipse.swt.events.FocusListener;
 import org.eclipse.swt.events.MouseAdapter;
 import org.eclipse.swt.events.MouseListener;
 import org.eclipse.swt.widgets.Composite;
@@ -36,6 +38,7 @@ public abstract class AbstractPageViewer extends ContentViewer implements
        private final CmsEditable cmsEditable;
 
        private MouseListener mouseListener;
+       private FocusListener focusListener;
 
        private EditablePart edited;
        private ISelection selection = StructuredSelection.EMPTY;
@@ -52,6 +55,7 @@ public abstract class AbstractPageViewer extends ContentViewer implements
 
                if (cmsEditable.canEdit()) {
                        mouseListener = createMouseListener();
+                       focusListener = createFocusListener();
                }
                page = findPage(parent);
        }
@@ -88,6 +92,21 @@ public abstract class AbstractPageViewer extends ContentViewer implements
                };
        }
 
+       /** Create (retrieve) the FocusListener to use. */
+       protected FocusListener createFocusListener() {
+               return new FocusListener() {
+                       private static final long serialVersionUID = 1L;
+
+                       @Override
+                       public void focusLost(FocusEvent event) {
+                       }
+
+                       @Override
+                       public void focusGained(FocusEvent event) {
+                       }
+               };
+       }
+
        protected Composite findPage(Composite composite) {
                if (composite instanceof ScrolledPage) {
                        return (ScrolledPage) composite;
@@ -275,6 +294,10 @@ public abstract class AbstractPageViewer extends ContentViewer implements
                return mouseListener;
        }
 
+       public FocusListener getFocusListener() {
+               return focusListener;
+       }
+
        public CmsEditable getCmsEditable() {
                return cmsEditable;
        }
index a2c6935d279000ce433813552b420b8e499dc87c..ec1dbe77e3f2af14849090ee7ff1ff4355f326d0 100644 (file)
@@ -7,6 +7,7 @@ import org.argeo.cms.CmsConstants;
 import org.argeo.cms.CmsNames;
 import org.argeo.cms.util.CmsUtils;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.FocusListener;
 import org.eclipse.swt.events.MouseListener;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
@@ -21,6 +22,7 @@ public abstract class StyledControl extends JcrComposite implements
        private Composite box;
 
        protected MouseListener mouseListener;
+       protected FocusListener focusListener;
 
        private Boolean editing = Boolean.FALSE;
 
@@ -65,6 +67,10 @@ public abstract class StyledControl extends JcrComposite implements
                clear(false);
                control = createControl(box, style);
                setControlLayoutData(control);
+
+               // add the focus listener to the newly created edition control
+               if (focusListener != null)
+                       control.addFocusListener(focusListener);
        }
 
        public synchronized void stopEditing() {
@@ -121,4 +127,12 @@ public abstract class StyledControl extends JcrComposite implements
                if (control != null && this.mouseListener != null)
                        control.addMouseListener(mouseListener);
        }
+
+       public void setFocusListener(FocusListener focusListener) {
+               if (this.focusListener != null && control != null)
+                       control.removeFocusListener(this.focusListener);
+               this.focusListener = focusListener;
+               if (control != null && this.focusListener != null)
+                       control.addFocusListener(focusListener);
+       }
 }