Prechádzať zdrojové kódy

Concluído o gerenciamento de variáveis dentro da função

Igor Félix 5 rokov pred
rodič
commit
8fde4f35e1

+ 5 - 0
i18n/i18n-database.json

@@ -54,6 +54,11 @@
 		"es": "nuevo_parámetro",
 		"pt": "novo_parâmetro"
 	},
+	"new_variable": {
+		"en": "new_variable",
+		"es": "nuevo_variable",
+		"pt": "nova_variável"
+	},
 	"new_function": {
 		"en": "new_function",
 		"es": "nueva_función",

+ 0 - 1
i18n/i18n-engine.js

@@ -44,7 +44,6 @@ $.getJSON('i18n/i18n-database.json', function(data) {
       i18n.set('es', x, l.es);
       i18n.set('pt', x, l.pt);
     }
-    console.log("ja era!");
 });
 
 $.ajaxSetup({

+ 9 - 1
js/ivprog-visual-1.0.js

@@ -11,13 +11,14 @@ var Variavel = function(tipo, nome, valor, dimensoes = 0, eh_constante = false)
 	this.eh_constante = eh_constante;
 };
 
-var Funcao = function(nome, tipo_retorno = tiposDados.void, dimensoes_retorno = 0, lista_parametros = null, eh_principal = false, esta_oculta = false) {
+var Funcao = function(nome, tipo_retorno = tiposDados.void, dimensoes_retorno = 0, lista_parametros = null, eh_principal = false, esta_oculta = false, variaveis = null) {
 	this.nome = nome;
 	this.tipo_retorno = tipo_retorno;
 	this.dimensoes_retorno = dimensoes_retorno;
 	this.lista_parametros = lista_parametros;
 	this.eh_principal = eh_principal;
 	this.esta_oculta = esta_oculta;
+	this.variaveis = variaveis;
 };
 
 var Comando = function(tipo) {
@@ -38,6 +39,13 @@ function adicionarFuncao(funcao) {
 	programa.funcoes.push(funcao);
 }
 
+function adicionarVariavel(funcao, variavel) {
+	if (programa.funcoes[funcao].variaveis == null) {
+		programa.funcoes[funcao].variaveis = new Array();
+	}
+	programa.funcoes[funcao].variaveis.push(variavel);
+}
+
 //var tex = i18n('text');
 
 // Adicionando a função principal automaticamente

+ 133 - 25
js/ivprog-visual-functions-1.0.js

@@ -1,5 +1,6 @@
 var counter_new_functions = 0;
 var counter_new_parameters = 0;
+var counter_new_variables = 0;
 
 function addFunctionHandler() {
 	new_function = new Funcao(i18n("new_function") + "_" + counter_new_functions);
@@ -40,6 +41,7 @@ function renderAlgorithm() {
 }
 
 function addHandlers() {
+
 	$('.ui.dropdown.function_return')
     	.dropdown({
 		    onChange: function(value, text, $selectedItem) {
@@ -85,7 +87,6 @@ function addHandlers() {
 				}
 				for (tm in tiposDados) {
 					if ($selectedItem.hasClass(tm)) {
-						console.log("possui: " + tm);
 						updateParameterType(fun, seq, tm, dim);
 						break;
 					} 
@@ -93,6 +94,55 @@ function addHandlers() {
 
 		    }
 		});
+
+  	$('.ui.dropdown.variable_type').dropdown({
+		    onChange: function(value, text, $selectedItem) {
+
+		    	classList = $selectedItem.attr('class').split(/\s+/);
+		    	var fun;
+				var seq;
+				$.each(classList, function(index, item) {
+
+					if (item.indexOf("fun_") > -1) {
+						fun = item.split("fun_")[1];
+					}
+				    if (item.indexOf("seq_") > -1) {
+				        seq = item.split("seq_")[1];
+				    }
+				});
+				var dim = 0;
+				if (value.indexOf(i18n(tiposDados.vector)) > -1) {
+					dim = value.split('[').length - 1;
+				}
+				for (tm in tiposDados) {
+					if ($selectedItem.hasClass(tm)) {
+						console.log("possui: " + tm);
+						updateVariableType(fun, seq, tm, dim);
+						break;
+					} 
+				}
+
+		    }
+		});
+
+}
+
+function updateVariableType(wich_function, wich_variable, new_value, new_dimensions) {
+	programa.funcoes[wich_function].variaveis[wich_variable].tipo = new_value;
+	programa.funcoes[wich_function].variaveis[wich_variable].dimensoes = new_dimensions;
+}
+
+
+function addVariable(sequence) {//tipo, nome, valor
+	var v = new Variavel(tiposDados.integer, i18n('new_variable') + '_' + counter_new_variables, 1);
+	adicionarVariavel(sequence, v);
+	counter_new_variables ++;
+	renderAlgorithm();
+}
+
+function deleteVariable(which_function, which_variable) {
+	programa.funcoes[which_function].variaveis.splice(which_variable, 1);
+	renderAlgorithm();
 }
 
 function addParameter(sequence) {
@@ -193,6 +243,77 @@ function enableNameFunctionUpdate(div_el, sequence) {
 	
 }
 
+var opened_name_variable = false;
+var opened_input_variable = null;
+var sequence_name_opened_variable;
+var sequence_function_opened_variable;
+function enableNameVariableUpdate(parent_node, which_function, which_parameter) {
+	if (opened_name_variable) {
+		$(opened_input_variable).focus();
+		return;
+	}
+	opened_name_variable = true;
+	sequence_name_opened_variable = which_parameter;
+	sequence_function_opened_variable = which_function;
+
+	$(parent_node).find('.span_name_variable').text('');
+	$( "<input type='text' class='width-dynamic input_name_function' autocomplete='off' autocorrect='off' autocapitalize='off' spellcheck='false' value='"
+		+ programa.funcoes[which_function].variaveis[which_parameter].nome + "' />" ).insertBefore($(parent_node).find('.span_name_variable'));
+
+	$('.width-dynamic').on('input', function() {
+	    var inputWidth = $(this).textWidth()+10;
+	    opened_input_variable = this;
+	    $(this).focus();
+
+	    var tmpStr = $(this).val();
+		$(this).val('');
+		$(this).val(tmpStr);
+
+	    $(this).css({
+	        width: inputWidth
+	    })
+	}).trigger('input');
+
+	$('.width-dynamic').focusout(function() {
+		/// update array:
+		if ($(this).val().trim()) {
+			programa.funcoes[which_function].variaveis[which_parameter].nome = $(this).val().trim();
+		}
+		$(this).remove();
+
+		/// update elements:
+		opened_name_variable = false;
+		opened_input_variable = false;
+
+		renderAlgorithm();
+	});
+
+	$('.width-dynamic').on('keydown', function(e) {
+		var code = e.keyCode || e.which;
+		if(code == 13) {
+			if ($(this).val().trim()) {
+				programa.funcoes[which_function].variaveis[which_parameter].nome = $(this).val().trim();
+			}
+			$(this).remove();
+
+			/// update elements:
+			opened_name_variable = false;
+			opened_input_variable = false;
+
+			renderAlgorithm();
+		}
+		if(code == 27) {
+			$(parent_node).find('.span_name_variable').text(programa.funcoes[which_function].variaveis[which_parameter].nome);
+
+			$(this).remove();
+
+			/// update elements:
+			opened_name_variable = false;
+			opened_input_variable = false;
+		}
+	});
+
+}
 
 var opened_name_parameter = false;
 var opened_input_parameter = null;
@@ -295,8 +416,10 @@ function appendFunction(function_obj, sequence) {
 	appender += '</div> ) {</div>'
 		+ (function_obj.esta_oculta ? ' <div class="function_area" style="display: none;"> ' : ' <div class="function_area"> ')
 
-		+ '<div class="ui top attached segment variables_list_div"><div class="ui teal small labeled icon button add_variable_button">'+i18n('Variable')+'<i class="add icon"></i></div></div>'
-		+ '<div class="ui bottom attached segment commands_list_div"><div class="ui teal small labeled icon button add_command_button">'+i18n('Command')+'<i class="add icon"></i></div></div>'		
+		+ '<div class="ui top attached segment variables_list_div"><div class="ui teal small labeled icon button add_variable_button" onclick="addVariable('+sequence+')">'+i18n('Variable')+'<i class="add icon"></i></div>'
+		+ renderVariables(function_obj, sequence)
+		+ '</div>'
+		+ '<div class="ui bottom attached segment commands_list_div"><div class="ui teal small labeled icon button add_command_button seq_'+sequence+'">'+i18n('Command')+'<i class="add icon"></i></div></div>'		
 
 		+ '<div class="function_close_div">}</div>'
 		+ '</div>'
@@ -348,12 +471,8 @@ function renderFunctionParameters(function_obj, sequence) {
 			    	+  i18n(tiposDados.vector)+':'+i18n(tm)
 			    	+ '</div>';	
 		  	}
-
     		ret += '</div></div>';
 
-
-
-
 			ret += ' <i class="red icon times remove_parameter" onclick="removeParameter(this.parentNode, '+sequence+', '+j+')"></i></div>';
 
 		}
@@ -362,28 +481,18 @@ function renderFunctionParameters(function_obj, sequence) {
 }
 
 
+// Essa função imprime as variáveis e os recursos para sua manipulação
 function renderVariables(function_obj, sequence) {
 	var ret = "";
-	if (function_obj.lista_parametros != null) {
-
-		for (var j = 0; j < function_obj.lista_parametros.length; j++) {
+	if (function_obj.variaveis != null) {
 
-			var par_temp = function_obj.lista_parametros[j];
-
-			/*ret += '<div class="ui label function_name_parameter"><span class="span_name_parameter" ondblclick="enableNameParameterUpdate(this.parentNode, '+sequence+', '+j+')">'+par_temp.nome+'</span> <i class="icon small pencil alternate enable_edit_name_parameter" onclick="enableNameParameterUpdate(this.parentNode, '+sequence+', '+j+')"></i>';
-
-			ret += '<select class="ui fluid dropdown parameter_data_types_dropdown" onchange="updateParameterType('+sequence+', '+j+', this.value)">'
-    		+ '<option value="'+tiposDados.integer+'" '+(par_temp.tipo == tiposDados.integer ? 'selected' : '')+'>'+i18n(tiposDados.integer)+'</option>'
-    		+ '<option value="'+tiposDados.real+'" '+(par_temp.tipo == tiposDados.real ? 'selected' : '')+'>'+i18n(tiposDados.real)+'</option>'
-    		+ '<option value="'+tiposDados.text+'" '+(par_temp.tipo == tiposDados.text ? 'selected' : '')+'>'+i18n(tiposDados.text)+'</option>'
-    		+ '<option value="'+tiposDados.boolean+'" '+(par_temp.tipo == tiposDados.boolean ? 'selected' : '')+'>'+i18n(tiposDados.boolean)+'</option>'
-    		+ '</select>';
+		for (var j = 0; j < function_obj.variaveis.length; j++) {
 
-			ret += ' <i class="red icon times remove_parameter" onclick="removeParameter(this.parentNode, '+sequence+', '+j+')"></i></div>';*/
+			var par_temp = function_obj.variaveis[j];
 
-			ret += '<div class="ui label function_name_parameter"><span class="span_name_parameter" ondblclick="enableNameParameterUpdate(this.parentNode, '+sequence+', '+j+')">'+par_temp.nome+'</span> <i class="icon small pencil alternate enable_edit_name_parameter" onclick="enableNameParameterUpdate(this.parentNode, '+sequence+', '+j+')"></i>';
+			ret += '<div class="ui label name_variable"><span class="span_name_variable" ondblclick="enableNameVariableUpdate(this.parentNode, '+sequence+', '+j+')">'+par_temp.nome+'</span> <i class="icon small pencil alternate enable_edit_name_parameter" onclick="enableNameVariableUpdate(this.parentNode, '+sequence+', '+j+')"></i>';
 
-			ret += '<div class="ui dropdown parameter_type seq_'+j+' fun_'+sequence+'">';
+			ret += '<div class="ui dropdown variable_type seq_'+j+' fun_'+sequence+'">';
   	
 		  	if (par_temp.dimensoes > 0) {
 		  		ret += '<div class="text seq_'+j+' fun_'+sequence+'">'+ i18n(tiposDados.vector)+':'+i18n(par_temp.tipo);
@@ -421,7 +530,6 @@ function renderVariables(function_obj, sequence) {
 			      	+  '<div class="menu seq_'+j+' fun_'+sequence+'">'
 				        + '<div class="item seq_'+j+' fun_'+sequence+' '+tm+'" data-text="'+ i18n(tiposDados.vector)+':'+i18n(tm)+' [ ] ">[ ]</div>'
 				        + '<div class="item seq_'+j+' fun_'+sequence+' '+tm+'" data-text="'+ i18n(tiposDados.vector)+':'+i18n(tm)+' [ ] [ ] ">[ ] [ ] </div>'
-				        + '<div class="item seq_'+j+' fun_'+sequence+' '+tm+'" data-text="'+ i18n(tiposDados.vector)+':'+i18n(tm)+' [ ] [ ] [ ]">[ ] [ ] [ ] </div>'
 			      	+  '</div>'
 			    	+ '</div>';	
 		  	}
@@ -431,7 +539,7 @@ function renderVariables(function_obj, sequence) {
 
 
 
-			ret += ' <i class="red icon times remove_parameter" onclick="removeParameter(this.parentNode, '+sequence+', '+j+')"></i></div>';
+			ret += ' = ' + par_temp.valor + ' <i class="red icon times remove_parameter" onclick="deleteVariable('+sequence+', '+j+')"></i></div>';
 
 		}
 	}