/*---------------- FILE HEADER --------------------------------------- This file is part of Geoide. Copyright (C) 2005-2006 by: IDgis B.V. http://www.idgis.nl This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Contact: Herman Assink IDgis bv P.O. Box 15 7450 AA Holten The Netherlands E-Mail: herman.assink@idgis.nl * @version 1.4.0 * @author IDgis team * ------------------------------------------------------------------------*/ import nl.idgis.giclient.framework.buttons.ActionButton; import nl.idgis.giclient.framework.buttons.ActionButtonConfig; import nl.idgis.giclient.filterencoding.ComplexFilter; import nl.idgis.giclient.filterencoding.LogicalOperation; import nl.idgis.giclient.filterencoding.OperationDefines; import nl.idgis.giclient.framework.buttons.GIButton; import nl.idgis.giclient.framework.buttons.GIButtonEventListener; import nl.idgis.giclient.query.AdvancedOperationViewer; import nl.idgis.giclient.query.OperationViewer; import nl.idgis.giclient.query.QueryAspect; import nl.idgis.giclient.query.QueryBuilderViewer; import nl.idgis.giclient.query.SimpleOperationViewer; import nl.idgis.giclient.Ruler; class nl.idgis.giclient.query.QueryAspectViewer extends MovieClip implements GIButtonEventListener{ var queryAspect:QueryAspect; var queryBuilderViewer:QueryBuilderViewer; var textFormat:TextFormat; var ruler:Ruler = null; private var operationViewers:Array; var buttonBar:MovieClip = null; private var actionButtons:Array; private var ypos:Number = 0; private var xpos:Number = 0; //default width en heigth tevens minimum private var viewerWidth:Number = null; private var viewerHeight:Number = null; function onLoad() { operationViewers = new Array(); paint(); } function onUnload() { var actionButtonConfigs:Array = queryAspect.getActionButtonConfigs(); for (var i:Number = 0; i < actionButtonConfigs.length; i++) { ActionButtonConfig(actionButtonConfigs[i]).deflate(); } } function getViewerWidth():Number{ return viewerWidth; } function getViewerHeight():Number{ return viewerHeight; } private function paint(){ actionButtons = new Array(); buttonBar = this.createEmptyMovieClip("buttonBar",this.getNextHighestDepth()+100); buttonBar._visible = false; var initObject:Object = new Object(); initObject["enabled"] = false; var actionButtonConfigs:Array = queryAspect.getActionButtonConfigs(); for (var i:Number = 0; i < actionButtonConfigs.length; i++) { var actionButtonConfig:ActionButtonConfig = ActionButtonConfig(actionButtonConfigs[i]); var actionButton:ActionButton = ActionButton(actionButtonConfig.inflate(buttonBar, buttonBar.getNextHighestDepth(),queryAspect, initObject)); GIButton(actionButton).addEventListener(this); actionButtons.push(actionButton); } buildOperationViewers(); MovieClip(buttonBar)._y = ypos; buttonBar._visible = true; xpos = 0; for (var i:Number = 0; i < actionButtons.length; i++) { actionButtons[i]._x = xpos; xpos = xpos + GIButton(actionButtons[i]).getWidth() + 10; } if(ypos + 30 > viewerHeight){ viewerHeight = ypos + 30; } if(xpos + 10 > viewerWidth){ viewerWidth = xpos+10; } queryBuilderViewer.onResizeQueryAspectViewer(this); } function onReleaseGIButton(giButton:GIButton):Void{ queryBuilderViewer.state(""); } public function getFilter():ComplexFilter{ var operations:Array = new Array(); var filter:ComplexFilter = null; var logicalOperation:LogicalOperation = null; for (var j:Number = 0; j < operationViewers.length; j++) { if(operationViewers[j].operation.isValid){ operations.push(operationViewers[j].getOperation()); } } if(operations.length == 1){ filter = new ComplexFilter(operations[0],null,null,null); } else if(operations.length > 1){ logicalOperation = new LogicalOperation(OperationDefines.AND, operations); filter = new ComplexFilter(logicalOperation,null,null,null); } else { filter = null; } return filter; } private function buildOperationViewers():Void{ var queryColumns:Array = queryAspect.getQueryColumns(); var operationViewer:OperationViewer = null; var operationViewerClassName = null; if(queryAspect.getType()=="simple"){ operationViewerClassName = "SimpleOperationViewer"; } else { operationViewerClassName = "AdvancedOperationViewer"; } var propertyColumnWidth:Number = 5; for (var i:Number = 0; i < queryColumns.length; i++) { var textExtent:Object = textFormat.getTextExtent(queryColumns[i].getTitle()); var textWidth:Number = textExtent.textFieldWidth; if(propertyColumnWidth < textWidth){ propertyColumnWidth = textWidth + 5; } } for (var i:Number = 0; i < queryColumns.length; i++) { operationViewer = OperationViewer(this.attachMovie(operationViewerClassName,"operationViewer" + queryColumns[i].getName() ,this.getNextHighestDepth(),{_x:0,_y:ypos,queryColumn:queryColumns[i], queryAspectViewer:this, textFormat:this.textFormat, ruler:this.ruler, propColumnWidth:propertyColumnWidth})); if(queryAspect.getType()=="advanced" ){ var propFldValues:Array = getPropertyFieldValues(i); var advancedOperationViewer:AdvancedOperationViewer = AdvancedOperationViewer(operationViewer); advancedOperationViewer.setPropertyFieldValues(propFldValues); if(i==0){ operationViewer.setOperandValues(); operationViewer._visible = true; } else { operationViewer._visible = false; } } else if(queryAspect.getType()=="simple" && (i==0)){ var simpleOperationViewer:SimpleOperationViewer = SimpleOperationViewer(operationViewer); simpleOperationViewer.setOperandValues(); } operationViewers.push(operationViewer); ypos = ypos + operationViewer.getViewerHeight(); } } function onResizeOperationViewer(operationViewer:OperationViewer):Void { var maxOperationViewerWidth:Number = 0; var reshuffle:Boolean = false; var ypos:Number = 0; //als de eerste veranderd is buttons disabelen if(operationViewer == operationViewers[0]){ enableButtons(false); } for (var i:Number = 0; i < operationViewers.length; i++) { if(OperationViewer(operationViewers[i]).getViewerWidth() > maxOperationViewerWidth) { maxOperationViewerWidth = operationViewers[i].getViewerWidth(); } operationViewers[i]._y = ypos; ypos += operationViewers[i].getViewerHeight(); } MovieClip(buttonBar)._y = ypos; if (operationViewer.getViewerWidth() > maxOperationViewerWidth) { viewerWidth = operationViewer.getViewerWidth(); } else { viewerWidth = maxOperationViewerWidth; } viewerHeight = ypos + 30; //if (operationViewer._width > maxOperationViewerWidth) { queryBuilderViewer.onResizeQueryAspectViewer(this); //} } function onChangeOperand(operationViewer:OperationViewer):Void{ var changedViewer:OperationViewer = null; var changedNr:Number = null; var operationViewerToSet:OperationViewer = null; for (var j:Number = 0; j < operationViewers.length; j++) { if(operationViewer == operationViewers[j]){ changedViewer = operationViewers[j]; changedNr = j; if(queryAspect.getType()=="simple"){ if (changedNr == operationViewers.length -1){ //de laatste is veranderd enable de buttons enableButtons(true); } else { enableButtons(false); } } else { enableButtons(true); } } else if(changedViewer!= null){ if(j == changedNr + 1){ if(changedViewer.getOperation().isValid==false){ if(queryAspect.getType()=="advanced"){ operationViewers[j]._visible = false; } operationViewers[j].resetOperandValues(); } else { if(queryAspect.getType()=="advanced"){ operationViewers[j]._visible = true; } operationViewerToSet = operationViewers[j]; } } else { if (queryAspect.getType()=="advanced"){ operationViewers[j]._visible = false; } operationViewers[j].resetOperandValues(); } } } //Pas op het eind setten anders zijn nog niet alle viewer geresetted operationViewerToSet.setOperandValues(); queryBuilderViewer.state(""); queryAspect.setFilter(getFilter()); } function onChangePropertyField(operationViewer:OperationViewer):Void{ var changedViewer:OperationViewer = null; var changedNr:Number = null; for (var j:Number = 0; j < operationViewers.length;j++) { if (operationViewer == operationViewers[j]) { changedViewer = operationViewers[j]; changedNr = j; } else if (changedViewer!= null) { operationViewers[j]._visible = false; var propFldValues:Array = getPropertyFieldValues(j); operationViewers[j].setPropertyFieldValues(propFldValues); operationViewers[j].resetOperandValues(); } } changedViewer.setOperandValues(); queryBuilderViewer.state(""); } function onChangeOperator(operationViewer:OperationViewer):Void{ var changedViewer:OperationViewer = null; var changedNr:Number = null; for (var i:Number = 0; i < operationViewers.length; i++) { if(operationViewer == operationViewers[i]){ changedViewer = operationViewers[i]; changedNr = i; } else if(changedViewer!= null){ operationViewers[i]._visible = false; operationViewers[i].resetOperandValues(); } } changedViewer.setOperandValues(); queryBuilderViewer.state(""); } private function getPropertyFieldValues(n:Number):Array{ var queryColumns:Array = queryAspect.getQueryColumns(); var propertyFieldColumns:Array = new Array(); for (var i:Number = 0; i < queryColumns.length; i++) { var alreadySelected:Boolean = false; for (var j:Number = 0; j < n; j++) { if(operationViewers[j].queryColumn==queryColumns[i]){ alreadySelected = true; } } if(alreadySelected == false){ propertyFieldColumns.push(queryColumns[i]); } } var propertyFieldDataProvider:Array = new Array(); for (var i:Number = 0; i < propertyFieldColumns.length; i++) { propertyFieldDataProvider.push({label:propertyFieldColumns[i].getTitle(), data:propertyFieldColumns[i]} ); } return propertyFieldDataProvider; } private function enableButtons(enable:Boolean):Void{ for (var i:Number = 0; i < actionButtons.length; i++) { ActionButton(actionButtons[i]).setEnabled(enable); } } }