Browse Source

Finished improvements

Igor 2 years ago
parent
commit
9636a44fca
4 changed files with 136 additions and 23 deletions
  1. 2 0
      i18n/ui.csv
  2. 7 2
      js/visualUI/code_generator.js
  3. 108 19
      js/visualUI/commands/variable_value_menu.js
  4. 19 2
      js/visualUI/functions.js

+ 2 - 0
i18n/ui.csv

@@ -44,6 +44,8 @@ text_edit_expression_cancel,Cancelar edição,Cancel edition,Cancelar edición
 text_add_function,Adicionar uma nova função ao programa,Add a new function to the program,Agregar una nueva función al programa
 text_move_command,Mover comando,Move command,Mover comando
 text_add_parameters,Adicionar um novo parâmetro,Add a new parameter,Agregar un nuevo parámetro
+text_parameter_reference,Definir parâmetro como passagem por referência,Define parameter passed by reference,Define parameter passed by reference
+text_parameter_copy,Definir parâmetro como passagem por cópia,Define parameter passed by copy,Define parameter passed by copy
 text_comment_start,Comentário inicial da função...,Function initial comment,Comentario inicial de la función
 text_comment_main,Esta é a função principal...,This is the main funcion,Esta es la función principal
 text_read_var,Entrada/Leitura de dados,Input/Read data,Entrada/Lectura de dados

+ 7 - 2
js/visualUI/code_generator.js

@@ -597,7 +597,6 @@ export function elementExpressionCode (expression_obj) {
     if (expression_obj[i].type) {
       ret += variableValueMenuCode(expression_obj[i]);
     } else if (expression_obj[i].type_op) {
-      console.log('veja', expression_obj[i].item)
       switch (expression_obj[i].item) {
         case Models.ARITHMETIC_TYPES.plus:
           ret += " + ";
@@ -720,10 +719,16 @@ export function variableValueMenuCode (variable_obj, is_return = false) {
         variable_obj.content.dimensions == 1 &&
         variable_obj.dimensions != 1
       ) {
-        ret += " [ " + variableValueMenuCode(variable_obj.column) + " ] ";
+          ret += " [ " + variableValueMenuCode(variable_obj.column) + " ] ";
       }
 
       if (
+        variable_obj.content.dimensions == 2 &&
+        variable_obj.dimensions != 2 && 
+        variable_obj.reference_dimensions == 1
+      ) {
+        ret += " [ " + variableValueMenuCode(variable_obj.row) + " ] ";
+      } else if (
         variable_obj.content.dimensions == 2 &&
         variable_obj.dimensions != 2
       ) {

+ 108 - 19
js/visualUI/commands/variable_value_menu.js

@@ -21,6 +21,7 @@ export function renderMenu (
   size_field = 2,
   expression_element
 ) {
+
   // Verificar se o objeto atual trata-se de uma chamada de função e conferir se possui a quantidade correta de parâmetros
   // Caso não possua, tem que adicionar as variáveis que servirão de parâmetros:
   if (ref_object.function_called) {
@@ -49,6 +50,35 @@ export function renderMenu (
     }
   }
 
+  // Verificar agora, quando trata-se de chamada de função, se a passagem de parâmetro é
+  // por referência ou por cópia:
+  var index_references = [];
+  if (ref_object.function_called) {
+    if (ref_object.function_called.parameters_list) {
+      for (var i = 0; i < ref_object.function_called.parameters_list.length; i++) {
+        if (ref_object.function_called.parameters_list[i].reference) {
+          index_references.push(i)
+          ref_object.parameters_list[i].reference = true
+          ref_object.parameters_list[i].variable_and_value = VAR_OR_VALUE_TYPES.only_variable;
+          if (ref_object.parameters_list[i].column)
+            ref_object.parameters_list[i].column.reference_parent = true
+          if (ref_object.parameters_list[i].row)
+            ref_object.parameters_list[i].row.reference_parent = true
+        }
+        else {
+          ref_object.parameters_list[i].reference = false;
+          ref_object.parameters_list[i].variable_and_value = VAR_OR_VALUE_TYPES.all;
+          if (ref_object.parameters_list[i].column)
+            ref_object.parameters_list[i].column.reference_parent = false
+          if (ref_object.parameters_list[i].row)
+            ref_object.parameters_list[i].row.reference_parent = false
+        }
+
+        ref_object.parameters_list[i].reference_dimensions = ref_object.function_called.parameters_list[i].dimensions
+      } 
+    }
+  }
+
   let menu_var_or_value =
     '<div class="ui dropdown menu_var_or_value_dom" data-varmenu="true"><div class="text"></div><i class="dropdown icon"></i><div class="menu">';
 
@@ -227,6 +257,12 @@ export function renderMenu (
 }
 
 function appendSelectText (ref_object, menu_var_or_value) {
+  // if (ref_object.reference_parent) {
+  //   menu_var_or_value
+  //       .find(".text")
+  //       .append("<i>Opcional</i>");
+  //   return;
+  // }
   switch (ref_object.variable_and_value) {
     case VAR_OR_VALUE_TYPES.only_variable:
       menu_var_or_value
@@ -620,8 +656,11 @@ function variableValueMenuCode (
         variable_obj.content.name +
         "</span>";
 
-      variable_render +=
-        ' <span>[ </span> <div class="column_container"></div> <span> ]</span>';
+      if (variable_obj.reference_dimensions >= 1)
+        variable_render += '';
+      else
+        variable_render +=
+          ' <span>[ </span> <div class="column_container"></div> <span> ]</span>';
 
       variable_render += "</div>";
 
@@ -688,13 +727,16 @@ function variableValueMenuCode (
       });
 
       if (!variable_obj.column) {
-        variable_obj.column = new Models.VariableValueMenu(
+        var temp = new Models.VariableValueMenu(
           VAR_OR_VALUE_TYPES.all,
           null,
           null,
           null,
           true
         );
+        if (variable_obj.reference)
+          temp.reference_parent = true
+        variable_obj.column = temp;
       }
 
       variableValueMenuCode(
@@ -713,11 +755,13 @@ function variableValueMenuCode (
         '<div class="variable_rendered"> <span class="var_name">' +
         variable_obj.content.name +
         "</span>";
-
+      
       variable_render +=
         ' <span>[ </span> <div class="row_container"></div> <span> ]</span>';
-      variable_render +=
-        ' <span>[ </span> <div class="column_container"></div> <span> ] </span>';
+
+      if (variable_obj.reference_dimensions == 0)
+        variable_render +=
+          ' <span>[ </span> <div class="column_container"></div> <span> ] </span>';
 
       variable_render += "</div>";
 
@@ -784,22 +828,32 @@ function variableValueMenuCode (
       });
 
       if (!variable_obj.column) {
-        variable_obj.column = new Models.VariableValueMenu(
+        var temp = new Models.VariableValueMenu(
           VAR_OR_VALUE_TYPES.all,
           null,
           null,
           null,
           true
         );
+
+        if (variable_obj.reference)
+          temp.reference_parent = true
+
+        variable_obj.column = temp
       }
       if (!variable_obj.row) {
-        variable_obj.row = new Models.VariableValueMenu(
+        var temp = new Models.VariableValueMenu(
           VAR_OR_VALUE_TYPES.all,
           null,
           null,
           null,
           true
         );
+
+        if (variable_obj.reference)
+          temp.reference_parent = true
+
+        variable_obj.row = temp
       }
 
       variableValueMenuCode(
@@ -810,14 +864,19 @@ function variableValueMenuCode (
         menu_var_or_value,
         expression_element
       );
-      variableValueMenuCode(
-        command,
-        variable_obj.column,
-        $(variable_render.find(".column_container")),
-        function_obj,
-        menu_var_or_value,
-        expression_element
-      );
+
+      if (variable_obj.reference_dimensions == 1) {
+        variable_obj.column = null
+      } else {
+        variableValueMenuCode(
+          command,
+          variable_obj.column,
+          $(variable_render.find(".column_container")),
+          function_obj,
+          menu_var_or_value,
+          expression_element
+        );
+      }
     } else {
       variable_render =
         '<div class="variable_rendered"> <span class="var_name">' +
@@ -1346,6 +1405,16 @@ function openInputToFunction (
           true
         );
       }
+
+      if (function_selected.parameters_list[j].reference == true) {
+        temp.reference = true;
+        temp.variable_and_value = VAR_OR_VALUE_TYPES.only_variable;
+      } else {
+        temp.reference = false;
+        temp.variable_and_value = VAR_OR_VALUE_TYPES.all;
+      }
+      temp.reference_dimensions = function_selected.parameters_list[j].dimensions
+      
       ref_object.parameters_list.push(temp);
       renderMenu(
         command,
@@ -1525,14 +1594,17 @@ function openInputToVariable (
     "</span>";
 
   if (variable_selected.dimensions == 1 && ref_object.dimensions != 1) {
+    
     variable_render +=
       ' <span>[ </span> <div class="column_container"></div> <span> ]</span>';
   }
   if (variable_selected.dimensions == 2 && ref_object.dimensions != 2) {
     variable_render +=
       ' <span>[ </span> <div class="row_container"></div> <span> ]</span> ';
+    
     variable_render +=
       ' <span>[ </span> <div class="column_container"></div> <span> ]</span>';
+    
   }
 
   variable_render += "</div>";
@@ -1542,13 +1614,18 @@ function openInputToVariable (
   dom_object.append(variable_render);
 
   if (variable_selected.dimensions == 1 && ref_object.dimensions != 1) {
-    ref_object.column = new Models.VariableValueMenu(
+    var temp = new Models.VariableValueMenu(
       VAR_OR_VALUE_TYPES.all,
       null,
       null,
       null,
       true
     );
+    if (ref_object.reference)
+          temp.reference_parent = true
+
+    ref_object.column = temp
+
     renderMenu(
       command,
       ref_object.column,
@@ -1559,13 +1636,19 @@ function openInputToVariable (
     );
   }
   if (variable_selected.dimensions == 2 && ref_object.dimensions != 2) {
-    ref_object.row = new Models.VariableValueMenu(
+    var temp = new Models.VariableValueMenu(
       VAR_OR_VALUE_TYPES.all,
       null,
       null,
       null,
       true
     );
+
+    if (ref_object.reference)
+          temp.reference_parent = true
+
+    ref_object.row = temp
+
     renderMenu(
       command,
       ref_object.row,
@@ -1575,13 +1658,19 @@ function openInputToVariable (
       expression_element
     );
 
-    ref_object.column = new Models.VariableValueMenu(
+    var temp = new Models.VariableValueMenu(
       VAR_OR_VALUE_TYPES.all,
       null,
       null,
       null,
       true
     );
+
+    if (ref_object.reference)
+          temp.reference_parent = true
+
+    ref_object.column = temp
+    
     renderMenu(
       command,
       ref_object.column,

+ 19 - 2
js/visualUI/functions.js

@@ -1260,9 +1260,9 @@ function renderParameter (function_obj, parameter_obj, function_container) {
   ret += '<div class="ui label function_name_parameter pink"><i class="ui icon ellipsis vertical inverted"></i>';
 
   if (parameter_obj.reference)
-    ret += '<input type="checkbox" checked>';
+    ret += '<input type="checkbox" checked class="by_reference">';
   else 
-    ret += '<input type="checkbox">';
+    ret += '<input type="checkbox" class="by_copy">';
 
   ret += '<div class="ui dropdown parameter_type">';
 
@@ -1347,6 +1347,23 @@ function renderParameter (function_obj, parameter_obj, function_container) {
 
   ret.find('input:checkbox').change(function() {
     parameter_obj.reference = this.checked
+    AlgorithmManagement.renderAlgorithm();
+  });
+
+  ret.find('.by_reference').popup({
+    content : LocalizedStrings.getUI("text_parameter_reference"),
+    delay: {
+      show: 750,
+      hide: 0
+    }
+  });
+
+  ret.find('.by_copy').popup({
+    content : LocalizedStrings.getUI("text_parameter_copy"),
+    delay: {
+      show: 750,
+      hide: 0
+    }
   });
 
   return ret;