/* * Copyright 2010 Android ORM projects. * * 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 cn.ieclipse.aorm.eclipse.helpers; import java.util.ArrayList; import java.util.List; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableItem; /** * @author Jamling * */ public class MultiCheckSelector extends Dialog { private Table list; String[] formats; String initValue; private List<String> selected; /** * Create the dialog. * * @param parentShell */ public MultiCheckSelector(Shell parentShell) { super(parentShell); } public MultiCheckSelector(Shell parentShell, String[] formats, String value) { super(parentShell); this.formats = formats; this.initValue = value; } /** * Create contents of the dialog. * * @param parent */ @Override protected Control createDialogArea(Composite parent) { Composite container = (Composite) super.createDialogArea(parent); list = new Table(container, SWT.BORDER | SWT.MULTI | SWT.CHECK); list.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); List<String> values = new ArrayList<String>(); if (initValue != null && initValue.trim().length() > 0) { String[] temp = initValue.split("\\|"); for (String str : temp) { values.add(str.trim()); } } for (int i = 0; i < formats.length; i++) { TableItem item = new TableItem(list, SWT.NONE); item.setText(formats[i]); if (values.contains(formats[i])) { item.setChecked(true); } } return container; } /** * Create contents of the button bar. * * @param parent */ @Override protected void createButtonsForButtonBar(Composite parent) { Button ok = createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true); // ok.addSelectionListener(new SelectionAdapter() { // @Override // public void widgetSelected(SelectionEvent e) { // // } // }); Button cancel = createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false); cancel.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { if (callback != null) { callback.onClose(); } } }); } @Override protected void okPressed() { selected = getSelection(); // if (callback != null) { // List<String> sel = getSelection(); // callback.onOkay(sel); // } super.okPressed(); } public List<String> getSelected() { return selected; } /** * Return the initial size of the dialog. */ @Override protected Point getInitialSize() { return new Point(450, 300); } public java.util.List<String> getSelection() { ArrayList<String> res = new ArrayList<String>(); TableItem[] tis = list.getItems(); for (TableItem ti : tis) { if (ti.getChecked()) { res.add(ti.getText()); } } return res; } public void setCallback(Callback callback) { this.callback = callback; } private Callback callback; public static interface Callback { public void onClose(); public void onOkay(List<String> selections); } }