private void listObjetos_MouseClick(object sender, MouseEventArgs e) { if (listObjetos.SelectedItems.Count == 0) return; TabPageCustom tab = (TabPageCustom)tabs.SelectedTab; string guidRegistro = tab.guidRegistro; string guidObjeto = tab.guidObjeto; string guidCodigo = tab.guidCodigo; modoDiferencias = true; HLCode code = null; foreach (Control item in tab.Controls) { try { code = (HLCode)item; break; } catch (Exception) { } } Codigo codigo = getCodigo(guidRegistro, guidObjeto, guidCodigo); Objeto obj = getObjeto(guidRegistro, guidObjeto); ListViewItemCustom itemVersion = (ListViewItemCustom)listObjetos.SelectedItems[0]; string guidVersion = itemVersion.guid; if (guidCodigo == guidVersion){ code.Text = codigo.codigo; actualizarLineasMostradas(code, 0, true); modoDiferencias = false; return; } Codigo codigoVersion = getCodigo(guidRegistro, guidObjeto, guidVersion); Diff dif = new Diff(); if (code != null) { code.Text = codigo.codigo; actualizarLineasMostradas(code, 0, true); code.IndicatorClearRange(0, code.TextLength); Diff.Item[] diferencias = dif.DiffText(codigoVersion.codigo, codigo.codigo); this.diferencias = diferencias; code.IndicatorCurrent = 8; string[] lineasCodigoVersion = codigoVersion.codigo.Replace("\r", "").Split('\n'); foreach (Diff.Item item in diferencias) { code.IndicatorCurrent = 8; code.IndicatorFillRange(code.Lines[item.StartB].Position, code.Lines[item.StartB + item.insertedB-1].EndPosition - code.Lines[item.StartB].Position); //code.IndicatorCurrent = 9; //code.InsertText(code.Lines[item.StartB].EndPosition, "" + lineasCodigoVersion[item.StartA] + "\n"); //code.IndicatorFillRange(code.Lines[item.StartB].EndPosition, lineasCodigoVersion[item.StartA].Length); } int numLineasAdded = 0; foreach (Diff.Item item in diferencias) { int contador = 0; string textoAInsertar = ""; for (int i = item.StartA; i < item.deletedA + item.StartA ; i++) { contador++; if (lineasCodigoVersion[i] == "") { textoAInsertar += " " + "\n"; } else { textoAInsertar += lineasCodigoVersion[i] + "\n"; } } code.IndicatorCurrent = 9; code.InsertText(code.Lines[item.StartA + numLineasAdded-1].EndPosition, textoAInsertar); code.IndicatorFillRange(code.Lines[item.StartA + numLineasAdded].Position, textoAInsertar.Length); numLineasAdded = contador - 1; } } }
void code_TextChanged(object sender, EventArgs e) { //para guardar en modificados temporalmente if (modoDiferencias) { return; } HLCode codigo = (HLCode)sender; string guidCodigo = codigo.guidCodigo; string guidObjeto = codigo.guidObjeto; string guidRegistro = codigo.guidRegistro; bool encontrado = false; Codigo cod = getCodigo(guidRegistro, guidObjeto, guidCodigo); foreach (CodigoModificado item in codigosModificados) { if (item.guidCodigo == guidCodigo && item.guidRegistro == guidRegistro && item.guidObjeto == guidObjeto) { encontrado = true; item.codigo = codigo.Text; break; } } if (!encontrado) { Diff dif = new Diff(); Diff.Item[] diferencias = dif.DiffText(codigo.Text, cod.codigo); if (diferencias.Length > 0) { CodigoModificado mod = new CodigoModificado(); mod.codigo = codigo.Text; mod.guidCodigo = codigo.guidCodigo; mod.guidObjeto = codigo.guidObjeto; mod.guidRegistro = codigo.guidRegistro; mod.nombreObjeto = codigo.nombreObjeto; codigosModificados.Add(mod); TabPageCustom tab = getTab(guidRegistro, guidObjeto, guidCodigo); tab.Text += "*"; } } }