diff --git a/arkoala-arkts/arkui/sdk/generated/prototype.ets b/arkoala-arkts/arkui/sdk/generated/prototype.ets new file mode 100644 index 0000000000000000000000000000000000000000..0bd97c00fe3c7c55f7ee4f78ff72a6b839ffae28 --- /dev/null +++ b/arkoala-arkts/arkui/sdk/generated/prototype.ets @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2024-2025 Huawei Device Co., Ltd. + * Licensed 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. + */ + + +// WARNING! THIS FILE IS AUTO-GENERATED, DO NOT MAKE CHANGES, THEY WILL BE LOST ON NEXT GENERATION! + +import { int32, int64, float32 } from "@koalaui/common" +import { KInt, KPointer, KBoolean, NativeBuffer } from "@koalaui/interop" +import { memo, memo_stable } from "@koalaui/runtime/annotations" +import { BuilderLambda } from "@koalaui/builderLambda" +export declare class SubPeersProto { + static tabsSubPeers(node: KPointer): Map +} diff --git a/arkoala-arkts/arkui/src/ets/ComponentBase.ets b/arkoala-arkts/arkui/src/ets/ComponentBase.ets index 3863817d32204c53d198fe3889aeb27148698f3b..deb5681dd53eb8d4fc05bc3ed90f21f718397d06 100644 --- a/arkoala-arkts/arkui/src/ets/ComponentBase.ets +++ b/arkoala-arkts/arkui/src/ets/ComponentBase.ets @@ -23,9 +23,13 @@ import { unsafeCast } from "@koalaui/common" export class ComponentBase implements UICommonBase { protected peer?: PeerNode protected isFirstBuild: boolean = true + protected subPeers?: Map setPeer(peer: PeerNode) { this.peer = peer } + setSubPeers(subPeers: Map) { + this.subPeers = subPeers + } protected checkPriority(name: string): boolean { return true } diff --git a/arkoala-arkts/arkui/src/ets/generated/arkts/ArkUIGeneratedNativeModule.ets b/arkoala-arkts/arkui/src/ets/generated/arkts/ArkUIGeneratedNativeModule.ets index ef443664bf8870a783ba588937126fc3275e9964..a393ac296f8ce1159e365e7fd84c9ee55760f2b8 100644 --- a/arkoala-arkts/arkui/src/ets/generated/arkts/ArkUIGeneratedNativeModule.ets +++ b/arkoala-arkts/arkui/src/ets/generated/arkts/ArkUIGeneratedNativeModule.ets @@ -5676,6 +5676,8 @@ export class ArkUIGeneratedNativeModule { native static _SubmitEvent_getText(ptr: KPointer): string @ani.unsafe.Quick native static _SubmitEvent_setText(ptr: KPointer, text: KStringPtr): void + @ani.unsafe.Quick + native static _SubPeersProto_tabsSubPeers(node: KPointer): KInteropReturnBuffer @ani.unsafe.Direct native static _SwipeGesture_ctor(): KPointer @ani.unsafe.Direct diff --git a/arkoala-arkts/arkui/src/ets/generated/index.ets b/arkoala-arkts/arkui/src/ets/generated/index.ets index c358b1d42450da6ed0a7d60626838c4e7eb88549..0a14634bfbae1fda27319bda4a80ba5572f54d5a 100644 --- a/arkoala-arkts/arkui/src/ets/generated/index.ets +++ b/arkoala-arkts/arkui/src/ets/generated/index.ets @@ -103,6 +103,7 @@ export * from "./pluginComponent" export * from "./polygon" export * from "./polyline" export * from "./progress" +export * from "./prototype" export * from "./qrcode" export * from "./radio" export * from "./rating" diff --git a/arkoala-arkts/arkui/src/ets/generated/prototype.ets b/arkoala-arkts/arkui/src/ets/generated/prototype.ets new file mode 100644 index 0000000000000000000000000000000000000000..575689ce0be2070cec31f93ac506570d10396d69 --- /dev/null +++ b/arkoala-arkts/arkui/src/ets/generated/prototype.ets @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2024-2025 Huawei Device Co., Ltd. + * Licensed 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. + */ + + +// WARNING! THIS FILE IS AUTO-GENERATED, DO NOT MAKE CHANGES, THEY WILL BE LOST ON NEXT GENERATION! + +import { TypeChecker, ArkUIGeneratedNativeModule } from "#components" +import { Finalizable, runtimeType, RuntimeType, SerializerBase, registerCallback, wrapCallback, toPeerPtr, KPointer, MaterializedBase, NativeBuffer } from "@koalaui/interop" +import { unsafeCast, int32, int64, float32 } from "@koalaui/common" +import { Serializer } from "./peers/Serializer" +import { CallbackKind } from "./peers/CallbackKind" +import { Deserializer } from "./peers/Deserializer" +import { CallbackTransformer } from "./../CallbackTransformer" +export class SubPeersProto { + public static tabsSubPeers(node: KPointer): Map { + const node_casted = node as (KPointer) + return SubPeersProto.tabsSubPeers_serialize(node_casted) + } + private static tabsSubPeers_serialize(node: KPointer): Map { + const retval = ArkUIGeneratedNativeModule._SubPeersProto_tabsSubPeers(node) + let retvalDeserializer : Deserializer = new Deserializer(retval, retval.length) + const buffer_size : int32 = retvalDeserializer.readInt32() + let buffer : Map = new Map() + // TODO: TS map resize + for (let buffer_i = 0; buffer_i < buffer_size; buffer_i++) { + const buffer_key : string = (retvalDeserializer.readString() as string) + const buffer_value : KPointer = retvalDeserializer.readPointer() + buffer.set(buffer_key, buffer_value) + } + const returnResult : Map = buffer + return returnResult + } +} diff --git a/arkoala-arkts/arkui/src/ets/generated/tabs.ets b/arkoala-arkts/arkui/src/ets/generated/tabs.ets index 6784db652f70f66e1b7994b35c0ca44c7204aa0c..c15a844e1080ddf6dd8b2393e48d2ee483ddbe5c 100644 --- a/arkoala-arkts/arkui/src/ets/generated/tabs.ets +++ b/arkoala-arkts/arkui/src/ets/generated/tabs.ets @@ -33,6 +33,7 @@ import { Resource } from "./resource" import { memo, memo_stable } from "@koalaui/runtime/annotations" import { BuilderLambda } from "@koalaui/builderLambda" import { NodeAttach, remember } from "@koalaui/runtime" +import { SubPeersProto } from "./prototype" export interface TabContentTransitionProxy { from: number to: number @@ -191,6 +192,15 @@ export class ArkTabsPeer extends ArkCommonMethodPeer { const _peerPtr = ArkUIGeneratedNativeModule._Tabs_construct(peerId, flags) const _peer = new ArkTabsPeer(_peerPtr, peerId, "Tabs", flags) component?.setPeer(_peer) + const peerMap: Map = SubPeersProto.tabsSubPeers(_peerPtr) + if (peerMap.size !== 0) { + const subPeers: Map = new Map(); + peerMap.forEach((value: KPointer, key: string) => { + const peerId = PeerNode.nextId() + subPeers.set(key, new ArkCommonMethodPeer(value, peerId, "CommonMethod", 0)) + }); + component?.setSubPeers(subPeers) + } return _peer } setTabsOptionsAttribute(options?: TabsOptions): void { diff --git a/arkoala-arkts/arkui/types/index-full.d.ts b/arkoala-arkts/arkui/types/index-full.d.ts index 1b1f7d3c16fa81c6562582c824e55cf06de94788..c1d31186e92165eade6c551f2ae8c72d7b3cbeea 100644 --- a/arkoala-arkts/arkui/types/index-full.d.ts +++ b/arkoala-arkts/arkui/types/index-full.d.ts @@ -10404,6 +10404,9 @@ declare class NavExtender { static popToIndex(pathStack: NavPathStack, index: number, animated: boolean): void; static popToName(pathStack: NavPathStack, name: string, animated: boolean): number; } +declare class SubPeersProto { + static tabsSubPeers(node: number|bigint): Map; +} declare interface Root { } declare interface ComponentRoot { diff --git a/arkoala-arkts/framework/native/src/generated/Serializers.h b/arkoala-arkts/framework/native/src/generated/Serializers.h index 079bb79379c8637f86e015c8b32e717b4e6787a5..bbfecd1d9fbb647355cdc32c9a9b5d4a70dedbab 100644 --- a/arkoala-arkts/framework/native/src/generated/Serializers.h +++ b/arkoala-arkts/framework/native/src/generated/Serializers.h @@ -24036,6 +24036,45 @@ inline Ark_RuntimeType runtimeType(const Opt_Map_String_Int64& value) return (value.tag != INTEROP_TAG_UNDEFINED) ? (INTEROP_RUNTIME_OBJECT) : (INTEROP_RUNTIME_UNDEFINED); } template <> +inline Ark_RuntimeType runtimeType(const Map_String_NativePointer& value) +{ + return INTEROP_RUNTIME_OBJECT; +} +template <> +void WriteToString(std::string* result, const Ark_String* value); +template <> +void WriteToString(std::string* result, const Ark_NativePointer value); +template <> +inline void WriteToString(std::string* result, const Map_String_NativePointer* value) { + result->append("{"); + int32_t count = value->size; + for (int i = 0; i < count; i++) { + if (i > 0) result->append(", "); + WriteToString(result, (const Ark_String*)&value->keys[i]); + result->append(": "); + WriteToString(result, value->values[i]); + } + result->append("}"); +} +template <> +inline void WriteToString(std::string* result, const Opt_Map_String_NativePointer* value) { + result->append("{.tag="); + result->append(tagNameExact((Ark_Tag)(value->tag))); + result->append(", .value="); + if (value->tag != INTEROP_TAG_UNDEFINED) { + WriteToString(result, &value->value); + } else { + Ark_Undefined undefined = { 0 }; + WriteToString(result, undefined); + } + result->append("}"); +} +template <> +inline Ark_RuntimeType runtimeType(const Opt_Map_String_NativePointer& value) +{ + return (value.tag != INTEROP_TAG_UNDEFINED) ? (INTEROP_RUNTIME_OBJECT) : (INTEROP_RUNTIME_UNDEFINED); +} +template <> inline Ark_RuntimeType runtimeType(const Map_String_Object& value) { return INTEROP_RUNTIME_OBJECT; diff --git a/arkoala-arkts/framework/native/src/generated/arkoala_api_generated.h b/arkoala-arkts/framework/native/src/generated/arkoala_api_generated.h index f6b6840aad64919f859171748aa44ec2762ce7cf..250941165a21ef991f8ebf83b9be779ef8cfeed0 100644 --- a/arkoala-arkts/framework/native/src/generated/arkoala_api_generated.h +++ b/arkoala-arkts/framework/native/src/generated/arkoala_api_generated.h @@ -1295,6 +1295,8 @@ typedef struct Map_String_ComponentContent Map_String_ComponentContent; typedef struct Opt_Map_String_ComponentContent Opt_Map_String_ComponentContent; typedef struct Map_String_Int64 Map_String_Int64; typedef struct Opt_Map_String_Int64 Opt_Map_String_Int64; +typedef struct Map_String_NativePointer Map_String_NativePointer; +typedef struct Opt_Map_String_NativePointer Opt_Map_String_NativePointer; typedef struct Map_String_Object Map_String_Object; typedef struct Opt_Map_String_Object Opt_Map_String_Object; typedef struct MenuCallback MenuCallback; @@ -9947,6 +9949,16 @@ typedef struct Opt_Map_String_Int64 { Ark_Tag tag; Map_String_Int64 value; } Opt_Map_String_Int64; +typedef struct Map_String_NativePointer { + /* kind: ContainerType */ + Ark_Int32 size; + Ark_String* keys; + Ark_NativePointer* values; +} Map_String_NativePointer; +typedef struct Opt_Map_String_NativePointer { + Ark_Tag tag; + Map_String_NativePointer value; +} Opt_Map_String_NativePointer; typedef struct Map_String_Object { /* kind: ContainerType */ Ark_Int32 size; @@ -24112,6 +24124,10 @@ typedef struct GENERATED_ArkUISubmitEventAccessor { const Ark_String* text); } GENERATED_ArkUISubmitEventAccessor; +typedef struct GENERATED_ArkUISubPeersProtoAccessor { + Map_String_NativePointer (*tabsSubPeers)(Ark_NativePointer node); +} GENERATED_ArkUISubPeersProtoAccessor; + typedef struct GENERATED_ArkUISwipeGestureAccessor { void (*destroyPeer)(Ark_SwipeGesture peer); Ark_SwipeGesture (*ctor)(); @@ -25169,6 +25185,7 @@ typedef struct GENERATED_ArkUIAccessors { const GENERATED_ArkUIStyledStringAccessor* (*getStyledStringAccessor)(); const GENERATED_ArkUIStyledStringControllerAccessor* (*getStyledStringControllerAccessor)(); const GENERATED_ArkUISubmitEventAccessor* (*getSubmitEventAccessor)(); + const GENERATED_ArkUISubPeersProtoAccessor* (*getSubPeersProtoAccessor)(); const GENERATED_ArkUISwipeGestureAccessor* (*getSwipeGestureAccessor)(); const GENERATED_ArkUISwipeGestureEventAccessor* (*getSwipeGestureEventAccessor)(); const GENERATED_ArkUISwiperContentTransitionProxyAccessor* (*getSwiperContentTransitionProxyAccessor)(); diff --git a/arkoala-arkts/framework/native/src/generated/bridge_generated.cc b/arkoala-arkts/framework/native/src/generated/bridge_generated.cc index 97b97d745356089a113bfd4628a121bf3456af68..678c6db2182fb749916084058500e6e3e78b3eb9 100644 --- a/arkoala-arkts/framework/native/src/generated/bridge_generated.cc +++ b/arkoala-arkts/framework/native/src/generated/bridge_generated.cc @@ -37470,6 +37470,19 @@ void impl_SubmitEvent_setText(Ark_NativePointer thisPtr, const KStringPtr& text) GetAccessors()->getSubmitEventAccessor()->setText(self, (const Ark_String*) (&text)); } KOALA_INTEROP_V2(SubmitEvent_setText, Ark_NativePointer, KStringPtr) +KInteropReturnBuffer impl_SubPeersProto_tabsSubPeers(Ark_NativePointer node) { + const auto &retValue = GetAccessors()->getSubPeersProtoAccessor()->tabsSubPeers(node); + Serializer _retSerializer {}; + _retSerializer.writeInt32(retValue.size); + for (int32_t i = 0; i < retValue.size; i++) { + auto retValue_key = retValue.keys[i]; + auto retValue_value = retValue.values[i]; + _retSerializer.writeString(retValue_key); + _retSerializer.writePointer(retValue_value); + } + return _retSerializer.toReturnBuffer(); +} +KOALA_INTEROP_1(SubPeersProto_tabsSubPeers, KInteropReturnBuffer, Ark_NativePointer) Ark_NativePointer impl_SwipeGesture_ctor() { return GetAccessors()->getSwipeGestureAccessor()->ctor(); } diff --git a/arkoala-arkts/framework/native/src/generated/dummy_impl.cc b/arkoala-arkts/framework/native/src/generated/dummy_impl.cc index f0f6bbce3c57c348d4538a88d17377adf5c59cb2..6426c3b4acefb56d7141ea2540a24c37c1fbf5de 100644 --- a/arkoala-arkts/framework/native/src/generated/dummy_impl.cc +++ b/arkoala-arkts/framework/native/src/generated/dummy_impl.cc @@ -36108,6 +36108,19 @@ namespace OHOS::Ace::NG::GeneratedModifier { appendGroupedLog(1, out); } } // SubmitEventAccessor + namespace SubPeersProtoAccessor { + Map_String_NativePointer TabsSubPeersImpl(Ark_NativePointer node) + { + if (!needGroupedLog(1)) + return {}; + string out("tabsSubPeers("); + WriteToString(&out, node); + out.append(") \n"); + out.append("[return {}] \n"); + appendGroupedLog(1, out); + return {}; + } + } // SubPeersProtoAccessor namespace SwipeGestureAccessor { void DestroyPeerImpl(Ark_SwipeGesture peer) { @@ -43743,6 +43756,14 @@ namespace OHOS::Ace::NG::GeneratedModifier { struct SubmitEventPeer { virtual ~SubmitEventPeer() = default; }; + const GENERATED_ArkUISubPeersProtoAccessor* GetSubPeersProtoAccessor() + { + static const GENERATED_ArkUISubPeersProtoAccessor SubPeersProtoAccessorImpl { + SubPeersProtoAccessor::TabsSubPeersImpl, + }; + return &SubPeersProtoAccessorImpl; + } + const GENERATED_ArkUISwipeGestureAccessor* GetSwipeGestureAccessor() { static const GENERATED_ArkUISwipeGestureAccessor SwipeGestureAccessorImpl { @@ -44807,6 +44828,7 @@ namespace OHOS::Ace::NG::GeneratedModifier { GetStyledStringAccessor, GetStyledStringControllerAccessor, GetSubmitEventAccessor, + GetSubPeersProtoAccessor, GetSwipeGestureAccessor, GetSwipeGestureEventAccessor, GetSwiperContentTransitionProxyAccessor, diff --git a/arkoala-arkts/framework/native/src/generated/real_impl.cc b/arkoala-arkts/framework/native/src/generated/real_impl.cc index 7992c34b376d5b952e1c6dbbb47c8bc8597dede6..f73907a05f105acc68601f191fb6d8545186d3a7 100644 --- a/arkoala-arkts/framework/native/src/generated/real_impl.cc +++ b/arkoala-arkts/framework/native/src/generated/real_impl.cc @@ -17287,6 +17287,17 @@ namespace OHOS::Ace::NG::GeneratedModifier { { } } // SubmitEventAccessor + namespace SubPeersProtoAccessor { + Map_String_NativePointer TabsSubPeersImpl(Ark_NativePointer node) + { + auto frameNode = reinterpret_cast(node); + CHECK_NULL_VOID(frameNode); + //auto convValue = Converter::Convert(node); + //auto convValue = Converter::OptConvert(node); // for enums + //undefinedModelNG::SetTabsSubPeers(frameNode, convValue); + return {}; + } + } // SubPeersProtoAccessor namespace SwipeGestureAccessor { void DestroyPeerImpl(Ark_SwipeGesture peer) { @@ -22386,6 +22397,14 @@ namespace OHOS::Ace::NG::GeneratedModifier { struct SubmitEventPeer { virtual ~SubmitEventPeer() = default; }; + const GENERATED_ArkUISubPeersProtoAccessor* GetSubPeersProtoAccessor() + { + static const GENERATED_ArkUISubPeersProtoAccessor SubPeersProtoAccessorImpl { + SubPeersProtoAccessor::TabsSubPeersImpl, + }; + return &SubPeersProtoAccessorImpl; + } + const GENERATED_ArkUISwipeGestureAccessor* GetSwipeGestureAccessor() { static const GENERATED_ArkUISwipeGestureAccessor SwipeGestureAccessorImpl { @@ -23450,6 +23469,7 @@ namespace OHOS::Ace::NG::GeneratedModifier { GetStyledStringAccessor, GetStyledStringControllerAccessor, GetSubmitEventAccessor, + GetSubPeersProtoAccessor, GetSwipeGestureAccessor, GetSwipeGestureEventAccessor, GetSwiperContentTransitionProxyAccessor, diff --git a/arkoala-arkts/trivial/user/src/ets/page1.ets b/arkoala-arkts/trivial/user/src/ets/page1.ets index a2ecd83413ea804a7fa774d9975b1aeee1e4106c..0a86aaede3d229911b8f7395a1f26dc84270bb67 100644 --- a/arkoala-arkts/trivial/user/src/ets/page1.ets +++ b/arkoala-arkts/trivial/user/src/ets/page1.ets @@ -13,201 +13,114 @@ * limitations under the License. */ -import { Button, Column, Color, ColumnOptions, ClickEvent, Image, ForEach, Text, FlexAlign, PageTransitionEnter, PageTransitionExit, PageTransitionOptions, NativeLog } from "@ohos.arkui" +import { Tabs, Column, ColumnOptions, BarPosition, BarMode, Image, Text, FlexAlign, + Position, TabContent, CustomBuilder, /*CommonModifier*/, TabsController, Button, + Margin, ClickEvent } from "@ohos.arkui" -//@Entry +@Entry @Component -struct TestConsume { - @State color: Color = Color.Blue - @State colorFlag: boolean = false - @Link linkState: string - @Consume('BigYearNumber') @Watch('changeBackgroundColor') state: number - @State @Watch('changeBackgroundColor') @Watch('inc') anotherState: number = 10000 - - build() { - Button(`Consume: ` + this.state) - .width(200).height(100) - .backgroundColor(this.color) - .onClick((e?: ClickEvent) => { this.inc() }) - } +struct Page1 { + @State selectedIndex: number = 2 + @State currentIndex: number = 2 + @State isClip: boolean = false + //@State tabBarModifier: CommonModifier = new CommonModifier() + private controller: TabsController = new TabsController() - inc(stateName?: string) { - this.state += 1 + aboutToAppear(): void { + //this.tabBarModifier.clip(this.isClip) } - changeBackgroundColor(stateName: string) { - if (this.colorFlag == false) { // enum comparation doesn't compile by es2panda now - this.colorFlag = true - this.color = Color.Green - } else { - this.colorFlag = false - this.color = Color.Blue - } - } -} - -@Component -struct TestProvide { - @Provide('BigYearNumber') state1: number = 2024 - @State aState: string = "10" - - build() { + @Builder + tabBuilderBase(title: string, targetIndex: number) { Column({} as ColumnOptions) { - Button('Provide: ' + this.state1) - .width(200).height(100) - .backgroundColor('#b420a0') - .onClick((e?: ClickEvent) => { this.inc() }) - TestConsume({ linkState: this.aState }) + Image($r("app.media.startIcon")).width(30).height(30) + Text(title).fontColor(this.selectedIndex === targetIndex ? '#1698CE' : '#6B6B6B') } + .width('100%') + .height(50) + .justifyContent(FlexAlign.Center) + .offset({ y: this.selectedIndex === targetIndex ? -15 : 0 } as Position) } - inc() { - this.state1 += 100 + @Builder + tabBuilder1() { + this.tabBuilderBase('Home', 0) } -} -@Component -struct TestStructBuilder { - build() { - Column({} as ColumnOptions) { - Button("struct builder test") - } - .backgroundColor(Color.Yellow) - .width('50%') + @Builder + tabBuilder2() { + this.tabBuilderBase('Discover', 1) } -} - -function makeArray(items: number): Array { - const result = new Array(items) - for (let i = 0; i < items; i++) result[i] = `elem${i}` - return result -} -@Component -struct TestBuilderParam { - @Builder builder() { - Button("TestBuilder") - } - @BuilderParam builderParam: () => void = this.builder - @BuilderParam anotherParam: () => void = this.builder - build() { - Column({} as ColumnOptions) { - this.builderParam() - this.anotherParam() - } + @Builder + tabBuilder3() { + this.tabBuilderBase('Recommended', 2) } -} -@Builder -function globalBuilder() { - Text("AnotherBuilder") -} - -@Entry -@Component -struct Page1 { - @State color1: string = '#ff0000' - @State color2: string = '#00ff00' - @State state: number = 1 - @State visible: boolean = false - - data: Array = makeArray(10) + @Builder + tabBuilder4() { + this.tabBuilderBase('Me',3) + } build() { - nLog("In Page1 build()") - Column({} as ColumnOptions) { - if (this.visible) { - nLog("With blinker") - Button("Blinker") - .width(200).height(100) - .backgroundColor('#ff0000') - Child1() - } - ForEach( - this.data, - (item: string) => { + Tabs({ + barPosition: BarPosition.End, + index: this.currentIndex, + controller: this.controller/*, + barModifier: this.tabBarModifier*/ + }) { + TabContent() { Column({} as ColumnOptions) { - Button("Hi") - .backgroundColor(this.color1) - .width(200).height(100) - .onClick((e?: ClickEvent) => { - nLog("Hi button") - this.swap() - }) - Button("Bye") - .backgroundColor(this.color2) - .width(200).height(100) - .onClick((e?: ClickEvent) => { - nLog("Bye button") - this.swap() - }) - Text($r('app.string.my_text')).height(50) - Button("Click! " + this.state) - .width(200).height(100) - .backgroundColor($r('app.color.my_color')) - .onClick((e?: ClickEvent) => { - this.state++ - nLog("Click button") - nLog("#### Set Button onClick! #" + this.state) - }) - Image($r('app.media.startIcon')).width(60).height(60) - Image($rawfile('koala.png')).width(400) - Text("Set Button onClick! #" + this.state) - .width(200).height(100) - TestProvide() - //TestStructBuilder().width('100%') - //TestBuilderParam({anotherParam: globalBuilder}) - } - .width('100%').height('100%') - .backgroundColor(Color.Gray) - .justifyContent(FlexAlign.Center) - }, - (item:string): string => item - ) - } - } - - @Builder - pageTransition() { - // TODO: now lambda type inference cannot handle literal wrapping. - PageTransitionEnter({ duration: 100 } as PageTransitionOptions) - PageTransitionExit({ duration: 100 } as PageTransitionOptions) - } + Text('Home tab content') + }.width('100%').height('100%').backgroundColor('#00CB87').justifyContent(FlexAlign.Center) + } + //.tabBar(this.tabBuilder1) - swap(): void { - nLog("#### Swap") - let tmp = this.color1 - this.color1 = this.color2 - this.color2 = tmp - this.visible = !this.visible - } -} - -function nLog(message: string) { - NativeLog.Default.directLog(message) -} -@Component -struct Child1 { - onPageShow() { - nLog("Child1 onPageShow()") - } - - onPageHide() { - nLog("Child1 onPageHide()") - } + TabContent() { + Column({} as ColumnOptions) { + Text('Discover tab content') + }.width('100%').height('100%').backgroundColor('#007DFF').justifyContent(FlexAlign.Center) + } + //.tabBar(this.tabBuilder2) - aboutToAppear() { - nLog("Child1 aboutToAppear()") - } - aboutToDisappear() { - nLog("Child1 aboutToDisappear()") - } + TabContent() { + Column({} as ColumnOptions) { + Text('Recommended tab content') + }.width('100%').height('100%').backgroundColor('#FFBF00').justifyContent(FlexAlign.Center) + } + //.tabBar(this.tabBuilder3) - build() { - nLog("Child1 build()") + TabContent() { + Column({} as ColumnOptions) { + Text('Me tab content') + }.width('100%').height('100%').backgroundColor('#E67C92').justifyContent(FlexAlign.Center) + } + //.tabBar(this.tabBuilder4) + } + .vertical(false) + .barMode(BarMode.Fixed) + .barWidth(340) + .barHeight(60) + .onChange((index: number) => { + this.currentIndex = index + this.selectedIndex = index + }) + .width(340) + .height(400) + .backgroundColor('#F1F3F5') + .scrollable(true) + + + Button("isClip: " + this.isClip) + .margin({ top: 30 } as Margin) + .onClick((event?: ClickEvent) => { + this.isClip = !this.isClip + //this.tabBarModifier.clip(this.isClip) + }) + }.width('100%') } }