public void DeletaLinha(LinhaCompletaVisual sender) { int _indiceLinhaDeletar = this.prgLivre.linhas.IndexOf(sender); int _indiceLinha = _indiceLinhaDeletar; if (_indiceLinha >= 0) { this.SuspendLayout(); /// Faz todos os tratamentos para /// desconsiderar a linha a ser deleta /// OBS.: Isto garante um melhor agilidade /// no desenho da tela. this.prgLivre.ApagaLinha(_indiceLinha); if (_indiceLinha == 0) { _indiceLinha = 1; } if (this.prgLivre.linhas.Count > 0) { this.prgLivre.linhas[_indiceLinha - 1].simboloInicioLinha.Select(); } this.ReorganizandoLinhas(); if (this.prgLivre.linhas.Count > 0) { this.prgLivre.linhas[_indiceLinha - 1].simboloInicioLinha.Refresh(); } this.ResumeLayout(); } }
private static void RedimensionaSimbolos(LinhaCompletaVisual lc) { //--Inicio da linha int iTabStop = 0; lc.simboloInicioLinha.TabIndex = iTabStop; lc.simboloInicioLinha.TabStop = false; foreach (ControleLivre _simbAux in lc.simbolos) { iTabStop++; _simbAux.TabIndex = iTabStop; _simbAux.TabStop = true; _simbAux.Size = new Size(Convert.ToInt32(Convert.ToDouble(_simbAux.tamanhoXY.Width) * lc.percReducaoSimbolo), _simbAux.tamanhoXY.Height); _simbAux.Location = new Point(_simbAux.posicaoXY.X + (_simbAux.tamanhoXY.Width - (Convert.ToInt32(Convert.ToDouble(_simbAux.tamanhoXY.Width) * lc.percReducaoSimbolo))) / 2, _simbAux.posicaoXY.Y); } //--Fim da linha iTabStop = 0; lc.simboloFimLinha.TabIndex = iTabStop; lc.simboloFimLinha.TabStop = false; //--Desenho de fundo iTabStop = 0; lc.simboloDesenhoFundo.TabIndex = iTabStop; lc.simboloDesenhoFundo.TabStop = false; }
private void InsereSimbolo(LinhaCompletaVisual.LocalInsereSimbolo _lIS, params CodigosInterpretaveis[] _cI) { if (!IsDiagramaAberto()) { return; } if (frmProj.frmDiagLadder.ControleSelecionado.IsDisposed) { return; } /// aborta a simulação quando for executar uma alteração if (btnSimular.Checked) { btnSimular.Checked = false; Thread.Sleep(100); } ControleLivre _controle = frmProj.frmDiagLadder.ControleSelecionado; LinhaCompletaVisual _linha = frmProj.frmDiagLadder.LinhaSelecionada; _controle = _linha.InsereSimbolo(_lIS, _controle, _cI); /// Redesenha linhas e fundo frmProj.frmDiagLadder.ReorganizandoLinhas(); //_linha.simboloDesenhoFundo.Invalidate(); _controle.Select(); }
public List <SimboloBasico> VariosSelecionados(ControleLivre _cL, LinhaCompletaVisual _lCL) { CodigosInterpretaveis _cI = _cL.getCI(); List <SimboloBasico> _lstSB = new List <SimboloBasico>(); List <ControleLivre> _lstCL = null; switch (_cI) { case CodigosInterpretaveis.PARALELO_INICIAL: case CodigosInterpretaveis.PARALELO_PROXIMO: case CodigosInterpretaveis.PARALELO_FINAL: int _indicePosInicial = 0; int _indicePosFinal = 0; /// verifica em qual lista o controle esta presente (simbolos/saida) if (LinhaSelecionada.simbolos.Contains(_cL)) { _lstCL = LinhaSelecionada.simbolos; } else if (LinhaSelecionada.saida.Contains(_cL)) { _lstCL = LinhaSelecionada.saida; } else { return(_lstSB); } /// define a posicao inicial a partir da posicao /// do controle na lista _indicePosInicial = _lstCL.IndexOf(_cL); if (_cI == CodigosInterpretaveis.PARALELO_FINAL) { /// se for paralelo final, inverte a posicial inicial/final _indicePosFinal = _indicePosInicial; /// se for paralelo final, a posicao inicial e /// o paralelo inical _indicePosInicial = _lstCL.IndexOf(_cL.Aponta2PI); } else { /// senao for final aponta para o proximo item de paralelo _indicePosFinal = _lstCL.IndexOf(_cL.Aponta2proxPP); } /// pega todos os controles dentro da faixa inicial / final for (int i = _indicePosInicial; i <= _indicePosFinal; i++) { _lstSB.Add(_lstCL[i].SimboloBasico); } break; default: _lstSB.Add(_cL.SimboloBasico); break; } return(_lstSB); }
public int InsereLinhaNoIndice(int linha) { linha = prgBasico.InsereLinhaNoIndice(linha, new LinhaCompleta()); LinhaCompletaVisual _lc = PreparaLinhaQueSeraCriada(prgBasico.linhas[linha]); return(InsereLinhaNoIndice(linha, _lc)); }
public int InsereLinhaNoFinal() { int linha = prgBasico.InsereLinhaNoFinal(new LinhaCompleta()); LinhaCompletaVisual _lc = PreparaLinhaQueSeraCriada(prgBasico.linhas[linha]); return(InsereLinhaNoFinal(_lc)); }
/// <summary> /// Insere linha abaixo ou acima da linha selecionada /// </summary> /// <param name="_acima">true - acima / false - abaixo</param> public LinhaCompletaVisual PreparaLinhaQueSeraCriada(LinhaCompleta _linhaBasica) { LinhaCompletaVisual _novaLinhaTela = new LinhaCompletaVisual(frmDiag, _linhaBasica); _novaLinhaTela.simboloInicioLinha.MudaLinha += new MudaLinhaEventHandler(frmDiag.simboloInicioLinha_MudaLinha); return(_novaLinhaTela); }
/// <summary> /// Construtor da classe do programa de linhas da visao (controlelivre) /// </summary> /// <param name="_prgBasico">link para o programa basico (simbolobasico)</param> public ProgramaVisual(ProgramaBasico _prgBasico, DiagramaLadder _frmDiag) { prgBasico = _prgBasico; frmDiag = _frmDiag; if (prgBasico.linhas.Count > 0) { foreach (LinhaCompleta _lc in prgBasico.linhas) { LinhaCompletaVisual _lcL = PreparaLinhaQueSeraCriada(_lc); InsereLinhaNoFinal(_lcL); } } }
public int InsereLinhaNoIndice(int linha, LinhaCompletaVisual _lc) { if (linha > linhasPrograma.Count) { linha = linhasPrograma.Count; } if (linha < 0) { linha = 0; } linhasPrograma.Insert(linha, _lc); return(linha); }
public void Simbolo_ControleSelecionado(ControleLivre sender, LinhaCompletaVisual lCL) { if (controleSelecionado != null) { if (!controleSelecionado.IsDisposed) { if (!controleSelecionado.Equals(sender)) { controleSelecionado.selecionado = false; controleSelecionado.Refresh(); } } } //cmbOpcoes.Visible = false; controleSelecionado = sender; linhaSelecionada = lCL; }
public static void CopiaLivre2Simbolo(LinhaCompletaVisual linhaFonte, LinhaCompleta linhaDestinho) { /// transfere os simbolos basicos da linha linhaDestinho.simbolos.Clear(); foreach (ControleLivre auxSB in linhaFonte.simbolos) { linhaDestinho.simbolos.Add(new SimboloBasico()); linhaDestinho.simbolos[linhaDestinho.simbolos.Count - 1].setCI(auxSB.getCI()); linhaDestinho.simbolos[linhaDestinho.simbolos.Count - 1].setOperando(auxSB.getOperandos()); } /// transfere os simbolos basicos de saida linhaDestinho.saida.Clear(); foreach (ControleLivre auxSB in linhaFonte.saida) { linhaDestinho.saida.Add(new SimboloBasico()); linhaDestinho.saida[linhaDestinho.saida.Count - 1].setCI(auxSB.getCI()); for (int i = 0; i < auxSB.getOperandos().Length; i++) { linhaDestinho.saida[linhaDestinho.saida.Count - 1].setOperando(i, auxSB.getOperandos(i)); } } }
public static void AjustaPosicionamento(LinhaCompletaVisual lc) { ControleLivre _ctrlLivreAux = null; int _maiorX = 0; SuporteParalelo _par = null; List <SuporteParalelo> _lst_par = new List <SuporteParalelo>(); int _ultTamY2ParaleloFinal = 0; // acumula o tamanho Y (pos+tam) do ultimo // VPI tratado dentro de um mesmo paralelo // seu valor e usado para informar // ao PF qual o seu tamanho Y int _tamY2DesenhoFundo = 0; // Variaveis auxiliares para posicionamento // dos controles int _posX = lc.posX; // auxiliar para posX int _posY = lc.posY; // auxiliar para posY int _tamX = lc.tamX; // auxiliar para tamX int _tamY = lc.tamY; // auxiliar para tamY int _acumTamX = 0; // usado para acumular o valor de X na sequencia // em que os simbolos sao montados int _acumTamY = lc.tamY; // auxiliar para tamY List <ControleLivre> _simbProxLinha = new List <ControleLivre>(); _acumTamX += lc.tamX; foreach (ControleLivre simbAux in lc.simbolos) { // caso todos os paralelos abertos tenham sido // tratados forca paralelos tratados = 0 if (_lst_par.Count == 0) { if (_maiorX > 0) { _posX = _maiorX; } _maiorX = 0; } else { if (_maiorX < (_posX + _tamX)) { _maiorX = _posX + _tamX; } } switch (simbAux.getCI()) { case CodigosInterpretaveis.PARALELO_INICIAL: _tamY = lc.tamY; // restaura tamanho Y base _posX = _acumTamX; _tamX = lc.tamX / 3; _par = new SuporteParalelo(); _lst_par.Add(_par); _par._yAcum = _posY; _par.maiorY = _posY; _par.maiorX = _maiorX; _par.par = simbAux; _acumTamX = _posX + _tamX; break; case CodigosInterpretaveis.PARALELO_FINAL: _tamX = lc.tamX / 3; // _tamY = _par.ultimoVPI.Location.Y - _par.par.Location.Y + _par.ultimoVPI.Size.Height; // _ultTamY2ParaleloFinal; _tamY = _par.ultimoVPI.posicaoXY.Y - _par.par.posicaoXY.Y + _par.ultimoVPI.tamanhoXY.Height; // _ultTamY2ParaleloFinal; _posY = _par.par.posicaoXY.Y; if (_maiorX > _par.maiorX) { _par.maiorX = _maiorX; } _posX = _par.maiorX; // Salva (por paralelo) o maior tamanho Y para os simbolos // linha inicial / final e desenho de fundo if (_ultTamY2ParaleloFinal > _tamY2DesenhoFundo) { _tamY2DesenhoFundo = _ultTamY2ParaleloFinal; } simbAux.SalvaVPI2PF(_par.lstVPI); _par = null; _lst_par.RemoveAt(_lst_par.Count - 1); if (_lst_par.Count > 0) { _par = _lst_par[_lst_par.Count - 1]; } // se tiver paralelo aberto // salva nele o maior y processado dentro dele if (_lst_par.Count > 0) { if (_ultTamY2ParaleloFinal > _par.maiorY) { _par.maiorY = _ultTamY2ParaleloFinal; } } _acumTamX = _posX + _tamX; break; case CodigosInterpretaveis.PARALELO_PROXIMO: _tamY = lc.tamY; // restaura tamanho Y base _tamX = lc.tamX / 3; // tamanho X reduzido if (_maiorX > _par.maiorX) { _par.maiorX = _maiorX; } _maiorX = 0; _posX = _par.par.posicaoXY.X; _par._yAcum = _par.maiorY; _posY = _par.maiorY + (lc.tamY * (_par.numVPITratados + 1)); // caso seja o primeiro VPI(NXB) atualiza o SIZE do PI(BST) // caso seja o segundo VPI em diante, atualiza SIZE do VPI anterior if (_par.numVPITratados > 0) { _ctrlLivreAux = _par.ultimoVPI; _ctrlLivreAux.UltimoVPI = false; } else { _ctrlLivreAux = _par.par; } _ctrlLivreAux.tamanhoXY = new Size(_ctrlLivreAux.tamanhoXY.Width, _posY - _ctrlLivreAux.posicaoXY.Y); _par.numVPITratados += 1; _par.ultimoVPI = simbAux; _ultTamY2ParaleloFinal = _posY; _par.lstVPI.Add(simbAux); _acumTamX = _posX + _tamX; break; default: _tamY = lc.tamY; _tamX = lc.tamX; _posX = _acumTamX; _acumTamX += _tamX; break; } // posiciona e dimensiona simbolo simbAux.posicaoXY = new Point(_posX, _posY); simbAux.tamanhoXY = new Size(_tamX, _tamY); simbAux.Location = new Point(_posX, _posY); simbAux.Size = new Size(_tamX, _tamY); } _tamY2DesenhoFundo += lc.tamY; //--Inicio da linha lc.simboloInicioLinha.posicaoXY = new Point(lc.posX, lc.posY); lc.simboloInicioLinha.tamanhoXY = new Size(lc.tamX, _tamY2DesenhoFundo); //--Fim da linha DiagramaLadder dlFormAux = null; dlFormAux = (DiagramaLadder)lc.frmDiag; if (_acumTamX < (dlFormAux.Width - lc.tamX)) { _acumTamX = (dlFormAux.Width - lc.tamX); } lc.simboloFimLinha.posicaoXY = new Point(_acumTamX, lc.posY); lc.simboloFimLinha.tamanhoXY = new Size(lc.tamX, _tamY2DesenhoFundo); //--Desenho de fundo lc.simboloFimLinha.posicaoXY = new Point(lc.posX, lc.posY); lc.simboloFimLinha.tamanhoXY = new Size(_acumTamX, _tamY2DesenhoFundo); RedimensionaSimbolos(lc); }
public void ReorganizandoLinhas(int _numVezes) { int auxY = 0; int iTabStop = 0; int iLinha = 0; int auxX = 0; if (prgLivre != null) { if (prgLivre.linhas.Count > 0) { if (_numVezes == 0) { tempVertical = this.VerticalScroll.Value; tempHorizontal = this.HorizontalScroll.Value; } try { this.AutoScroll = false; this.VerticalScroll.Value = 0; this.HorizontalScroll.Value = 0; } catch (Exception ex) { SetMessage(ex.Message); } LinhaCompletaVisual _LinhaAnterior = prgLivre.linhas[prgLivre.linhas.Count - 1]; if (_numVezes == 0) { prgLivre.linhas[prgLivre.linhas.Count - 1].simboloFimLinha.posicaoXY = new Point(auxX, 0); } foreach (LinhaCompletaVisual _linhasDL in prgLivre.linhas) { if (_LinhaAnterior != null) { _LinhaAnterior.linhaProxima = _linhasDL; } _linhasDL.linhaAnterior = _LinhaAnterior; _linhasDL.iTabStop = iTabStop; _linhasDL.posY = auxY; _linhasDL.NumLinha = iLinha; _linhasDL.simboloInicioLinha.Invalidate(); _linhasDL.AjustaPosicionamento(); auxY += _linhasDL.simboloDesenhoFundo.tamanhoXY.Height; iTabStop = _linhasDL.iTabStop; iLinha++; _LinhaAnterior = _linhasDL; _linhasDL.simboloDesenhoFundo.Invalidate(); if (auxX < _linhasDL.simboloFimLinha.posicaoXY.X) { auxX = _linhasDL.simboloFimLinha.posicaoXY.X; } } _LinhaAnterior.linhaProxima = prgLivre.linhas[0]; if (tempVertical > 0 || tempHorizontal > 0) { this.VerticalScroll.Value = tempVertical; this.HorizontalScroll.Value = tempHorizontal; } this.AutoScroll = true; } if (_numVezes == 0 && prgLivre.linhas.Count > 0) { prgLivre.linhas[prgLivre.linhas.Count - 1].simboloFimLinha.posicaoXY = new Point(auxX, prgLivre.linhas[0].simboloFimLinha.posicaoXY.Y); ReorganizandoLinhas(1); } if (_numVezes == 1) { if (prgLivre.linhas.Count > 0) { this.VerticalScroll.Maximum = prgLivre.linhas[prgLivre.linhas.Count - 1].simboloFimLinha.posicaoXY.Y + prgLivre.linhas[prgLivre.linhas.Count - 1].simboloFimLinha.tamanhoXY.Height; this.HorizontalScroll.Maximum = auxX; } else { this.VerticalScroll.Maximum = this.Height; this.HorizontalScroll.Maximum = this.Width; } } } }
/// <summary> /// Insere uma linha no programa na primeira linha (antes de todas) /// </summary> /// <param name="_lc">nova linha a ser inserida</param> /// <returns></returns> public int InsereLinhaNoInicio(LinhaCompletaVisual _lc) { return(InsereLinhaNoIndice(0, _lc)); }
/// <summary> /// Insere uma linha no programa no final das linhas /// </summary> /// <param name="_lc">nova linha a ser inserida</param> /// <returns>indice da linha inserida</returns> public int InsereLinhaNoFinal(LinhaCompletaVisual _lc) { linhasPrograma.Add(_lc); return(linhasPrograma.Count - 1); }