10000 Implemented AddChildFromBuilder for SegmentedBar. · hbcodeXCI/NativeScript@cbca2e6 · GitHub
[go: up one dir, main page]

Skip to content

Commit cbca2e6

Browse files
author
Nedyalko Nikolov
committed
Implemented AddChildFromBuilder for SegmentedBar.
1 parent 23a7145 commit cbca2e6

File tree

4 files changed

+75
-17
lines changed

4 files changed

+75
-17
lines changed

ui/segmented-bar/segmented-bar-common.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import dependencyObservable = require("ui/core/dependency-observable");
55
import color = require("color");
66
import bindable = require("ui/core/bindable");
77
import * as typesModule from "utils/types";
8+
import {WrappedValue} from "data/observable";
89

910
var types: typeof typesModule;
1011
function ensureTypes() {
@@ -17,6 +18,8 @@ export module knownCollections {
1718
export var items = "items";
1819
}
1920

21+
var CHILD_SEGMENTED_BAR_ITEM = "SegmentedBarItem";
22+
2023
export class SegmentedBarItem extends bindable.Bindable implements definition.SegmentedBarItem {
2124
private _title: string = "";
2225
public _parent: SegmentedBar;
@@ -97,4 +100,37 @@ export class SegmentedBar extends view.View implements definition.SegmentedBar {
97100
}
98101
}
99102
}
103+
104+
private itemsTimerId;
105+
106+
public _addChildFromBuilder(name: string, value: any): void {
107+
if(name === CHILD_SEGMENTED_BAR_ITEM) {
108+
if (!this.items) {
109+
this.items = new Array<SegmentedBarItem>();
110+
}
111+
this.items.push(<SegmentedBarItem>value);
112+
this.insertTab(<SegmentedBarItem>value);
113+
114+
}
115+
}
116+
117+
public insertTab(tabItem: SegmentedBarItem, index?: number): void {
118+
//
119+
}
120+
121+
public getValidIndex(index?: number): number {
122+
ensureTypes();
123+
let idx: number;
124+
let itemsLength = this.items ? this.items.length : 0;
125+
if (types.isNullOrUndefined(index)) {
126+
idx = itemsLength;
127+
} else {
128+
if (index < 0 || index > itemsLength) {
129+
idx = itemsLength;
130+
} else {
131+
idx = index;
132+
}
133+
}
134+
return idx;
135+
}
100136
}

ui/segmented-bar/segmented-bar.android.ts

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ function onSelectedIndexPropertyChanged(data: dependencyObservable.PropertyChang
2727
view.notify({ eventName: SegmentedBar.selectedIndexChangedEvent, object: view, oldIndex: data.oldValue< 10000 /span>, newIndex: data.newValue });
2828
} else {
2929
view.selectedIndex = undefined;
30-
throw new Error("selectedIndex should be between [0, items.length - 1]");
30+
throw new Error("selectedIndex should be between [0, " + (view.items.length - 1) + "]");
3131
}
3232
}
3333
}
@@ -53,19 +53,7 @@ function onItemsPropertyChanged(data: dependencyObservable.PropertyChangeData) {
5353

5454
if (newItems && newItems.length) {
5555
for (var i = 0; i < newItems.length; i++) {
56-
(<SegmentedBarItem>newItems[i])._parent = view;
57-
var tab = view.android.newTabSpec(i + "");
58-
tab.setIndicator(newItems[i].title || "");
59-
60-
tab.setContent(new android.widget.TabHost.TabContentFactory({
61-
createTabContent: function(tag: string): android.view.View {
62-
var tv = new android.widget.TextView(view._context);
63-
tv.setVisibility(android.view.View.GONE);
64-
return tv;
65-
}
66-
}));
67-
68-
view.android.addTab(tab);
56+
view.insertTab((<SegmentedBarItem>newItems[i]), i);
6957
}
7058

7159
if (types.isNumber(view.selectedIndex) && view.android.getCurrentTab() !== view.selectedIndex) {
@@ -188,6 +176,24 @@ export class SegmentedBar extends common.SegmentedBar {
188176
get android(): android.widget.TabHost {
189177
return this._android;
190178
}
179+
180+
public insertTab(tabItem: SegmentedBarItem, index?: number): void {
181+
super.insertTab(tabItem, index);
182+
tabItem._parent = this;
183+
184+
var tab = this.android.newTabSpec(this.getValidIndex(index) + "");
185+
tab.setIndicator(tabItem.title || "");
186+
let that = this;
187+
tab.setContent(new android.widget.TabHost.TabContentFactory({
188+
createTabContent: function (tag: string): android.view.View {
189+
var tv = new android.widget.TextView(that._context);
190+
tv.setVisibility(android.view.View.GONE);
191+
return tv;
192+
}
193+
}));
194+
195+
this.android.addTab(tab);
196+
}
191197
}
192198

193199
var TabHostClass;

ui/segmented-bar/segmented-bar.d.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ declare module "ui/segmented-bar" {
3636
/**
3737
* Represents a UI SegmentedBar component.
3838
*/
39-
export class SegmentedBar extends view.View {
39+
export class SegmentedBar extends view.View implements view.AddChildFromBuilder {
4040
/**
4141
* Gets or sets the selected index of the SegmentedBar component.
4242
*/
@@ -84,5 +84,16 @@ declare module "ui/segmented-bar" {
8484
* Raised when the selected index changes.
8585
*/
8686
on(event: "selectedIndexChanged", callback: (args: SelectedIndexChangedEventData) => void, thisArg?: any);
87+
88+
/**
89+
* Called for every child element declared in xml.
90+
* @param name - Name of the element.
91+
* @param value - Value of the element.
92+
*/
93+
public _addChildFromBuilder(name: string, value: any): void;
94+
95+
public insertTab(tabItem: SegmentedBarItem, index?: number): void;
96+
97+
public getValidIndex(index?: number): number;
8798
}
8899
}

ui/segmented-bar/segmented-bar.ios.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,7 @@ function onItemsPropertyChanged(data: dependencyObservable.PropertyChangeData) {
5656
var newItems = <Array<definition.SegmentedBarItem>>data.newValue;
5757
if (newItems && newItems.length) {
5858
for (var i = 0; i < newItems.length; i++) {
59-
view.ios.insertSegmentWithTitleAtIndexAnimated(newItems[i].title || "", i, false);
60-
(<SegmentedBarItem>newItems[i])._parent = view;
59+
view.insertTab(<SegmentedBarItem>(newItems[i]), i);
6160
}
6261

6362
if (view.ios.selectedSegmentIndex !== view.selectedIndex) {
@@ -105,6 +104,12 @@ export class SegmentedBar extends common.SegmentedBar {
105104
get ios(): UISegmentedControl {
106105
return this._ios;
107106
}
107+
108+
public insertTab(tabItem: SegmentedBarItem, index?: number): void {
109+
super.insertTab(tabItem, index);
110+
tabItem._parent = this;
111+
this.ios.insertSegmentWithTitleAtIndexAnimated(tabItem.title || "", this.getValidIndex(index), false);
112+
}
108113
}
109114

110115
class SelectionHandlerImpl extends NSObject {

0 commit comments

Comments
 (0)
0