diff -r 000000000000 -r f58d6ec98e88 aknlayoutcompiler/inc/MLCompData.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/aknlayoutcompiler/inc/MLCompData.h Thu Dec 17 09:14:18 2009 +0200 @@ -0,0 +1,367 @@ +/* +* Copyright (c) 2002-2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "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: +* +*/ + + +#ifndef MLCOMPDATA_H +#define MLCOMPDATA_H + +// disable "identifier was truncated to '255' characters in the browser information" warning +#pragma warning (disable:4786) + +// disable "decorated name length exceeded, name was truncated" +#pragma warning (disable:4503) + +#include "MLAttributes.h" + +#include +#include +#include +#include + +using namespace std; + +class TMLCompDataLine; +class TMLCompDataTable; +class TMLCompData; +class TMLAttributes; + +extern const string KCompDataPaneOutputOrder[]; +extern const string KCompDataPaneOutputOrderMirrored[]; +extern const string KCompDataGraphicOutputOrder[]; +extern const string KCompDataGraphicOutputOrderMirrored[]; +extern const string KCompDataTextOutputOrder[]; +extern const string KCompDataTextOutputOrderMirrored[]; +extern const int KCompDataPaneOutputOrderSize; +extern const int KCompDataGraphicOutputOrderSize; +extern const int KCompDataTextOutputOrderSize; +/** +* TMLCompDataCalcs +* The calcs stored in a value +*/ +typedef map TMLCompDataCalcs; +typedef map TMLCompDataZoomLevels; +typedef map TMLCompDataVarieties; + +/** +* TMLCompDataValues +* The values stored in a cell in a layout line +*/ +class TMLCompDataValues : public TMLCompDataVarieties + { +public: + enum TCompDataCellType + { + ECellTypeDefault, + ECellTypeParamLimit, + ECellTypeCol, + ECellTypeRow + }; + +public: // constructors, operators, etc + TMLCompDataValues(); + TMLCompDataValues(TMLCompDataLine* aLine); + virtual ~TMLCompDataValues(); + bool operator==(const TMLCompDataValues& aOther) const; + +public: // new methods + bool Merge(TMLCompDataLine* aLine, string aName, TMLCompDataValues& aOtherValues, bool aMirrorMerge); + void Compile(const string& aCellName); + static string CppValue(const string& aValue); + static string MirrorJustificationValue(const string& aValue); + static TCompDataCellType Type(string aName); + +public: // member data + TMLCompDataLine* iLine; // not owned + string iName; + }; + + +// +// Parent Info +// + +/** +* TMLCompDataParentInfoSelector +* +* The parent id and parent variety index for each variety index +*/ +struct TMLCompDataParentInfoSelector + { +public: + TMLCompDataParentInfoSelector(); + TMLCompDataParentInfoSelector(int aParentId, int aParentVariety); +public: + int iParentId; + int iParentVariety; + }; + +typedef map TMLCompDataParentInfoVarieties; + +/** +* TMLCompDataParentInfo +* +* Contains the parent info selector for each variety index +*/ +class TMLCompDataParentInfo : public TMLCompDataParentInfoVarieties + { +public: // constructors etc + TMLCompDataParentInfo(); + TMLCompDataParentInfo(TMLCompDataLine* aLine); + virtual ~TMLCompDataParentInfo(); +public: // new methods + void Merge(const TMLCompDataParentInfo& aOther); +public: // member data + TMLCompDataLine* iLine; // not owned + }; + +class TMLCompDataAttributeInfo; + +/** +* TMLCompDataLine +* A layout line +*/ +class TMLCompDataLine : public map + { +public: + enum TComponentType + { + EUnknownComponent, + EScreenComponent, + EContainerComponent, + EPaneComponent, + EGraphicComponent, + ETextComponent + }; + +public: // constructors etc + TMLCompDataLine(); + TMLCompDataLine(const TMLCompDataLine& aOther); + virtual ~TMLCompDataLine(); + + bool operator==(const TMLCompDataLine& aOther) const; + static bool lessthan(TMLCompDataLine* aLeft, TMLCompDataLine* aRight); + bool ValuesEqual(const TMLCompDataLine& aOther) const; + +public: // new methods + bool Merge(TMLCompDataLine& aOther); + void Compile(); + TMLAttributeZoomLevels* GetAttributeZoomLevels(string aAttribName, int aVariety); + +public: // get and set methods + string Name() const; + bool NeedsParams() const; + bool NeedsOptions() const; + bool NeedsCols() const; + bool NeedsRows() const; + int MaxVariety() const; + int NumCols() const; + int NumRows() const; + void SetMaxVariety(int aMaxVariety); + void SetNumCols(int aNumCols); + void SetNumRows(int aNumRows); + void SetNeedsCols(bool aNeeds); + void SetNeedsRows(bool aNeeds); + +public: // helpers + int EncodeFontId(int aHeight, int aOutline, int aPosture, int aWeight, int aCategory) const; + bool MatchParams(const TMLCompDataLine& aLine) const; + bool MatchNameDiscountingSuffix(const TMLCompDataLine& aLine) const; + bool MatchType(const TMLCompDataLine& aLine) const; + string NameDiscountingSuffix() const; + string NameSuffix() const; + +private: // helpers + TMLAttributeZoomLevels* GetParentAttributeZoomLevels(string aAttribSetName, int aAttribId, int aVariety); + TMLAttributeZoomLevels* FindAttributeZoomLevels(string aAttribSetName, int aAttribId); + void CompileParamLimits(TMLCompDataValues::TCompDataCellType aParamLimitType, const string& aParamLimitCellName); + void CompileFontHeights(); + + +public: // member data + int iId; + string iName; + TComponentType iType; + int iDrawingOrder; + int iMaxVariety; + TMLCompDataTable* iParentTable; + TMLCompDataParentInfo* iParentInfo;// owned + TMLCompDataAttributeInfo* iAttributeInfo;// owned + bool iIsUnique; + int iGlobalIndex; + bool iIsMirroredHorizontally; // i.e. l and r are swapped + bool iNeedsOptions; // note that can need options although numOptions is only 1, as may be needed for subtable + bool iNeedsCols; + bool iNeedsRows; + +private: + int iNumCols; // there is always at least one column + int iNumRows; // there is always at least one row + }; + + +// +// Attribute Info +// + +/** +* TMLCompDataAttributeInfoSelector +* +* Contains the attribute set name, which is used to +* disambiguate the attribute data for a given component +*/ +struct TMLCompDataAttributeInfoSelector + { +public: + TMLCompDataAttributeInfoSelector(); + TMLCompDataAttributeInfoSelector(string aAttributeSetName); +public: + string iAttributeSetName; + }; + +typedef map TMLCompDataAttributeInfoVarieties; + +/** +* TMLCompDataAttributeInfo +* +* Contains the attribute info selector for each variety +*/ +class TMLCompDataAttributeInfo : public TMLCompDataAttributeInfoVarieties + { +public: // constructors etc + TMLCompDataAttributeInfo(); + TMLCompDataAttributeInfo(TMLCompDataLine* aLine); + virtual ~TMLCompDataAttributeInfo(); +public: // new methods + void Merge(const TMLCompDataAttributeInfo& aOther); +public: // member data + TMLCompDataLine* iLine; // not owned + }; + + + +/** +* TMLCompDataTable +* A layout table +*/ +class TMLCompDataTable : public vector + { +public: + /* + * Subtables are automatically generated for contiguous collections + * of components whose names are the same, ending in _g or _t + * followed by a number. These components represent numbered + * rendered objects in the specification, and often need to be + * indexed by clients of the scalable layout API. + * + */ + class TMLCompDataSubTable : public vector + { + public: + TMLCompDataSubTable(); + bool NeedsParams() const; + public: + bool iNeedsOption; + bool iNeedsCol; + bool iNeedsRow; + string iName; + }; + typedef vector TMLCompDataSubTables; + +public: // constructors etc + TMLCompDataTable(TMLCompData* aTables); + TMLCompDataTable(TMLCompData* aTables, const TMLCompDataTable& aOther); + virtual ~TMLCompDataTable(); + static bool lessthan(TMLCompDataTable* aLeft, TMLCompDataTable* aRight); + +public: // new methods + TMLCompDataSubTable* FindSubTable(const string& aName); + TMLCompDataLine* FindLine(const string& aName); + void Merge(TMLCompDataTable& aOther); + void Compile(); + void BuildSubTables(); + void NormalizeSubTables(); + void DestroySubTables(); + void SetDefaultColumnNames(); + +public: // accessors + string Name(); + static bool IsValueColumn(string aName); + static bool IsNumericColumn(string aName); + static bool IsHorizontalColumn(string aName); + static bool IsVerticalColumn(string aName); + +public: // member data + int iId; + string iName; + TMLCompData* iTables; + TMLCompDataSubTables iSubTables; + vector iColumnNames; + TMLCompDataLine* iParentLine; // not owned + string iParentName; + bool iNeedsP; + bool iNeedsIndex; + bool iAppend; + int iFirstLineGlobalIndex; + }; + +/** +* TMLCompData +* The core layout class - this represents a complete layout, +* typically loaded from a .xml file that has been exported from the +* layout creation tool +*/ +class TMLCompData : public vector + { +public: + typedef map TMLComponents; + +public: // constructors + TMLCompData(); + TMLCompData(const TMLCompData& aOther); + TMLCompData& operator=(const TMLCompData& aOther); + +public: // new methods + virtual ~TMLCompData(); + TMLCompDataLine* FindComponent(const string& aName) const; + TMLCompDataLine* FindLine(const string& aName) const; + TMLCompDataTable* FindTable(int aId) const; + TMLCompDataTable* FindTable(const string& aName) const; + TMLCompDataTable::TMLCompDataSubTable* FindSubTable(const string& aName) const; + void Merge(TMLCompData& aOther); + void MergeComponents(TMLCompData& aOther); + void Compile(); + void CreateTables(); + void DeleteComponents(); + +public: // member data + string iName; + bool iCanBeMirror; + string iMasterName; + string iLayoutName; + string iVariantName; + string iResolutionHeight; + string iResolutionWidth; + string iTimestamp; + TMLComponents iComponents; // this is used to accumulate the lines, which are then compiled into tables + bool iIsBaseInstance; + TMLAttributes* iAttributes; // owned + }; + + +#endif + +// End of File