/******************************************************************************* * Copyright (c) 2011 Softberries Krzysztof Grajek. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Softberries Krzysztof Grajek - initial API and implementation ******************************************************************************/ package com.softberries.klerk.gui.dialogs; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import net.sf.swtaddons.autocomplete.combo.AutocompleteComboInput; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Combo; 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 com.softberries.klerk.dao.to.DocumentItem; import com.softberries.klerk.dao.to.Product; import com.softberries.klerk.gui.helpers.table.ProductsModelProvider; public class DocumentItemDialog extends Dialog { private Combo productCombo; private String selectedStr; /** * Create the dialog. * @param parentShell */ public DocumentItemDialog(Shell parentShell) { super(parentShell); } public Combo getProductCombo() { return productCombo; } public void setProductCombo(Combo productCombo) { this.productCombo = productCombo; } /** * Create contents of the dialog. * @param parent */ @Override protected Control createDialogArea(Composite parent) { Composite container = (Composite) super.createDialogArea(parent); container.setLayout(new GridLayout(3, false)); new Label(container, SWT.NONE); new Label(container, SWT.NONE); new Label(container, SWT.NONE); new Label(container, SWT.NONE); Label lblProduct = new Label(container, SWT.NONE); lblProduct.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); lblProduct.setText("Product:"); productCombo = new Combo(container, SWT.BORDER); productCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); productCombo.setItems(createProductDescriptions(ProductsModelProvider.INSTANCE.getProducts())); productCombo.addDisposeListener(new DisposeListener() { @Override public void widgetDisposed(DisposeEvent e) { String selected = productCombo.getText(); Pattern REGEX = Pattern.compile("\\([A-Z0-9]*\\)$"); Matcher m = REGEX.matcher(selected); String result = ""; if(m.find()) { result = m.group(); //remove the brackets result = result.replace("(", ""); result = result.replace(")", ""); } selectedStr = result; //regex to find product code within braces at the end of line // \([A-Z0-9]*\)$ System.out.println("disposed: " + result); } }); new AutocompleteComboInput(productCombo); return container; } /** * Create contents of the button bar. * @param parent */ @Override protected void createButtonsForButtonBar(Composite parent) { createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true); createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false); } private String[] createProductDescriptions(List<Product> products) { String[] result = new String[products.size()]; for(int index = 0; index < products.size(); index++){ Product p = products.get(index); result[index] = "" + p.getName() + " " + "Code: + " + " (" + p.getCode() + ")"; } return result; } /** * Return the initial size of the dialog. */ @Override protected Point getInitialSize() { return new Point(450, 166); } @Override protected void configureShell(Shell shell) { super.configureShell(shell); shell.setText("Find Product"); } public Product getItemFromDialog(){ int result = super.open(); if(result == Dialog.OK){ return getProductFromCombo(); }else{ return null; } } private Product getProductFromCombo() { for(Product p : ProductsModelProvider.INSTANCE.getProducts()){ System.out.println(selectedStr); if(p.getCode().equals(selectedStr)){ return p; } } return null; } }