From 70aa10d7ea911991bbcfcff43724c856baa62dff Mon Sep 17 00:00:00 2001 From: vakrilov Date: Tue, 31 Mar 2015 12:36:04 +0300 Subject: [PATCH 1/3] MenuItems should inherit binding context when defined form XML --- apps/tests/ui/page/page-tests-common.ts | 12 +++++++++++- ui/page/page-common.ts | 15 ++++++++++++++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/apps/tests/ui/page/page-tests-common.ts b/apps/tests/ui/page/page-tests-common.ts index 6daf6eac7..a9f2cb0d1 100644 --- a/apps/tests/ui/page/page-tests-common.ts +++ b/apps/tests/ui/page/page-tests-common.ts @@ -27,6 +27,7 @@ import LabelModule = require("ui/label"); import stackLayoutModule = require("ui/layouts/stack-layout"); import helper = require("../helper"); import view = require("ui/core/view"); +import builder = require("ui/builder"); export function addLabelToPage(page: PageModule.Page, text?: string) { var label = new LabelModule.Label(); @@ -68,6 +69,15 @@ export function test_menuItem_inherit_bindingContext() { } } +export function test_menuItem_inherit_bindingContext_inXML() { + var p = builder.parse(""); + p.bindingContext = { myProp: "success" }; + + var menuItem = p.optionsMenu.getItemAt(0); + + TKUnit.assertEqual(menuItem.text, "success", "menuItem.text"); +}; + export function test_Setting_OptionsMenu_doesnt_thrown() { var page: PageModule.Page; @@ -392,4 +402,4 @@ export var test_cssShouldBeAppliedAfterChangeToAllNestedElements = function () { finally { helper.goBack(); } -} +} \ No newline at end of file diff --git a/ui/page/page-common.ts b/ui/page/page-common.ts index e21aef45a..bacc95990 100644 --- a/ui/page/page-common.ts +++ b/ui/page/page-common.ts @@ -206,7 +206,20 @@ export class OptionsMenu implements dts.OptionsMenu { } public setItems(items: Array) { - this._items = items; + if (this._items === items) { + return; + } + + // Remove all existing items + while (this._items.length > 0) { + this.removeItem(this._items[this._items.length - 1]); + } + + // Add new items + for (var i = 0; i < items.length; i++) { + this.addItem(items[i]); + } + this.invalidate(); } From 7204fd9c89612761795d70141039e6bc70282b32 Mon Sep 17 00:00:00 2001 From: vakrilov Date: Tue, 31 Mar 2015 13:27:08 +0300 Subject: [PATCH 2/3] OptionsMenu image form resource id --- ui/frame/frame.android.ts | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/ui/frame/frame.android.ts b/ui/frame/frame.android.ts index 412a992c6..3643150d6 100644 --- a/ui/frame/frame.android.ts +++ b/ui/frame/frame.android.ts @@ -6,7 +6,6 @@ import observable = require("data/observable"); import utils = require("utils/utils"); import view = require("ui/core/view"); import application = require("application"); -import imageSource = require("image-source"); import enums = require("ui/enums"); declare var exports; @@ -146,9 +145,12 @@ class PageFragmentBody extends android.app.Fragment { var item = items[i]; var menuItem = menu.add(android.view.Menu.NONE, i, android.view.Menu.NONE, item.text); if (item.icon) { - var img = imageSource.fromResource(item.icon); - var drawable = new android.graphics.drawable.BitmapDrawable(img.android); - menuItem.setIcon(drawable); + var androidApp = application.android; + var res = androidApp.context.getResources(); + var id = res.getIdentifier(item.icon, 'drawable', androidApp.packageName); + if (id) { + menuItem.setIcon(id); + } } var showAsAction = PageFragmentBody.getShowAsAction(item); @@ -179,7 +181,7 @@ class PageFragmentBody extends android.app.Fragment { menuItem._raiseTap(); return true; } - + super.onOptionsItemSelected(item); } } From 35b429f90d777f28356ec18aada2b7d08cddfb51 Mon Sep 17 00:00:00 2001 From: vakrilov Date: Tue, 31 Mar 2015 13:43:53 +0300 Subject: [PATCH 3/3] Removed some code --- ui/page/page-common.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/ui/page/page-common.ts b/ui/page/page-common.ts index bacc95990..c690b9639 100644 --- a/ui/page/page-common.ts +++ b/ui/page/page-common.ts @@ -206,10 +206,6 @@ export class OptionsMenu implements dts.OptionsMenu { } public setItems(items: Array) { - if (this._items === items) { - return; - } - // Remove all existing items while (this._items.length > 0) { this.removeItem(this._items[this._items.length - 1]);