// FindType.h

#pragma once

#using <mscorlib.dll>

using namespace System;
using namespace System::Collections;
using namespace System::IO;
using namespace System::Reflection;
using namespace System::Text;

__gc class IndentedWriter;

__gc class FindType
{
private:
    const static int SHOW_INTERFACES = 1;

private:
    const static int SHOW_FIELDS = 2;

private:
    const static int SHOW_PROPERTIES = 4;

private:
    const static int SHOW_EVENTS = 8;

private:
    const static int SHOW_METHODS = 16;

private:
    const static int SHOW_MODULE_INFO = 32;

private:
    IndentedWriter* myVerboseWriter;

private:
    IndentedWriter* myWriter;

private:
    bool exactMatchOnly;

private:
    bool recurseTypes;

private:
    bool matchOnlyNamespace;

private:
    bool wideSearch;

private:
    int showOptions;

private:
    ArrayList* myClassList;

private:
    ArrayList* DirList;

public:
    __property bool get_ExactMatchOnly();

public:
    __property void set_ExactMatchOnly(bool value);

public:
    __property bool get_RecurseTypes();

public:
    __property void set_RecurseTypes(bool value);

public:
    __property bool get_MatchOnlyNamespace();

public:
    __property void set_MatchOnlyNamespace(bool value);

public:
    __property bool get_WideSearch();

public:
    __property void set_WideSearch(bool value);

public:
    __property bool get_VerbosePrint();

public:
    __property void set_VerbosePrint(bool value);

public:
    __property bool get_ShowInterfaces();

public:
    __property void set_ShowInterfaces(bool value);

public:
    __property bool get_ShowFields();

public:
    __property void set_ShowFields(bool value);

public:
    __property bool get_ShowProperties();

public:
    __property void set_ShowProperties(bool value);

public:
    __property bool get_ShowEvents();

public:
    __property void set_ShowEvents(bool value);

public:
    __property bool get_ShowMethods();

public:
    __property void set_ShowMethods(bool value);

public:
    __property bool get_ShowModuleInfo();

public:
    __property void set_ShowModuleInfo(bool value);


public:
    void Search();

public:
    void Search(String* theSearchString);

public:
    void Search(String* theSearchString, String* theModule);

public:
    void ShowAll();

public:
    void DirAdd(String* dir);

public:
    void ClassAdd(String* newClass);

private:
    void BuildDLLFileList(String* directory, ArrayList* list);

private:
    String* GetTypeDescription(Type* aType);

private:
    void DumpType(Type* aType);

private:
    void DumpInterfaces(Type* aType);

private:
    void DumpProperties(Type* aType);

private:
    void DumpEvents(Type* aType);

private:
    void DumpFields(Type* aType);

private:
    void DumpMethods(Type* aType);

public:
    FindType();
};


