/* * � Copyright IBM Corp. 2013 * * 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.xspprops; import org.eclipse.jface.viewers.CellEditor; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.ICellModifier; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.TableLayout; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TextCellEditor; import org.eclipse.jface.viewers.Viewer; 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.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.TableColumn; import com.ibm.commons.swt.SWTLayoutUtils; public class XSPRobotComposite extends Composite { private TableViewer table; private XSPRobotUserAgents userAgents = new XSPRobotUserAgents(""); private final String userAgentStr = "User Agent Keyword"; // $NLX-XSPRobotComposite.UserAgentKeyword-1$ public XSPRobotComposite(Composite parent, boolean isReadOnly, String agents) { super(parent, SWT.NONE); createContents(isReadOnly); setUserAgents(agents); } public void setUserAgents(String agents) { userAgents.set(agents); table.refresh(); } public String getUserAgents() { return userAgents.get(); } protected void createContents(boolean isReadOnly) { if(isReadOnly) { // One column for display on Page setLayout(SWTLayoutUtils.createLayoutNoMarginDefaultSpacing(1)); // Indent the Compsite for display on Page GridData gd = new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false, 1, 1); gd.horizontalIndent = 18; gd.horizontalAlignment = GridData.FILL; gd.verticalAlignment = GridData.FILL; setLayoutData(gd); } else { // Two columns for Dialog display setLayout(SWTLayoutUtils.createLayoutDefaultSpacing(2)); } if (!isReadOnly) { Button addRobot = new Button(this, SWT.PUSH); addRobot.setText("Add"); // $NLX-XSPRobotComposite.Add-1$ addRobot.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { userAgents.add(userAgentStr); table.refresh(); table.getTable().setSelection(userAgents.getUserDefinedCount()-1); } }); Button delRobot = new Button(this, SWT.PUSH); delRobot.setText("Remove"); // $NLX-XSPRobotComposite.Remove-1$ delRobot.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { int index = table.getTable().getSelectionIndex(); if(index >= 0) { userAgents.remove(index); table.refresh(); if(index < userAgents.getUserDefinedCount()) { table.getTable().setSelection(index); } else { // Set index to end of Table table.getTable().setSelection(userAgents.getUserDefinedCount()-1); } } } }); } // Create the TableViewer table = new TableViewer(this, SWT.FULL_SELECTION | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL ); GridData gd = new GridData(SWT.DEFAULT, 84); if(!isReadOnly) { gd.horizontalSpan = 2; gd.verticalAlignment = GridData.FILL; gd.grabExcessVerticalSpace = true; } else { gd.horizontalSpan = 1; } gd.horizontalAlignment = GridData.FILL; gd.grabExcessHorizontalSpace = true; table.getTable().setLayoutData(gd); // Create the column TableLayout layout = new TableLayout(); layout.addColumnData(new ColumnWeightData(100, false)); table.getTable().setLayout(layout); table.getTable().setHeaderVisible(true); table.getTable().setLinesVisible(true); TableColumn col = new TableColumn(table.getTable(), SWT.LEFT); col.setText(userAgentStr); col.setResizable(false); table.setContentProvider(new RobotContentProvider()); table.setInput(""); // Add the in-cell editing if(!isReadOnly) { table.setCellModifier(new ICellModifier() { public boolean canModify(Object element, String property) { return true; } public Object getValue(Object element, String property) { return element; } public void modify(Object element, String property, Object value) { if(element != null){ int index = table.getTable().getSelectionIndex(); if(index >= 0) { userAgents.set(index, (String)value); table.refresh(); if(index < userAgents.getUserDefinedCount()) { table.getTable().setSelection(index); } } } } }); table.setCellEditors(new CellEditor[] { new TextCellEditor(table.getTable()) }); table.setColumnProperties(new String[] { "" }); } } private class RobotContentProvider implements IStructuredContentProvider { public Object[] getElements(Object arg0) { return userAgents.getUserDefinedArray(); } public void dispose() { } public void inputChanged(Viewer arg0, Object arg1, Object arg2) { } } }