From 70756fb1156e31a8edf9c7f7bb00fa17b59baf4a Mon Sep 17 00:00:00 2001 From: Erjan Gavalji Date: Tue, 3 Mar 2015 10:34:44 +0200 Subject: [PATCH] OptionsMenu XML support --- CrossPlatformModules.csproj | 8 +++ apps/tests/pages/page16.ts | 55 ++++++++++++++++++++ apps/tests/pages/page17.ts | 20 ++++++++ apps/tests/pages/page17.xml | 9 ++++ apps/tests/test-icon.png | Bin 0 -> 4918 bytes ui/builder/component-builder.ts | 1 + ui/frame/frame-common.ts | 4 ++ ui/frame/frame.android.ts | 40 +++++++++++++++ ui/frame/frame.d.ts | 1 + ui/page/page-common.ts | 87 +++++++++++++++++++++++++++++++- ui/page/page.android.ts | 3 +- ui/page/page.d.ts | 37 ++++++++++++-- 12 files changed, 260 insertions(+), 5 deletions(-) create mode 100644 apps/tests/pages/page16.ts create mode 100644 apps/tests/pages/page17.ts create mode 100644 apps/tests/pages/page17.xml create mode 100644 apps/tests/test-icon.png diff --git a/CrossPlatformModules.csproj b/CrossPlatformModules.csproj index 98b8b41c8..eca1d024d 100644 --- a/CrossPlatformModules.csproj +++ b/CrossPlatformModules.csproj @@ -118,8 +118,12 @@ + + + page17.xml + @@ -578,6 +582,10 @@ + + Designer + + diff --git a/apps/tests/pages/page16.ts b/apps/tests/pages/page16.ts new file mode 100644 index 000000000..3d66f18b4 --- /dev/null +++ b/apps/tests/pages/page16.ts @@ -0,0 +1,55 @@ +import pageModule = require("ui/page"); +import buttonModule = require("ui/button"); +import stackModule = require("ui/layouts/stack-layout"); +import frame = require("ui/frame"); + +export function createPage() { + var page = new pageModule.Page(); + + var iconItem = new pageModule.MenuItem(); + iconItem.text = "TEST"; + + iconItem.icon = "~/app" + "/tests" + "/test-icon.png"; // use + to stop regex replace during build + iconItem.on("tap", () => { + console.log("Icon item tapped"); + }); + page.optionsMenu.addItem(iconItem); + + var textItem = new pageModule.MenuItem(); + textItem.text = "SAVE"; + textItem.on("tap", () => { + console.log("Save item tapped"); + }); + page.optionsMenu.addItem(textItem); + + var stackLayout = new stackModule.StackLayout(); + var count = 0; + var btn1 = new buttonModule.Button(); + btn1.text = "add item"; + btn1.on("tap", () => { + console.log("adding menu item"); + + var newItem = new pageModule.MenuItem(); + var text = "item " + count; + newItem.text = text + newItem.on("tap", () => { + console.log("ITEM [" + text + "] tapped"); + }); + page.optionsMenu.addItem(newItem); + count++; + }); + + stackLayout.addChild(btn1); + + var btn2 = new buttonModule.Button(); + btn2.text = "navigate"; + btn2.on("tap", () => { + var nextPage = "app/tests/pages/page16"; + frame.topmost().navigate(nextPage); + }); + + stackLayout.addChild(btn2); + + page.content = stackLayout; + return page; +} \ No newline at end of file diff --git a/apps/tests/pages/page17.ts b/apps/tests/pages/page17.ts new file mode 100644 index 000000000..6390bf553 --- /dev/null +++ b/apps/tests/pages/page17.ts @@ -0,0 +1,20 @@ +import observable = require("data/observable"); +import pages = require("ui/page"); + +// Event handler for Page "loaded" event attached in main-page.xml +export function pageLoaded(args: observable.EventData) { + // Get the event sender + var page = args.object; + + var textItem = new pages.MenuItem(); + textItem.text = "from loaded"; + textItem.on("tap", () => { + console.log("item added in page.loaded tapped!!!"); + }); + page.optionsMenu.addItem(textItem); +} + +export function optionTap(args) { + console.log("item added form XML tapped!!!"); +} + diff --git a/apps/tests/pages/page17.xml b/apps/tests/pages/page17.xml new file mode 100644 index 000000000..fe7e9d1f2 --- /dev/null +++ b/apps/tests/pages/page17.xml @@ -0,0 +1,9 @@ + + + + + + +