import definition = require("ui/segmented-bar"); import view = require("ui/core/view"); import proxy = require("ui/core/proxy"); import dependencyObservable = require("ui/core/dependency-observable"); import color = require("color"); import bindable = require("ui/core/bindable"); import * as typesModule from "utils/types"; var types: typeof typesModule; function ensureTypes() { if (!types) { types = require("utils/types"); } } export module knownCollections { export var items = "items"; } var CHILD_SEGMENTED_BAR_ITEM = "SegmentedBarItem"; export class SegmentedBarItem extends bindable.Bindable implements definition.SegmentedBarItem { private _title: string = ""; public _parent: SegmentedBar; get title(): string { return this._title; } set title(value: string) { if (this._title !== value) { this._title = value; this._update(); } } public _update() { // } } export class SegmentedBar extends view.View implements definition.SegmentedBar { public _addArrayFromBuilder(name: string, value: Array) { if (name === "items") { this._setValue(SegmentedBar.itemsProperty, value); } } public _adjustSelectedIndex(items: Array) { if (this.items) { if (this.items.length > 0) { ensureTypes(); if (types.isUndefined(this.selectedIndex) || (this.selectedIndex > this.items.length - 1)) { this._setValue(SegmentedBar.selectedIndexProperty, 0); } } else { this._setValue(SegmentedBar.selectedIndexProperty, undefined); } } else { this._setValue(SegmentedBar.selectedIndexProperty, undefined); } } get selectedIndex(): number { return this._getValue(SegmentedBar.selectedIndexProperty); } set selectedIndex(value: number) { this._setValue(SegmentedBar.selectedIndexProperty, value); } get items(): Array { return this._getValue(SegmentedBar.itemsProperty); } set items(value: Array) { this._setValue(SegmentedBar.itemsProperty, value); } get selectedBackgroundColor(): color.Color { return this._getValue(SegmentedBar.selectedBackgroundColorProperty); } set selectedBackgroundColor(value: color.Color) { this._setValue(SegmentedBar.selectedBackgroundColorProperty, value instanceof color.Color ? value : new color.Color(value)); } public static selectedBackgroundColorProperty = new dependencyObservable.Property("selectedBackgroundColor", "SegmentedBar", new proxy.PropertyMetadata(undefined)); public static selectedIndexProperty = new dependencyObservable.Property("selectedIndex", "SegmentedBar", new proxy.PropertyMetadata(undefined)); public static itemsProperty = new dependencyObservable.Property("items", "SegmentedBar", new proxy.PropertyMetadata(undefined)); public static selectedIndexChangedEvent = "selectedIndexChanged"; public _onBindingContextChanged(oldValue: any, newValue: any) { super._onBindingContextChanged(oldValue, newValue); if (this.items && this.items.length > 0) { var i = 0; var length = this.items.length; for (; i < length; i++) { this.items[i].bindingContext = newValue; } } } public _addChildFromBuilder(name: string, value: any): void { if(name === CHILD_SEGMENTED_BAR_ITEM) { if (!this.items) { this.items = new Array(); } this.items.push(value); this.insertTab(value); } } public insertTab(tabItem: SegmentedBarItem, index?: number): void { // } public getValidIndex(index?: number): number { ensureTypes(); let idx: number; let itemsLength = this.items ? this.items.length : 0; if (types.isNullOrUndefined(index)) { idx = itemsLength; } else { if (index < 0 || index > itemsLength) { idx = itemsLength; } else { idx = index; } } return idx; } }