Update(boards): xpython板卡添加 解包 操作,同时调整 打包 操作位置

This commit is contained in:
王立帮
2024-10-06 21:06:37 +08:00
parent 52643d15ee
commit fd0a667109
22 changed files with 183 additions and 314 deletions

View File

@@ -199,4 +199,139 @@ export const controls_typeLists = {
return mode0 + TOOLTIPS[mode];
});
}
};
export const lists_zip = {
init: function () {
this.setColour(VARIABLES_HUE);
this.itemCount_ = 2;
this.updateShape_();
this.setInputsInline(true);
this.setPreviousStatement(false);
this.setNextStatement(false);
this.setOutput(true, "List")
this.setMutator(new Blockly.icons.MutatorIcon(['lists_zip_item'], this));
this.setTooltip(Blockly.Msg.MIXLY_PYTHON_LISTS_ZIP_TOOLTIP);
},
mutationToDom: function () {
var container = document.createElement('mutation');
container.setAttribute('items', this.itemCount_);
return container;
},
domToMutation: function (xmlElement) {
this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10);
this.updateShape_();
},
decompose: function (workspace) {
var containerBlock =
workspace.newBlock('lists_zip_container');
containerBlock.initSvg();
var connection = containerBlock.getInput('STACK').connection;
for (var i = 0; i < this.itemCount_; i++) {
var itemBlock = workspace.newBlock('lists_zip_item');
itemBlock.initSvg();
connection.connect(itemBlock.previousConnection);
connection = itemBlock.nextConnection;
}
return containerBlock;
},
compose: function (containerBlock) {
var itemBlock = containerBlock.getInputTargetBlock('STACK');
// Count number of inputs.
var connections = [];
var i = 0;
while (itemBlock) {
connections[i] = itemBlock.valueConnection_;
itemBlock = itemBlock.nextConnection &&
itemBlock.nextConnection.targetBlock();
i++;
}
this.itemCount_ = i;
this.updateShape_();
// Reconnect any child blocks.
for (var i = 0; i < this.itemCount_; i++) {
if (connections[i]) {
this.getInput('ADD' + i).connection.connect(connections[i]);
}
}
},
saveConnections: function (containerBlock) {
var itemBlock = containerBlock.getInputTargetBlock('STACK');
var i = 0;
while (itemBlock) {
var input = this.getInput('ADD' + i);
itemBlock.valueConnection_ = input && input.connection.targetConnection;
i++;
itemBlock = itemBlock.nextConnection &&
itemBlock.nextConnection.targetBlock();
}
},
updateShape_: function () {
// Delete everything.
if (this.getInput('EMPTY')) {
this.removeInput('EMPTY');
} else {
var i = 0;
while (this.getInput('ADD' + i)) {
this.removeInput('ADD' + i);
i++;
}
}
// Rebuild block.
if (this.itemCount_ == 0) {
this.appendDummyInput('EMPTY')
.appendField(Blockly.Msg.MIXLY_PYTHON_LISTS_ZIP);
} else {
for (var i = 0; i < this.itemCount_; i++) {
var input = this.appendValueInput('ADD' + i);
if (i == 0) {
input.appendField(Blockly.Msg.MIXLY_PYTHON_LISTS_ZIP);
}
}
}
}
};
export const lists_zip_container = {
init: function () {
this.setColour(VARIABLES_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_PYTHON_LISTS_ZIP)
.appendField('[]');
this.appendStatementInput('STACK');
this.setTooltip(Blockly.Msg.MIXLY_MIXPY_INOUT_PRINT_MANY_CONTAINER_TOOLTIP);
this.contextMenu = false;
}
};
export const lists_zip_item = {
init: function () {
this.setColour(VARIABLES_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_PYTHON_LISTS_ZIP_ITEM);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setTooltip(Blockly.Msg.MIXLY_PYTHON_LISTS_ZIP_ITEM_TOOLTIP);
this.contextMenu = false;
}
};
export const unpack_iterable_object = {
init: function () {
this.setColour(VARIABLES_HUE);
this.appendValueInput('VAR')
.appendField(Blockly.Msg.MIXLY_VARIABLE_UNPACK)
.appendField(new Blockly.FieldDropdown([
[Blockly.Msg.MIXLY_PYTHON_LISTS_ZIP_ITEM, '*'],
[Blockly.Msg.MIXLY_MICROBIT_TYPE_DICT, '**']
]), 'TYPE');
this.setTooltip('');
this.setOutput(true);
}
};