/* * � 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 org.eclipse.jface.dialogs.MessageDialog; 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; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import com.ibm.commons.iloader.node.DataChangeNotifier; import com.ibm.commons.iloader.node.DataNode; import com.ibm.commons.iloader.node.DataNodeAdapter; import com.ibm.commons.iloader.node.DataNodeListener; import com.ibm.commons.iloader.node.IMember; import com.ibm.commons.swt.controls.custom.CustomLabel; import com.ibm.commons.swt.data.controls.DCCheckbox; import com.ibm.designer.domino.xsp.api.panels.IPanelExtraData; import com.ibm.designer.ide.xsp.components.api.panels.XSPPropLayout1; import com.ibm.xsp.extlib.designer.tooling.utils.ComputedFieldVetoHandler; import com.ibm.xsp.registry.FacesRegistry; /** * @author mblout * */ public class ApplicationLayoutCallbackPanel extends XSPPropLayout1 { final static String FACET_ID_LEFT = "facetLeft"; //$NON-NLS-1$ final static String FACET_ID_NULL = "facetMiddle"; //$NON-NLS-1$ final static String FACET_ID_RIGHT = "facetRight"; //$NON-NLS-1$ final static String FACET_KEY_LEFT = "LeftColumn"; //$NON-NLS-1$ final static String FACET_KEY_RIGHT = "RightColumn"; //$NON-NLS-1$ IPanelExtraData _extraData; DCCheckbox _left; DCCheckbox _middle; DCCheckbox _right; private final DataNodeListener _listener = new DataNodeAdapter() { public void onValueChanged2( DataNode source, int record, Object object, IMember member ) { // ApplicationLayoutCallbackPanel.this.checkEnablement(); // need to call this so checkboxes update when editing source directly source.notifyInvalidate(null); } }; private class CheckVetoHandler extends ComputedFieldVetoHandler { public CheckVetoHandler(Control control) { super(control); } public boolean shouldSet(DataNode.ComputedField cf, Object instance, String value, DataChangeNotifier notifier) { boolean ok = true; if (null == value) { // do we need to check contents? // Element callback = getCallback(cf.getName(), cf.hasName()); // if (null != callback && isCallbackModified(callback)) { String[] buttons = {"Yes", "No"}; // $NLX-ApplicationLayoutCallbackPanel.Yes-1$ $NLX-ApplicationLayoutCallbackPanel.No-2$ MessageDialog dlg = new MessageDialog(ApplicationLayoutCallbackPanel.this.getShell(), "Domino Designer", // $NLX-ApplicationLayoutCallbackPanel.DominoDesigner-1$ null, "Removing the drop target will remove the callback and any content it contains. Do you want to continue?", // $NLX-ApplicationLayoutCallbackPanel.Removingthedroptargetwillremoveth-1$ MessageDialog.WARNING, buttons, 1); int result = dlg.open(); ok = (result == 0); // } } return ok; } public void updateControl(DataNode.ComputedField cf) { getDataNode().notifyInvalidate(null); } }; public ApplicationLayoutCallbackPanel(IPanelExtraData extra, Composite parent) { super(parent, SWT.NONE); initialize(); GridData gd = createFillGD(getNumParentColumns()); if (parent.getLayoutData() instanceof GridData) { int width = ((GridData)parent.getLayoutData()).widthHint; if (width > 0) gd.widthHint = width; } setLayoutData(gd); setExtraData(extra); setCurrentParent(this); GridLayout gridLayout = new GridLayout(2, false); gridLayout.verticalSpacing = 10; this.setLayout(gridLayout); createCallbackControls(); } public void setExtraData(IPanelExtraData data) { _extraData = data; } /* (non-Javadoc) * @see com.ibm.commons.swt.data.layouts.PropLayout1#createContents(org.eclipse.swt.widgets.Composite) */ @Override protected void createContents() { super.createContents(); createCallbackControls(); } private Label createWrapLabel(String text) { Composite parent = getCurrentParent(); Label t = new CustomLabel(parent, SWT.WRAP | SWT.READ_ONLY, ""); //$NON-NLS-1$ t.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_RED)); GridData gd = createSpanGD(2); if (parent.getLayoutData() instanceof GridData) { int width = ((GridData)parent.getLayoutData()).widthHint; if (width > getControlIndentAmt()) gd.widthHint = width - getControlIndentAmt(); } t.setLayoutData(gd); t.setText(text); return t; } private GridData getIndentGD() { GridData gd = createSpanGD(2); gd.horizontalIndent = getControlIndentAmt(); return gd; } private void createCallbackControls() { getDataNode().addDataNodeListener(_listener); FacesRegistry reg = _extraData.getDesignerProject().getFacesRegistry(); String msg1 = "Drag a control into the column if you want the control to appear on each XPage that contains this custom control (for example, an outline)."; // $NLX-ApplicationLayoutCallbackPanel.Dragacontrolintothecolumnifyouwan-1$ String msg2 = "Or, enable the column as a drop target if you want to specify what should appear in the column on each XPage containing this custom control (for example, to show a different view on each page)."; // $NLX-ApplicationLayoutCallbackPanel.Orenablethecolumnasadroptargetify-1$ String labeltext = "Enable drop target:"; // $NLX-ApplicationLayoutCallbackPanel.Enabledroptarget-1$ createWrapLabel(msg1); createWrapLabel(msg2); createWrapLabel(labeltext); CallbackComputedField cfLeft = new CallbackComputedField(FACET_ID_LEFT, FACET_KEY_LEFT, true, reg); getDataNode().addComputedField(cfLeft); _left = createDCCheckBox(FACET_ID_LEFT, Boolean.toString(true), null, "Left column", getIndentGD(), "applayout.cbpanel.left"); // $NON-NLS-2$ $NLX-ApplicationLayoutCallbackPanel.Leftcolumn-1$ _left.setMultiSel(false); cfLeft.setVetoHandler(new CheckVetoHandler(_left)); CallbackComputedField cfMiddle = new CallbackComputedField(FACET_ID_NULL, null, false, reg); getDataNode().addComputedField(cfMiddle); _middle = createDCCheckBox(FACET_ID_NULL, Boolean.toString(true), null, "Middle column", getIndentGD(), "applayout.cbpanel.middle"); // $NON-NLS-2$ $NLX-ApplicationLayoutCallbackPanel.Middlecolumn-1$ _middle.setMultiSel(false); cfMiddle.setVetoHandler(new CheckVetoHandler(_middle)); CallbackComputedField cfRight= new CallbackComputedField(FACET_ID_RIGHT, FACET_KEY_RIGHT, true, reg); getDataNode().addComputedField(cfRight); _right = createDCCheckBox(FACET_ID_RIGHT, Boolean.toString(true), null, "Right column", getIndentGD(), "applayout.cbpanel.right"); // $NON-NLS-2$ $NLX-ApplicationLayoutCallbackPanel.Rightcolumn-1$ _right.setMultiSel(false); cfRight.setVetoHandler(new CheckVetoHandler(_right)); String pstext = "If you don�t want a column to appear, leave it empty."; // $NLX-ApplicationLayoutCallbackPanel.Ifyoudontwantacolumntoappearleave-1$ createLabel(pstext, createSpanGD(2)); } public ApplicationLayoutCallbackPanel(Composite parent, int style) { super(parent, style); } }