uidesigner/com.nokia.sdt.series60.componentlibrary/components/statuspane/StatusPane_queryContainment.js
author stechong
Wed, 20 Oct 2010 11:19:31 -0500
changeset 2165 2a7b5eccb0bc
parent 0 fb279309251b
permissions -rw-r--r--
Keeping PlatSim internal only.

/*
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the License "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description: 
*
*/
include("../containers/containerLibrary.js")

function StatusPaneQueryContainment() {
}

function isNaviTabsComponent(component) {
	var NAVI_TABS_ID = "com.nokia.sdt.series60.NaviTabs";
	return component.isOfType(NAVI_TABS_ID);
}

// can contain single instance of any allowed status pane content
function canContainComponent(component, children) {

	// early exit if not status content (we depend on other attributes)
	if (!hasStatusPaneContentAttribute(component.attributes)) {
		return buildSimpleContainmentErrorStatus(
			lookupString("spGeneralContainmentError"), 
			new Array( component.friendlyName ));
	}	

	// throw out if incorrect model type
	var disposition = component.attributes["model-type-disposition"];
	if (disposition == null)
		disposition = "any";
	if (disposition == "root" && !isInRootModel())
		return buildSimpleContainmentErrorStatus(
			lookupString("spStatusContentNotInRootContainmentError"), 
			[ component.friendlyName ]);			
	if (disposition == "view" && isInRootModel())
		return buildSimpleContainmentErrorStatus(
			lookupString("spStatusContentNotInViewContainmentError"), 
			[ component.friendlyName ]);			
	
	var hasInstance = false;

	var NAVI_BASE_ID = "com.nokia.sdt.series60.NaviBase";
	var isNaviContent = component.isOfType(NAVI_BASE_ID);
	var hasNaviContent = false;
	
//	println("cmp = " + component.id + ", attrs = " + component.attributes);	
	
	if (isNaviContent) {
		if (getStatusPaneContent(children, NAVI_BASE_ID) != null) {
			hasInstance = true;
			hasNaviContent = true;
		}
	} else {
		if (getStatusPaneContent(children, component.id) != null)
			hasInstance = true;
	}

	if (hasNaviContent)
		return buildSimpleContainmentErrorStatus(
			lookupString("spSingleNaviInstanceContainmentError"), 
			new Array( component.friendlyName ));			
	else if (hasInstance)
		return buildSimpleContainmentErrorStatus(
			lookupString("spSingleInstanceContainmentError"), 
			new Array( component.friendlyName ));			

	return null;
}

StatusPaneQueryContainment.prototype.canContainComponent = function(instance, otherComponent) {
	return canContainComponent(otherComponent, instance.children);
}

StatusPaneQueryContainment.prototype.canContainChild = function(instance, child) {
	return canContainComponent(child.component, instance.children);
}

StatusPaneQueryContainment.prototype.canRemoveChild = function(instance, child) {
	return true;
}

StatusPaneQueryContainment.prototype.isValidComponentInPalette = function(instance, otherComponent) {

	// throw out if incorrect model type
	var disposition = otherComponent.attributes["model-type-disposition"];
	if (disposition == null)
		disposition = "any";
	if (disposition == "root" && !isInRootModel())
		return false;
	if (disposition == "view" && isInRootModel())
		return false;

	var a = otherComponent.attributes;
	return hasStatusPaneContentAttribute(a);
}