]> git.argeo.org Git - lgpl/argeo-commons.git/blob - CmsSwtUi.java
d02ad3aec371202cb8f4c42364b15a45277b5605
[lgpl/argeo-commons.git] / CmsSwtUi.java
1 package org.argeo.cms.swt;
2
3 import org.argeo.api.cms.ux.CmsUi;
4 import org.argeo.api.cms.ux.CmsView;
5 import org.eclipse.swt.layout.GridLayout;
6 import org.eclipse.swt.widgets.Composite;
7
8 /** A basic {@link CmsUi}, based on an SWT {@link Composite}. */
9 public class CmsSwtUi extends Composite implements CmsUi {
10
11 private static final long serialVersionUID = -107939076610406448L;
12
13 /** Last time the UI was accessed. */
14 private long lastAccess = System.currentTimeMillis();
15 // private TimerTask timeoutTask;
16 private long uiTimeout = 0;
17
18 private CmsView cmsView;
19
20 public CmsSwtUi(Composite parent, int style) {
21 super(parent, style);
22 cmsView = CmsSwtUtils.getCmsView(parent);
23 setLayout(new GridLayout());
24 }
25
26 @Override
27 public CmsView getCmsView() {
28 return cmsView;
29 }
30
31 @Override
32 public void updateLastAccess() {
33 this.lastAccess = System.currentTimeMillis();
34 }
35
36 public void setUiTimeout(long uiTimeout) {
37 // clearTimeoutTask();
38 this.uiTimeout = uiTimeout;
39 if (this.uiTimeout <= 0)
40 return;
41 // TODO introduce mechanism to check whether the UI is "zombie"
42 // (that is the UI thread still exists, but cannot execute anything)
43 // final long timeoutTaskPeriod = 60 * 60 * 1000;// 1h
44 // timeoutTask = cmsView.schedule(() -> {
45 // disposeIfTimedout();
46 // }, timeoutTaskPeriod, timeoutTaskPeriod);
47 // addDisposeListener((e) -> {
48 // clearTimeoutTask();
49 // });
50 }
51
52 // /** Must be run in UI thread. */
53 // public void disposeIfTimedout() {
54 // System.out.println("Enter disposeIfTimedout");
55 // if (isDisposed()) {
56 // clearTimeoutTask();
57 // return;
58 // }
59 // if (isTimedOut()) {
60 // dispose();
61 // clearTimeoutTask();
62 // System.out.println("Disposed after timeout");
63 // }
64 // }
65
66 // private void clearTimeoutTask() {
67 // if (timeoutTask != null) {
68 // timeoutTask.cancel();
69 // timeoutTask = null;
70 // }
71 // }
72
73 @Override
74 public boolean isTimedOut() {
75 return uiTimeout > 0 && (System.currentTimeMillis() - lastAccess >= uiTimeout);
76 }
77
78 // class DisposeIfTimedOutTask implements Runnable {
79 // public void run() {
80 // disposeIfTimedout();
81 // getDisplay().timerExec(1000, new DisposeIfTimedOutTask());
82 // }
83 //
84 // }
85
86 }