From: Bruno Sinou Date: Tue, 5 May 2015 09:25:36 +0000 (+0000) Subject: Experimental focus listener X-Git-Tag: argeo-commons-2.1.30~257 X-Git-Url: https://git.argeo.org/?a=commitdiff_plain;h=85045dd329aa153a9dbafffaaef7709b016b32f7;p=lgpl%2Fargeo-commons.git Experimental focus listener git-svn-id: https://svn.argeo.org/commons/trunk@8088 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- diff --git a/org.argeo.cms/src/org/argeo/cms/maintenance/Browse.java b/org.argeo.cms/src/org/argeo/cms/maintenance/Browse.java index c6dd755f0..98792575b 100644 --- a/org.argeo.cms/src/org/argeo/cms/maintenance/Browse.java +++ b/org.argeo.cms/src/org/argeo/cms/maintenance/Browse.java @@ -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 { diff --git a/org.argeo.cms/src/org/argeo/cms/viewers/AbstractPageViewer.java b/org.argeo.cms/src/org/argeo/cms/viewers/AbstractPageViewer.java index 21f259c88..b52f76be5 100644 --- a/org.argeo.cms/src/org/argeo/cms/viewers/AbstractPageViewer.java +++ b/org.argeo.cms/src/org/argeo/cms/viewers/AbstractPageViewer.java @@ -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; } diff --git a/org.argeo.cms/src/org/argeo/cms/widgets/StyledControl.java b/org.argeo.cms/src/org/argeo/cms/widgets/StyledControl.java index a2c6935d2..ec1dbe77e 100644 --- a/org.argeo.cms/src/org/argeo/cms/widgets/StyledControl.java +++ b/org.argeo.cms/src/org/argeo/cms/widgets/StyledControl.java @@ -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); + } }