import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.argeo.api.NodeConstants;
-import org.argeo.api.NodeUtils;
+import org.argeo.cms.Localized;
import org.argeo.cms.ui.CmsView;
import org.argeo.cms.ui.util.CmsUiUtils;
import org.argeo.jcr.Jcr;
class SuiteUi extends Composite {
private static final long serialVersionUID = 6207018859086689108L;
private final static Log log = LogFactory.getLog(SuiteUi.class);
+
+ private Localized title;
private Composite header;
+ private Composite footer;
private Composite belowHeader;
private Composite leadPane;
+ private Composite sidePane;
private Composite dynamicArea;
private Session sysSession;
private Session homeSession;
- private Node userHome;
+ private Node userDir;
private Map<String, SuiteLayer> layers = new HashMap<>();
private Map<String, Composite> workAreas = new HashMap<>();
this.setLayout(CmsUiUtils.noSpaceGridLayout());
header = new Composite(this, SWT.NONE);
+ header.setLayout(CmsUiUtils.noSpaceGridLayout());
CmsUiUtils.style(header, SuiteStyle.header);
header.setLayoutData(CmsUiUtils.fillWidth());
belowHeader = new Composite(this, SWT.NONE);
belowHeader.setLayoutData(CmsUiUtils.fillAll());
+
+ footer = new Composite(this, SWT.NONE);
+ footer.setLayout(CmsUiUtils.noSpaceGridLayout());
+ CmsUiUtils.style(footer, SuiteStyle.footer);
+ footer.setLayoutData(CmsUiUtils.fillWidth());
}
public void refreshBelowHeader(boolean initApp) {
CmsUiUtils.clear(belowHeader);
int style = getStyle();
if (initApp) {
- belowHeader.setLayout(CmsUiUtils.noSpaceGridLayout(2));
+ belowHeader.setLayout(CmsUiUtils.noSpaceGridLayout(3));
if (SWT.RIGHT_TO_LEFT == (style & SWT.RIGHT_TO_LEFT)) {// arabic, hebrew, etc.
+ sidePane = new Composite(belowHeader, SWT.NONE);
+ sidePane.setLayout(CmsUiUtils.noSpaceGridLayout());
+ sidePane.setLayoutData(CmsUiUtils.fillHeight());
dynamicArea = new Composite(belowHeader, SWT.NONE);
leadPane = new Composite(belowHeader, SWT.NONE);
} else {
leadPane = new Composite(belowHeader, SWT.NONE);
dynamicArea = new Composite(belowHeader, SWT.NONE);
+ sidePane = new Composite(belowHeader, SWT.NONE);
+ sidePane.setLayout(CmsUiUtils.noSpaceGridLayout());
+ sidePane.setLayoutData(CmsUiUtils.fillHeight());
}
leadPane.setLayoutData(CmsUiUtils.fillHeight());
+ leadPane.setLayout(CmsUiUtils.noSpaceGridLayout());
CmsUiUtils.style(leadPane, SuiteStyle.leadPane);
- dynamicArea.setLayoutData(CmsUiUtils.fillAll());
+ dynamicArea.setLayoutData(CmsUiUtils.fillAll());
dynamicArea.setLayout(new FormLayout());
} else {
private Composite getLayer(String id, Node context) {
if (!layers.containsKey(id))
- throw new IllegalArgumentException("No layer " + id + " is available.");
+ return null;
if (!workAreas.containsKey(id))
initLayer(id, layers.get(id), context);
return workAreas.get(id);
}
Composite switchToLayer(String layerId, Node context) {
+ Composite current = null;
if (currentLayerId != null) {
- Composite current = getCurrentWorkArea();
+ current = getCurrentWorkArea();
if (currentLayerId.equals(layerId))
return current;
}
if (context == null) {
if (!cmsView.isAnonymous())
- context = userHome;
+ context = userDir;
}
Composite toShow = getLayer(layerId, context);
- currentLayerId = layerId;
- if (!isDisposed())
- getDisplay().syncExec(() -> {
- if (!toShow.isDisposed())
+ if (toShow != null) {
+ currentLayerId = layerId;
+ if (!isDisposed()) {
+// getDisplay().syncExec(() -> {
+ if (!toShow.isDisposed()) {
toShow.moveAbove(null);
- else
+ } else {
log.warn("Cannot show work area because it is disposed.");
+ toShow = initLayer(layerId, layers.get(layerId), context);
+ toShow.moveAbove(null);
+ }
dynamicArea.layout(true, true);
- });
- return toShow;
+// });
+ }
+ return toShow;
+ } else {
+ return current;
+ }
}
Composite switchToLayer(SuiteLayer layer, Node context) {
protected Composite initLayer(String id, SuiteLayer layer, Node context) {
Composite workArea = cmsView.doAs(() -> (Composite) layer.createUiPart(dynamicArea, context));
+ CmsUiUtils.style(workArea, SuiteStyle.workArea);
workArea.setLayoutData(CmsUiUtils.coverAll());
workAreas.put(id, workArea);
return workArea;
}
synchronized void logout() {
- userHome = null;
+ userDir = null;
Jcr.logout(sysSession);
Jcr.logout(homeSession);
currentLayerId = null;
return header;
}
+ Composite getFooter() {
+ return footer;
+ }
+
Composite getLeadPane() {
return leadPane;
}
+ Composite getSidePane() {
+ return sidePane;
+ }
+
Composite getBelowHeader() {
return belowHeader;
}
// return sysSession;
// }
//
- synchronized void initSessions(Repository repository) throws RepositoryException {
+ synchronized void initSessions(Repository repository, String userDirPath) throws RepositoryException {
this.sysSession = repository.login();
this.homeSession = repository.login(NodeConstants.HOME_WORKSPACE);
- userHome = NodeUtils.getUserHome(homeSession);
+ userDir = sysSession.getNode(userDirPath);
addDisposeListener((e) -> {
Jcr.logout(sysSession);
Jcr.logout(homeSession);
});
}
- Node getUserHome() {
- return userHome;
+ Node getUserDir() {
+ return userDir;
}
Session getSysSession() {
return cmsView;
}
+ public Localized getTitle() {
+ return title;
+ }
+
+ public void setTitle(Localized title) {
+ this.title = title;
+ }
+
}