/*
 *
 *  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.
 *
 */

@namespace "library://ns.adobe.com/flex/mx";

/*
//------------------------------
//  AdvancedDataGrid
//------------------------------
*/

AdvancedDataGrid
{
	alternatingItemColors: #F7F7F7, #FFFFFF;
	columnDropIndicatorSkin: ClassReference("mx.skins.halo.DataGridColumnDropIndicator");
	columnResizeSkin: ClassReference("mx.skins.halo.DataGridColumnResizeSkin");
	headerColors: #FFFFFF, #E6E6E6;
	headerDragProxyStyleName: "headerDragProxyStyle";
	headerBackgroundSkin: ClassReference("mx.skins.halo.DataGridHeaderBackgroundSkin");
	headerSeparatorSkin: ClassReference("mx.skins.halo.DataGridHeaderSeparator");
	headerHorizontalSeparatorSkin: ClassReference("mx.skins.halo.AdvancedDataGridHeaderHorizontalSeparator");
	headerStyleName: "advancedDataGridStyles";
	sortArrowSkin: ClassReference("mx.skins.halo.DataGridSortArrow");
	stretchCursor: Embed(source="Assets.swf",symbol="cursorStretch");
	verticalGridLineColor: #CCCCCC;
	disclosureClosedIcon: Embed(source="Assets.swf",symbol="TreeDisclosureClosed");
	disclosureOpenIcon: Embed(source="Assets.swf",symbol="TreeDisclosureOpen");
	defaultLeafIcon: Embed(source="Assets.swf",symbol="TreeNodeIcon");
	folderClosedIcon: Embed(source="Assets.swf",symbol="TreeFolderClosed");
	folderOpenIcon: Embed(source="Assets.swf",symbol="TreeFolderOpen");
	paddingLeft: 2;
	paddingRight: 0;
    /* sort item renderer's font styles */
	sortFontFamily: "Verdana";
	sortFontSize: 10;
	sortFontStyle: "normal";
	sortFontWeight: "normal";
}

/*
//------------------------------
//  AdvancedDataGridItemRenderer
//------------------------------
*/

AdvancedDataGridItemRenderer
{
	paddingLeft: 5;
}

/*
//------------------------------
//  AdvancedDataGridSortItemRenderer
//------------------------------
*/
AdvancedDataGridSortItemRenderer
{
    paddingTop: 0;
    paddingBottom: 0;
    paddingLeft: 0;
    paddingRight: 0;
    horizontalGap: 0;

    color: #0B333C;
    icon: ClassReference("mx.skins.halo.DataGridSortArrow");
}

/*
//------------------------------
//  AdvancedDataGridHeaderRenderer
//------------------------------
*/
AdvancedDataGridHeaderRenderer
{
    paddingTop: 0;
    paddingBottom: 0;
    paddingLeft: 2;
    paddingRight: 2;
    horizontalGap: 0;
    horizontalAlign:center;
    verticalAlign:middle;

    color: #0B333C;

    backgroundColor: #FFFFFF;
    backgroundAlpha: 0.0;
}

/*
//------------------------------
//  .advancedDataGridStyles
//------------------------------
*/

.advancedDataGridStyles
{
	fontWeight: "bold";
}

/*
//------------------------------
//  AdvancedListBase
//------------------------------
*/
AdvancedListBase
{
	borderStyle: "solid";
    _creationPolicy: "auto";
	dropIndicatorSkin: ClassReference("mx.skins.halo.ListDropIndicator");
	paddingBottom: 2;
	paddingLeft: 2;
	paddingRight: 0;
	paddingTop: 2;
}

/*
//------------------------------
//  PrintAdvancedDataGrid
//------------------------------
*/

PrintAdvancedDataGrid
{
	alternatingItemColors: #FFFFFF, #FFFFFF;
	borderColor: 0;
	headerColors: #FFFFFF, #FFFFFF;
	headerSeparatorSkin: ClassReference("mx.skins.halo.DataGridHeaderSeparator");
	headerStyleName: "advancedDataGridStyles";
	horizontalGridLineColor: 0;
	horizontalGridLines: true;
	sortArrowSkin: ClassReference("mx.skins.halo.DataGridSortArrow");
	stretchCursor: Embed(source="Assets.swf",symbol="cursorStretch");
	verticalGridLineColor: #000000;
}

/*
//------------------------------
//  PrintOLAPDataGrid
//------------------------------
*/

PrintOLAPDataGrid
{
	alternatingItemColors: #FFFFFF, #FFFFFF;
	borderColor: 0;
	headerColors: #FFFFFF, #FFFFFF;
	headerSeparatorSkin: ClassReference("mx.skins.halo.DataGridHeaderSeparator");
	horizontalGridLineColor: 0;
	horizontalGridLines: true;
	stretchCursor: Embed(source="Assets.swf",symbol="cursorStretch");
	verticalGridLineColor: #000000;
}
