blob: 7e725063d2602e6cb42afe79d8588c2462b602ac [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012, 2020 Original authors and others.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Original authors and others - initial API and implementation
******************************************************************************/
package org.eclipse.nebula.widgets.nattable.group.gui;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.nebula.widgets.nattable.Messages;
import org.eclipse.nebula.widgets.nattable.group.command.CreateColumnGroupCommand;
import org.eclipse.nebula.widgets.nattable.layer.ILayer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.BusyIndicator;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
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.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
public class CreateColumnGroupDialog extends Dialog {
private Button createButton;
private Text groupNameText;
private ILayer contextLayer;
private CreateColumnGroupDialog(Shell parentShell) {
super(parentShell);
setShellStyle(SWT.CLOSE | SWT.BORDER | SWT.TITLE | SWT.APPLICATION_MODAL);
setBlockOnOpen(false);
}
public static CreateColumnGroupDialog createColumnGroupDialog(Shell shell) {
return new CreateColumnGroupDialog(shell);
}
public void setContextLayer(ILayer layer) {
this.contextLayer = layer;
}
@Override
public void create() {
super.create();
getShell().setText(Messages.getString("ColumnGroups.createColumnGroupDialogTitle")); //$NON-NLS-1$
}
@Override
protected Control createContents(final Composite parent) {
final Composite composite = new Composite(parent, SWT.NONE);
composite.setLayout(new GridLayout(1, false));
GridDataFactory
.fillDefaults()
.grab(true, true)
.applyTo(composite);
GridDataFactory
.fillDefaults()
.minSize(200, 100)
.align(SWT.FILL, SWT.FILL)
.grab(true, false)
.applyTo(createInputPanel(composite));
Composite buttonPanel = createButtonSection(composite);
GridDataFactory
.swtDefaults()
.align(SWT.FILL, SWT.BOTTOM)
.grab(true, true)
.applyTo(buttonPanel);
return composite;
}
private Composite createButtonSection(Composite composite) {
Composite panel = new Composite(composite, SWT.NONE);
GridLayout layout = new GridLayout();
layout.numColumns = 0;
layout.makeColumnsEqualWidth = false;
layout.horizontalSpacing = 2;
panel.setLayout(layout);
this.createButton = createButton(
panel,
IDialogConstants.CLIENT_ID,
Messages.getString("ColumnGroups.createButtonLabel"), //$NON-NLS-1$
false);
GridDataFactory
.swtDefaults()
.align(SWT.RIGHT, SWT.BOTTOM)
.grab(true, true)
.applyTo(this.createButton);
this.createButton.setEnabled(false);
getShell().setDefaultButton(this.createButton);
this.createButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
doColumnGrouping();
}
});
Button closeButton = createButton(
panel,
IDialogConstants.CANCEL_ID,
Messages.getString("AbstractStyleEditorDialog.cancelButton"), //$NON-NLS-1$
false);
GridDataFactory
.swtDefaults()
.align(SWT.RIGHT, SWT.BOTTOM)
.grab(false, false)
.applyTo(closeButton);
return panel;
}
private Composite createInputPanel(final Composite composite) {
final Composite row = new Composite(composite, SWT.NONE);
row.setLayout(new GridLayout(2, false));
final Label createLabel = new Label(row, SWT.NONE);
createLabel.setText(Messages.getString("ColumnGroups.createGroupLabel") + ":"); //$NON-NLS-1$ //$NON-NLS-2$
GridDataFactory
.fillDefaults()
.align(SWT.LEFT, SWT.CENTER)
.applyTo(createLabel);
this.groupNameText = new Text(row, SWT.SINGLE | SWT.BORDER);
GridDataFactory
.fillDefaults()
.grab(true, false)
.applyTo(this.groupNameText);
this.groupNameText.addModifyListener(e -> CreateColumnGroupDialog.this.createButton.setEnabled(CreateColumnGroupDialog.this.groupNameText.getText().length() > 0));
this.groupNameText.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetDefaultSelected(SelectionEvent e) {
if (CreateColumnGroupDialog.this.createButton.isEnabled()) {
doColumnGrouping();
}
}
});
return row;
}
public void terminateDialog() {
close();
}
private void doColumnGrouping() {
BusyIndicator.showWhile(super.getShell().getDisplay(), () -> {
final CreateColumnGroupCommand command = new CreateColumnGroupCommand(
CreateColumnGroupDialog.this.groupNameText.getText());
try {
CreateColumnGroupDialog.this.contextLayer.doCommand(command);
} finally {
terminateDialog();
}
});
}
}