forked from NativeScript/NativeScript
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbutton-common.ts
More file actions
115 lines (99 loc) · 4.48 KB
/
button-common.ts
File metadata and controls
115 lines (99 loc) · 4.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
import dependencyObservable = require("ui/core/dependency-observable");
import view = require("ui/core/view");
import definition = require("ui/button");
import proxy = require("ui/core/proxy");
import formattedString = require("text/formatted-string");
import observable = require("data/observable");
import weakEventListener = require("ui/core/weak-event-listener");
export module knownEvents {
export var tap = "tap";
}
var textProperty = new dependencyObservable.Property(
"text",
"Button",
new proxy.PropertyMetadata("", dependencyObservable.PropertyMetadataSettings.AffectsLayout)
);
var formattedTextProperty = new dependencyObservable.Property(
"formattedText",
"Button",
new proxy.PropertyMetadata("", dependencyObservable.PropertyMetadataSettings.AffectsLayout)
);
function onTextPropertyChanged(data: dependencyObservable.PropertyChangeData) {
var button = <Button>data.object;
button._onTextPropertyChanged(data);
}
function onFormattedTextPropertyChanged(data: dependencyObservable.PropertyChangeData) {
var button = <Button>data.object;
button._onFormattedTextPropertyChanged(data);
}
// register the setNativeValue callback
(<proxy.PropertyMetadata>textProperty.metadata).onSetNativeValue = onTextPropertyChanged;
(<proxy.PropertyMetadata>formattedTextProperty.metadata).onSetNativeValue = onFormattedTextPropertyChanged;
export class Button extends view.View implements definition.Button {
public static textProperty = textProperty;
public static formattedTextProperty = formattedTextProperty;
public _onBindingContextChanged(oldValue: any, newValue: any) {
super._onBindingContextChanged(oldValue, newValue);
if (this.formattedText) {
this.formattedText.updateSpansBindingContext(newValue);
}
}
get text(): string {
return this._getValue(Button.textProperty);
}
set text(value: string) {
this._setValue(Button.textProperty, value);
}
get formattedText(): formattedString.FormattedString {
return this._getValue(Button.formattedTextProperty);
}
set formattedText(value: formattedString.FormattedString) {
if (this.formattedText !== value) {
var weakEventOptions: weakEventListener.WeakEventListenerOptions = {
targetWeakRef: new WeakRef(this),
eventName: observable.knownEvents.propertyChange,
sourceWeakRef: new WeakRef(value),
handler: this.onFormattedTextChanged,
handlerContext: this,
key: "formattedText"
};
if (this.formattedText) {
weakEventListener.WeakEventListener.removeWeakEventListener(weakEventOptions);
}
this._setValue(Button.formattedTextProperty, value);
if (value) {
weakEventListener.WeakEventListener.addWeakEventListener(weakEventOptions);
}
}
}
private onFormattedTextChanged(eventData: observable.PropertyChangeData) {
this.setFormattedTextPropertyToNative(eventData.value);
}
public _onTextPropertyChanged(data: dependencyObservable.PropertyChangeData) {
if (this.android) {
this.android.setText(data.newValue + "");
}
if (this.ios) {
// In general, if a property is not specified for a state, the default is to use
// the UIControlStateNormal value. If the value for UIControlStateNormal is not set,
// then the property defaults to a system value. Therefore, at a minimum, you should
// set the value for the normal state.
this.ios.setTitleForState(data.newValue + "", UIControlState.UIControlStateNormal);
}
}
private setFormattedTextPropertyToNative(value) {
if (this.android) {
this.android.setText(value._formattedText);
}
if (this.ios) {
// In general, if a property is not specified for a state, the default is to use
// the UIControlStateNormal value. If the value for UIControlStateNormal is not set,
// then the property defaults to a system value. Therefore, at a minimum, you should
// set the value for the normal state.
this.ios.setAttributedTitleForState(value._formattedText, UIControlState.UIControlStateNormal);
}
}
public _onFormattedTextPropertyChanged(data: dependencyObservable.PropertyChangeData) {
this.setFormattedTextPropertyToNative(data.newValue);
}
}