From 7478f6cd048b994f766ae352cd5500a416a5e44e Mon Sep 17 00:00:00 2001 From: "Pawel Spychalski (DzikuVx)" Date: Fri, 10 Apr 2020 11:37:52 +0200 Subject: Basic render of global function table --- js/fc.js | 36 +++++++++ js/globalFunction.js | 158 ++++++++++++++++++++++++++++++++++++++++ js/globalFunctionsCollection.js | 22 ++++++ js/gui.js | 32 ++++++++ js/logicCondition.js | 37 +--------- src/css/logic.css | 2 + tabs/programming.html | 1 + tabs/programming.js | 3 + 8 files changed, 256 insertions(+), 35 deletions(-) diff --git a/js/fc.js b/js/fc.js index e7c64b82..5d9718c1 100644 --- a/js/fc.js +++ b/js/fc.js @@ -1069,6 +1069,42 @@ var FC = { } } }, + getFunctionActions: function () { + return { + 0: { + name: "OVERRIDE ARMING SAFETY", + hasOperand: false + }, + 1: { + name: "OVERRIDE THROTTLE SCALE", + hasOperand: true + }, + 2: { + name: "SWAP ROLL & YAW", + hasOperand: false + }, + 3: { + name: "SET VTX POWER LEVEL", + hasOperand: true + }, + 4: { + name: "INVERT ROLL", + hasOperand: false + }, + 5: { + name: "INVERT PITCH", + hasOperand: false + }, + 6: { + name: "INVERT YAW", + hasOperand: false + }, + 7: { + name: "OVERRIDE THROTTLE", + hasOperand: true + } + } + }, getOperandTypes: function () { return { 0: { diff --git a/js/globalFunction.js b/js/globalFunction.js index 565800b8..933ba078 100644 --- a/js/globalFunction.js +++ b/js/globalFunction.js @@ -53,5 +53,163 @@ let GlobalFunction = function (enabled, conditionId, action, operandType, operan flags = data; }; + self.onOperatorValueChange = function (event) { + let $cT = $(event.currentTarget); + self.setOperandValue($cT.val()); + }; + + self.onOperatorTypeChange = function (event) { + let $cT = $(event.currentTarget), + operand = $cT.data("operand"), + $container = $cT.parent(), + operandMetadata = FC.getOperandTypes()[$cT.val()]; + + self.setOperandType($cT.val()); + self.setOperandValue(operandMetadata.default); + + GUI.renderOperandValue($container, operandMetadata, operand, operandMetadata.default, self.onOperatorValueChange); + }; + + self.onEnabledChange = function (event) { + let $cT = $(event.currentTarget), + $parent = $cT.closest('tr'); + self.setEnabled(!!$cT.prop('checked')); + + self.renderAction($parent); + self.renderOperand($parent); + self.renderLogicId($parent); + }; + + self.onLogicIdChange = function(event) { + let $cT = $(event.currentTarget); + self.setConditionId($cT.val()); + }; + + self.onActionChange = function (event) { + let $cT = $(event.currentTarget); + self.setAction($cT.val()); + self.renderOperand($cT.closest('tr')); + }; + + self.hasOperand = function () { + + let actions = FC.getFunctionActions(); + + if (!self.getEnabled()) { + return false; + } + + return actions[self.getAction()].hasOperand; + }; + + self.renderOperand = function ($row) { + let $container; + + $container = $row.find('.function_cell__operand'); + + $container.html(''); + if (self.hasOperand()) { + + $container.append(''); + let $t = $container.find('.logic_element__operand--type'); + + for (let k in FC.getOperandTypes()) { + if (FC.getOperandTypes().hasOwnProperty(k)) { + let op = FC.getOperandTypes()[k]; + + if (operandType == k) { + $t.append(''); + + /* + * Render value element depending on type + */ + GUI.renderOperandValue($container, op, 0, operandValue, self.onOperatorValueChange); + + } else { + $t.append(''); + } + } + } + + /* + * Bind events + */ + $t.change(self.onOperatorTypeChange); + + } + } + + self.renderAction = function ($row) { + + if (self.getEnabled()) { + + $row.find('.function_cell__action').html(""); + let $t = $row.find(".function__action"); + + for (let k in FC.getFunctionActions()) { + if (FC.getFunctionActions().hasOwnProperty(k)) { + let o = FC.getFunctionActions()[k]; + if (self.getAction() == parseInt(k, 10)) { + $t.append(''); + } else { + $t.append(''); + } + } + } + $t.change(self.onActionChange); + } else { + $row.find('.function_cell__action').html(""); + } + }; + + self.renderLogicId = function($row) { + + if (self.getEnabled()) { + + $row.find('.function_cell__logicId').html(""); + let $t = $row.find(".function__logicId"); + let count = LOGIC_CONDITIONS.getCount(); + + console.log(self.getConditionId()); + + for (let i = 0; i < count ; i++) { + if (i == self.getConditionId()) { + $t.append(''); + } else { + $t.append(''); + } + } + $t.change(self.onLogicIdChange); + } else { + $row.find('.function_cell__logicId').html(""); + } + } + + self.render = function (index, $container) { + + $container.find('tbody').append('\ + \ + \ + \ + \ + \ + \ +
\ + \ + '); + + $row = $container.find('tr:last'); + + $row.find('.function_cell__index').html(index); + $row.find('.function_cell__enabled').html(""); + $row.find('.function_element__enabled'). + prop('checked', self.getEnabled()). + change(self.onEnabledChange); + self.renderLogicId($row); + self.renderAction($row); + self.renderOperand($row); + } + + return self; } \ No newline at end of file diff --git a/js/globalFunctionsCollection.js b/js/globalFunctionsCollection.js index c5e3dbac..3203ce3a 100644 --- a/js/globalFunctionsCollection.js +++ b/js/globalFunctionsCollection.js @@ -21,5 +21,27 @@ let GlobalFunctionsCollection = function () { return data.length }; + self.init = function ($element) { + + if (semver.lt(CONFIG.flightControllerVersion, "2.4.0")) { + return; + } + + $container = $element; + }; + + self.render = function () { + let $table = $container.find(".function__table") + $table.find("tbody tr").remove(); + + for (let k in self.get()) { + if (self.get().hasOwnProperty(k)) { + self.get()[k].render(k, $table); + } + } + + GUI.switchery(); + } + return self; } \ No newline at end of file diff --git a/js/gui.js b/js/gui.js index a6c76189..4f7362d1 100644 --- a/js/gui.js +++ b/js/gui.js @@ -260,5 +260,37 @@ GUI_control.prototype.load = function(rel, callback) { }); } +GUI_control.prototype.renderOperandValue = function ($container, operandMetadata, operand, value, onChange) { + + $container.find('.logic_element__operand--value').remove(); + + switch (operandMetadata.type) { + case "value": + $container.append(''); + break; + case "range": + case "dictionary": + $container.append(''); + let $t = $container.find('.logic_element__operand--value'); + + if (operandMetadata.type == "range") { + for (let i = operandMetadata.range[0]; i <= operandMetadata.range[1]; i++) { + $t.append(''); + } + } else if (operandMetadata.type == "dictionary") { + for (let k in operandMetadata.values) { + if (operandMetadata.values.hasOwnProperty(k)) { + $t.append(''); + } + } + } + + $t.val(value); + break; + } + + $container.find('.logic_element__operand--value').change(onChange); +}; + // initialize object into GUI variable var GUI = new GUI_control(); diff --git a/js/logicCondition.js b/js/logicCondition.js index 96b56873..c95c86f7 100644 --- a/js/logicCondition.js +++ b/js/logicCondition.js @@ -100,7 +100,7 @@ let LogicCondition = function (enabled, operation, operandAType, operandAValue, self.setOperandBValue(operandMetadata.default); } - self.renderOperandValue($container, operandMetadata, operand, operandMetadata.default); + GUI.renderOperandValue($container, operandMetadata, operand, operandMetadata.default, self.onOperatorValueChange); }; self.onOperatorValueChange = function (event) { @@ -114,39 +114,6 @@ let LogicCondition = function (enabled, operation, operandAType, operandAValue, } }; - self.renderOperandValue = function ($container, operandMetadata, operand, value) { - - $container.find('.logic_element__operand--value').remove(); - - switch (operandMetadata.type) { - case "value": - $container.append(''); - break; - case "range": - case "dictionary": - $container.append(''); - let $t = $container.find('.logic_element__operand--value'); - - if (operandMetadata.type == "range") { - for (let i = operandMetadata.range[0]; i <= operandMetadata.range[1]; i++) { - $t.append(''); - } - } else if (operandMetadata.type == "dictionary") { - for (let k in operandMetadata.values) { - if (operandMetadata.values.hasOwnProperty(k)) { - $t.append(''); - } - } - } - - $t.val(value); - break; - } - - $container.find('.logic_element__operand--value').change(self.onOperatorValueChange); - - }; - self.renderOperand = function (operand) { let type, value, $container; if (operand == 0) { @@ -175,7 +142,7 @@ let LogicCondition = function (enabled, operation, operandAType, operandAValue, /* * Render value element depending on type */ - self.renderOperandValue($container, op, operand, value); + GUI.renderOperandValue($container, op, operand, value, self.onOperatorValueChange); } else { $t.append(''); diff --git a/src/css/logic.css b/src/css/logic.css index f70c9e6e..45518dc8 100644 --- a/src/css/logic.css +++ b/src/css/logic.css @@ -41,6 +41,8 @@ input.logic_element__operand--value { right: 0; } +.function_cell__action, +.function_cell__operand, .logic_cell__operandA, .logic_cell__operandB { text-align: left; diff --git a/tabs/programming.html b/tabs/programming.html index 4e4ba967..2fff06bc 100644 --- a/tabs/programming.html +++ b/tabs/programming.html @@ -31,6 +31,7 @@ + diff --git a/tabs/programming.js b/tabs/programming.js index aa46c215..fd1f886c 100644 --- a/tabs/programming.js +++ b/tabs/programming.js @@ -46,6 +46,9 @@ TABS.programming.initialize = function (callback, scrollPosition) { LOGIC_CONDITIONS.init($('#logic-wrapper')); LOGIC_CONDITIONS.render(); + GLOBAL_FUNCTIONS.init($('#functions-wrapper')); + GLOBAL_FUNCTIONS.render(); + localize(); GUI.content_ready(callback); } -- cgit v1.2.3