--- /dev/null
+/*******************************************************************************\r
+ * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
+ * in Industry THTH ry.\r
+ * All rights reserved. This program and the accompanying materials\r
+ * are made available under the terms of the Eclipse Public License v1.0\r
+ * which accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ *\r
+ * Contributors:\r
+ * VTT Technical Research Centre of Finland - initial API and implementation\r
+ *******************************************************************************/\r
+/*\r
+ * Created on 13.10.2005\r
+ * @author Toni Kalajainen \r
+ */\r
+package org.simantics.utils.ui.workbench.dialogs;\r
+\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+import org.eclipse.jface.viewers.IStructuredContentProvider;\r
+import org.eclipse.jface.viewers.TableViewer;\r
+import org.eclipse.jface.viewers.Viewer;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Control;\r
+import org.eclipse.swt.widgets.Shell;\r
+import org.eclipse.swt.widgets.Table;\r
+import org.eclipse.swt.widgets.TableColumn;\r
+import org.eclipse.ui.dialogs.ListDialog;\r
+import org.simantics.utils.ui.jface.StringListLabelProvider;\r
+import org.simantics.utils.ui.workbench.ui.TableColumnSorter;\r
+\r
+\r
+\r
+/**\r
+ * PropertyDialog is a dialog window popup for properties (key, value pairs)\r
+ *\r
+ */\r
+public class PropertyDialog extends ListDialog {\r
+\r
+ public final static String KEY_COLUMN_NAME = "Key";\r
+ public final static String VALUE_COLUMN_NAME = "Value";\r
+ \r
+ protected List<String[]>data;\r
+ protected StringListLabelProvider labelProvider;\r
+ \r
+ public PropertyDialog(Shell parent) {\r
+ super(parent);\r
+ \r
+ this.setContentProvider(new IStructuredContentProvider() {\r
+ public Object[] getElements(Object inputElement) {\r
+ List<?> lines = (List<?>) inputElement;\r
+ return lines.toArray(new String[0][0]);\r
+ }\r
+ public void dispose() {\r
+ }\r
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {\r
+ }\r
+ });\r
+ }\r
+\r
+ public int columnNameToColumn(String name) {\r
+ if (name.equals(KEY_COLUMN_NAME)) return 0;\r
+ if (name.equals(VALUE_COLUMN_NAME)) return 1;\r
+ return -1;\r
+ }\r
+ \r
+ @Override\r
+ protected Control createDialogArea(Composite container) {\r
+ Control composite = super.createDialogArea(container);\r
+ TableViewer viewer = getTableViewer();\r
+ Table table = viewer.getTable();\r
+ \r
+ //viewer.setUseHashlookup(true);\r
+ table.setHeaderVisible(true);\r
+ table.setLinesVisible(true);\r
+ \r
+ \r
+ \r
+ final TableColumn tableColumn = new TableColumn(table, table.getStyle(), 0);\r
+ tableColumn.setWidth(100);\r
+ tableColumn.setText(KEY_COLUMN_NAME);\r
+\r
+ final TableColumn tableColumn_2 = new TableColumn(table, table.getStyle(), 1);\r
+ tableColumn_2.setWidth(190);\r
+ tableColumn_2.setText(VALUE_COLUMN_NAME);\r
+ \r
+ // Dialog area is created when dialog.open is called\r
+ // which is after input has been set\r
+ // Therefore there columns have not been created at the time\r
+ // of setting input object before columns have been set.\r
+ // Re-setting input forces to read columns\r
+ viewer.setInput( getTableViewer().getInput() );\r
+ viewer.setColumnProperties(new String[] {KEY_COLUMN_NAME, VALUE_COLUMN_NAME});\r
+\r
+ TableColumnSorter.attachTableColumnSorter( viewer );\r
+\r
+ return composite;\r
+ }\r
+ \r
+ public void setInput(String lines[][]) {\r
+ labelProvider = new StringListLabelProvider(lines);\r
+ this.setLabelProvider( labelProvider );\r
+ data = labelProvider.getData();\r
+ super.setInput(data);\r
+ }\r
+ \r
+ @Override\r
+ protected int getTableStyle()\r
+ {\r
+ return SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER | SWT.FULL_SELECTION; \r
+ }\r
+ \r
+ public void setInput(Map<String, String> properties) {\r
+ String lines[][] = new String[properties.size()][];\r
+ int i = 0;\r
+ for (String key : properties.keySet()) {\r
+ String line[] = new String[] {key, properties.get(key)};\r
+ lines[i++] = line;\r
+ }\r
+ setInput(lines);\r
+ }\r
+}\r
+\r
+\r