uidesigner/com.nokia.sdt.series60.componentlibrary/components/dataModelGenLibrary.js
changeset 0 fb279309251b
equal deleted inserted replaced
-1:000000000000 0:fb279309251b
       
     1 /*
       
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of the License "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description: 
       
    15 *
       
    16 */
       
    17 // Routines to help generate C/C++ data model code
       
    18 
       
    19 /**
       
    20  *	Declare accessors for the given instance, which is
       
    21  *	expected to have an attribute data-model-cpp-type representing
       
    22  *	the C/C++ type (e.g. "int", "TBool"), which dictates how
       
    23  *	its code is generated.  Note that "TDes" is the expected
       
    24  *	type for generic string access and underneath "TBuf<...>" is
       
    25  *	used for mutable storage; a property "maxLength" should appear on the 
       
    26  *	instance to describe the maximum length.
       
    27  *	@param contribs the contrib list to append
       
    28  *	@param instance the instance
       
    29  *	@param dataModelClassName the name of the generated class
       
    30  *	@param methodPhase the phase receiving method declarations
       
    31  *	@param memberPhase the phase receiving member declarations
       
    32  *	@param constantsPhase the phase receiving constant declarations
       
    33  *	@param mainPhase the phase receiving the main *.cpp file contributions
       
    34  */
       
    35 function setupDataModelAccessors(contribs, instance, dataModelClassName,  methodPhase, memberPhase, constantsPhase, mainPhase) {
       
    36 	var type = getDataModelItemType(instance);
       
    37 	var memberName = "i"+titleCase(instance.name);
       
    38 	
       
    39 	var contrib;
       
    40 	
       
    41 	var getterName = getDataModelGetterMethodName(instance);
       
    42 	var setterName = getDataModelSetterMethodName(instance);
       
    43 	var storageType;
       
    44 	var paramType;
       
    45 	var returnType;
       
    46 	var setterCode;
       
    47 	if (type != "TDes") {
       
    48 		storageType = type;
       
    49 		paramType = type;
       
    50 		returnType = type;
       
    51 		setterCode = "\t" + memberName + " = aValue;\n";
       
    52 	} else {
       
    53 		var constName = "K" + titleCase(instance.name) + "MaxLength";
       
    54 		contrib = Engine.createContributionForPhase(constantsPhase);
       
    55 		contrib.setFormattedText("const int {0} = {1};\n", 
       
    56 			[ constName,
       
    57 			instance.properties.maxLength ]);
       
    58 		contribs.add(contrib);
       
    59 		paramType = "TDesC";
       
    60 		returnType = "TDes";
       
    61 		storageType = "TBuf<" + constName + ">";
       
    62 		setterCode = 
       
    63 			"\tif ( aValue.Length() < " + constName + ")\n"+
       
    64 			"\t\t" + memberName + ".Copy( aValue );\n"+
       
    65 			"\telse\n"+
       
    66 			"\t\t" + memberName + ".Copy( aValue.Ptr(), " + constName + ");\n";
       
    67 	}
       
    68 	contrib = Engine.createContributionForPhase(memberPhase);
       
    69 	contrib.setFormattedText("{0} {1};\n", [ storageType, memberName ]);
       
    70 	contribs.add(contrib);
       
    71 	
       
    72 	contrib = Engine.createContributionForPhase(methodPhase);
       
    73 	contrib.setFormattedText("{0}& {1}();\n", [ returnType, getterName ]);
       
    74 	contribs.add(contrib);
       
    75 
       
    76 	contrib = Engine.createContributionForPhase(mainPhase);
       
    77 	contrib.setFormattedText(
       
    78 		"{0}& {2}::{1}()\n"+
       
    79 		"\t'{'\n"+
       
    80 		"\treturn {3};\n"+
       
    81 		"\t'}'\n"+
       
    82 		"\n",
       
    83 		[ returnType, getterName, dataModelClassName, memberName ]);
       
    84 	contribs.add(contrib);
       
    85 	
       
    86 	contrib = Engine.createContributionForPhase(methodPhase);
       
    87 	contrib.setFormattedText("void {1}(const {0}& aValue);\n", 
       
    88 		[ paramType, setterName ]);
       
    89 	contribs.add(contrib);
       
    90 
       
    91 	contrib = Engine.createContributionForPhase(mainPhase);
       
    92 	contrib.setFormattedText(
       
    93 		"void {2}::{1}(const {0}& aValue)\n"+
       
    94 		"\t'{'\n"+
       
    95 		setterCode +
       
    96 		"\t'}'\n"+
       
    97 		"\n",
       
    98 		[ paramType, setterName, dataModelClassName ]);
       
    99 	contribs.add(contrib);
       
   100 
       
   101 }
       
   102 
       
   103 /**
       
   104  *	Get the name of the getter method for an item.
       
   105  */ 
       
   106 function getDataModelGetterMethodName(instance) {
       
   107 	return titleCase(instance.name);
       
   108 }
       
   109 
       
   110 /**
       
   111  *	Get the name of the setter method for an item.
       
   112  */ 
       
   113 function getDataModelSetterMethodName(instance) {
       
   114 	return "Set" + titleCase(instance.name);
       
   115 }
       
   116 
       
   117 /**
       
   118  *	Get the name of the C/C++ parameter type of an item.
       
   119  */ 
       
   120 function getDataModelItemType(instance) {
       
   121     if (instance.component != null)
       
   122 		return instance.component.attributes["data-model-cpp-type"];
       
   123 	return null;
       
   124 }
       
   125 
       
   126 /**
       
   127  *	Generate a call that sets the data model item value.
       
   128  *	@param contribs the contribution list to append
       
   129  *	@param indent indentation adjustment
       
   130  *	@param phaseName name of phase to use
       
   131  *	@param formName the form to use
       
   132  *	@param modelName the name of the model object (or null for this)
       
   133  *	@param instance the instance
       
   134  *	@param valueName the name of the value to set (expression)
       
   135  */
       
   136 function generateDataModelItemInitializer(contribs, indent, phaseName, formName, modelName, instance, valueName) {
       
   137 	var setterName = getDataModelSetterMethodName(instance);
       
   138 	var contrib = Engine.createContributionForPhase(phaseName);
       
   139 	contrib.setFormattedText("{0}{1}( {2} );\n", 
       
   140 		[modelName != null ? modelName + "." : "",  
       
   141 		setterName,
       
   142 		valueName]);
       
   143 	contrib.setForm(formName);
       
   144 	contrib.indentAdjust(indent);
       
   145 	contribs.add(contrib);
       
   146 }