import java.util.IdentityHashMap;
import java.util.function.Consumer;
-public abstract class AbstractDataPart<INPUT, T> implements DataPart<INPUT, T> {
+public abstract class AbstractDataPart<INPUT, TYPE> implements DataPart<INPUT, TYPE> {
+ private Consumer<TYPE> onSelected;
+ private Consumer<TYPE> onAction;
- private Consumer<T> onSelected;
- private Consumer<T> onAction;
-
- private IdentityHashMap<DataView<INPUT, T>, Object> views = new IdentityHashMap<>();
+ private IdentityHashMap<DataView<INPUT, TYPE>, Object> views = new IdentityHashMap<>();
private INPUT data;
}
@Override
- public void onSelected(Consumer<T> onSelected) {
+ public void onSelected(Consumer<TYPE> onSelected) {
this.onSelected = onSelected;
}
@Override
- public void onAction(Consumer<T> onAction) {
+ public void onAction(Consumer<TYPE> onAction) {
this.onAction = onAction;
}
- public Consumer<T> getOnSelected() {
+ public Consumer<TYPE> getOnSelected() {
return onSelected;
}
- public Consumer<T> getOnAction() {
+ public Consumer<TYPE> getOnAction() {
return onAction;
}
@Override
public void refresh() {
- for (DataView<INPUT, T> view : views.keySet()) {
+ for (DataView<INPUT, TYPE> view : views.keySet()) {
view.refresh();
}
}
protected void notifyItemCountChange() {
- for (DataView<INPUT, T> view : views.keySet()) {
+ for (DataView<INPUT, TYPE> view : views.keySet()) {
view.notifyItemCountChange();
}
}
@Override
- public void addView(DataView<INPUT, T> view) {
+ public void addView(DataView<INPUT, TYPE> view) {
views.put(view, new Object());
}
@Override
- public void removeView(DataView<INPUT, T> view) {
+ public void removeView(DataView<INPUT, TYPE> view) {
views.remove(view);
}
-
}
--- /dev/null
+package org.argeo.cms.ux.widgets;
+
+public interface CmsDialog {
+
+ // must be the same value as org.eclipse.jface.window.Window#OK
+ int OK = 0;
+ // must be the same value as org.eclipse.jface.window.Window#CANCEL
+ int CANCEL = 1;
+
+}
/** A column in a data representation. */
@FunctionalInterface
-public interface Column<T> {
- String getText(T model);
+public interface Column<TYPE> {
+ String getText(TYPE model);
default int getWidth() {
return 200;
}
- default CmsIcon getIcon(T model) {
+ default CmsIcon getIcon(TYPE model) {
return null;
}
import java.util.function.Consumer;
-public interface DataPart<INPUT, T> {
+public interface DataPart<INPUT, TYPE> {
void setInput(INPUT data);
INPUT getInput();
- void onSelected(Consumer<T> onSelected);
+ void onSelected(Consumer<TYPE> onSelected);
- Consumer<T> getOnSelected();
+ Consumer<TYPE> getOnSelected();
- void onAction(Consumer<T> onAction);
+ void onAction(Consumer<TYPE> onAction);
- Consumer<T> getOnAction();
+ Consumer<TYPE> getOnAction();
void refresh();
- void addView(DataView<INPUT, T> view);
+ void addView(DataView<INPUT, TYPE> view);
+
+ void removeView(DataView<INPUT, TYPE> view);
+
+// void select(TYPE data);
+//
+// TYPE getSelected();
- void removeView(DataView<INPUT, T> view);
}
import org.argeo.cms.CurrentUser;
import org.argeo.cms.swt.dialogs.CmsFeedback;
import org.argeo.cms.swt.dialogs.CmsMessageDialog;
+import org.argeo.cms.ux.widgets.CmsDialog;
import org.eclipse.e4.core.di.annotations.Execute;
import org.eclipse.e4.core.di.annotations.Optional;
import org.eclipse.jface.dialogs.Dialog;
@Execute
public void execute() {
ChangePasswordDialog dialog = new ChangePasswordDialog(Display.getCurrent().getActiveShell(), userAdmin);
- if (dialog.open() == Dialog.OK) {
+ if (dialog.open() == CmsDialog.OK) {
new CmsMessageDialog(Display.getCurrent().getActiveShell(), passwordChanged.lead(),
CmsMessageDialog.INFORMATION).open();
}
if (!newPassword1.getText().equals(newPassword2.getText()))
throw new IllegalArgumentException("New passwords are different");
changePassword(oldPassword.getTextChars(), newPassword1.getTextChars());
- closeShell(OK);
+ closeShell(CmsDialog.OK);
} catch (Exception e) {
CmsFeedback.error("Cannot change password", e);
}
import org.argeo.cms.swt.CmsSwtUtils;
import org.argeo.cms.swt.Selected;
import org.argeo.cms.swt.dialogs.LightweightDialog;
+import org.argeo.cms.ux.widgets.CmsDialog;
import org.argeo.eclipse.ui.EclipseUiUtils;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.wizard.IWizard;
Button cancelButton = new Button(messageArea, SWT.FLAT);
cancelButton.setText(CmsMsg.cancel.lead());
cancelButton.setLayoutData(new GridData(SWT.END, SWT.TOP, false, false, 1, 3));
- cancelButton.addSelectionListener((Selected) (e) -> closeShell(CANCEL));
+ cancelButton.addSelectionListener((Selected) (e) -> closeShell(CmsDialog.CANCEL));
message = new Label(messageArea, SWT.WRAP);
message.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 2));
updateMessage();
protected void finishPressed() {
if (wizard.performFinish())
- closeShell(OK);
+ closeShell(CmsDialog.OK);
}
private static void setSwitchingFormData(Composite composite) {
import org.argeo.api.cms.ux.CmsView;
import org.argeo.cms.CmsMsg;
import org.argeo.cms.swt.CmsSwtUtils;
+import org.argeo.cms.ux.widgets.CmsDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
if (Arrays.equals(newPassword.getTextChars(), confirmPassword.getTextChars())) {
try {
cmsUserManager.changeOwnPassword(previousPassword.getTextChars(), newPassword.getTextChars());
- return OK;
+ return CmsDialog.OK;
} catch (Exception e1) {
log.error("Could not change password", e1);
cancel();
CmsMessageDialog.openError(CmsMsg.invalidPassword.lead());
- return CANCEL;
+ return CmsDialog.CANCEL;
}
} else {
cancel();
CmsMessageDialog.openError(CmsMsg.repeatNewPassword.lead());
- return CANCEL;
+ return CmsDialog.CANCEL;
}
};
@Override
protected void okPressed() {
Integer returnCode = cmsView.doAs(doIt);
- if (returnCode.equals(OK)) {
+ if (returnCode.equals(CmsDialog.OK)) {
super.okPressed();
CmsMessageDialog.openInformation(CmsMsg.passwordChanged.lead());
}
import org.argeo.api.cms.CmsLog;
import org.argeo.cms.CmsMsg;
import org.argeo.cms.swt.Selected;
+import org.argeo.cms.ux.widgets.CmsDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
Button close = new Button(parent, SWT.FLAT);
close.setText(CmsMsg.close.lead());
close.setLayoutData(new GridData(SWT.END, SWT.TOP, false, false));
- close.addSelectionListener((Selected) (e) -> closeShell(OK));
+ close.addSelectionListener((Selected) (e) -> closeShell(CmsDialog.OK));
if (exception != null) {
stack = new Text(parent, SWT.MULTI | SWT.LEAD | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
import org.argeo.cms.CmsMsg;
import org.argeo.cms.swt.CmsSwtUtils;
import org.argeo.cms.swt.Selected;
+import org.argeo.cms.ux.widgets.CmsDialog;
import org.argeo.eclipse.ui.EclipseUiUtils;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.TraverseEvent;
Button close = new Button(buttons, SWT.FLAT);
close.setText(CmsMsg.close.lead());
close.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));
- close.addSelectionListener((Selected) (e) -> closeShell(OK));
+ close.addSelectionListener((Selected) (e) -> closeShell(CmsDialog.OK));
close.setFocus();
close.addTraverseListener(traverseListener);
}
protected void okPressed() {
- closeShell(OK);
+ closeShell(CmsDialog.OK);
}
protected void cancelPressed() {
- closeShell(CANCEL);
+ closeShell(CmsDialog.CANCEL);
}
protected void cancel() {
- closeShell(CANCEL);
+ closeShell(CmsDialog.CANCEL);
}
protected Point getInitialSize() {
package org.argeo.cms.swt.dialogs;
import org.argeo.api.cms.CmsLog;
+import org.argeo.cms.ux.widgets.CmsDialog;
import org.argeo.eclipse.ui.EclipseUiException;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.FocusEvent;
public class LightweightDialog {
private final static CmsLog log = CmsLog.getLog(LightweightDialog.class);
- // must be the same value as org.eclipse.jface.window.Window#OK
- public final static int OK = 0;
- // must be the same value as org.eclipse.jface.window.Window#CANCEL
- public final static int CANCEL = 1;
-
private Shell parentShell;
private Shell backgroundShell;
private Shell foregoundShell;
if (hasChildShells())
return;
if (returnCode == null)// not yet closed
- closeShell(CANCEL);
+ closeShell(CmsDialog.CANCEL);
}
@Override
if (hasChildShells())
return;
if (returnCode == null)// not yet closed
- closeShell(CANCEL);
+ closeShell(CmsDialog.CANCEL);
}
});
backgroundShell.addDisposeListener((event) -> onClose());
block();
}
if (returnCode == null)
- returnCode = OK;
+ returnCode = CmsDialog.OK;
return returnCode;
}
try {
runEventLoop(foregoundShell);
} catch (ThreadDeath t) {
- returnCode = CANCEL;
+ returnCode = CmsDialog.CANCEL;
if (log.isTraceEnabled())
log.error("Thread death, canceling dialog", t);
} catch (Throwable t) {
- returnCode = CANCEL;
+ returnCode = CmsDialog.CANCEL;
log.error("Cannot open blocking lightweight dialog", t);
}
}
private synchronized void notifyClose() {
if (returnCode == null)
- returnCode = CANCEL;
+ returnCode = CmsDialog.CANCEL;
notifyAll();
}
protected void closeShell(int returnCode) {
this.returnCode = returnCode;
- if (CANCEL == returnCode)
+ if (CmsDialog.CANCEL == returnCode)
onCancel();
if (foregoundShell != null && !foregoundShell.isDisposed()) {
foregoundShell.close();
import org.argeo.cms.swt.CmsSwtUtils;
import org.argeo.cms.swt.Selected;
import org.argeo.cms.swt.dialogs.LightweightDialog;
+import org.argeo.cms.ux.widgets.CmsDialog;
import org.argeo.cms.ux.widgets.GuidedForm;
import org.argeo.cms.ux.widgets.GuidedForm.Page;
import org.argeo.eclipse.ui.EclipseUiUtils;
Button cancelButton = new Button(messageArea, SWT.FLAT);
cancelButton.setText(CmsMsg.cancel.lead());
cancelButton.setLayoutData(new GridData(SWT.END, SWT.TOP, false, false, 1, 3));
- cancelButton.addSelectionListener((Selected) (e) -> closeShell(CANCEL));
+ cancelButton.addSelectionListener((Selected) (e) -> closeShell(CmsDialog.CANCEL));
message = new Label(messageArea, SWT.WRAP);
message.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 2));
updateMessage();
protected void finishPressed() {
if (guidedForm.performFinish())
- closeShell(OK);
+ closeShell(CmsDialog.OK);
}
private static void setSwitchingFormData(Composite composite) {