Improve CMS theming.
[lgpl/argeo-commons.git] / org.argeo.cms.ui / src / org / argeo / cms / ui / CmsView.java
index 6d70935d7e4a0ffd9d8205cac0404dc97fdbf2ff..ce0acb89fd2b68c0c2c249b6f9df362310d0483c 100644 (file)
@@ -2,9 +2,12 @@ package org.argeo.cms.ui;
 
 import javax.security.auth.login.LoginContext;
 
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Shell;
+
 /** Provides interaction with the CMS system. */
 public interface CmsView {
-       String KEY = "org.argeo.cms.ui.view";
+       //String KEY = "org.argeo.cms.ui.view";
 
        UxContext getUxContext();
 
@@ -24,4 +27,27 @@ public interface CmsView {
        CmsImageManager getImageManager();
 
        boolean isAnonymous();
+
+       static CmsView getCmsView(Composite parent) {
+               // find parent shell
+               Shell topShell = parent.getShell();
+               while (topShell.getParent() != null)
+                       topShell = (Shell) topShell.getParent();
+               return (CmsView) topShell.getData(CmsView.class.getName());
+       }
+
+       static void registerCmsView(Shell shell, CmsView view) {
+               // find parent shell
+               Shell topShell = shell;
+               while (topShell.getParent() != null)
+                       topShell = (Shell) topShell.getParent();
+               // check if already set
+               if (topShell.getData(CmsView.class.getName()) != null) {
+                       CmsView registeredView = (CmsView) topShell.getData(CmsView.class.getName());
+                       throw new IllegalArgumentException(
+                                       "Cms view " + registeredView + " already registered in this shell");
+               }
+               shell.setData(CmsView.class.getName(), view);
+       }
+
 }