blob: b68b0f65d02a01e3d2391394631ccac92e59f6b3 [file] [log] [blame]
////////////////////////////////////////////////////////////////////////////////
//
// Licensed to the Apache Software Foundation (ASF) under one or more
// contributor license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright ownership.
// The ASF licenses this file to You under the Apache License, Version 2.0
// (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
////////////////////////////////////////////////////////////////////////////////
package org.apache.royale.jewel.beads.itemRenderers
{
import org.apache.royale.core.IChild;
import org.apache.royale.core.IDataProviderItemRendererMapper;
import org.apache.royale.core.IIndexedItemRendererInitializer;
import org.apache.royale.core.IItemRendererOwnerView;
import org.apache.royale.core.IParent;
import org.apache.royale.core.IStrandWithModelView;
import org.apache.royale.core.UIBase;
import org.apache.royale.events.Event;
import org.apache.royale.html.beads.DataItemRendererFactoryBase;
import org.apache.royale.html.supportClasses.StyledDataItemRenderer;
import org.apache.royale.jewel.Label;
import org.apache.royale.jewel.Table;
import org.apache.royale.jewel.beads.controls.TextAlign;
import org.apache.royale.jewel.beads.models.TableModel;
import org.apache.royale.jewel.beads.views.TableView;
import org.apache.royale.jewel.itemRenderers.TableItemRenderer;
import org.apache.royale.jewel.supportClasses.list.IListPresentationModel;
import org.apache.royale.jewel.supportClasses.table.THead;
import org.apache.royale.jewel.supportClasses.table.TableColumn;
import org.apache.royale.jewel.supportClasses.table.TableHeaderCell;
import org.apache.royale.jewel.supportClasses.table.TableRow;
/**
* This class creates itemRenderer instances from the data contained within an ICollectionView
* and generates the appropiate table structure with thead, tbody and table rows and cells
* to hold the columns and data in cells.
*/
public class TableItemRendererFactoryForCollectionView extends DataItemRendererFactoryBase implements IDataProviderItemRendererMapper
{
public function TableItemRendererFactoryForCollectionView(target:Object = null)
{
super(target);
}
private var table:Table;
private var view:TableView;
override protected function finishSetup(event:Event):void
{
super.finishSetup(event);
table = _strand as Table;
}
override protected function get dataGroup():IItemRendererOwnerView {
if(!view)
view = (_strand as IStrandWithModelView).view as TableView;
return view.dataGroup;
}
protected function get model():TableModel {
return dataProviderModel as TableModel;
}
/**
* Remove all itemrenderers
*
* @royaleignorecoercion org.apache.royale.core.IItemRendererOwnerView
*/
override protected function removeAllItemRenderers(dataGroup:IItemRendererOwnerView):void
{
// TBodyContentArea - remove data items
super.removeAllItemRenderers(dataGroup);
// THEAD - remove header items
removeElements(view.thead);
}
/**
* create all item renderers
*
* @royaleignorecoercion org.apache.royale.core.IIndexedItemRenderer
* @royaleignorecoercion org.apache.royale.core.IIndexedItemRendererInitializer
*/
override protected function createAllItemRenderers(dataGroup:IItemRendererOwnerView):void
{
if(!model.columns)
return;
// -- add the header
createHeader();
// -- 2) CREATION PHASE
var presentationModel:IListPresentationModel = _strand.getBeadByType(IListPresentationModel) as IListPresentationModel;
var column:TableColumn;
var ir:TableItemRenderer;
var n:int = model.dataProvider.length;
var index:int = 0;
for (var i:int = 0; i < n; i++)
{
for(var j:int = 0; j < model.columns.length; j++)
{
column = model.columns[j] as TableColumn;
if(column.itemRenderer != null)
{
ir = column.itemRenderer.newInstance() as TableItemRenderer;
} else
{
ir = itemRendererFactory.createItemRenderer() as TableItemRenderer;
}
var data:Object = model.dataProvider.getItemAt(i);
(ir as StyledDataItemRenderer).dataField = column.dataField;
(ir as StyledDataItemRenderer).rowIndex = i;
(ir as StyledDataItemRenderer).columnIndex = j;
(itemRendererInitializer as IIndexedItemRendererInitializer).initializeIndexedItemRenderer(ir, data, index);
dataGroup.addItemRendererAt(ir, index);
ir.labelField = column.dataField;
if (presentationModel) {
UIBase(ir).height = presentationModel.rowHeight;
}
ir.index = index;
ir.data = data;
if(column.align != "")
{
ir.align = column.align;
}
index++;
}
}
}
/**
* remove all elements in a container.
* Needed to remove THEAD contents as part of cleaning
*/
protected function removeElements(container: IParent):void
{
if(container != null)
{
while (container.numElements > 0) {
var child:IChild = container.getElementAt(0);
container.removeElement(child);
}
}
}
/**
* Create the THEAD in the creation phase with the columns info
*/
protected function createHeader():void
{
var createHeaderRow:Boolean = false;
var test:TableColumn;
var c:int;
for(c=0; c < model.columns.length; c++)
{
test = model.columns[c] as TableColumn;
if (test.label != null) {
createHeaderRow = true;
break;
}
}
if (createHeaderRow)
{
if(view.thead == null)
view.thead = new THead();
var thead:THead = view.thead;
var headerRow:TableRow = new TableRow();
for(c=0; c < model.columns.length; c++)
{
test = model.columns[c] as TableColumn;
var tableHeader:TableHeaderCell = new TableHeaderCell();
var label:Label = new Label();
tableHeader.addElement(label);
label.text = test.label == null ? "" : test.label;
var columnLabelTextAlign:TextAlign = new TextAlign();
columnLabelTextAlign.align = test.columnLabelAlign;
label.addBead(columnLabelTextAlign);
headerRow.addElement(tableHeader);
}
thead.addElement(headerRow);
table.addElementAt(thead,0);
}
}
/**
* @private
* @royaleignorecoercion org.apache.royale.collections.ICollectionView
* @royaleignorecoercion org.apache.royale.jewel.supportClasses.list.IListPresentationModel
* @royaleignorecoercion org.apache.royale.core.IIndexedItemRenderer
* @royaleignorecoercion org.apache.royale.events.IEventDispatcher
*/
// protected function itemAddedHandler(event:CollectionEvent):void
// {
// }
/**
* @private
* @royaleignorecoercion org.apache.royale.collections.ICollectionView
* @royaleignorecoercion org.apache.royale.jewel.supportClasses.list.IListPresentationModel
* @royaleignorecoercion org.apache.royale.core.IIndexedItemRenderer
* @royaleignorecoercion org.apache.royale.events.IEventDispatcher
*/
// protected function itemRemovedHandler(event:CollectionEvent):void
// {
// }
/**
* @private
* @royaleignorecoercion org.apache.royale.collections.ICollectionView
* @royaleignorecoercion org.apache.royale.core.IIndexedItemRenderer
*/
// protected function itemUpdatedHandler(event:CollectionEvent):void
// {
// }
}
}