aknlayoutcompiler/inc/Layout.h
changeset 0 f58d6ec98e88
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/aknlayoutcompiler/inc/Layout.h	Thu Dec 17 09:14:18 2009 +0200
@@ -0,0 +1,181 @@
+/*
+* Copyright (c) 2002-2004 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 LAYOUT_H
+#define LAYOUT_H
+
+// disable "identifier was truncated to '255' characters in the browser information" warning
+#pragma warning (disable:4786)
+#include <vector>
+#include <string>
+#include <iosfwd>
+#include <map>
+
+using namespace std;
+
+class TLayoutLine;
+class TLayoutTable;
+class TLayout;
+
+extern const string KWindowOutputOrder[];
+extern const string KTextOutputOrder[];
+extern const string KWindowOutputOrderMirrored[];
+extern const string KTextOutputOrderMirrored[];
+extern const int KWindowOutputOrderSize;
+extern const int KTextOutputOrderSize;
+
+
+/**
+*  TLayout 
+*  The core layout class - this represents a complete layout, 
+*  typically loaded from a .lay file
+*/
+class TLayout : public vector<TLayoutTable*>
+	{
+public:
+	enum TMergeMode	{ KMergeModeMerge, KMergeModeVariant, KMergeModeUnion };
+
+public:
+	TLayout();
+	TLayout(const TLayout& aOther);
+	TLayout& operator=(const TLayout& aOther);
+
+	virtual ~TLayout();
+	void Merge(TLayout::TMergeMode aMergeMode, TLayout& aLayout);
+	TLayoutLine* FindLine(const string& aName);
+	void Compile();
+
+public:
+	string iName;
+	bool iCanBeMirror;
+	};
+
+
+/**
+*  TValues 
+*  The values stored in a cell in a layout line
+*/
+class TValues : public vector<string>
+	{
+// This class is generic with respect to the type of line it is used by
+public:
+	TValues();
+	TValues(TLayoutLine* aLine, string aName);
+
+	bool operator==(const TValues& aOther) const;
+
+	void Merge(TValues& aValues);
+	void Compile();
+	string ParamName() const;
+	static string CppValue(const string& aValue);
+
+public:
+	TLayoutLine* iLine;
+	string iName;
+	string iParam;
+	bool iNeedsP;
+	bool iNeedsIndex;
+	};
+
+
+/**
+*  TLayoutLine 
+*  A layout line
+*/
+class TLayoutLine : public map<string, TValues>
+	{
+public:
+	TLayoutLine(TLayoutTable* aTable, int aId);
+	TLayoutLine(TLayoutTable* aTable, const TLayoutLine& aOther);
+
+	bool operator==(const TLayoutLine& aOther) const;
+	bool ValuesEqual(const TLayoutLine& aOther) const;
+
+	void Merge(TLayout::TMergeMode aMergeMode, TLayoutLine& aLine);
+	void Compile();
+	string Name() const;					
+	string TableName() const;
+	bool MatchParams(const TLayoutLine& aLine) const;
+	bool NeedsParams() const { return iNeedsP || iNeedsIndex; }
+
+	void WarnMergeMismatch(TLayoutLine& aLine);
+
+public:
+	int iId;
+	TLayoutTable* iTable;
+	bool iNeedsP;
+	bool iNeedsIndex;
+	bool iIsUnique;
+	int iGlobalIndex;
+	bool iIsMirroredHorizontally; // i.e. l and r are swapped
+	bool iIsMergedIdentical;
+	};
+
+
+/**
+*  TLayoutTable 
+*  A layout table
+*/
+class TLayoutTable : public vector<TLayoutLine*>
+	{
+public:
+	enum TTableType { EUnknownTable, EWindowTable, ETextTable };
+	class TLayoutSubTable : public vector<int>
+		{
+	public:
+		TLayoutSubTable();
+		bool iIsMergedIdentical;
+		};
+	typedef vector<TLayoutSubTable*> TLayoutSubTables;
+
+public:
+	TLayoutTable(TLayout* aTables);
+	TLayoutTable(TLayout* aTables, const TLayoutTable& aOther);
+	virtual ~TLayoutTable();
+
+	void Merge(TLayout::TMergeMode aMergeMode, TLayoutTable& aTable);
+	TLayoutLine* FindLine(const string& aName);
+	void Compile();
+	void BuildSubTables();
+	void DestroySubTables();
+	string Name();
+	static bool IsValueColumn(string aName);
+	static bool IsNumericColumn(string aName);
+	void SetDefaultColumnNames();
+	bool IsWorthATableIndex();
+
+public:
+	TLayoutSubTables iSubTables;
+	vector<string> iColumnNames;
+	TTableType iType;
+	TLayout* iTables;
+	string iName;
+	TLayoutLine* iParent;
+	string iParentName;
+	bool iNeedsP;
+	bool iNeedsIndex;
+	int iFirstLineGlobalIndex;
+	bool iAppend;
+	bool iNoSubTables;
+	};
+
+
+#endif
+
+// End of File