123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- #ifndef PLUGIN_H_DEFINED
- #define PLUGIN_H_DEFINED
- /*******************************************************************
- *
- * DESCRIPTION: DLL Plugin classes
- *
- * AUTHOR: Dan Silva
- *
- * HISTORY: 11/30/94 Started coding
- *
- *******************************************************************/
- typedef unsigned long ulong;
- #include <plugapi.h>
- //---------------------------------------------------------
- // This is the interface to a DLL
- // Each DLL may implement any number of classes.
- //
- class DllDesc {
- public:
- HINSTANCE handle;
- TSTR fname;
- const TCHAR* (*vDescription)(); // copy of this string can be stored in the DLL dir
- int (*vNumClasses)(); // How many classes does this DLL implement?
- ClassDesc* (*vClassDesc)(int i); // Hands back a ClassDesc for the ith class
- CoreExport DllDesc();
- CoreExport void Free() { FreeLibrary(handle); }
- CoreExport const TCHAR* Description() { return (*vDescription)(); };
- CoreExport int NumberOfClasses() { return (*vNumClasses)(); };
- ClassDesc* operator[](int i) { return (*vClassDesc)(i); };
- int operator==( const DllDesc& dd ) const { return 0; }
- };
- /*-----------------------------------------------------------------
- We will build one big DllDir on startup.
- As we do this, we will build a set of lists, one for each SuperClass.
- For a given super class, we want to
- (a) Enumerate all public subclasses
- (b) Enumerate all subclasses
- (c) Find the subClass for a given subClass ID.
- --------------------------------------------------------------*/
- class ClassEntry {
- int dllNumber; // index into the master Dll list
- int classNum; // index of the class within the DLL
- int isPublic;
- int useCount; // used for enumerating classes in summary info
- Class_ID classID;
- TSTR name;
- TSTR category;
- ClassDesc *cd;
-
- // The following are use to store the last rollup state for a
- // given class. 'scroll' is the scroll amount of the command panel
- // and pageState is the open close state for up to 32 rollup pages. (when the bit is set that means the rollup page is closed)
- int scroll;
- DWORD pageState;
-
- public:
- CoreExport ClassEntry();
- CoreExport ClassEntry(const ClassEntry &ce);
- CoreExport ClassEntry(ClassDesc *cld, int dllN, int index);
- CoreExport void Set(ClassDesc *cld, int dllN, int index);
- int DllNumber() { return dllNumber; }
- int IsPublic() { return isPublic; }
- Class_ID ClassID() { return classID; }
- TSTR &ClassName() { return name; }
- TSTR &Category() { return category; }
- int GetScroll() {return scroll;}
- void SetScroll(int s) {scroll = s;}
- BOOL GetPageState(int i) {return (pageState&(1<<i))?TRUE:FALSE;}
- void SetPageState(int i,BOOL state) {if (state) pageState |= (1<<i); else pageState &= ~(1<<i);}
- int UseCount() { return useCount; }
- void IncUseCount () { useCount++; }
- void SetUseCount(int i) { useCount = i; }
- ClassDesc *CD() { return cd; }
- CoreExport int ClassEntry::IsAccType(int accType);
- CoreExport ClassEntry& operator=( const ClassEntry &ce );
- int operator==( const ClassEntry &ce ) const { return 0; }
- };
- // access type.
- #define ACC_PUBLIC 1
- #define ACC_PRIVATE 2
- #define ACC_ALL (ACC_PUBLIC|ACC_PRIVATE)
- typedef ClassEntry* PClassEntry;
- typedef Tab<PClassEntry> SubClassTab;
- class SubClassList {
- int iEnum;
- ulong superID;
- SubClassTab subClList;
- public:
- CoreExport ~SubClassList();
- SubClassList(ulong sid=0) { superID = sid; }
- ClassEntry& operator[](int i){ return(*subClList[i]);}
- CoreExport int FindClass(Class_ID subClassID); // Get a class by its class ID
- CoreExport int FindClass(const TCHAR *name); // Get a class by its class name
- CoreExport void AddClass(ClassDesc *cld, int dllNum, int index);
- CoreExport int Count(int accType);
- ulong SuperID() { return superID; }
- int operator==(const SubClassList &sl) {return(0);}
- // Enumerate.
- CoreExport int GetFirst(int accType); // get first ClassDesc of accType
- CoreExport int GetNext(int accType); // get next ClassDesc of accType (NULL for End)
- int operator==( const SubClassList& lst ) const { return 0; }
- };
- typedef SubClassList* PSubClassList;
- typedef Tab<PSubClassList> ListOfClassLists;
- /* ClassDirectory: A list of SubClassLists, one for each pluggable
- super class */
- class ClassDirectory {
- ListOfClassLists cl;
- public:
- CoreExport ~ClassDirectory();
- CoreExport SubClassList* GetClassList(SClass_ID superClassID);
- CoreExport ClassDesc* FindClass(SClass_ID superClassID, Class_ID subClassID);
- CoreExport ClassEntry *FindClassEntry(SClass_ID superClassID, Class_ID subClassID);
- SubClassList& operator[](int i){ return(*cl[i]);}
- CoreExport void AddSuperClass(SClass_ID superClassID);
- // returns 0 if class already exists
- // returns -1 if superclass was unknown
- CoreExport int AddClass(ClassDesc *cdesc, int dllNum, int index);
- int Count() { return cl.Count(); }
- };
- /* DllDirectory: A list DllDescriptors, one for every DLL loaded
- Also contains the ClassDirectory of all classes implemented in these
- DLL's */
- typedef DllDesc *PDllDesc;
- class DllDir {
- Tab<PDllDesc> dll; // list of Descriptors for all the loaded DLL's
- ClassDirectory classDir; // All the classes implemented in these DLL's
- int AddDll(const DllDesc *dllDesc);
- public:
- CoreExport ~DllDir();
- CoreExport void UnloadAllDlls();
- int Count() { return dll.Count(); }
- DllDesc& operator[](int i) { return(*dll[i]); }
- CoreExport int LoadDllsFromDir(TCHAR *directory, TCHAR * wildcard, HWND hwnd=NULL);
- ClassDirectory& ClassDir() { return classDir; }
- };
- #endif // PLUGIN_H_DEFINED
|