package org.argeo.suite.e4.rap;
import org.argeo.cms.e4.rap.AbstractRapE4App;
-import org.argeo.cms.ui.util.CmsTheme;
import org.eclipse.rap.rwt.application.Application;
import org.eclipse.rap.rwt.client.WebClient;
import org.osgi.framework.BundleContext;
@Override
protected void addEntryPoints(Application application) {
- CmsTheme cmsTheme = new CmsTheme(bc, "org.argeo.theme.argeo2");
- cmsTheme.apply(application);
+// CmsTheme cmsTheme = new CmsTheme(bc, "org.argeo.theme.argeo2");
+// cmsTheme.apply(application);
String font = "<link rel='stylesheet' href='http://fonts.googleapis.com/css?family=Source+Sans+Pro'/>";
getBaseProperties().put(WebClient.HEAD_HTML, font);
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.argeo.cms.e4.rap.AbstractRapE4App;
-import org.argeo.cms.ui.util.CmsTheme;
import org.argeo.util.LangUtils;
import org.eclipse.rap.rwt.application.ApplicationConfiguration;
import org.osgi.framework.Bundle;
}
protected void deploy(Bundle bundle, Map<String, String> properties) {
- CmsTheme cmsTheme;
- if (properties.containsKey(CmsTheme.CMS_THEME_BUNDLE_PROPERTY)) {
- String cmsThemeBundle = properties.get(CmsTheme.CMS_THEME_BUNDLE_PROPERTY);
- cmsTheme = new CmsTheme(bundleContext, cmsThemeBundle);
- } else {
- cmsTheme = new CmsTheme(bundleContext, CmsTheme.DEFAULT_CMS_THEME_BUNDLE);
- }
+// CmsTheme cmsTheme;
+// if (properties.containsKey(CmsTheme.CMS_THEME_BUNDLE_PROPERTY)) {
+// String cmsThemeBundle = properties.get(CmsTheme.CMS_THEME_BUNDLE_PROPERTY);
+// cmsTheme = new CmsTheme(bundleContext, cmsThemeBundle);
+// } else {
+// cmsTheme = new CmsTheme(bundleContext, CmsTheme.DEFAULT_CMS_THEME_BUNDLE);
+// }
- ArgeoRapApp app = new ArgeoRapApp(bundleContext, bundle, cmsTheme);
+ ArgeoRapApp app = new ArgeoRapApp(bundleContext, bundle, null);
Hashtable<String, String> props = new Hashtable<String, String>();
props.put(AbstractRapE4App.CONTEXT_NAME_PROPERTY, app.getContextName());
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.argeo.cms.e4.rap.AbstractRapE4App;
-import org.argeo.cms.ui.util.CmsTheme;
+import org.argeo.cms.ui.CmsTheme;
import org.eclipse.rap.rwt.application.Application;
import org.eclipse.rap.rwt.client.WebClient;
import org.osgi.framework.Bundle;
public void init(BundleContext bundleContext, Map<String, Object> properties) {
super.init(bundleContext, properties);
// super must be first
- if (getBaseProperties().containsKey(CmsTheme.CMS_THEME_BUNDLE_PROPERTY)) {
- String cmsThemeBundle = getBaseProperties().get(CmsTheme.CMS_THEME_BUNDLE_PROPERTY);
- cmsTheme = new CmsTheme(getBundleContext(), cmsThemeBundle);
- } else {
- cmsTheme = new CmsTheme(getBundleContext(), CmsTheme.DEFAULT_CMS_THEME_BUNDLE);
- }
+// if (getBaseProperties().containsKey(CmsTheme.CMS_THEME_BUNDLE_PROPERTY)) {
+// String cmsThemeBundle = getBaseProperties().get(CmsTheme.CMS_THEME_BUNDLE_PROPERTY);
+// cmsTheme = new CmsTheme(getBundleContext(), cmsThemeBundle);
+// } else {
+// cmsTheme = new CmsTheme(getBundleContext(), CmsTheme.DEFAULT_CMS_THEME_BUNDLE);
+// }
bundle = bundleContext.getBundle();
}
@Override
protected void addEntryPoints(Application application) {
- if (cmsTheme != null)
- cmsTheme.apply(application);
+// if (cmsTheme != null)
+// cmsTheme.apply(application);
String font = "<link rel='stylesheet' href='http://fonts.googleapis.com/css?family=Source+Sans+Pro'/>";
getBaseProperties().put(WebClient.HEAD_HTML, font);
bin.includes = META-INF/,\
- OSGI-INF/cmsTheme.xml
+ icons/,\
+ OSGI-INF/
-.argeo-work-header {
+.argeo-suite-header {
+ color: white;
+ background-color: #204a87;
+}
+
+.argeo-suite-headerTitle {
font: bold 22px sans-serif;
color: white;
background-color: #204a87;
}
-.argeo-work-leadPane {
+.argeo-suite-leadPane {
font: bold 14px sans-serif;
color: white;
background-color: #204a87;
}
-Button.argeo-work-leadPane {
+Button.argeo-suite-leadPane {
font: bold 14px sans-serif;
color: white;
background-color: white;
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="init" deactivate="destroy" name="Argeo Suite App">
<implementation class="org.argeo.suite.ui.ArgeoSuiteApp"/>
- <property name="contextName" type="String" value="argeo"/>
<service>
<provide interface="org.argeo.cms.ui.CmsApp"/>
</service>
- <reference bind="addUiProvider" cardinality="0..n" interface="org.argeo.cms.ui.CmsUiProvider" name="CmsUiProvider" policy="dynamic" unbind="removeUiProvider"/>
+ <reference bind="addUiProvider" cardinality="0..n" interface="org.argeo.cms.ui.CmsUiProvider" name="CmsUiProvider" policy="dynamic" target="(argeo.suite.ui=*)" unbind="removeUiProvider"/>
<reference bind="addTheme" cardinality="0..n" interface="org.argeo.cms.ui.CmsTheme" name="CmsTheme" policy="dynamic" unbind="removeTheme"/>
+ <properties entry="config/cmsApp.properties"/>
</scr:component>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="Default Dashboard">
+ <implementation class="org.argeo.suite.ui.DefaultDashboard"/>
+ <service>
+ <provide interface="org.argeo.cms.ui.CmsUiProvider"/>
+ </service>
+ <properties entry="config/dashboard.properties"/>
+</scr:component>
dashboard=dashboard
-people=contacts management
+people=contacts
documents=documents
+locations=locations
defaultWorkAppTitle=Argeo Suite
\ No newline at end of file
+++ /dev/null
-service.pid=argeo.work.leadPane
<provide interface="org.argeo.cms.ui.CmsUiProvider"/>
<provide interface="org.osgi.service.cm.ManagedService"/>
</service>
- <properties entry="OSGI-INF/leadPane.properties"/>
+ <properties entry="config/leadPane.properties"/>
</scr:component>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="Default Login Screen">
+ <implementation class="org.argeo.suite.ui.DefaultLoginScreen"/>
+ <properties entry="config/loginScreen.properties"/>
+ <service>
+ <provide interface="org.argeo.cms.ui.CmsUiProvider"/>
+ </service>
+</scr:component>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="Default Recent Items">
+ <implementation class="org.argeo.suite.ui.RecentItems"/>
+ <service>
+ <provide interface="org.argeo.cms.ui.CmsUiProvider"/>
+ </service>
+ <properties entry="config/recentItems.properties"/>
+</scr:component>
+++ /dev/null
-service.pid=argeo.work.header
-argeo.work.header.title=%defaultWorkAppTitle
\ No newline at end of file
<provide interface="org.argeo.cms.ui.CmsUiProvider"/>
<provide interface="org.osgi.service.cm.ManagedService"/>
</service>
- <properties entry="OSGI-INF/workHeader.properties"/>
+ <properties entry="config/workHeader.properties"/>
</scr:component>
Service-Component:\
OSGI-INF/cmsApp.xml,\
OSGI-INF/workHeader.xml,\
-OSGI-INF/leadPane.xml
+OSGI-INF/leadPane.xml,\
+OSGI-INF/loginScreen.xml,\
+OSGI-INF/recentItems.xml,\
+OSGI-INF/dashboard.xml
Import-Package:\
org.argeo.api,\
output.. = bin/
bin.includes = META-INF/,\
.,\
- OSGI-INF/
+ OSGI-INF/,\
+ config/,\
+ OSGI-INF/loginScreen.xml,\
+ OSGI-INF/dashboard.xml,\
+ OSGI-INF/recentItems.xml
source.. = src/
--- /dev/null
+service.pid=argeo.suite.ui.app
+contextName=argeo
--- /dev/null
+service.pid=argeo.suite.ui.dashboard
+argeo.suite.ui=true
--- /dev/null
+service.pid=argeo.suite.ui.leadPane
+argeo.suite.ui=true
--- /dev/null
+service.pid=argeo.suite.ui.loginScreen
+argeo.suite.ui=true
--- /dev/null
+service.pid=argeo.suite.ui.recentItems
+argeo.suite.ui=true
--- /dev/null
+service.pid=argeo.suite.ui.header
+argeo.suite.ui=true
+
+argeo.suite.ui.header.title=%defaultWorkAppTitle
\ No newline at end of file
import java.util.TreeMap;
import javax.jcr.Node;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.argeo.cms.ui.AbstractCmsApp;
import org.argeo.cms.ui.CmsTheme;
import org.argeo.cms.ui.CmsUiProvider;
+import org.argeo.cms.ui.CmsView;
+import org.argeo.jcr.JcrUtils;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
import org.osgi.framework.Constants;
/** The Argeo Suite App. */
public class ArgeoSuiteApp extends AbstractCmsApp {
private final static Log log = LogFactory.getLog(ArgeoSuiteApp.class);
- public final static String PID_PREFIX = "argeo.work.";
+ public final static String PID_PREFIX = "argeo.suite.ui.";
public final static String HEADER_PID = PID_PREFIX + "header";
public final static String LEAD_PANE_PID = PID_PREFIX + "leadPane";
+ public final static String LOGIN_SCREEN_PID = PID_PREFIX + "loginScreen";
+ public final static String DASHBOARD_PID = PID_PREFIX + "dashboard";
+ public final static String RECENT_ITEMS_PID = PID_PREFIX + "recentItems";
private final static String DEFAULT_UI_NAME = "work";
private final static String DEFAULT_THEME_ID = "org.argeo.suite.theme.default";
- private ArgeoSuiteUi argeoSuiteUi;
-
private Map<String, CmsUiProvider> uiProviders = new TreeMap<>();
public void init(Map<String, String> properties) {
}
@Override
- public void initUi(String uiName, Composite parent) {
- if (DEFAULT_UI_NAME.equals(uiName)) {
- CmsTheme theme = getTheme(uiName);
- if (theme != null)
- CmsTheme.registerCmsTheme(parent.getShell(), theme);
- argeoSuiteUi = new ArgeoSuiteUi(parent, SWT.NONE);
- refresh(uiName);
- }
-
+ public Composite initUi(Composite parent) {
+ String uiName = parent.getData(UI_NAME_PROPERTY) != null ? parent.getData(UI_NAME_PROPERTY).toString() : null;
+ CmsTheme theme = getTheme(uiName);
+ if (theme != null)
+ CmsTheme.registerCmsTheme(parent.getShell(), theme);
+ ArgeoSuiteUi argeoSuiteUi = new ArgeoSuiteUi(parent, SWT.NONE);
+ refreshUi(argeoSuiteUi, null);
+ return argeoSuiteUi;
}
@Override
return DEFAULT_THEME_ID;
}
- public void refresh(String uiName) {
- if (DEFAULT_UI_NAME.equals(uiName)) {
- Node context = null;
- uiProviders.get(HEADER_PID).createUiPart(argeoSuiteUi.getHeader(), context);
- uiProviders.get(LEAD_PANE_PID).createUiPart(argeoSuiteUi.getLeadPane(), context);
+ @Override
+ public void refreshUi(Composite parent, String state) {
+ Node context = null;
+ ArgeoSuiteUi argeoSuiteUi = (ArgeoSuiteUi) parent;
+ refreshPart(findUiProvider(HEADER_PID, context), argeoSuiteUi.getHeader(), context);
+ CmsView cmsView = CmsView.getCmsView(parent);
+ if (cmsView.isAnonymous()) {
+ refreshPart(findUiProvider(LOGIN_SCREEN_PID, context), argeoSuiteUi.getDefaultBody(), context);
+ } else {
+ refreshPart(findUiProvider(DASHBOARD_PID, context), argeoSuiteUi.getDefaultBody(), context);
}
+ refreshPart(findUiProvider(LEAD_PANE_PID, context), argeoSuiteUi.getLeadPane(), context);
+ refreshPart(findUiProvider(RECENT_ITEMS_PID, context), argeoSuiteUi.getEntryArea(), context);
+ argeoSuiteUi.layout(true, true);
}
+ private void refreshPart(CmsUiProvider uiProvider, Composite part, Node context) {
+ for (Control child : part.getChildren())
+ child.dispose();
+ uiProvider.createUiPart(part, context);
+ }
+
+ private CmsUiProvider findUiProvider(String pid, Node context) {
+ if (pid != null) {
+ if (uiProviders.containsKey(pid))
+ return uiProviders.get(pid);
+ }
+
+ // nothing
+ return new CmsUiProvider() {
+
+ @Override
+ public Control createUi(Composite parent, Node context) throws RepositoryException {
+ return parent;
+ }
+ };
+ }
+
+ @Override
+ public void setState(Composite parent, String state) {
+ CmsView cmsView = CmsView.getCmsView(parent);
+ // for the time being we systematically open a session, in order to make sure
+ // that home is initialised
+ Session session = null;
+ try {
+ if (state != null && state.startsWith("/")) {
+ String path = state.substring(1);
+ String workspace;
+ if (path.equals("")) {
+ workspace = null;
+ path = "/";
+ } else {
+ int index = path.indexOf('/');
+ if (index == 0) {
+ log.error("Cannot interpret // " + state);
+ cmsView.navigateTo("~");
+ return;
+ } else if (index > 0) {
+ workspace = path.substring(0, index);
+ path = path.substring(index);
+ } else {// index<0, assuming root node
+ workspace = path;
+ path = "/";
+ }
+ }
+ session = getRepository().login(workspace);
+
+ Node node = session.getNode(path);
+ refreshEntityUi(node);
+ }
+ } catch (RepositoryException e) {
+ log.error("Cannot load state " + state, e);
+ cmsView.navigateTo("~");
+ } finally {
+ JcrUtils.logoutQuietly(session);
+ }
+ }
+
+ private void refreshEntityUi(Node node) {
+
+ }
+
+ /*
+ * Dependency injection.
+ */
+
public void addUiProvider(CmsUiProvider uiProvider, Map<String, String> properties) {
String servicePid = properties.get(Constants.SERVICE_PID);
if (servicePid == null) {
uiProviders.remove(servicePid);
}
-
-// static class UiProviderKey {
-// private Map<String, String> properties;
-//
-// public UiProviderKey(Map<String, String> properties) {
-// super();
-// this.properties = properties;
-// }
-//
-// }
}
+++ /dev/null
-package org.argeo.suite.ui;
-
-import org.argeo.cms.ui.util.CmsIcon;
-
-/** Icon names used by Argeo Suite. */
-public enum ArgeoSuiteIcon implements CmsIcon {
- add, save, search, delete, logout, dashboard,
- // people
- people, person, organisation,
- // library
- documents, document, folder,
- // misc
- task, tag;
-}
package org.argeo.suite.ui;
-import static org.argeo.suite.ui.ArgeoSuiteIcon.dashboard;
+import static org.argeo.suite.ui.SuiteIcon.dashboard;
import org.argeo.cms.ui.CmsTheme;
+import org.argeo.cms.ui.CmsView;
import org.argeo.cms.ui.util.CmsUiUtils;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.custom.CTabItem;
import org.eclipse.swt.custom.SashForm;
+import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.swt.widgets.ToolItem;
-public class ArgeoSuiteUi {
- private Composite parent;
+/** The {@link CmsView} for the work ergonomics of Argeo Suite. */
+public class ArgeoSuiteUi extends Composite {
+ private static final long serialVersionUID = 6207018859086689108L;
private Composite header;
+ private Composite belowHeader;
private Composite leadPane;
private SashForm dynamicArea;
private CmsTheme theme;
public ArgeoSuiteUi(Composite parent, int style) {
+ super(parent, style);
theme = CmsTheme.getCmsTheme(parent);
- this.parent = parent;
- parent.setLayout(CmsUiUtils.noSpaceGridLayout());
+ this.setLayout(CmsUiUtils.noSpaceGridLayout());
- header = new Composite(parent, SWT.NONE);
- CmsUiUtils.style(header, WorkStyles.header);
+ header = new Composite(this, SWT.NONE);
+ CmsUiUtils.style(header, SuiteStyle.header);
header.setLayoutData(CmsUiUtils.fillWidth());
- Composite belowHeader = new Composite(parent, SWT.NONE);
+ belowHeader = new Composite(this, SWT.NONE);
belowHeader.setLayoutData(CmsUiUtils.fillAll());
belowHeader.setLayout(CmsUiUtils.noSpaceGridLayout(2));
dynamicArea = new SashForm(belowHeader, SWT.HORIZONTAL);
}
leadPane.setLayoutData(CmsUiUtils.fillHeight());
- CmsUiUtils.style(leadPane, WorkStyles.leadPane);
+ CmsUiUtils.style(leadPane, SuiteStyle.leadPane);
dynamicArea.setLayoutData(CmsUiUtils.fillAll());
if (SWT.RIGHT_TO_LEFT == (style & SWT.RIGHT_TO_LEFT)) {// arabic, hebrew, etc.
dynamicArea.setWeights(weights);
editorArea.setLayout(new GridLayout());
- // TODO make it dynamic
- RecentItems recentItems = new RecentItems();
- recentItems.createUiPart(entryArea);
-
editorTabFolder = new CTabFolder(editorArea, SWT.NONE);
editorTabFolder.setLayoutData(CmsUiUtils.fillAll());
+
+ // TODO make it dynamic
Composite buttons = new Composite(editorTabFolder, SWT.NONE);
- RowLayout buttonsLayout = new RowLayout(SWT.HORIZONTAL);
- buttonsLayout.pack = false;
- buttons.setLayout(buttonsLayout);
- Button delete = new Button(buttons, SWT.FLAT);
- delete.setImage(ArgeoSuiteIcon.delete.getSmallIcon(theme));
- // int size = ArgeoSuiteIcon.delete.getSmallIconSize();
- // delete.setBounds(delete.getBounds().x,delete.getBounds().y,size,size);
- // delete.setSize(size, size);
+ buttons.setLayout(CmsUiUtils.noSpaceGridLayout());
+ ToolBar toolBar = new ToolBar(buttons, SWT.NONE);
+ toolBar.setLayoutData(new GridData(SWT.END, SWT.TOP, false, false));
+ ToolItem deleteItem = new ToolItem(toolBar, SWT.PUSH);
+ deleteItem.setImage(SuiteIcon.delete.getSmallIcon(theme));
+ deleteItem.setEnabled(false);
editorTabFolder.setTopRight(buttons);
CTabItem defaultTab = new CTabItem(editorTabFolder, SWT.NONE);
// editorArea.setSingle(true);
}
- Composite getParent() {
- return parent;
- }
+ /*
+ * GETTERS / SETTERS
+ */
Composite getHeader() {
return header;
return defaultBody;
}
+ Composite getBelowHeader() {
+ return belowHeader;
+ }
+
}
--- /dev/null
+package org.argeo.suite.ui;
+
+import javax.jcr.Node;
+import javax.jcr.RepositoryException;
+
+import org.argeo.cms.auth.CurrentUser;
+import org.argeo.cms.ui.CmsUiProvider;
+import org.argeo.cms.ui.CmsView;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+
+/** Provides a dashboard. */
+public class DefaultDashboard implements CmsUiProvider {
+
+ @Override
+ public Control createUi(Composite parent, Node context) throws RepositoryException {
+ parent.setLayout(new GridLayout());
+ CmsView cmsView = CmsView.getCmsView(parent);
+ if (cmsView.isAnonymous())
+ throw new IllegalStateException("No user is not logged in");
+
+ Label lbl = new Label(parent, SWT.NONE);
+ lbl.setText("Welcome " + CurrentUser.getDisplayName() + "!");
+
+ return lbl;
+ }
+
+}
import javax.jcr.RepositoryException;
import org.argeo.cms.LocaleUtils;
+import org.argeo.cms.auth.CurrentUser;
+import org.argeo.cms.ui.CmsTheme;
import org.argeo.cms.ui.CmsUiProvider;
+import org.argeo.cms.ui.CmsView;
import org.argeo.cms.ui.util.CmsUiUtils;
import org.argeo.util.LangUtils;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.osgi.service.cm.ManagedService;
public class DefaultHeader implements CmsUiProvider, ManagedService {
- public final static String TITLE_PROPERTY = "argeo.work.header.title";
+ public final static String TITLE_PROPERTY = "argeo.suite.ui.header.title";
private Map<String, String> properties;
@Override
public Control createUi(Composite parent, Node context) throws RepositoryException {
- parent.setLayout(new GridLayout());
- Label lbl = new Label(parent, SWT.NONE);
+ CmsView cmsView = CmsView.getCmsView(parent);
+ CmsTheme theme = CmsTheme.getCmsTheme(parent);
+
+ parent.setLayout(CmsUiUtils.noSpaceGridLayout(new GridLayout(3, true)));
+
+ // TODO right to left
+ Composite lead = new Composite(parent, SWT.NONE);
+ CmsUiUtils.style(lead, SuiteStyle.header);
+ lead.setLayoutData(new GridData(SWT.LEAD, SWT.CENTER, true, false));
+ lead.setLayout(new GridLayout());
+ Label lbl = new Label(lead, SWT.NONE);
String title = properties.get(TITLE_PROPERTY);
lbl.setText(LocaleUtils.isLocaleKey(title) ? LocaleUtils.local(title, getClass().getClassLoader()).toString()
: title);
- CmsUiUtils.style(lbl, WorkStyles.header);
+ CmsUiUtils.style(lbl, SuiteStyle.headerTitle);
lbl.setLayoutData(CmsUiUtils.fillWidth());
+
+ Composite middle = new Composite(parent, SWT.NONE);
+ CmsUiUtils.style(middle, SuiteStyle.header);
+ middle.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, false));
+ middle.setLayout(new GridLayout());
+
+ Composite end = new Composite(parent, SWT.NONE);
+ CmsUiUtils.style(end, SuiteStyle.header);
+ end.setLayoutData(new GridData(SWT.END, SWT.CENTER, true, false));
+
+ if (!cmsView.isAnonymous()) {
+ end.setLayout(new GridLayout(2, false));
+ Label userL = new Label(end, SWT.NONE);
+ CmsUiUtils.style(userL, SuiteStyle.header);
+ userL.setText(CurrentUser.getDisplayName());
+ Button logoutB = new Button(end, SWT.FLAT);
+// CmsUiUtils.style(logoutB, SuiteStyle.header);
+ logoutB.setImage(SuiteIcon.logout.getSmallIcon(theme));
+ logoutB.addSelectionListener(new SelectionAdapter() {
+ private static final long serialVersionUID = 7116760083964201233L;
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ cmsView.logout();
+ }
+
+ });
+ } else {
+ end.setLayout(new GridLayout(1, false));
+ // required in order to avoid wrong height after logout
+ new Label(end, SWT.NONE).setText("");
+
+ }
return lbl;
}
import org.argeo.cms.Localized;
import org.argeo.cms.ui.CmsTheme;
import org.argeo.cms.ui.CmsUiProvider;
+import org.argeo.cms.ui.CmsView;
import org.argeo.cms.ui.util.CmsIcon;
import org.argeo.cms.ui.util.CmsUiUtils;
import org.eclipse.swt.SWT;
/** Side pane listing various perspectives. */
public class DefaultLeadPane implements CmsUiProvider, ManagedService {
- private CmsTheme theme;
-
@Override
public Control createUi(Composite parent, Node node) throws RepositoryException {
- theme = CmsTheme.getCmsTheme(parent);
+ CmsView cmsView = CmsView.getCmsView(parent);
GridLayout layout = new GridLayout();
layout.verticalSpacing = 10;
layout.marginTop = 10;
layout.marginRight = 10;
parent.setLayout(layout);
- Button dashboardB = createButton(parent, WorkMsg.dashboard, ArgeoSuiteIcon.dashboard);
- createButton(parent, WorkMsg.people, ArgeoSuiteIcon.people);
- createButton(parent, WorkMsg.documents, ArgeoSuiteIcon.documents);
+ Button dashboardB = createButton(parent, SuiteMsg.dashboard, SuiteIcon.dashboard);
+ if (!cmsView.isAnonymous()) {
+ createButton(parent, SuiteMsg.documents, SuiteIcon.documents);
+ createButton(parent, SuiteMsg.people, SuiteIcon.people);
+ createButton(parent, SuiteMsg.locations, SuiteIcon.location);
+ }
return dashboardB;
}
protected Button createButton(Composite parent, Localized msg, CmsIcon icon) {
+ CmsTheme theme = CmsTheme.getCmsTheme(parent);
Button button = new Button(parent, SWT.FLAT);
- CmsUiUtils.style(button, WorkStyles.leadPane);
+ CmsUiUtils.style(button, SuiteStyle.leadPane);
button.setToolTipText(msg.lead());
button.setImage(icon.getBigIcon(theme));
return button;
--- /dev/null
+package org.argeo.suite.ui;
+
+import javax.jcr.Node;
+import javax.jcr.RepositoryException;
+
+import org.argeo.cms.auth.CurrentUser;
+import org.argeo.cms.ui.CmsUiProvider;
+import org.argeo.cms.ui.CmsView;
+import org.argeo.cms.ui.widgets.auth.CmsLogin;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+
+/** Provides a login screen. */
+public class DefaultLoginScreen implements CmsUiProvider {
+
+ @Override
+ public Control createUi(Composite parent, Node context) throws RepositoryException {
+ CmsView cmsView = CmsView.getCmsView(parent);
+ if (!cmsView.isAnonymous())
+ throw new IllegalStateException(CurrentUser.getUsername() + " is already logged in");
+
+ parent.setLayout(new GridLayout());
+ Composite loginArea = new Composite(parent, SWT.NONE);
+ loginArea.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, true));
+
+ CmsLogin cmsLogin = new CmsLogin(cmsView);
+ cmsLogin.createUi(loginArea);
+ return cmsLogin.getCredentialsBlock();
+ }
+
+}
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
/** List recent items. */
public class RecentItems implements CmsUiProvider {
top.setLayout(new GridLayout(2, false));
Label search = new Label(top, SWT.NONE);
- search.setImage(ArgeoSuiteIcon.search.getSmallIcon(theme));
- DelayedText delayedText = new DelayedText(top, SWT.SINGLE | SWT.BORDER, SEARCH_TEXT_DELAY);
- delayedText.getText().setLayoutData(CmsUiUtils.fillWidth());
+ search.setImage(SuiteIcon.search.getSmallIcon(theme));
+ Text text = new Text(top, SWT.SINGLE | SWT.BORDER);
+ text.setLayoutData(CmsUiUtils.fillWidth());
+// DelayedText delayedText = new DelayedText(top, SWT.SINGLE | SWT.BORDER, SEARCH_TEXT_DELAY);
+// delayedText.getText().setLayoutData(CmsUiUtils.fillWidth());
TableViewer viewer = new TableViewer(parent);
viewer.getTable().setLayoutData(CmsUiUtils.fillAll());
- return delayedText.getText();
+ return text;
}
}
--- /dev/null
+package org.argeo.suite.ui;
+
+import org.argeo.cms.ui.util.CmsIcon;
+
+/** Icon names used by Argeo Suite. */
+public enum SuiteIcon implements CmsIcon {
+ add, save, search, delete, logout, dashboard,
+ // people
+ people, person, organisation,
+ // library
+ documents, document, folder,
+ // misc
+ task, tag, location;
+}
--- /dev/null
+package org.argeo.suite.ui;
+
+import org.argeo.cms.Localized;
+
+/** Localized messages. */
+public enum SuiteMsg implements Localized {
+ dashboard,people,documents,locations;
+}
--- /dev/null
+package org.argeo.suite.ui;
+
+import org.argeo.cms.ui.util.CmsStyle;
+
+/** Styles used by Argeo Suite work UI. */
+public enum SuiteStyle implements CmsStyle {
+ // Header
+ header,headerTitle,
+ // Lead pane
+ leadPane;
+
+ @Override
+ public String getClassPrefix() {
+ return "argeo-suite";
+ }
+
+}
+++ /dev/null
-package org.argeo.suite.ui;
-
-import org.argeo.cms.Localized;
-
-/** Localized messages. */
-public enum WorkMsg implements Localized {
- dashboard,people,documents;
-}
+++ /dev/null
-package org.argeo.suite.ui;
-
-import org.argeo.cms.ui.util.CmsStyle;
-
-/** Styles used by Argeo Suite work UI. */
-public enum WorkStyles implements CmsStyle {
- header, leadPane;
-
- @Override
- public String getClassPrefix() {
- return "argeo-work";
- }
-
-}