Files
NativeScript/ui/layouts/dock-layout/dock-layout-common.ts

65 lines
2.6 KiB
TypeScript

import layouts = require("ui/layouts/layout-base");
import definition = require("ui/layouts/dock-layout");
import dependencyObservable = require("ui/core/dependency-observable");
import view = require("ui/core/view");
import enums = require("ui/enums");
import proxy = require("ui/core/proxy");
import {registerSpecialProperty} from "ui/builder/special-properties";
import platform = require("platform");
// on Android we explicitly set propertySettings to None because android will invalidate its layout (skip unnecessary native call).
var AffectsLayout = platform.device.os === platform.platformNames.android ? dependencyObservable.PropertyMetadataSettings.None : dependencyObservable.PropertyMetadataSettings.AffectsLayout;
function isDockValid(value: any): boolean {
return value === enums.Dock.left || value === enums.Dock.top || value === enums.Dock.right || value === enums.Dock.bottom;
}
function validateArgs(element: view.View): view.View {
if (!element) {
throw new Error("element cannot be null or undefinied.");
}
return element;
}
registerSpecialProperty("dock", (instance, propertyValue) => {
DockLayout.setDock(instance, propertyValue);
});
export class DockLayout extends layouts.LayoutBase implements definition.DockLayout {
private static onDockPropertyChanged(data: dependencyObservable.PropertyChangeData) {
var uiView = data.object;
if (uiView instanceof view.View) {
var layout = uiView.parent;
if (layout instanceof DockLayout) {
layout.onDockChanged(uiView, data.oldValue, data.newValue);
}
}
}
public static dockProperty = new dependencyObservable.Property(
"dock", "DockLayout", new proxy.PropertyMetadata(enums.Dock.left, undefined, DockLayout.onDockPropertyChanged, isDockValid));
public static stretchLastChildProperty = new dependencyObservable.Property(
"stretchLastChild", "DockLayout", new proxy.PropertyMetadata(true, AffectsLayout));
public static getDock(element: view.View): string {
return validateArgs(element)._getValue(DockLayout.dockProperty);
}
public static setDock(element: view.View, value: string): void {
validateArgs(element)._setValue(DockLayout.dockProperty, value);
}
get stretchLastChild(): boolean {
return this._getValue(DockLayout.stretchLastChildProperty);
}
set stretchLastChild(value: boolean) {
this._setValue(DockLayout.stretchLastChildProperty, value);
}
protected onDockChanged(view: view.View, oldValue: number, newValue: number) {
//
}
}