示例#1
0
        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();
            }
        }
示例#2
0
        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;
        }
示例#3
0
        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();
        }
示例#4
0
        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);
        }
示例#5
0
        public int InsereLinhaNoIndice(int linha)
        {
            linha = prgBasico.InsereLinhaNoIndice(linha, new LinhaCompleta());

            LinhaCompletaVisual _lc = PreparaLinhaQueSeraCriada(prgBasico.linhas[linha]);

            return(InsereLinhaNoIndice(linha, _lc));
        }
示例#6
0
        public int InsereLinhaNoFinal()
        {
            int linha = prgBasico.InsereLinhaNoFinal(new LinhaCompleta());

            LinhaCompletaVisual _lc = PreparaLinhaQueSeraCriada(prgBasico.linhas[linha]);

            return(InsereLinhaNoFinal(_lc));
        }
示例#7
0
        /// <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);
        }
示例#8
0
        /// <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);
                }
            }
        }
示例#9
0
        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);
        }
示例#10
0
 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;
 }
示例#11
0
        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));
                }
            }
        }
示例#12
0
        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);
        }
示例#13
0
        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;
                    }
                }
            }
        }
示例#14
0
 /// <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));
 }
示例#15
0
 /// <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);
 }