/// <summary> /// Adiciona um Unidade de Edição Visual de uma Coluna /// </summary> private void AddVisualUnit() { int xPosition = 1; int index = 0; if (_visualUnits.Count > 0) { index = _visualUnits.Count - 1; xPosition = _visualUnits[index].Left + _visualUnits[index].Width; } VisualWhereTable _newObj = new VisualWhereTable(); _newObj.Location = new Point(xPosition, 1); _newObj.Size = new System.Drawing.Size(150, 214); _newObj.Name = string.Format("Unit{0:000}", index); _newObj.RenderSQL += new EventHandler(_newObj_RenderSQL); _newObj.ShowColumnChanged += new ColumnsSelectionChanged(_newObj_ShowColumnChanged); _newObj.RedrawWhere += new EventHandler(_newObj_RedrawWhere); _newObj.ResizeVisualWhereTable += new ResizeVisualWhereTableHandler(_newObj_ResizeVisualWhereTable); _newObj.TabIndex = _visualUnits.Count; _newObj.Query = _query; _newObj.Index = _visualUnits.Count; _visualUnits.Add(_newObj); panelUnitsArea.Controls.Add(_newObj); }
/// <summary> /// Adiciona uma linha de where a uma unidade especificada /// </summary> /// <param name="lineWhere">Comandos para acrescentar no where</param> /// <param name="lineUnit">Número da linha do where.Cara nova linha é um OR</param> private void AddWhere(List <Database.SelectAnalyzer.Consulta.WherePiece> lineWhere, int lineUnit, ref Dictionary <VisualWhereTable, Dictionary <int, List <Database.SelectAnalyzer.Consulta.WherePiece> > > units) { VisualWhereTable _vt = FindVisualUnitFromFilter(lineWhere); if (_vt == null) { return; } // adiciona o Unidade controladora de coluna a lista que controla as adições de where if (!units.ContainsKey(_vt)) { units.Add(_vt, new Dictionary <int, List <Database.SelectAnalyzer.Consulta.WherePiece> >()); } // adiciona a linha de or referente a coluna if (!units[_vt].ContainsKey(lineUnit)) { units[_vt].Add(lineUnit, new List <Database.SelectAnalyzer.Consulta.WherePiece>()); } // se cabe ter abrir e fechar parenteses if (lineWhere.Count > 3) { if (lineWhere[0] is Database.SelectAnalyzer.Consulta.WhereOpenParentesesPiece && lineWhere[lineWhere.Count - 1] is Database.SelectAnalyzer.Consulta.WhereCloseParentesesPiece) { for (int ix = 1; ix < lineWhere.Count - 1; ix++) { // Adiciona todos os comandos de where para determinada unidade linhas units[_vt][lineUnit].Add(lineWhere[ix]); } } else { if (lineWhere[0] is Database.SelectAnalyzer.Consulta.WhereJunctionPiece && lineWhere[1] is Database.SelectAnalyzer.Consulta.WhereOpenParentesesPiece && lineWhere[lineWhere.Count - 1] is Database.SelectAnalyzer.Consulta.WhereCloseParentesesPiece) { for (int ix = 2; ix < lineWhere.Count - 1; ix++) { // Adiciona todos os comandos de where para determinada unidade linhas units[_vt][lineUnit].Add(lineWhere[ix]); } } else { units[_vt][lineUnit].AddRange(lineWhere); } } } else { // Adiciona todos os comandos de where para determinada unidade linhas units[_vt][lineUnit].AddRange(lineWhere); } }
private void buttonResize_MouseUp(object sender, MouseEventArgs e) { if (_visualResing != null) { if (ResizeVisualWhereTable != null) { ResizeVisualWhereTable(new ResizeVisualWhereTableArgs(this.Index, this.Left + this.Width)); } } _visualResing = null; }
/// <summary> /// Seta o informação de Grupo /// </summary> /// <param name="column"></param> /// <param name="on"></param> internal void SetGroup(Column column, bool on) { VisualWhereTable _unit = FindUnit(column); if (_unit == null) { _unit = FindFirstEmptyUnit(); _unit.SelectedColumn = column; _unit.ShowData = false; } _unit.Group = on; }
/// <summary> /// Adiciona uma linha de having a uma unidade especificada /// </summary> /// <param name="lineWhere">Comandos para acrescentar no having</param> private void AddHaving(List <Database.SelectAnalyzer.Consulta.WherePiece> lineHaving, ref Dictionary <VisualWhereTable, List <Database.SelectAnalyzer.Consulta.WherePiece> > units) { VisualWhereTable _vt = FindVisualUnitFromFilter(lineHaving); // adiciona o Unidade controladora de coluna a lista que controla as adições de where if (!units.ContainsKey(_vt)) { units.Add(_vt, new List <Database.SelectAnalyzer.Consulta.WherePiece>()); } // Adiciona todos os comandos de where para determinada unidade linhas units[_vt].AddRange(lineHaving); }
/// <summary> /// Informa se uma coluna deve ou não ser mostrada /// </summary> /// <param name="column"></param> /// <param name="value"></param> internal void SetShowColumn(Column column, bool value, bool externAdition) { VisualWhereTable _unit = this.FindUnit(column); if (_unit == null) { // Procura a Primeira Unidade Vazia. Se não achar cria uma _unit = FindFirstEmptyUnit(); _unit.SelectedColumn = column; } _unit.BeginExternalAdition(); _unit.ShowData = value; _unit.EndExternalAdition(); }
/// <summary> /// Procura a Unidade de Filtro para a coluna estabelecida no where. Se não existir cria uma /// </summary> /// <param name="lineWhere">Lista de Comandos do where</param> /// <returns>A Unidade de Filtro Finculada a Coluna</returns> private VisualWhereTable FindVisualUnitFromFilter(List <Database.SelectAnalyzer.Consulta.WherePiece> lineWhere) { if (lineWhere.Count < 1) { return(null); } // Onde começam as instruções int _startCmd = 0; // se o primeiro valor é uma junção if (lineWhere[_startCmd] is Database.SelectAnalyzer.Consulta.WhereJunctionPiece) { _startCmd++; } // ignora qualquer parenteses aberto antes dos comandos de ligação while (lineWhere[_startCmd] is Database.SelectAnalyzer.Consulta.WhereOpenParentesesPiece) { _startCmd++; } // Onde fica o divisor dos dois lados do comando. Separa o comando em antes e depois do operador lógico int logicalInstructionOrCommandOperator = -1; List <Database.SelectAnalyzer.Consulta.WherePiece> leftSide = new List <Database.SelectAnalyzer.Consulta.WherePiece>(); for (logicalInstructionOrCommandOperator = _startCmd; !(lineWhere[logicalInstructionOrCommandOperator] is Database.SelectAnalyzer.Consulta.WhereLogicalOperatorPiece || lineWhere[logicalInstructionOrCommandOperator] is Database.SelectAnalyzer.Consulta.WhereComandPiece) && logicalInstructionOrCommandOperator < lineWhere.Count; logicalInstructionOrCommandOperator++) // para cada até achar o operador lógico ou chegar no final da expressão { leftSide.Add(lineWhere[logicalInstructionOrCommandOperator]); } // analisando o lado esquerdo pra achar a chave de ligação com a unidade visual string commandSyntax = string.Empty; Column _col = null; if (leftSide.Count > 0) { // descobriu que uma coluna é a ligação if (leftSide[0] is Database.SelectAnalyzer.Consulta.WhereColumnPiece) { // procura a coluna _col = _query.FindColumn(((Database.SelectAnalyzer.Consulta.WhereColumnPiece)leftSide[0]).Campo.ColunaCompleta); // qualquer coisa apos a coluna é considerada sufixo } else if (leftSide[0] is Database.SelectAnalyzer.Consulta.WhereOpenParentesesPiece) { string syntax = string.Empty; // trata-se de uma expressão complexa e o parênteses deve ser mantido para não interferir na sintaxe foreach (Database.SelectAnalyzer.Consulta.WherePiece item in leftSide) { commandSyntax += item.Syntax + " "; } _col = new Column(syntax); } else { // trata-se de uma expressão sem parenteses _col = new Column(leftSide[0].Syntax); } } // captura a unidade visual conectada a coluna VisualWhereTable _vt = FindUnit(_col); if (_vt == null) { // não há unidade visual conectada criamos então uma para o novo item _vt = FindFirstEmptyUnit(); _vt.SelectedColumn = _col; _vt.ShowData = false; } return(_vt); }
private void buttonResize_MouseDown(object sender, MouseEventArgs e) { _visualResing = this; }