mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-17 04:41:36 +08:00
Application orientation changed event
This commit is contained in:
@ -79,6 +79,7 @@
|
|||||||
<TypeScriptCompile Include="apps\action-bar-demo\pages\data-binding.ts">
|
<TypeScriptCompile Include="apps\action-bar-demo\pages\data-binding.ts">
|
||||||
<DependentUpon>data-binding.xml</DependentUpon>
|
<DependentUpon>data-binding.xml</DependentUpon>
|
||||||
</TypeScriptCompile>
|
</TypeScriptCompile>
|
||||||
|
<TypeScriptCompile Include="apps\orientation-demo\app.ts" />
|
||||||
<TypeScriptCompile Include="apps\notifications-demo\app.ts" />
|
<TypeScriptCompile Include="apps\notifications-demo\app.ts" />
|
||||||
<TypeScriptCompile Include="apps\notifications-demo\main-page.ts">
|
<TypeScriptCompile Include="apps\notifications-demo\main-page.ts">
|
||||||
<DependentUpon>main-page.xml</DependentUpon>
|
<DependentUpon>main-page.xml</DependentUpon>
|
||||||
@ -107,6 +108,9 @@
|
|||||||
<Content Include="apps\action-bar-demo\pages\center-view.xml" />
|
<Content Include="apps\action-bar-demo\pages\center-view.xml" />
|
||||||
<Content Include="apps\action-bar-demo\pages\data-binding.xml" />
|
<Content Include="apps\action-bar-demo\pages\data-binding.xml" />
|
||||||
<Content Include="apps\gallery-app\content\html-view.xml" />
|
<Content Include="apps\gallery-app\content\html-view.xml" />
|
||||||
|
<Content Include="apps\orientation-demo\main-page.port.xml">
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</Content>
|
||||||
<Content Include="apps\notifications-demo\main-page.xml">
|
<Content Include="apps\notifications-demo\main-page.xml">
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
</Content>
|
</Content>
|
||||||
@ -135,6 +139,7 @@
|
|||||||
<DependentUpon>page-title-icon.xml</DependentUpon>
|
<DependentUpon>page-title-icon.xml</DependentUpon>
|
||||||
</TypeScriptCompile>
|
</TypeScriptCompile>
|
||||||
<TypeScriptCompile Include="apps\animations\model.ts" />
|
<TypeScriptCompile Include="apps\animations\model.ts" />
|
||||||
|
<TypeScriptCompile Include="apps\orientation-demo\main-page.ts" />
|
||||||
<TypeScriptCompile Include="apps\tests\ui\animation\animation-tests.ts" />
|
<TypeScriptCompile Include="apps\tests\ui\animation\animation-tests.ts" />
|
||||||
<TypeScriptCompile Include="ui\animation\animation.d.ts" />
|
<TypeScriptCompile Include="ui\animation\animation.d.ts" />
|
||||||
<TypeScriptCompile Include="ui\animation\animation-common.ts">
|
<TypeScriptCompile Include="ui\animation\animation-common.ts">
|
||||||
@ -1777,6 +1782,9 @@
|
|||||||
<Content Include="apps\notifications-demo\package.json">
|
<Content Include="apps\notifications-demo\package.json">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
|
<Content Include="apps\orientation-demo\package.json">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</Content>
|
||||||
<None Include="js-libs\esprima\LICENSE.BSD" />
|
<None Include="js-libs\esprima\LICENSE.BSD" />
|
||||||
<Content Include="source-control.md" />
|
<Content Include="source-control.md" />
|
||||||
<Content Include="ui\segmented-bar\package.json">
|
<Content Include="ui\segmented-bar\package.json">
|
||||||
|
@ -14,6 +14,7 @@ export var resumeEvent = "resume";
|
|||||||
export var exitEvent = "exit";
|
export var exitEvent = "exit";
|
||||||
export var lowMemoryEvent = "lowMemory";
|
export var lowMemoryEvent = "lowMemory";
|
||||||
export var uncaughtErrorEvent = "uncaughtError";
|
export var uncaughtErrorEvent = "uncaughtError";
|
||||||
|
export var orientationChangedEvent = "orientationChanged";
|
||||||
|
|
||||||
export var cssFile: string = "app.css"
|
export var cssFile: string = "app.css"
|
||||||
|
|
||||||
|
@ -3,6 +3,7 @@ import dts = require("application");
|
|||||||
import frame = require("ui/frame");
|
import frame = require("ui/frame");
|
||||||
import types = require("utils/types");
|
import types = require("utils/types");
|
||||||
import observable = require("data/observable");
|
import observable = require("data/observable");
|
||||||
|
import enums = require("ui/enums");
|
||||||
|
|
||||||
global.moduleMerge(appModule, exports);
|
global.moduleMerge(appModule, exports);
|
||||||
|
|
||||||
@ -206,6 +207,8 @@ export class AndroidApplication extends observable.Observable implements dts.And
|
|||||||
|
|
||||||
exports.notify({ eventName: dts.launchEvent, object: this, android: intent });
|
exports.notify({ eventName: dts.launchEvent, object: this, android: intent });
|
||||||
|
|
||||||
|
setupOrientationListener(this);
|
||||||
|
|
||||||
/* In the onLaunch event we expect the following setup, which ensures a root frame:
|
/* In the onLaunch event we expect the following setup, which ensures a root frame:
|
||||||
* var frame = require("ui/frame");
|
* var frame = require("ui/frame");
|
||||||
* var rootFrame = new frame.Frame();
|
* var rootFrame = new frame.Frame();
|
||||||
@ -315,3 +318,36 @@ exports.start = function () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
exports.android = new AndroidApplication();
|
exports.android = new AndroidApplication();
|
||||||
|
|
||||||
|
var currentOrientation: number;
|
||||||
|
function setupOrientationListener(androidApp: AndroidApplication) {
|
||||||
|
androidApp.registerBroadcastReceiver(android.content.Intent.ACTION_CONFIGURATION_CHANGED, onConfigurationChanged);
|
||||||
|
currentOrientation = androidApp.context.getResources().getConfiguration().orientation
|
||||||
|
}
|
||||||
|
function onConfigurationChanged(context: android.content.Context, intent: android.content.Intent) {
|
||||||
|
var orientation = context.getResources().getConfiguration().orientation;
|
||||||
|
|
||||||
|
if (currentOrientation !== orientation) {
|
||||||
|
currentOrientation = orientation;
|
||||||
|
|
||||||
|
var newValue;
|
||||||
|
switch (orientation) {
|
||||||
|
case android.content.res.Configuration.ORIENTATION_LANDSCAPE:
|
||||||
|
newValue = enums.DeviceOrientation.landscape;
|
||||||
|
break;
|
||||||
|
case android.content.res.Configuration.ORIENTATION_PORTRAIT:
|
||||||
|
newValue = enums.DeviceOrientation.portrait;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
newValue = enums.DeviceOrientation.unknown;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.notify(<dts.OrientationChangedEventData> {
|
||||||
|
eventName: dts.orientationChangedEvent,
|
||||||
|
android: context,
|
||||||
|
newValue: newValue,
|
||||||
|
object: exports.android,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
28
application/application.d.ts
vendored
28
application/application.d.ts
vendored
@ -45,6 +45,11 @@ declare module "application" {
|
|||||||
*/
|
*/
|
||||||
export var lowMemoryEvent: string;
|
export var lowMemoryEvent: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* String value used when hooking to orientationChanged event.
|
||||||
|
*/
|
||||||
|
export var orientationChangedEvent: string;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Event data containing information for the application events.
|
* Event data containing information for the application events.
|
||||||
*/
|
*/
|
||||||
@ -70,6 +75,16 @@ declare module "application" {
|
|||||||
object: any;
|
object: any;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Event data containing information for orientation changed event.
|
||||||
|
*/
|
||||||
|
export interface OrientationChangedEventData extends ApplicationEventData {
|
||||||
|
/**
|
||||||
|
* New orientation value.
|
||||||
|
*/
|
||||||
|
newValue: string;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The main page path (without the file extension) for the application starting from the application root.
|
* The main page path (without the file extension) for the application starting from the application root.
|
||||||
* For example if you have page called "main.js" in a folder called "subFolder" and your root folder is "app" you can specify mainModule like this:
|
* For example if you have page called "main.js" in a folder called "subFolder" and your root folder is "app" you can specify mainModule like this:
|
||||||
@ -146,6 +161,14 @@ declare module "application" {
|
|||||||
*/
|
*/
|
||||||
export function on(eventNames: string, callback: (data: any) => void, thisArg?: any);
|
export function on(eventNames: string, callback: (data: any) => void, thisArg?: any);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shortcut alias to the removeEventListener method.
|
||||||
|
* @param eventNames - String corresponding to events (e.g. "onLaunch").
|
||||||
|
* @param callback - Callback function which will be removed.
|
||||||
|
* @param thisArg - An optional parameter which will be used as `this` context for callback execution.
|
||||||
|
*/
|
||||||
|
export function off(eventNames: string, callback ?: any, thisArg ?: any);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Notifies all the registered listeners for the event provided in the data.eventName.
|
* Notifies all the registered listeners for the event provided in the data.eventName.
|
||||||
* @param data The data associated with the event.
|
* @param data The data associated with the event.
|
||||||
@ -188,6 +211,11 @@ declare module "application" {
|
|||||||
*/
|
*/
|
||||||
export function on(event: "uncaughtError", callback: (args: ApplicationEventData) => void, thisArg?: any);
|
export function on(event: "uncaughtError", callback: (args: ApplicationEventData) => void, thisArg?: any);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This event is raised the orientation of the current device has changed.
|
||||||
|
*/
|
||||||
|
export function on(event: "orientationChanged", callback: (args: OrientationChangedEventData) => void, thisArg?: any);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is the Android-specific application object instance.
|
* This is the Android-specific application object instance.
|
||||||
* Encapsulates methods and properties specific to the Android platform.
|
* Encapsulates methods and properties specific to the Android platform.
|
||||||
|
@ -4,7 +4,7 @@ import utils = require("utils/utils");
|
|||||||
import types = require("utils/types");
|
import types = require("utils/types");
|
||||||
import view = require("ui/core/view");
|
import view = require("ui/core/view");
|
||||||
import definition = require("application");
|
import definition = require("application");
|
||||||
|
import enums = require("ui/enums");
|
||||||
global.moduleMerge(appModule, exports);
|
global.moduleMerge(appModule, exports);
|
||||||
|
|
||||||
export var mainModule: string;
|
export var mainModule: string;
|
||||||
@ -61,10 +61,11 @@ class TNSAppDelegate extends UIResponder implements UIApplicationDelegate {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
var app: IOSApplication = exports.ios;
|
||||||
|
setupOrientationListener(app);
|
||||||
|
|
||||||
this.window.content = topFrame;
|
this.window.content = topFrame;
|
||||||
this.window.rootViewController = topFrame.ios.controller;
|
this.window.rootViewController = topFrame.ios.controller;
|
||||||
var app: IOSApplication = exports.ios;
|
|
||||||
app.rootController = this.window.rootViewController;
|
app.rootController = this.window.rootViewController;
|
||||||
this.window.makeKeyAndVisible();
|
this.window.makeKeyAndVisible();
|
||||||
return true;
|
return true;
|
||||||
@ -194,3 +195,39 @@ exports.start = function () {
|
|||||||
definition.notify({ eventName: definition.uncaughtErrorEvent, object: <any>definition.ios, ios: error });
|
definition.notify({ eventName: definition.uncaughtErrorEvent, object: <any>definition.ios, ios: error });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var currentOrientation: number;
|
||||||
|
function setupOrientationListener(iosApp: IOSApplication) {
|
||||||
|
iosApp.addNotificationObserver(UIDeviceOrientationDidChangeNotification, onOreintationDidChange)
|
||||||
|
currentOrientation = UIDevice.currentDevice().orientation;
|
||||||
|
}
|
||||||
|
|
||||||
|
function onOreintationDidChange(notification: NSNotification) {
|
||||||
|
var orientation = UIDevice.currentDevice().orientation;
|
||||||
|
|
||||||
|
if (currentOrientation !== orientation) {
|
||||||
|
currentOrientation = orientation;
|
||||||
|
|
||||||
|
var newValue;
|
||||||
|
switch (orientation) {
|
||||||
|
case UIDeviceOrientation.UIDeviceOrientationLandscapeRight:
|
||||||
|
case UIDeviceOrientation.UIDeviceOrientationLandscapeLeft:
|
||||||
|
newValue = enums.DeviceOrientation.landscape;
|
||||||
|
break;
|
||||||
|
case UIDeviceOrientation.UIDeviceOrientationPortrait:
|
||||||
|
case UIDeviceOrientation.UIDeviceOrientationPortraitUpsideDown:
|
||||||
|
newValue = enums.DeviceOrientation.portrait;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
newValue = enums.DeviceOrientation.unknown;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.notify(<definition.OrientationChangedEventData>{
|
||||||
|
eventName: definition.orientationChangedEvent,
|
||||||
|
ios: exports.ios,
|
||||||
|
newValue: newValue,
|
||||||
|
object: exports.ios,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -5,6 +5,7 @@ import labelModule = require("ui/label");
|
|||||||
|
|
||||||
var batteryLabel: labelModule.Label;
|
var batteryLabel: labelModule.Label;
|
||||||
var registered = false;
|
var registered = false;
|
||||||
|
|
||||||
export function onPageLoaded(args: observable.EventData) {
|
export function onPageLoaded(args: observable.EventData) {
|
||||||
var page = <pages.Page>args.object;
|
var page = <pages.Page>args.object;
|
||||||
batteryLabel = page.getViewById<labelModule.Label>("batteryLabel");
|
batteryLabel = page.getViewById<labelModule.Label>("batteryLabel");
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<Page xmlns="http://www.nativescript.org/tns.xsd" loaded="onPageLoaded">
|
<Page xmlns="http://www.nativescript.org/tns.xsd" loaded="onPageLoaded" unloaded="onPageUnloaded">
|
||||||
<StackLayout>
|
<StackLayout>
|
||||||
<Label id="batteryLabel" text="Battery" style.fontSize="30" horizontalAlignment="stretch" textAlignment="center"/>
|
<Label id="batteryLabel" text="Battery" style.fontSize="30" horizontalAlignment="stretch" textAlignment="center"/>
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
|
14
apps/orientation-demo/app.ts
Normal file
14
apps/orientation-demo/app.ts
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
import application = require("application");
|
||||||
|
|
||||||
|
application.mainModule = "main-page";
|
||||||
|
|
||||||
|
application.on(application.exitEvent, () => {
|
||||||
|
if (application.android) {
|
||||||
|
application.android.unregisterBroadcastReceiver(android.content.Intent.ACTION_BATTERY_CHANGED);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
application.ios.removeNotificationObserver(UIDeviceBatteryLevelDidChangeNotification);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
application.start();
|
5
apps/orientation-demo/main-page.port.xml
Normal file
5
apps/orientation-demo/main-page.port.xml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
<Page xmlns="http://www.nativescript.org/tns.xsd" loaded="onPageLoaded" unloaded="onPageUnloaded" navigatedTo="pageNavigatedTo">
|
||||||
|
<GridLayout>
|
||||||
|
<TextView text="{{ oreintation }}" />
|
||||||
|
</GridLayout>
|
||||||
|
</Page>
|
21
apps/orientation-demo/main-page.ts
Normal file
21
apps/orientation-demo/main-page.ts
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
import application = require("application");
|
||||||
|
import observable = require("data/observable");
|
||||||
|
import pageModule = require("ui/page");
|
||||||
|
|
||||||
|
var vm = new observable.Observable();
|
||||||
|
function orientationChanged(data) {
|
||||||
|
console.log("Orientation changed: " + data.newValue);
|
||||||
|
vm.set("oreintation", data.newValue);
|
||||||
|
}
|
||||||
|
export function onPageLoaded(args: observable.EventData) {
|
||||||
|
var page = <pageModule.Page>args.object;
|
||||||
|
application.on(application.orientationChangedEvent, orientationChanged, page);
|
||||||
|
|
||||||
|
page.bindingContext = vm;
|
||||||
|
vm.set("oreintation", "not changed");
|
||||||
|
}
|
||||||
|
|
||||||
|
export function onPageUnloaded(args: observable.EventData) {
|
||||||
|
var page = <pageModule.Page>args.object;
|
||||||
|
<any>application.off(application.orientationChangedEvent, orientationChanged, page);
|
||||||
|
}
|
2
apps/orientation-demo/package.json
Normal file
2
apps/orientation-demo/package.json
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
{ "name" : "page-reload-demo",
|
||||||
|
"main" : "app.js" }
|
3
file-system/file-name-resolver.d.ts
vendored
3
file-system/file-name-resolver.d.ts
vendored
@ -14,7 +14,10 @@ declare module "file-system/file-name-resolver" {
|
|||||||
resolveFileName(path: string, ext: string): string;
|
resolveFileName(path: string, ext: string): string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function resolveFileName(path: string, ext: string): string;
|
||||||
|
|
||||||
//@private
|
//@private
|
||||||
export function findFileMatch(path: string, ext: string, candidates: Array<string>, context: PlatformContext): string
|
export function findFileMatch(path: string, ext: string, candidates: Array<string>, context: PlatformContext): string
|
||||||
//@endprivate
|
//@endprivate
|
||||||
|
|
||||||
}
|
}
|
@ -2,6 +2,8 @@
|
|||||||
import fs = require("file-system");
|
import fs = require("file-system");
|
||||||
import types = require("utils/types");
|
import types = require("utils/types");
|
||||||
import trace = require("trace");
|
import trace = require("trace");
|
||||||
|
import platform = require("platform");
|
||||||
|
import application = require("application");
|
||||||
|
|
||||||
var MIN_WH: string = "minWH";
|
var MIN_WH: string = "minWH";
|
||||||
var MIN_W: string = "minW";
|
var MIN_W: string = "minW";
|
||||||
@ -79,7 +81,7 @@ var paltformQualifier: QualifierSpec = {
|
|||||||
value === "ios";
|
value === "ios";
|
||||||
|
|
||||||
},
|
},
|
||||||
getMatchValue(value: string, context: definition.PlatformContext): number{
|
getMatchValue(value: string, context: definition.PlatformContext): number {
|
||||||
return value === context.os.toLowerCase() ? 1 : -1;
|
return value === context.os.toLowerCase() ? 1 : -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -90,7 +92,7 @@ var orientationQualifier: QualifierSpec = {
|
|||||||
value === "port";
|
value === "port";
|
||||||
|
|
||||||
},
|
},
|
||||||
getMatchValue(value: string, context: definition.PlatformContext): number{
|
getMatchValue(value: string, context: definition.PlatformContext): number {
|
||||||
var isLandscape: number = (context.width > context.height) ? 1 : -1;
|
var isLandscape: number = (context.width > context.height) ? 1 : -1;
|
||||||
return (value === "land") ? isLandscape : -isLandscape;
|
return (value === "land") ? isLandscape : -isLandscape;
|
||||||
}
|
}
|
||||||
@ -213,3 +215,27 @@ function checkQualifier(value: string, context: definition.PlatformContext) {
|
|||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var appEventAttached: boolean = false;
|
||||||
|
var resolverInstance: FileNameResolver;
|
||||||
|
|
||||||
|
export function resolveFileName(path: string, ext: string): string {
|
||||||
|
if (!appEventAttached) {
|
||||||
|
application.on(application.orientationChangedEvent, (data) => {
|
||||||
|
resolverInstance = undefined;
|
||||||
|
});
|
||||||
|
appEventAttached = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!resolverInstance) {
|
||||||
|
resolverInstance = new FileNameResolver({
|
||||||
|
width: platform.screen.mainScreen.widthDIPs,
|
||||||
|
height: platform.screen.mainScreen.heightDIPs,
|
||||||
|
os: platform.device.os,
|
||||||
|
deviceType: platform.device.deviceType
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return resolverInstance.resolveFileName(path, ext);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -92,22 +92,39 @@ export class device implements definition.device {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var mainScreenInfo: definition.ScreenMetrics;
|
var mainScreen: MainScreen;
|
||||||
|
|
||||||
// This is a "static" class and it is used like a name-space.
|
// This is a "static" class and it is used like a namespace.
|
||||||
// It is not meant to be initialized - thus it is not capitalized
|
// It is not meant to be initialized - thus it is not capitalized
|
||||||
export class screen implements definition.screen {
|
export class screen implements definition.screen {
|
||||||
static get mainScreen(): definition.ScreenMetrics {
|
static get mainScreen(): definition.ScreenMetrics {
|
||||||
if (!mainScreenInfo) {
|
if (!mainScreen) {
|
||||||
var metrics = utils.ad.getApplicationContext().getResources().getDisplayMetrics();
|
var metrics = utils.ad.getApplicationContext().getResources().getDisplayMetrics();
|
||||||
mainScreenInfo = {
|
mainScreen = new MainScreen(metrics);
|
||||||
widthPixels: metrics.widthPixels,
|
|
||||||
heightPixels: metrics.heightPixels,
|
|
||||||
scale: metrics.density,
|
|
||||||
widthDIPs: metrics.widthPixels / metrics.density,
|
|
||||||
heightDIPs: metrics.heightPixels / metrics.density
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return mainScreenInfo;
|
return mainScreen;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class MainScreen implements definition.ScreenMetrics {
|
||||||
|
private _metrics: android.util.DisplayMetrics;
|
||||||
|
constructor(metrics: android.util.DisplayMetrics) {
|
||||||
|
this._metrics = metrics;
|
||||||
|
}
|
||||||
|
|
||||||
|
get widthPixels(): number {
|
||||||
|
return this._metrics.widthPixels;
|
||||||
|
}
|
||||||
|
get heightPixels(): number {
|
||||||
|
return this._metrics.heightPixels;
|
||||||
|
}
|
||||||
|
get scale(): number {
|
||||||
|
return this._metrics.density;
|
||||||
|
}
|
||||||
|
get widthDIPs(): number {
|
||||||
|
return this._metrics.widthPixels / this._metrics.density;
|
||||||
|
}
|
||||||
|
get heightDIPs(): number {
|
||||||
|
return this._metrics.heightPixels / this._metrics.density;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -86,26 +86,38 @@ export class device implements definition.device {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var mainScreenInfo: definition.ScreenMetrics = null;
|
var mainScreen: MainScreen;
|
||||||
|
|
||||||
// This is a "static" class and it is used like a name-space.
|
// This is a "static" class and it is used like a name-space.
|
||||||
// It is not meant to be initialized - thus it is not capitalized
|
// It is not meant to be initialized - thus it is not capitalized
|
||||||
export class screen implements definition.screen {
|
export class screen implements definition.screen {
|
||||||
static get mainScreen(): definition.ScreenMetrics {
|
static get mainScreen(): definition.ScreenMetrics {
|
||||||
if (!mainScreenInfo) {
|
if (!mainScreen) {
|
||||||
var mainScreen = UIScreen.mainScreen();
|
mainScreen = new MainScreen(UIScreen.mainScreen());
|
||||||
if (mainScreen) {
|
|
||||||
var size = mainScreen.bounds.size;
|
|
||||||
var scale = mainScreen.scale;
|
|
||||||
mainScreenInfo = {
|
|
||||||
widthPixels: size.width * scale,
|
|
||||||
heightPixels: size.height * scale,
|
|
||||||
scale: scale,
|
|
||||||
widthDIPs: size.width,
|
|
||||||
heightDIPs: size.height
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return mainScreenInfo;
|
return mainScreen;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class MainScreen implements definition.ScreenMetrics {
|
||||||
|
private _screen: UIScreen;
|
||||||
|
constructor(metrics: UIScreen) {
|
||||||
|
this._screen = metrics;
|
||||||
|
}
|
||||||
|
|
||||||
|
get widthPixels(): number {
|
||||||
|
return this.widthDIPs * this.scale;
|
||||||
|
}
|
||||||
|
get heightPixels(): number {
|
||||||
|
return this.heightDIPs * this.scale;
|
||||||
|
}
|
||||||
|
get scale(): number {
|
||||||
|
return this._screen.scale;
|
||||||
|
}
|
||||||
|
get widthDIPs(): number {
|
||||||
|
return this._screen.bounds.size.width;
|
||||||
|
}
|
||||||
|
get heightDIPs(): number {
|
||||||
|
return this._screen.bounds.size.height;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -193,11 +193,11 @@ function loadCustomComponent(componentPath: string, componentName?: string, attr
|
|||||||
fullComponentPathFilePathWithoutExt = fs.path.join(fs.knownFolders.currentApp().path, componentPath, componentName);
|
fullComponentPathFilePathWithoutExt = fs.path.join(fs.knownFolders.currentApp().path, componentPath, componentName);
|
||||||
}
|
}
|
||||||
|
|
||||||
var xmlFilePath = resolveFilePath(fullComponentPathFilePathWithoutExt, "xml");
|
var xmlFilePath = fileResolverModule.resolveFileName(fullComponentPathFilePathWithoutExt, "xml");
|
||||||
|
|
||||||
if (xmlFilePath) {
|
if (xmlFilePath) {
|
||||||
// Custom components with XML
|
// Custom components with XML
|
||||||
var jsFilePath = resolveFilePath(fullComponentPathFilePathWithoutExt, "js");
|
var jsFilePath = fileResolverModule.resolveFileName(fullComponentPathFilePathWithoutExt, "js");
|
||||||
|
|
||||||
var subExports;
|
var subExports;
|
||||||
if (jsFilePath) {
|
if (jsFilePath) {
|
||||||
@ -220,7 +220,7 @@ function loadCustomComponent(componentPath: string, componentName?: string, attr
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Add component CSS file if exists.
|
// Add component CSS file if exists.
|
||||||
var cssFilePath = resolveFilePath(fullComponentPathFilePathWithoutExt, "css");
|
var cssFilePath = fileResolverModule.resolveFileName(fullComponentPathFilePathWithoutExt, "css");
|
||||||
if (cssFilePath) {
|
if (cssFilePath) {
|
||||||
if (parentPage) {
|
if (parentPage) {
|
||||||
parentPage.addCssFile(cssFilePath);
|
parentPage.addCssFile(cssFilePath);
|
||||||
@ -232,19 +232,6 @@ function loadCustomComponent(componentPath: string, componentName?: string, attr
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
var fileNameResolver: fileResolverModule.FileNameResolver;
|
|
||||||
function resolveFilePath(path, ext): string {
|
|
||||||
if (!fileNameResolver) {
|
|
||||||
fileNameResolver = new fileResolverModule.FileNameResolver({
|
|
||||||
width: platform.screen.mainScreen.widthDIPs,
|
|
||||||
height: platform.screen.mainScreen.heightDIPs,
|
|
||||||
os: platform.device.os,
|
|
||||||
deviceType: platform.device.deviceType
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return fileNameResolver.resolveFileName(path, ext);
|
|
||||||
}
|
|
||||||
|
|
||||||
export function load(pathOrOptions: string | definition.LoadOptions, context?: any): view.View {
|
export function load(pathOrOptions: string | definition.LoadOptions, context?: any): view.View {
|
||||||
var viewToReturn: view.View;
|
var viewToReturn: view.View;
|
||||||
var componentModule: componentBuilder.ComponentModule;
|
var componentModule: componentBuilder.ComponentModule;
|
||||||
|
18
ui/enums/enums.d.ts
vendored
18
ui/enums/enums.d.ts
vendored
@ -104,6 +104,24 @@
|
|||||||
export var vertical: string;
|
export var vertical: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Orientation of a device.
|
||||||
|
*/
|
||||||
|
module DeviceOrientation {
|
||||||
|
/**
|
||||||
|
* Portrait orientation.
|
||||||
|
*/
|
||||||
|
export var portrait: string;
|
||||||
|
/**
|
||||||
|
* Landscape orientation.
|
||||||
|
*/
|
||||||
|
export var landscape: string;
|
||||||
|
/**
|
||||||
|
* Orientation cannot be determined.
|
||||||
|
*/
|
||||||
|
export var unknown: string;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* HorizontalAlignment indicates where an element should be displayed on the horizontal axis relative to the allocated layout slot of the parent element.
|
* HorizontalAlignment indicates where an element should be displayed on the horizontal axis relative to the allocated layout slot of the parent element.
|
||||||
*/
|
*/
|
||||||
|
@ -25,6 +25,12 @@ export module Orientation {
|
|||||||
export var vertical = "vertical";
|
export var vertical = "vertical";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export module DeviceOrientation {
|
||||||
|
export var portrait = "portrait";
|
||||||
|
export var landscape = "landscape";
|
||||||
|
export var unknown = "unknown";
|
||||||
|
}
|
||||||
|
|
||||||
export module HorizontalAlignment {
|
export module HorizontalAlignment {
|
||||||
export var left = "left";
|
export var left = "left";
|
||||||
export var center = "center";
|
export var center = "center";
|
||||||
|
@ -6,7 +6,6 @@ import trace = require("trace");
|
|||||||
import builder = require("ui/builder");
|
import builder = require("ui/builder");
|
||||||
import fs = require("file-system");
|
import fs = require("file-system");
|
||||||
import utils = require("utils/utils");
|
import utils = require("utils/utils");
|
||||||
import platform = require("platform");
|
|
||||||
import fileResolverModule = require("file-system/file-name-resolver");
|
import fileResolverModule = require("file-system/file-name-resolver");
|
||||||
|
|
||||||
var frameStack: Array<Frame> = [];
|
var frameStack: Array<Frame> = [];
|
||||||
@ -47,7 +46,7 @@ export function resolvePageFromEntry(entry: definition.NavigationEntry): pages.P
|
|||||||
var moduleNamePath = fs.path.join(currentAppPath, entry.moduleName);
|
var moduleNamePath = fs.path.join(currentAppPath, entry.moduleName);
|
||||||
|
|
||||||
var moduleExports;
|
var moduleExports;
|
||||||
var moduleExportsResolvedPath = resolveFilePath(moduleNamePath, "js");
|
var moduleExportsResolvedPath = fileResolverModule.resolveFileName(moduleNamePath, "js");
|
||||||
if (moduleExportsResolvedPath) {
|
if (moduleExportsResolvedPath) {
|
||||||
trace.write("Loading JS file: " + moduleExportsResolvedPath, trace.categories.Navigation);
|
trace.write("Loading JS file: " + moduleExportsResolvedPath, trace.categories.Navigation);
|
||||||
|
|
||||||
@ -72,25 +71,12 @@ export function resolvePageFromEntry(entry: definition.NavigationEntry): pages.P
|
|||||||
return page;
|
return page;
|
||||||
}
|
}
|
||||||
|
|
||||||
var fileNameResolver: fileResolverModule.FileNameResolver;
|
|
||||||
function resolveFilePath(path, ext) : string {
|
|
||||||
if (!fileNameResolver) {
|
|
||||||
fileNameResolver = new fileResolverModule.FileNameResolver({
|
|
||||||
width: platform.screen.mainScreen.widthDIPs,
|
|
||||||
height: platform.screen.mainScreen.heightDIPs,
|
|
||||||
os: platform.device.os,
|
|
||||||
deviceType: platform.device.deviceType
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return fileNameResolver.resolveFileName(path, ext);
|
|
||||||
}
|
|
||||||
|
|
||||||
function pageFromBuilder(moduleNamePath: string, moduleExports: any): pages.Page {
|
function pageFromBuilder(moduleNamePath: string, moduleExports: any): pages.Page {
|
||||||
var page: pages.Page;
|
var page: pages.Page;
|
||||||
var element: view.View;
|
var element: view.View;
|
||||||
|
|
||||||
// Possible XML file path.
|
// Possible XML file path.
|
||||||
var fileName = resolveFilePath(moduleNamePath, "xml");
|
var fileName = fileResolverModule.resolveFileName(moduleNamePath, "xml");
|
||||||
if (fileName) {
|
if (fileName) {
|
||||||
trace.write("Loading XML file: " + fileName, trace.categories.Navigation);
|
trace.write("Loading XML file: " + fileName, trace.categories.Navigation);
|
||||||
|
|
||||||
@ -100,7 +86,7 @@ function pageFromBuilder(moduleNamePath: string, moduleExports: any): pages.Page
|
|||||||
page = <pages.Page>element;
|
page = <pages.Page>element;
|
||||||
|
|
||||||
// Possible CSS file path.
|
// Possible CSS file path.
|
||||||
var cssFileName = resolveFilePath(moduleNamePath, "css");
|
var cssFileName = fileResolverModule.resolveFileName(moduleNamePath, "css");
|
||||||
if (cssFileName) {
|
if (cssFileName) {
|
||||||
page.addCssFile(cssFileName);
|
page.addCssFile(cssFileName);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user