diff --git a/de.bmotionstudio.gef.editor/plugin.xml b/de.bmotionstudio.gef.editor/plugin.xml index 08ffb3e0b4f674f97b0bdea5d55f17559fa7af79..2c44c36df58d3693d32553202cc0f263e64b1956 100644 --- a/de.bmotionstudio.gef.editor/plugin.xml +++ b/de.bmotionstudio.gef.editor/plugin.xml @@ -291,9 +291,13 @@ name="External Observer Script"> </observer> <observer - class="de.bmotionstudio.gef.editor.observer.ColumnObserver" + class="de.bmotionstudio.gef.editor.observer.TableObserver" name="Table Observer"> </observer> + <observer + class="de.bmotionstudio.gef.editor.observer.ColumnObserver" + name="Column Observer"> + </observer> </extension> <extension point="de.bmotionstudio.gef.editor.schedulerEvent"> @@ -537,7 +541,13 @@ <observer id="de.bmotionstudio.gef.editor.observer.ColumnObserver"> <control - id="de.bmotionstudio.gef.editor.tablecell"> + id="de.bmotionstudio.gef.editor.tablecolumn"> + </control> + </observer> + <observer + id="de.bmotionstudio.gef.editor.observer.TableObserver"> + <control + id="de.bmotionstudio.gef.editor.table"> </control> </observer> </include> diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/ColumnObserver.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/ColumnObserver.java index 988f9c8a1b4d5a010bd7f11167b610f94600a016..078476c654321fee9d8c69ffee5b964ca0438ad3 100644 --- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/ColumnObserver.java +++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/ColumnObserver.java @@ -2,10 +2,10 @@ package de.bmotionstudio.gef.editor.observer; import de.bmotionstudio.gef.editor.Animation; import de.bmotionstudio.gef.editor.AttributeConstants; +import de.bmotionstudio.gef.editor.attribute.AbstractAttribute; import de.bmotionstudio.gef.editor.model.BControl; import de.bmotionstudio.gef.editor.observer.wizard.WizardColumnObserver; import de.bmotionstudio.gef.editor.util.BMSUtil; -import de.prob.unicode.UnicodeTranslator; public class ColumnObserver extends Observer { @@ -25,53 +25,24 @@ public class ColumnObserver extends Observer { String fEval = BMSUtil.parseExpression(expression, control, animation); - - fEval = fEval.replace("}", "").replace("{", "").replace(")", "") - .replace("(", ""); + fEval = fEval.replace("}", "").replace("{", ""); String[] splitArray = fEval.split(","); - // --------------------------------------------------------------- - - int numberOfRows = splitArray.length; - - BControl tableControl = control.getParent().getParent(); - - // Set the correct number of rows - tableControl - .setAttributeValue(AttributeConstants.ATTRIBUTE_ROWS, - numberOfRows, true, false); - - System.out.println("number of rows: " + numberOfRows); - - boolean setColumns = false; - - // Set content and the correct number of columns - for (int i = 0; i < numberOfRows; i++) { - - String content = UnicodeTranslator.toAscii(splitArray[i]) - .replace("|->", ","); + AbstractAttribute attributeRows = control.getParent().getAttribute( + AttributeConstants.ATTRIBUTE_ROWS); - String[] vals = content.split(","); - int numberOfColumns = vals.length; - - // Set only one time the number of columns! - if (!setColumns) { - tableControl - .setAttributeValue( - AttributeConstants.ATTRIBUTE_COLUMNS, - numberOfColumns, true, false); - setColumns = true; - System.out.println("number of columns: " + numberOfColumns); - } + Integer defaultRows = Integer.valueOf(attributeRows.getInitValue() + .toString()); - for (int z = 0; z < numberOfColumns; z++) { - String val = vals[z]; - BControl column = tableControl.getChildrenArray().get(z); - BControl cell = column.getChildrenArray().get(i); - cell.setAttributeValue(AttributeConstants.ATTRIBUTE_TEXT, - val); - } + control.getParent().setAttributeValue( + AttributeConstants.ATTRIBUTE_ROWS, + defaultRows + splitArray.length, true, false); + for (int i = defaultRows; i < splitArray.length + defaultRows; i++) { + control.getChildrenArray() + .get(i) + .setAttributeValue(AttributeConstants.ATTRIBUTE_TEXT, + splitArray[i - defaultRows]); } } @@ -99,4 +70,4 @@ public class ColumnObserver extends Observer { return new WizardColumnObserver(control, this); } -} +} \ No newline at end of file diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/TableObserver.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/TableObserver.java new file mode 100644 index 0000000000000000000000000000000000000000..a63cb1b67e4402064143cab7c3ad85caf90d5717 --- /dev/null +++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/TableObserver.java @@ -0,0 +1,104 @@ +package de.bmotionstudio.gef.editor.observer; + +import de.bmotionstudio.gef.editor.Animation; +import de.bmotionstudio.gef.editor.AttributeConstants; +import de.bmotionstudio.gef.editor.model.BControl; +import de.bmotionstudio.gef.editor.observer.wizard.WizardTableObserver; +import de.bmotionstudio.gef.editor.util.BMSUtil; +import de.prob.unicode.UnicodeTranslator; + +public class TableObserver extends Observer { + + private String expression; + private String predicate; + + @Override + public void check(Animation animation, BControl control) { + + // First evaluate predicate (predicate field) + String bolValue = "true"; + if (predicate != null && predicate.length() > 0) { + bolValue = BMSUtil.parsePredicate(predicate, control, animation); + } + + if (Boolean.valueOf(bolValue)) { + + String fEval = BMSUtil.parseExpression(expression, control, + animation); + + fEval = fEval.replace("}", "").replace("{", "").replace(")", "") + .replace("(", ""); + String[] splitArray = fEval.split(","); + + // --------------------------------------------------------------- + + Integer numberOfOldRows = Integer.valueOf(control + .getAttributeValue(AttributeConstants.ATTRIBUTE_ROWS) + .toString()); + Integer numberOfOldColumns = Integer.valueOf(control + .getAttributeValue(AttributeConstants.ATTRIBUTE_COLUMNS) + .toString()); + int numberOfNewRows = splitArray.length; + + // Set the correct number of rows + control.setAttributeValue(AttributeConstants.ATTRIBUTE_ROWS, + numberOfNewRows + numberOfOldRows, true, false); + + boolean setColumns = false; + + // Set content and the correct number of columns + for (int i = numberOfOldRows; i < numberOfNewRows + numberOfOldRows; i++) { + + String content = UnicodeTranslator.toAscii( + splitArray[i - numberOfOldRows]).replace("|->", ","); + + String[] vals = content.split(","); + int numberOfNewColumns = vals.length; + + // Set only one time the number of columns! + if (!setColumns) { + int ncolumns = numberOfNewColumns; + if (numberOfOldColumns > numberOfNewColumns) + ncolumns = numberOfOldColumns; + control.setAttributeValue( + AttributeConstants.ATTRIBUTE_COLUMNS, ncolumns, + true, false); + setColumns = true; + } + + for (int z = 0; z < numberOfNewColumns; z++) { + String val = vals[z]; + BControl column = control.getChildrenArray().get(z); + BControl cell = column.getChildrenArray().get(i); + cell.setAttributeValue(AttributeConstants.ATTRIBUTE_TEXT, + val); + } + + } + + } + + } + + public void setExpression(String expression) { + this.expression = expression; + } + + public String getExpression() { + return expression; + } + + public String getPredicate() { + return predicate; + } + + public void setPredicate(String predicate) { + this.predicate = predicate; + } + + @Override + public ObserverWizard getWizard(BControl control) { + return new WizardTableObserver(control, this); + } + +} diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/wizard/WizardTableObserver.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/wizard/WizardTableObserver.java new file mode 100644 index 0000000000000000000000000000000000000000..9da7ff156f63ec99cbb0003adfd147ab40e0c84b --- /dev/null +++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/observer/wizard/WizardTableObserver.java @@ -0,0 +1,125 @@ +/** + * (c) 2009 Lehrstuhl fuer Softwaretechnik und Programmiersprachen, + * Heinrich Heine Universitaet Duesseldorf + * This software is licenced under EPL 1.0 (http://www.eclipse.org/org/documents/epl-v10.html) + * */ + +package de.bmotionstudio.gef.editor.observer.wizard; + +import org.eclipse.core.databinding.DataBindingContext; +import org.eclipse.core.databinding.beans.BeansObservables; +import org.eclipse.jface.databinding.swt.SWTObservables; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.wizard.WizardPage; +import org.eclipse.swt.SWT; +import org.eclipse.swt.graphics.Font; +import org.eclipse.swt.graphics.FontData; +import org.eclipse.swt.graphics.Point; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Text; + +import de.bmotionstudio.gef.editor.model.BControl; +import de.bmotionstudio.gef.editor.observer.Observer; +import de.bmotionstudio.gef.editor.observer.ObserverWizard; +import de.bmotionstudio.gef.editor.observer.TableObserver; + +public class WizardTableObserver extends ObserverWizard { + + private class TableObserverPage extends WizardPage { + + private Text txtExpression; + private Text txtPredicate; + + public Text getTxtExpression() { + return txtExpression; + } + + protected TableObserverPage(final String pageName) { + super(pageName); + } + + public void createControl(final Composite parent) { + + final DataBindingContext dbc = new DataBindingContext(); + + Composite container = new Composite(parent, SWT.NONE); + + container.setLayoutData(new GridData(GridData.FILL_BOTH)); + container.setLayout(new GridLayout(2, false)); + + Label lb = new Label(container, SWT.NONE); + lb.setText("Predicate:"); + + txtPredicate = new Text(container, SWT.BORDER); + txtPredicate.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + txtPredicate.setFont(new Font(Display.getDefault(), new FontData( + "Arial", 10, SWT.NONE))); + + lb = new Label(container, SWT.NONE); + lb.setText("Expression:"); + lb.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING)); + + txtExpression = new Text(container, SWT.BORDER | SWT.MULTI + | SWT.WRAP); + txtExpression.setLayoutData(new GridData(GridData.FILL_BOTH)); + + initBindings(dbc); + + setControl(container); + + } + + private void initBindings(DataBindingContext dbc) { + + dbc.bindValue(SWTObservables.observeText(txtPredicate, SWT.Modify), + BeansObservables.observeValue( + (TableObserver) getObserver(), "predicate")); + + dbc.bindValue( + SWTObservables.observeText(txtExpression, SWT.Modify), + BeansObservables.observeValue( + (TableObserver) getObserver(), "expression")); + + } + + } + + public WizardTableObserver(BControl bcontrol, + Observer bobserver) { + super(bcontrol, bobserver); + addPage(new TableObserverPage("TableObserverPage")); + } + + @Override + protected Boolean prepareToFinish() { + + TableObserverPage page = (TableObserverPage) getPage("TableObserverPage"); + + String errorStr = ""; + + if (page.getTxtExpression().getText().length() == 0) + errorStr += "Please enter an expression.\n"; + + if (page.getErrorMessage() != null) + errorStr += "Please check the syntax/parser error.\n"; + + if (errorStr.length() > 0) { + MessageDialog.openError(Display.getDefault().getActiveShell(), + "An Error occured", errorStr); + return false; + } + + return true; + + } + + @Override + public Point getSize() { + return new Point(600, 500); + } + +}