]>
git.argeo.org Git - lgpl/argeo-commons.git/blob - rcp/org.argeo.cms.ui.rcp/src/org/argeo/cms/ui/rcp/CmsRcpDisplayFactory.java
1 package org
.argeo
.cms
.ui
.rcp
;
3 import java
.nio
.file
.Path
;
5 import org
.argeo
.api
.cms
.CmsApp
;
6 import org
.argeo
.util
.OS
;
7 import org
.eclipse
.swt
.widgets
.Display
;
8 import org
.osgi
.service
.event
.EventAdmin
;
10 /** Creates the SWT {@link Display} in a dedicated thread. */
11 public class CmsRcpDisplayFactory
{
12 /** File name in a run directory */
13 private final static String ARGEO_RCP_URL
= "argeo.rcp.url";
15 /** There is only one display in RCP mode */
16 private static Display display
;
18 private CmsUiThread uiThread
;
20 private boolean shutdown
= false;
23 uiThread
= new CmsUiThread();
28 public void destroy() {
33 } catch (InterruptedException e
) {
40 class CmsUiThread
extends Thread
{
42 public CmsUiThread() {
48 display
= Display
.getDefault();
50 // for (String contextName : cmsApps.keySet()) {
51 // openCmsApp(contextName);
55 if (!display
.readAndDispatch())
63 public static Display
getDisplay() {
67 public static void openCmsApp(EventAdmin eventAdmin
, CmsApp cmsApp
, String uiName
) {
68 CmsRcpDisplayFactory
.getDisplay().syncExec(() -> {
69 CmsRcpApp cmsRcpApp
= new CmsRcpApp(uiName
);
70 cmsRcpApp
.setEventAdmin(eventAdmin
);
71 cmsRcpApp
.setCmsApp(cmsApp
, null);
72 cmsRcpApp
.initRcpApp();
76 public static Path
getUrlRunFile() {
77 return OS
.getRunDir().resolve(CmsRcpDisplayFactory
.ARGEO_RCP_URL
);