/******************************************************************************* * Copyright (c) 2009 Marty Jones * 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: * Marty Jones <martybjones@gmail.com> - initial API and implementation *******************************************************************************/ package org.eclipse.nebula.snippets.tablecombo; import java.util.ArrayList; import java.util.List; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.nebula.widgets.tablecombo.TableCombo; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableItem; import org.eclipse.swt.widgets.Text; /** * Show basic features of TableCombo * */ public class TableComboSnippet1 { private static Font boldFont; private static Image testImage; private static Image test2Image; private static Image test3Image; private static Color darkRed; private static Color darkBlue; private static Color darkGreen; private static List modelList; private static Text listenerResults; private static Group listenerGroup; /** * @param args */ public static void main(String[] args) { // get display. Display display = new Display (); // create bold and italic font. boldFont = new Font(display,"Arial",8, SWT.BOLD | SWT.ITALIC); // create images testImage = ImageDescriptor.createFromFile(TableComboSnippet1.class, "in_ec_ov_success_16x16.gif").createImage(); test2Image = ImageDescriptor.createFromFile(TableComboSnippet1.class, "in_ec_ov_warning_16x16.gif").createImage(); test3Image = ImageDescriptor.createFromFile(TableComboSnippet1.class, "invalid_build_tool_16x16.gif").createImage(); // create colors darkRed = Display.getCurrent().getSystemColor(SWT.COLOR_DARK_RED); darkBlue = Display.getCurrent().getSystemColor(SWT.COLOR_DARK_BLUE); darkGreen = Display.getCurrent().getSystemColor(SWT.COLOR_DARK_GREEN); // load the model list. modelList = loadModel(); // create a new shell. Shell shell = new Shell (display); shell.setText("TableCombo Snippet 1"); shell.setSize(600, 400); shell.setLayout(new GridLayout()); // create group Group group = new Group(shell, SWT.NONE); group.setLayout(new GridLayout(2, false)); group.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false)); group.setText("Sample Group"); // create group listenerGroup = new Group(shell, SWT.NONE); listenerGroup.setLayout(new GridLayout(1, false)); listenerGroup.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false)); listenerGroup.setText("Listener Results"); listenerResults = new Text(listenerGroup, SWT.BORDER | SWT.MULTI); GridData gd = new GridData(SWT.FILL, SWT.DEFAULT, true, false); gd.heightHint = 30; listenerResults.setLayoutData(gd); //////////////////////////////////////////////////////////////////////// // Sample #1 //////////////////////////////////////////////////////////////////////// Label label = new Label(group, SWT.NONE); label.setText("Single Column (Mimics Normal Combo Field):"); // create TableCombo TableCombo tc = new TableCombo(group, SWT.BORDER | SWT.READ_ONLY); tc.setLayoutData(new GridData(125, SWT.DEFAULT)); // load the dataset. loadSingleDataset(tc.getTable()); // add listener tc.addSelectionListener(new ItemSelected(tc, "Sample1")); //////////////////////////////////////////////////////////////////////// // Sample #2 //////////////////////////////////////////////////////////////////////// label = new Label(group, SWT.NONE); label.setText("Single Column (With Images)"); // create TableCombo tc = new TableCombo(group, SWT.BORDER | SWT.READ_ONLY); tc.setLayoutData(new GridData(125, SWT.DEFAULT)); // load the dataset. loadSingleDatasetWithImages(tc.getTable()); // add listener tc.addSelectionListener(new ItemSelected(tc, "Sample2")); //////////////////////////////////////////////////////////////////////// // Sample #3 //////////////////////////////////////////////////////////////////////// // create label label = new Label(group, SWT.NONE); label.setText("Two Columns:"); // create TableCombo tc = new TableCombo(group, SWT.BORDER | SWT.READ_ONLY); tc.setLayoutData(new GridData(125, SWT.DEFAULT)); // tell the TableCombo that I want 2 blank columns auto sized. tc.defineColumns(2); // set which column will be used for the selected item. tc.setDisplayColumnIndex(1); tc.setToolTipText("This is a tool tip."); // load the dataset. loadTwoColumnDataset(tc.getTable()); // add listener tc.addSelectionListener(new ItemSelected(tc, "Sample3")); //////////////////////////////////////////////////////////////////////// // Sample #4 //////////////////////////////////////////////////////////////////////// // create label label = new Label(group, SWT.NONE); label.setText("Two Columns (With Colors && Fonts):"); // create TableCombo tc = new TableCombo(group, SWT.BORDER | SWT.READ_ONLY); tc.setLayoutData(new GridData(125, SWT.DEFAULT)); // tell the TableCombo that I want 2 blank columns auto sized. tc.defineColumns(2); // set which column will be used for the selected item. tc.setDisplayColumnIndex(1); // load the dataset. loadTwoColumnDatasetWithColorsAndFonts(tc.getTable()); // add listener tc.addSelectionListener(new ItemSelected(tc, "Sample4")); //////////////////////////////////////////////////////////////////////// // Sample #5 //////////////////////////////////////////////////////////////////////// // create label label = new Label(group, SWT.NONE); label.setText("Three Columns (With Colors && Fonts && Header):"); // create TableCombo tc = new TableCombo(group, SWT.BORDER | SWT.READ_ONLY); tc.setLayoutData(new GridData(125, SWT.DEFAULT)); // tell the TableCombo that I want 3 columns autosized with the following column headers. tc.defineColumns(new String[] { "Id", "Description", "Computed"}); // set which column will be used for the selected item. tc.setDisplayColumnIndex(2); // turn on the table header. tc.setShowTableHeader(true); // load the dataset. loadThreeColumnDatasetWithColorsAndFonts(tc.getTable()); // add listener tc.addSelectionListener(new ItemSelected(tc, "Sample5")); //////////////////////////////////////////////////////////////////////// // Sample #6 //////////////////////////////////////////////////////////////////////// // create label label = new Label(group, SWT.NONE); label.setText("Three Columns (First Column, Fixed Width):"); // create TableCombo tc = new TableCombo(group, SWT.BORDER | SWT.READ_ONLY); tc.setLayoutData(new GridData(125, SWT.DEFAULT)); // tell the TableCombo that I want 3 columns autosized with the following column headers. tc.defineColumns(new String[] { "Id", "Description", "Computed"}, new int[] { 50 , SWT.DEFAULT, SWT.DEFAULT}); // set which column will be used for the selected item. tc.setDisplayColumnIndex(2); // turn on the table header. tc.setShowTableHeader(true); // load the dataset. loadThreeColumnDatasetWithColorsAndFonts(tc.getTable()); // add listener tc.addSelectionListener(new ItemSelected(tc, "Sample6")); //////////////////////////////////////////////////////////////////////// // Sample #7 //////////////////////////////////////////////////////////////////////// // create label label = new Label(group, SWT.NONE); label.setText("Three Columns (With Table Width 75%):"); // create TableCombo tc = new TableCombo(group, SWT.BORDER | SWT.READ_ONLY); tc.setLayoutData(new GridData(125, SWT.DEFAULT)); // tell the TableCombo that I want 3 columns autosized with the following column headers. tc.defineColumns(new String[] { "Id", "Description", "Computed"}); // set which column will be used for the selected item. tc.setDisplayColumnIndex(2); // turn on the table header. tc.setShowTableHeader(true); // load the dataset. loadThreeColumnDatasetWithColorsAndFonts(tc.getTable()); // set the table width % to 75% tc.setTableWidthPercentage(75); // add listener tc.addSelectionListener(new ItemSelected(tc, "Sample7")); //////////////////////////////////////////////////////////////////////// // Sample #8 //////////////////////////////////////////////////////////////////////// // create label label = new Label(group, SWT.NONE); label.setText("Keep popup open"); // create TableCombo tc = new TableCombo(group, SWT.BORDER | SWT.READ_ONLY); tc.setLayoutData(new GridData(125, SWT.DEFAULT)); // tell the TableCombo that I want 3 columns autosized with the following column headers. tc.defineColumns(new String[] { "Id", "Description", "Computed"}); // set which column will be used for the selected item. tc.setDisplayColumnIndex(2); // turn on the table header. tc.setShowTableHeader(true); // load the dataset. loadThreeColumnDatasetWithColorsAndFonts(tc.getTable()); // add listener tc.addSelectionListener(new ItemSelected(tc, "Sample8")); // keep popup open after selecting an element tc.setClosePopupAfterSelection(false); // open the shell. shell.open(); while (!shell.isDisposed ()) { if (!display.readAndDispatch ()) display.sleep (); } // dispose of the font boldFont.dispose(); // dispose images testImage.dispose(); test2Image.dispose(); test3Image.dispose(); // dispose colors darkRed.dispose(); darkBlue.dispose(); darkGreen.dispose(); // dispose display display.dispose (); } /** * load a list of rows with a single column * @return */ private static List loadSingleDataset(Table table) { List rowList = new ArrayList(); int total = (modelList == null ? 0 : modelList.size()); for (int index=0; index < total; index++) { TableItem ti = new TableItem(table, SWT.NONE); Model model = (Model)modelList.get(index); ti.setText(model.getDescription()); rowList.add(ti); } return rowList; } /** * load a list of rows with a single column that includes images * @return */ private static List loadSingleDatasetWithImages(Table table) { List list = loadSingleDataset(table); int total = (list == null ? 0 : list.size()); for (int index=0; index < total; index++) { TableItem ti = ((TableItem)(list.get(index))); if (index == 1 || index == 7 || index == 13 || index == 19) { ti.setImage(0, testImage); } else if (index == 3 || index == 9 || index == 15) { ti.setImage(0, test2Image); } else if (index == 5 || index == 11 || index == 17) { ti.setImage(0, test3Image); } } return list; } /** * load a list of rows with 2 columns in each row. * @return */ private static List loadTwoColumnDataset(Table table) { List rowList = new ArrayList(); int total = (modelList == null ? 0 : modelList.size()); for (int index=0; index < total; index++) { TableItem ti = new TableItem(table, SWT.NONE); Model model = (Model)modelList.get(index); ti.setText(new String[] { String.valueOf(model.getId()), model.getDescription() }); rowList.add(ti); } return rowList; } /** * load a list of rows with 2 columns that includes colors and fonts. * @return */ private static List loadTwoColumnDatasetWithColorsAndFonts(Table table) { List list = loadTwoColumnDataset(table); int total = (list == null ? 0 : list.size()); for (int index=0; index < total; index++) { TableItem ti = ((TableItem)(list.get(index))); if (index == 0 || index == 14) { ti.setForeground(darkRed); ti.setFont(boldFont); } else if (index == 4 || index == 19) { ti.setForeground(darkBlue); ti.setFont(boldFont); } else if (index == 9) { ti.setForeground(darkGreen); ti.setFont(boldFont); } } return list; } /** * load a list of rows with 3 columns * @return */ private static List loadThreeColumnDataset(Table table) { List rowList = new ArrayList(); int total = (modelList == null ? 0 : modelList.size()); for (int index=0; index < total; index++) { TableItem ti = new TableItem(table, SWT.NONE); Model model = (Model)modelList.get(index); ti.setText(new String[] { String.valueOf(model.getId()), model.getDescription(), String.valueOf(model.getId()) + " - " + model.getDescription() }); rowList.add(ti); } return rowList; } /** * load a list of rows with 3 columns that includes colors and fonts. * @return */ private static List loadThreeColumnDatasetWithColorsAndFonts(Table table) { List list = loadThreeColumnDataset(table); int total = (list == null ? 0 : list.size()); for (int index=0; index < total; index++) { TableItem ti = ((TableItem)(list.get(index))); if (index == 0 || index == 14) { ti.setForeground(darkRed); ti.setFont(boldFont); } else if (index == 4 || index == 19) { ti.setForeground(darkBlue); ti.setFont(boldFont); } else if (index == 9) { ti.setForeground(darkGreen); ti.setFont(boldFont); } } return list; } /** * load the Model data. * @return */ private static List loadModel() { List items = new ArrayList(); items.add(new Model(1, "One")); items.add(new Model(2, "Two")); items.add(new Model(3, "Three")); items.add(new Model(4, "Four")); items.add(new Model(5, "Five")); items.add(new Model(6, "Six")); items.add(new Model(7, "Seven")); items.add(new Model(8, "Eight")); items.add(new Model(9, "Nine")); items.add(new Model(10, "Ten")); items.add(new Model(11, "Eleven")); items.add(new Model(12, "Twelve")); items.add(new Model(13, "Thirteen")); items.add(new Model(14, "Fourteen")); items.add(new Model(15, "Fiveteen")); items.add(new Model(16, "Sixteen")); items.add(new Model(17, "Seventeen")); items.add(new Model(18, "Eighteen")); items.add(new Model(19, "Nineteen")); items.add(new Model(20, "Twenty")); return items; } private static class ItemSelected extends SelectionAdapter { private TableCombo tc; private String text; public ItemSelected(TableCombo tc, String text) { this.tc = tc; this.text = text; } public void widgetSelected(SelectionEvent e) { listenerGroup.setText("Listener Results - (" + text + ")"); listenerResults.setText(tc.getText() == null ? "null" : tc.getText()); } } }