* [#8059](https://bugzilla.scilab.org/8059): A local `.wgetrc` config file could make troubles in `atomsDownload`.
* [#8100](https://bugzilla.scilab.org/8100): `cumsum()` on sparse documented.
* [#8378](https://bugzilla.scilab.org/8378): Datatip `ContextMenu => Delete last datatip` was useless.
+* [#8761](https://bugzilla.scilab.org/8761): Xcos masked superblocks had invalid names.
* [#9221](https://bugzilla.scilab.org/9221): There was no way in Scilab to easily access to sets of unicode symbols like greek letters, etc.
* [#9909](https://bugzilla.scilab.org/9909): In the help browser, add a way to open the online version of the current page.
* [#10046](https://bugzilla.scilab.org/10046): By default, the `MAXMIN` block did not propose 2 input ports to work in an element-wise way (unlike MIN_f and MAX_f), which is its most original working mode.
import javax.swing.BorderFactory;
import javax.swing.DefaultCellEditor;
+import javax.swing.ImageIcon;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
+import org.scilab.modules.commons.gui.FindIconHelper;
import org.scilab.modules.graph.ScilabComponent;
import org.scilab.modules.graph.ScilabGraph;
import org.scilab.modules.graph.actions.base.DefaultAction;
public CustomizeFrame(XcosDiagram diagram) {
setTitle(XcosMessages.MASK_TITLE);
setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);
+ ImageIcon scilabIcon = new ImageIcon(FindIconHelper.findIcon("scilab"));
+ setIconImage(scilabIcon.getImage());
controler = new CustomizeFrameControler(diagram);
initComponents();
}
switch (e.getType()) {
case TableModelEvent.INSERT:
String key = (String) customModel.getValueAt(row, 0);
- String value = context.get(key);
+ String value = context.get(key).toString();
valuesModel.addRow(new Object[] { key, value });
break;
}
};
- private final Map<String, String> context;
+ private final Map<String, ScilabType> context;
private Iterator<String> keyIterator;
/**
import java.util.Hashtable;
import java.util.Optional;
import java.util.stream.Collectors;
+import org.scilab.modules.types.ScilabType;
import org.scilab.modules.xcos.VectorOfBool;
import org.scilab.modules.xcos.VectorOfScicosID;
import org.scilab.modules.xcos.block.SuperBlock;
* @return The resulting data. Keys are variable names and Values are
* evaluated values.
*/
- public Map<String, String> evaluateContext() {
- Map<String, String> result = Collections.emptyMap();
+ public Map<String, ScilabType> evaluateContext() {
+ Map<String, ScilabType> result = Collections.emptyMap();
final ScilabDirectHandler handler = ScilabDirectHandler.acquire();
if (handler == null) {
return result;
// first write the context strings
handler.writeContext(getContext());
- // evaluate using script2var
- ScilabInterpreterManagement.synchronousScilabExec(ScilabDirectHandler.CONTEXT + " = script2var(" + ScilabDirectHandler.CONTEXT + ", struct());");
+ // evaluate using script2var and convert to string keys and list of values
+ ScilabInterpreterManagement.synchronousScilabExec(ScilabDirectHandler.CONTEXT + " = script2var(" + ScilabDirectHandler.CONTEXT + ", struct()); "
+ + ScilabDirectHandler.CONTEXT + "_names = fieldnames("+ScilabDirectHandler.CONTEXT+")'; "
+ + ScilabDirectHandler.CONTEXT + "_values = list(); "
+ + "for i=1:size(" + ScilabDirectHandler.CONTEXT + "_names, '*') ;"
+ + " " + ScilabDirectHandler.CONTEXT + "_values(i) = " + ScilabDirectHandler.CONTEXT + "(" + ScilabDirectHandler.CONTEXT + "_names(i));"
+ + "end");
// read the structure
result = handler.readContext();
package org.scilab.modules.xcos.io.scicos;
import java.util.Map;
+import org.scilab.modules.types.ScilabType;
public interface Handler {
*
* @return the decoded context
*/
- public abstract Map<String, String> readContext();
+ public abstract Map<String, ScilabType> readContext();
/**
* Encode an Xcos context
package org.scilab.modules.xcos.io.scicos;
-import java.util.LinkedHashMap;
+import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;
import org.scilab.modules.javasci.JavasciException;
import org.scilab.modules.javasci.Scilab;
-import org.scilab.modules.types.ScilabMList;
+import org.scilab.modules.types.ScilabList;
import org.scilab.modules.types.ScilabString;
import org.scilab.modules.types.ScilabType;
*/
@Override
- public synchronized Map<String, String> readContext() {
+ public synchronized Map<String, ScilabType> readContext() {
LOG.entering("ScilabDirectHandler", "readContext");
- final ScilabMList list;
- final Map<String, String> result = new LinkedHashMap<String, String>();
+ final Map<String, ScilabType> result = new HashMap<String, ScilabType>();
- final ScilabType data;
+ final ScilabType keys;
+ final ScilabType values;
try {
- data = Scilab.getInCurrentScilabSession(CONTEXT);
+ keys = Scilab.getInCurrentScilabSession(CONTEXT + "_names");
+ values = Scilab.getInCurrentScilabSession(CONTEXT + "_values");
} catch (JavasciException e) {
throw new RuntimeException(e);
}
- if (data instanceof ScilabMList) {
- list = (ScilabMList) data;
+ final ScilabString k;
+ final ScilabList v;
+ if (keys instanceof ScilabString && values instanceof ScilabList) {
+ k = (ScilabString) keys;
+ v = (ScilabList) values;
LOG.finer("data available");
} else {
- list = new ScilabMList();
LOG.finer("data unavailable");
+ return result;
}
- // We are starting at 2 because a struct is composed of
- // - the fields names (ScilabString)
- // - the dimension
- // - variables values...
- for (int index = 2; index < list.size(); index++) {
- String key = ((ScilabString) list.get(0)).getData()[0][index];
- String value = list.get(index).toString();
-
- result.put(key, value);
+ for (int i = 0; i < Math.min(k.getWidth(), v.size()); i++) {
+ result.put(k.getData()[0][i], v.get(i));
}
LOG.exiting("ScilabDirectHandler", "readContext");