/
// Copyright (c) 2002
// Ronald Kevin Burton
//
// Z poniższym kodem nie jest związana żadna gwarancja poprawności działania.
// Program został dołączony do książki ".NET CLR. Księga eksperta" w celu
// ilustracji koncepcji i zasad przedstawionych w tej książce. Program może być 
// używany na własne ryzyko.
//
// Przyznaje się prawo do użycia lub kopiowania tego oprogramowania do dowolnego celu
// bez konieczności ponoszenia żadnych opłat pod warunkiem, że powyższe uwagi zostaną 
// zachowane we wszystkich kopiach. Przyznaje się także prawo do modyfikacji kodu
// i dystrybucji zmodyfikowanego kodu pod warunkiem zachowania powyższych uwag
// oraz dołączenia informacji mówiącej o modyfikacji kodu.
//
// 
#pragma once
#include "afxcmn.h"


// Okno dialogowe CMetadataTablesPage
class CAssemblyView;
class CCILOpcode;
class CMetadataTablesPage : public CPropertyPage
{
	DECLARE_DYNAMIC(CMetadataTablesPage)

public:
	CMetadataTablesPage();
	virtual ~CMetadataTablesPage();

// Dane okna dialogowego
	enum { IDD = IDD_METATABLES };

protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // Obsługa DDX/DDV

	DECLARE_MESSAGE_MAP()
public:
	virtual BOOL OnInitDialog();
private:
	void HandleModule(const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleTypeRef(const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleSingleTypeRef(int index, const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void TypeAttributes(CorTypeAttr flags, HTREEITEM flagsItem);
	void HandleTypeDef(const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleSingleTypeDef(DWORD index, const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleFieldDef(const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleSingleFieldDef(DWORD index, const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void MethodImplAttributes(CorMethodImpl flags, HTREEITEM flagsItem);
	void MethodAttributes(CorMethodAttr flags, HTREEITEM flagsItem);
	void MethodSignatureBlob(DWORD index, CAssemblyView* pView, HTREEITEM tvitem);
	void OutputExceptionHandlers(PBYTE exceptionPointer, CAssemblyView* pView, HTREEITEM tvitem);
	void OutputOpcodes(CCILOpcode &op, CAssemblyView* pView, HTREEITEM tvitem);
	void InstructionRVA(DWORD rva, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleMethodDef(const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleSingleMethodDef(DWORD index, const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleParamDef(const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleSingleParamDef(int index, const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleSingleMemberRef(DWORD index, const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleMemberRef(const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void CustomAttributeBlob(DWORD blobTableIndex, DWORD signatureBlobIndex, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleSingleCustomAttribute(DWORD index, const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleCustomAttribute(const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleModuleRef(const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleSingleModuleRef(int index, const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void ImplMappingAttributes(CorPinvokeMap flags, HTREEITEM flagsItem);
	void HandleImplMap(const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleAssembly(const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleAssemblyRef(const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleSingleAssemblyRef(int index, const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleInterfaceImpl(const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleSingleInterfaceImpl(DWORD index, const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleConstant(const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleSingleConstant(DWORD index, const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleFieldMarshal(const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleSingleFieldMarshal(DWORD index, const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleDeclSecurity(const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleSingleDeclSecurity(DWORD index, const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleClassLayout(const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleSingleClassLayout(DWORD index, const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleStandAloneSig(const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleSingleStandAloneSig(DWORD index, const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleEventMap(const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleSingleEventMap(DWORD index, const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleEvent(const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleSingleEvent(DWORD index, const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandlePropertyMap(const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleSinglePropertyMap(DWORD index, const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleProperty(const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleSingleProperty(DWORD index, const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleMethodSemantics(const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleSingleMethodSemantics(DWORD index, const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleTypeSpec(const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleSingleTypeSpec(DWORD index, const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleFieldRVA(const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleSingleFieldRVA(DWORD index, const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleAssemblyProcessor(const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleSingleAssemblyProcessor(DWORD index, const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleAssemblyOS(const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleSingleAssemblyOS(DWORD index, const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleAssemblyRefProcessor(const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleSingleAssemblyRefProcessor(DWORD index, const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleAssemblyRefOS(const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleSingleAssemblyRefOS(DWORD index, const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleFile(const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleSingleFile(DWORD index, const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleExportedType(const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleSingleExportedType(DWORD index, const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleManifestResource(const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleSingleManifestResource(DWORD index, const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleNestedClass(const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	void HandleSingleNestedClass(DWORD index, const META_TABLE_ENTRY& t, CAssemblyView* pView, HTREEITEM tvitem);
	CTreeCtrl m_ctrlTableTree;
};
