mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-17 04:41:36 +08:00
absolute-layout
This commit is contained in:

committed by
Hristo Hristov

parent
19ee47ba24
commit
12ffd9c1e8
@ -1057,7 +1057,7 @@ export abstract class ViewCommon extends ViewBase implements ViewDefinition {
|
|||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
function getLengthEffectiveValue(density: number, param: Length): number {
|
export function getLengthEffectiveValue(density: number, param: Length): number {
|
||||||
switch (param.unit) {
|
switch (param.unit) {
|
||||||
case "px":
|
case "px":
|
||||||
return Math.round(param.value);
|
return Math.round(param.value);
|
||||||
|
@ -1,9 +1,19 @@
|
|||||||
import definition = require("ui/layouts/absolute-layout");
|
import { AbsoluteLayout as AbsoluteLayoutDefinition } from "ui/layouts/absolute-layout";
|
||||||
import {LayoutBase} from "ui/layouts/layout-base";
|
import { LayoutBase, View, Property, Length, lengthComparer } from "ui/layouts/layout-base";
|
||||||
import {View} from "ui/core/view";
|
|
||||||
import {PropertyMetadata} from "ui/core/proxy";
|
export * from "ui/layouts/layout-base";
|
||||||
import {Property, PropertyChangeData} from "ui/core/dependency-observable";
|
|
||||||
import {registerSpecialProperty} from "ui/builder/special-properties";
|
declare module "ui/core/view" {
|
||||||
|
interface View {
|
||||||
|
left: Length;
|
||||||
|
top: Length;
|
||||||
|
effectiveLeft: number;
|
||||||
|
effectiveTop: number;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
View.prototype.effectiveLeft = 0;
|
||||||
|
View.prototype.effectiveTop = 0;
|
||||||
|
|
||||||
function validateArgs(element: View): View {
|
function validateArgs(element: View): View {
|
||||||
if (!element) {
|
if (!element) {
|
||||||
@ -12,65 +22,56 @@ function validateArgs(element: View): View {
|
|||||||
return element;
|
return element;
|
||||||
}
|
}
|
||||||
|
|
||||||
registerSpecialProperty("left", (instance, propertyValue) => {
|
export class AbsoluteLayoutBase extends LayoutBase implements AbsoluteLayoutDefinition {
|
||||||
AbsoluteLayout.setLeft(instance, !isNaN(+propertyValue) && +propertyValue);
|
// TODO: Do we still need this? it can be get like view.left
|
||||||
});
|
public static getLeft(element: View): Length {
|
||||||
registerSpecialProperty("top", (instance, propertyValue) => {
|
return validateArgs(element).left;
|
||||||
AbsoluteLayout.setTop(instance, !isNaN(+propertyValue) && +propertyValue);
|
|
||||||
});
|
|
||||||
|
|
||||||
export class AbsoluteLayout extends LayoutBase implements definition.AbsoluteLayout {
|
|
||||||
private static isValid(value: number): boolean {
|
|
||||||
return isFinite(value);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static onLeftPropertyChanged(data: PropertyChangeData) {
|
// TODO: Do we still need this? it can be set like view.left=value
|
||||||
var view = data.object;
|
public static setLeft(element: View, value: Length): void {
|
||||||
if (view instanceof View) {
|
validateArgs(element).left = value;
|
||||||
var layout = view.parent;
|
|
||||||
if (layout instanceof AbsoluteLayout) {
|
|
||||||
layout.onLeftChanged(view, data.oldValue, data.newValue);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static onTopPropertyChanged(data: PropertyChangeData) {
|
// TODO: Do we still need this? it can be get like view.top
|
||||||
var view = data.object;
|
public static getTop(element: View): Length {
|
||||||
if (view instanceof View) {
|
return validateArgs(element).top;
|
||||||
var layout = view.parent;
|
|
||||||
if (layout instanceof AbsoluteLayout) {
|
|
||||||
layout.onTopChanged(view, data.oldValue, data.newValue);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static leftProperty = new Property("left", "AbsoluteLayout",
|
// TODO: Do we still need this? it can be set like view.top=value
|
||||||
new PropertyMetadata(0, undefined, AbsoluteLayout.onLeftPropertyChanged, AbsoluteLayout.isValid));
|
public static setTop(element: View, value: Length): void {
|
||||||
|
validateArgs(element).top = value;
|
||||||
public static topProperty = new Property("top", "AbsoluteLayout",
|
|
||||||
new PropertyMetadata(0, undefined, AbsoluteLayout.onTopPropertyChanged, AbsoluteLayout.isValid));
|
|
||||||
|
|
||||||
public static getLeft(element: View): number {
|
|
||||||
return validateArgs(element)._getValue(AbsoluteLayout.leftProperty);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static setLeft(element: View, value: number): void {
|
onLeftChanged(view: View, oldValue: Length, newValue: Length) {
|
||||||
validateArgs(element)._setValue(AbsoluteLayout.leftProperty, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static getTop(element: View): number {
|
|
||||||
return validateArgs(element)._getValue(AbsoluteLayout.topProperty);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static setTop(element: View, value: number): void {
|
|
||||||
validateArgs(element)._setValue(AbsoluteLayout.topProperty, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected onLeftChanged(view: View, oldValue: number, newValue: number) {
|
|
||||||
//
|
//
|
||||||
}
|
}
|
||||||
|
|
||||||
protected onTopChanged(view: View, oldValue: number, newValue: number) {
|
onTopChanged(view: View, oldValue: Length, newValue: Length) {
|
||||||
//
|
//
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const zeroLenth: Length = { value: 0, unit: "px" };
|
||||||
|
|
||||||
|
export const leftProperty = new Property<View, Length>({
|
||||||
|
name: "left", defaultValue: zeroLenth,
|
||||||
|
valueChanged: (target, oldValue, newValue) => {
|
||||||
|
const layout = target.parent;
|
||||||
|
if (layout instanceof AbsoluteLayoutBase) {
|
||||||
|
layout.onLeftChanged(target, oldValue, newValue);
|
||||||
|
}
|
||||||
|
}, valueConverter: (v) => Length.parse(v)
|
||||||
|
});
|
||||||
|
leftProperty.register(AbsoluteLayoutBase);
|
||||||
|
|
||||||
|
export const topProperty = new Property<View, Length>({
|
||||||
|
name: "top", defaultValue: zeroLenth,
|
||||||
|
valueChanged: (target, oldValue, newValue) => {
|
||||||
|
const layout = target.parent;
|
||||||
|
if (layout instanceof AbsoluteLayoutBase) {
|
||||||
|
layout.onTopChanged(target, oldValue, newValue);
|
||||||
|
}
|
||||||
|
}, valueConverter: (v) => Length.parse(v)
|
||||||
|
});
|
||||||
|
topProperty.register(AbsoluteLayoutBase);
|
@ -1,10 +1,6 @@
|
|||||||
import utils = require("utils/utils");
|
import { AbsoluteLayoutBase, leftProperty, topProperty, Length, zeroLength } from "./absolute-layout-common";
|
||||||
import common = require("./absolute-layout-common");
|
|
||||||
import {View} from "ui/core/view";
|
|
||||||
import {PropertyMetadata} from "ui/core/proxy";
|
|
||||||
import {PropertyChangeData} from "ui/core/dependency-observable";
|
|
||||||
|
|
||||||
global.moduleMerge(common, exports);
|
export * from "./absolute-layout-common";
|
||||||
|
|
||||||
function setNativeProperty(data: PropertyChangeData, setter: (lp: org.nativescript.widgets.CommonLayoutParams) => void) {
|
function setNativeProperty(data: PropertyChangeData, setter: (lp: org.nativescript.widgets.CommonLayoutParams) => void) {
|
||||||
var view = data.object;
|
var view = data.object;
|
||||||
@ -29,7 +25,7 @@ function setNativeTopProperty(data: PropertyChangeData) {
|
|||||||
(<PropertyMetadata>common.AbsoluteLayout.leftProperty.metadata).onSetNativeValue = setNativeLeftProperty;
|
(<PropertyMetadata>common.AbsoluteLayout.leftProperty.metadata).onSetNativeValue = setNativeLeftProperty;
|
||||||
(<PropertyMetadata>common.AbsoluteLayout.topProperty.metadata).onSetNativeValue = setNativeTopProperty;
|
(<PropertyMetadata>common.AbsoluteLayout.topProperty.metadata).onSetNativeValue = setNativeTopProperty;
|
||||||
|
|
||||||
export class AbsoluteLayout extends common.AbsoluteLayout {
|
export class AbsoluteLayout extends AbsoluteLayoutBase {
|
||||||
|
|
||||||
private _layout: org.nativescript.widgets.AbsoluteLayout;
|
private _layout: org.nativescript.widgets.AbsoluteLayout;
|
||||||
|
|
||||||
@ -44,4 +40,13 @@ export class AbsoluteLayout extends common.AbsoluteLayout {
|
|||||||
public _createUI() {
|
public _createUI() {
|
||||||
this._layout = new org.nativescript.widgets.AbsoluteLayout(this._context);
|
this._layout = new org.nativescript.widgets.AbsoluteLayout(this._context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
-------------------------
|
||||||
|
This should be defined with Object.DefineProperty on a View type........
|
||||||
|
get [leftProperty.native](): Length {
|
||||||
|
return zeroLength;
|
||||||
|
}
|
||||||
|
set [leftProperty.native](value: Length) {
|
||||||
|
return zeroLength;
|
||||||
|
}
|
||||||
}
|
}
|
@ -29,10 +29,10 @@
|
|||||||
/**
|
/**
|
||||||
* Represents the observable property backing the left property.
|
* Represents the observable property backing the left property.
|
||||||
*/
|
*/
|
||||||
export const leftProperty: Property<AbsoluteLayout, number>;
|
export const leftProperty: Property<View, number>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents the observable property backing the top property.
|
* Represents the observable property backing the top property.
|
||||||
*/
|
*/
|
||||||
export const topProperty: Property<AbsoluteLayout, number>;
|
export const topProperty: Property<View, number>;
|
||||||
}
|
}
|
Reference in New Issue
Block a user