/*
* � Copyright IBM Corp. 2011
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
* implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
package com.ibm.xsp.extlib.designer.tooling.panels.applicationlayout;
import static com.ibm.xsp.extlib.designer.tooling.constants.IExtLibRegistry.EXT_LIB_TAG_ONEUI_CONFIGURATION;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Group;
import org.eclipse.ui.IEditorPart;
import com.ibm.commons.iloader.node.DataChangeNotifier;
import com.ibm.commons.iloader.node.DataNode;
import com.ibm.commons.swt.data.controls.DCCompositeCombo;
import com.ibm.commons.swt.data.controls.DCUtils;
import com.ibm.designer.domino.xsp.api.util.XPagesPropertiesViewUtils;
import com.ibm.designer.domino.xsp.editor.EditorUtils;
import com.ibm.designer.ide.xsp.components.api.panels.XSPBasicsPanelNoOptions;
import com.ibm.xsp.extlib.designer.tooling.utils.ComputedFieldVetoHandler;
import com.ibm.xsp.registry.FacesRegistry;
/**
* @author doconnor
*
*/
public class ApplicationLayoutBasicsPanel extends XSPBasicsPanelNoOptions {
private class VetoHandler extends ComputedFieldVetoHandler {
public VetoHandler(Control control) {
super(control);
}
public boolean shouldSet(DataNode.ComputedField cf, Object instance, String value, DataChangeNotifier notifier) {
boolean doit = showConfigWarning();
return doit;
}
public void updateControl(DataNode.ComputedField cf) {
getDataNode().notifyInvalidate(null);
}
};
/**
* @param parent
* @param style
*/
public ApplicationLayoutBasicsPanel(Composite parent, int style) {
super(parent, style);
}
// we want the "config" combo to appear before the visible checkbox, so this won't work
// protected void createPostSection() {
// createAppLayoutControls(getCurrentParent());
// }
/* (non-Javadoc)
* @see com.ibm.commons.swt.data.layouts.BasicsPanel#createAutomatedSection()
*/
@Override
protected void createAutomatedSection() {
if (hasName()) {
createName();
}
createAppLayoutControls(getCurrentParent());
if (hasVisible()) {
createVisible();
}
}
protected void createAppLayoutControls(Composite parent) {
DataNode real = DCUtils.findDataNode(parent, true);
FacesRegistry registry = getExtraData().getDesignerProject().getFacesRegistry();
ConfigurationField configField = new ConfigurationField(getDataNode(), registry);
real.addComputedField(configField);
createLabel("Configuration:", null, getLabelToolTipText(EXT_LIB_TAG_ONEUI_CONFIGURATION)); // $NLX-ApplicationLayoutBasicsPanel.Configuration-1$
DCCompositeCombo combo = createComboComputed(configField.getName(), configField.getLookup(), createControlGDFill(getNumLeftColumns() - 1), false, false);
combo.setIsComputable(false);
configField.setVetoHandler(new VetoHandler(combo));
}
@Override
protected void createRightContents(Composite rightChild) {
if (isCustomControl()) {
Composite p = rightChild;
Group group = new Group(p, SWT.NONE);
setCurrentParent(group);
group.setLayout(createChildLayout(2));
group.setText("Content area"); // $NLX-ApplicationLayoutBasicsPanel.Callbacks-1$
GridData gd = createControlGDNoWidth(1);
gd.widthHint = 360;
group.setLayoutData(gd);
new ApplicationLayoutCallbackPanel(getExtraData(), getCurrentParent());
setCurrentParent(p);
}
else {
super.createRightContents(rightChild);
}
}
private boolean isCustomControl() {
IEditorPart editor = EditorUtils.getActiveEditor();
boolean isCustomControl = XPagesPropertiesViewUtils.isEditingCustomControl(editor);
return isCustomControl;
}
private boolean showConfigWarning() {
String msg = "If you change the configuration, all attribute values associated with the current configuration will be lost. Do you want to continue?"; // $NLX-ApplicationLayoutBasicsPanel.Youareabouttochangetheconfigurati-1$
MessageDialog dlg = new MessageDialog(
getShell(),
"Domino Designer", // $NLX-ApplicationLayoutDropDialog.Dominodesigner-1$
null, // image
msg,
MessageDialog.WARNING,
new String[]{ "Continue", "Cancel" }, // $NLX-ApplicationLayoutBasicsPanel.Continue-1$ $NLX-ApplicationLayoutBasicsPanel.Cancel-2$
1);
int code = dlg.open();
// "Continue" was returning 256.. but then started returning 0 at some point...did SWT version change (it was pending)?
boolean bShouldContinue = (code == MessageDialog.OK); //Only continue if 'OK' (Continue) is pressed - otherwise bail out
return bShouldContinue;
}
}