diff --git a/BCL.csproj b/BCL.csproj index bc71a73a0..d422f85f1 100644 --- a/BCL.csproj +++ b/BCL.csproj @@ -279,6 +279,10 @@ button.d.ts + + + + diff --git a/ui/slider/index.ts b/ui/slider/index.ts new file mode 100644 index 000000000..98b71d5c8 --- /dev/null +++ b/ui/slider/index.ts @@ -0,0 +1,2 @@ +declare var module, require; +module.exports = require("ui/slider/slider"); \ No newline at end of file diff --git a/ui/slider/slider.android.ts b/ui/slider/slider.android.ts new file mode 100644 index 000000000..b5dd6ec08 --- /dev/null +++ b/ui/slider/slider.android.ts @@ -0,0 +1,88 @@ + +import observable = require("ui/core/observable"); +import view = require("ui/core/view"); +import application = require("application"); + +export class Slider extends view.View { + private static valueProperty = "value"; + private static maxValueProperty = "maxValue"; + + private _android: android.widget.SeekBar; + private _changeListener: android.widget.SeekBar.OnSeekBarChangeListener; + + private _preValue: number; + private _preMaxValue: number; + + constructor() { + super(); + this._preValue = 0; + this._preMaxValue = 100; + } + + private createUI(context: android.content.Context) { + this._android = new android.widget.SeekBar(context); + + this._android.setMax(this._preMaxValue); + this._android.setProgress(this._preValue); + + var that = this; + this._changeListener = new android.widget.SeekBar.OnSeekBarChangeListener({ + onProgressChanged: function (seekBar: android.widget.SeekBar, progress: number, fromUser: boolean) { + //console.log("changed"); + that.setProperty(Slider.valueProperty, seekBar.getProgress()); + }, + + onStartTrackingTouch: function (seekBar: android.widget.SeekBar) { + + }, + + onStopTrackingTouch: function (seekBar: android.widget.SeekBar) { + + } + }); + this._android.setOnSeekBarChangeListener(this._changeListener); + } + + public onInitialized(context: android.content.Context) { + if (!this._android) { + // TODO: We need to decide whether we will support context switching and if yes - to implement it. + this.createUI(context); + } + } + + get android(): android.widget.SeekBar { + return this._android; + } + + get maxValue(): number { + return this._android.getMax(); + } + + set maxValue(value: number) { + this.setProperty(Slider.maxValueProperty, value); + } + + get value(): number { + return this._android.getProgress(); + } + + set value(value: number) { + this.setProperty(Slider.valueProperty, value); + } + + public setNativeProperty(data: observable.PropertyChangeData) { + // TODO: Will this be a gigantic if-else switch? + if (data.propertyName === Slider.maxValueProperty) { + if (this._android) + this._android.setMax(data.value); + else + this._preMaxValue = data.value; + } else if (data.propertyName === Slider.valueProperty) { + if (this._android) + this._android.setProgress(data.value); + else + this._preValue = data.value; + } else if (true) { + } + } +} diff --git a/ui/slider/slider.d.ts b/ui/slider/slider.d.ts new file mode 100644 index 000000000..c79f30b8f --- /dev/null +++ b/ui/slider/slider.d.ts @@ -0,0 +1,10 @@ +declare module "ui/slider" { + + class Slider { + android: android.widget.SeekBar; + ios: UIKit.UISlider; + + value: number; + maxValue: number; + } +} \ No newline at end of file diff --git a/ui/slider/slider.ios.ts b/ui/slider/slider.ios.ts new file mode 100644 index 000000000..afd236f36 --- /dev/null +++ b/ui/slider/slider.ios.ts @@ -0,0 +1,63 @@ + +import observable = require("ui/core/observable"); +import view = require("ui/core/view"); + +export class Slider extends view.View { + private static valueProperty = "value"; + private static maxValueProperty = "maxValue"; + private _ios: UIKit.UISlider; + private changeHandler: Foundation.NSObject; + + constructor() { + super(); + this._ios = new UIKit.UISlider(); + + // default values + this._ios.minimumValue = 0; + this._ios.maximumValue = 100; + + var that = this; + var ChangeHandler = Foundation.NSObject.extends( + { + sliderValueChanged: function (sender: UIKit.UISlider) { + that.setProperty(Slider.valueProperty, sender.value); + } + }, { + exposedMethods: { + 'sliderValueChanged': 'v@:@' + } + }); + + this.changeHandler = new ChangeHandler(); + this._ios.addTargetActionForControlEvents(this.changeHandler, "sliderValueChanged", UIKit.UIControlEvents.UIControlEventValueChanged); + } + + get ios(): UIKit.UISlider { + return this._ios; + } + + get maxValue(): number { + return this._ios.maximumValue; + } + + set maxValue(value: number) { + this.setProperty(Slider.maxValueProperty, value); + } + + get value(): number { + return this._ios.value; + } + + set value(value: number) { + this.setProperty(Slider.valueProperty, value); + } + + public setNativeProperty(data: observable.PropertyChangeData) { + if (data.propertyName === Slider.maxValueProperty) { + this._ios.maximumValue = data.value; + } else if (data.propertyName === Slider.valueProperty) { + this._ios.value = data.value; + } else if (true) { + } + } +} \ No newline at end of file