aboutsummaryrefslogtreecommitdiffstats
path: root/org.openembedded.bc.ui/src/org/openembedded/bc/ui/wizards/variable/VariablePage.java
diff options
context:
space:
mode:
Diffstat (limited to 'org.openembedded.bc.ui/src/org/openembedded/bc/ui/wizards/variable/VariablePage.java')
-rw-r--r--org.openembedded.bc.ui/src/org/openembedded/bc/ui/wizards/variable/VariablePage.java262
1 files changed, 262 insertions, 0 deletions
diff --git a/org.openembedded.bc.ui/src/org/openembedded/bc/ui/wizards/variable/VariablePage.java b/org.openembedded.bc.ui/src/org/openembedded/bc/ui/wizards/variable/VariablePage.java
new file mode 100644
index 0000000..5919581
--- /dev/null
+++ b/org.openembedded.bc.ui/src/org/openembedded/bc/ui/wizards/variable/VariablePage.java
@@ -0,0 +1,262 @@
+package org.openembedded.bc.ui.wizards.variable;
+
+import java.util.Comparator;
+import java.util.Map;
+
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.Text;
+import org.openembedded.bc.ui.wizards.FiniteStateWizardPage;
+
+
+/**
+ * The wizard page for the Variable Wizard.
+ * @author kgilmer
+ *
+ */
+public class VariablePage extends FiniteStateWizardPage {
+
+ private Text txtName;
+ private Text txtValue;
+ private TableViewer viewer;
+ private TableColumn c1;
+ private TableColumn c2;
+
+ protected VariablePage(Map model) {
+ super("BitBake Commander", model);
+ setTitle("BitBake Variable Viewer");
+ setDescription("Sort and fitler global BitBake variables by name or value.");
+ }
+
+ @Override
+ public void createControl(Composite parent) {
+ Composite top = new Composite(parent, SWT.None);
+ top.setLayout(new GridLayout(2, true));
+ top.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ ValidationListener listener = new ValidationListener();
+
+ txtName = new Text(top, SWT.BORDER);
+ txtName.addModifyListener(listener);
+ txtName.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ txtValue = new Text(top, SWT.BORDER);
+ txtValue.addModifyListener(listener);
+ txtValue.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ viewer = new TableViewer(top);
+
+ Table table = viewer.getTable();
+ table.setLinesVisible(true);
+ table.setHeaderVisible(true);
+ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+ data.heightHint = 200;
+ data.horizontalSpan = 2;
+ table.setLayoutData(data);
+ c1 = new TableColumn(table, SWT.NONE);
+ c1.setText("Name");
+ c1.setWidth(200);
+ c1.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent event) {
+ ((VariableViewerSorter) viewer.getSorter()).doSort(0);
+ viewer.refresh();
+ }
+ });
+
+ c2 = new TableColumn(table, SWT.NONE);
+ c2.setText("Value");
+ c2.setWidth(200);
+ c2.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent event) {
+ ((VariableViewerSorter) viewer.getSorter()).doSort(1);
+ viewer.refresh();
+ }
+ });
+
+ viewer.setContentProvider(new VariableContentProvider());
+ viewer.setLabelProvider(new VariableLabelProvider());
+ viewer.setSorter(new VariableViewerSorter());
+
+ viewer.setFilters(new ViewerFilter[] {new MapViewerFilter()});
+ setControl(top);
+ }
+
+ @Override
+ public void pageCleanup() {
+
+ }
+
+ @Override
+ public void pageDisplay() {
+ viewer.setInput(model);
+ }
+
+ @Override
+ protected void updateModel() {
+ viewer.refresh();
+ }
+
+ @Override
+ protected boolean validatePage() {
+ return true;
+ }
+
+ /**
+ * A content provider for the variable wizard dialog.
+ * @author kgilmer
+ *
+ */
+ private class VariableContentProvider implements IStructuredContentProvider {
+
+ public Object[] getElements(Object inputElement) {
+ return model.keySet().toArray();
+ }
+
+ public void dispose() {
+
+ }
+
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+
+ }
+ }
+
+ /**
+ * A label provider for variable wizard dialog.
+ * @author kgilmer
+ *
+ */
+ private class VariableLabelProvider implements ITableLabelProvider {
+
+ public Image getColumnImage(Object element, int columnIndex) {
+ return null;
+ }
+
+ public String getColumnText(Object element, int columnIndex) {
+ String val;
+
+ switch (columnIndex) {
+ case 0:
+ val = element.toString();
+ break;
+ case 1:
+ val = (String) model.get(element);
+ break;
+ default:
+ val = "";
+ break;
+ }
+
+ return val;
+ }
+
+ public void addListener(ILabelProviderListener listener) {
+
+ }
+
+ public void dispose() {
+
+ }
+
+ public boolean isLabelProperty(Object element, String property) {
+ return false;
+ }
+
+ public void removeListener(ILabelProviderListener listener) {
+
+ }
+
+ }
+
+ /**
+ *
+ * A tableviewer sorter found on the internet.
+ *
+ */
+ class VariableViewerSorter extends ViewerSorter {
+ private static final int ASCENDING = 0;
+
+ private static final int DESCENDING = 1;
+
+ private int column;
+
+ private int direction;
+
+ public void doSort(int column) {
+ if (column == this.column) {
+ // Same column as last sort; toggle the direction
+ direction = 1 - direction;
+ } else {
+ // New column; do an ascending sort
+ this.column = column;
+ direction = ASCENDING;
+ }
+ }
+
+ public int compare(Viewer viewer, Object e1, Object e2) {
+ int rc = 0;
+ Comparator c = this.getComparator();
+ // Determine which column and do the appropriate sort
+ switch (column) {
+ case 0:
+ rc = c.compare(e1, e2);
+ break;
+ case 1:
+ rc = c.compare(model.get(e1), model.get(e2));
+ break;
+ }
+
+ // If descending order, flip the direction
+ if (direction == DESCENDING)
+ rc = -rc;
+
+ return rc;
+ }
+ }
+
+ /**
+ * A filter for the name/value model.
+ * @author kgilmer
+ *
+ */
+ private class MapViewerFilter extends ViewerFilter {
+
+ public MapViewerFilter() {
+ }
+
+ @Override
+ public boolean select(Viewer viewer, Object parentElement, Object element) {
+ String keyFilter = txtName.getText();
+ String valFilter = txtValue.getText();
+
+ String elem = (String) element;
+ String val = (String) model.get(element);
+
+ if (keyFilter.length() > 0 && elem.indexOf(keyFilter) == -1 ) {
+ return false;
+ }
+
+ if (valFilter.length() > 0 && val.indexOf(valFilter) == -1 ) {
+ return false;
+ }
+
+ return true;
+ }
+
+ }
+
+}