Code/Resource
Windows Develop
Linux-Unix program
Internet-Socket-Network
Web Server
Browser Client
Ftp Server
Ftp Client
Browser Plugins
Proxy Server
Email Server
Email Client
WEB Mail
Firewall-Security
Telnet Server
Telnet Client
ICQ-IM-Chat
Search Engine
Sniffer Package capture
Remote Control
xml-soap-webservice
P2P
WEB(ASP,PHP,...)
TCP/IP Stack
SNMP
Grid Computing
SilverLight
DNS
Cluster Service
Network Security
Communication-Mobile
Game Program
Editor
Multimedia program
Graph program
Compiler program
Compress-Decompress algrithms
Crypt_Decrypt algrithms
Mathimatics-Numerical algorithms
MultiLanguage
Disk/Storage
Java Develop
assembly language
Applications
Other systems
Database system
Embeded-SCM Develop
FlashMX/Flex
source in ebook
Delphi VCL
OS Develop
MiddleWare
MPI
MacOS develop
LabView
ELanguage
Software/Tools
E-Books
Artical/Document
datasrc.h
Package: shell.rar [view]
Upload User: xhy777
Upload Date: 2007-02-14
Package Size: 24088k
Code Size: 6k
Category:
Windows Kernel
Development Platform:
Visual C++
- //+-----------------------------------------------------------------------
- //
- // Add/Remove Programs Data Source Object
- //
- //------------------------------------------------------------------------
- #ifndef _DATASRC_H_
- #define _DATASRC_H_
- #include <simpdata.h> // for OLEDBSimpleProvider
- #include "mtxarray.h" // for CMtxArray
- #include "worker.h"
- #include "iface.h" // for IARPSimpleProvider
- // The load state progression can be as follows:
- //
- // LS_NOTSTARTED --> LS_LOADING_SLOWINFO --> LS_DONE
- //
- // or
- //
- // LS_NOTSTARTED --> LS_DONE
- //
- enum LOAD_STATE
- {
- LS_NOTSTARTED, // OSP is not initialized
- LS_LOADING_SLOWINFO, // loading slow info (worker thread)
- LS_DONE, // completely finished
- };
- // Do not build this file if on Win9X or NT4
- #ifndef DOWNLEVEL_PLATFORM
- //------------------------------------------------------------------------
- //
- // CDataSrc (ARP Data Source Object)
- //
- // This is the OSP (OLEDB Simple Provider). It organizes
- // the data in matrix form and disseminates the data to the data
- // consumer via the OLEDBSimpleProvider interface.
- //
- //------------------------------------------------------------------------
- class CDataSrc : public CWorkerThread,
- public OLEDBSimpleProvider,
- public IWorkerEvent,
- public IARPSimpleProvider,
- public ISequentialStream
- {
- public:
- // *** IUnknown ***
- virtual STDMETHODIMP_(ULONG) AddRef (void) {return CWorkerThread::AddRef();};
- virtual STDMETHODIMP_(ULONG) Release (void) {return CWorkerThread::Release();};
- virtual STDMETHODIMP QueryInterface (REFIID riid, LPVOID * ppvObj);
- // *** ISequentialStream ***
- STDMETHOD(Read) (void * pvData, ULONG cbData, ULONG * pcbRead);
- STDMETHOD(Write) (void const * pvData, ULONG cbData, ULONG * pcbWritten);
- // *** OLEDBSimpleProvider ***
- STDMETHOD(getRowCount) (DBROWCOUNT *pcRows);
- STDMETHOD(getColumnCount) (DB_LORDINAL *pcCols);
- STDMETHOD(getRWStatus) (DBROWCOUNT iRow, DB_LORDINAL iCol, OSPRW *prwStatus);
- STDMETHOD(getVariant) (DBROWCOUNT iRow, DB_LORDINAL iCol, OSPFORMAT format, VARIANT *pVar);
- STDMETHOD(setVariant) (DBROWCOUNT iRow, DB_LORDINAL iCol, OSPFORMAT format, VARIANT Var);
- STDMETHOD(getLocale) (BSTR *pbstrLocale);
- STDMETHOD(deleteRows) (DBROWCOUNT iRow, DBROWCOUNT cRows, DBROWCOUNT *pcRowsDeleted);
- STDMETHOD(insertRows) (DBROWCOUNT iRow, DBROWCOUNT cRows, DBROWCOUNT *pcRowsInserted);
- STDMETHOD(find) (DBROWCOUNT iRowStart, DB_LORDINAL iCol, VARIANT val,
- OSPFIND findFlags, OSPCOMP compType, DBROWCOUNT *piRowFound);
- STDMETHOD(addOLEDBSimpleProviderListener)(OLEDBSimpleProviderListener *pospIListener);
- STDMETHOD(removeOLEDBSimpleProviderListener)(OLEDBSimpleProviderListener *pospIListener);
- STDMETHOD(getEstimatedRows) (DBROWCOUNT *pcRows);
- STDMETHOD(isAsync) (BOOL *pbAsync);
- STDMETHOD(stopTransfer) (void);
- // *** IWorkerEvent methods ***
- STDMETHOD(FireOnDataReady) (DBROWCOUNT iRow);
- STDMETHOD(FireOnFinished) (void);
- STDMETHOD(FireOnDatasetChanged) (void);
- // *** IARPSimpleProvider methods ***
- STDMETHOD(Initialize) (IShellAppManager * psam, IARPEvent *, DWORD dwEnum);
- STDMETHOD(EnumerateItemsAsync) (void);
- STDMETHOD(Recalculate) (void);
- STDMETHOD(SetSortCriteria) (BSTR bstrSortExpr);
- STDMETHOD(SetFilter) (BSTR bstrFilter);
- STDMETHOD(Sort) (void);
- STDMETHOD(DoCommand) (HWND hwndParent, APPCMD appcmd, DBROWCOUNT iRow);
- STDMETHOD(TransferData) (IARPSimpleProvider * parposp);
- CDataSrc();
- // *** IARPWorker *** (overide)
- STDMETHOD(KillWT) (void);
- private:
- virtual ~CDataSrc();
- inline BOOL _IsValidDataRow(DBROWCOUNT iRow);
- inline BOOL _IsValidRow(DBROWCOUNT iRow);
- inline BOOL _IsValidCol(DB_LORDINAL iCol);
- inline BOOL _IsValidCell(DBROWCOUNT iRow, DB_LORDINAL iCol);
- DBROWCOUNT _CalcRows(void);
- DB_LORDINAL _CalcCols(void);
- HRESULT _ApplySortCriteria(BOOL bFireDataSetChanged);
- IAppData * _GetAppData(DBROWCOUNT iRow);
- // NOTE: this is not used to kill the apps enumeration thread!!
- // kills only the thread that get slow appinfo.
- HRESULT _KillMtxWorkerThread(void);
- HRESULT _EnumAppItems(DWORD dwEnum, LPCWSTR pszCategory);
- DWORD _ThreadStartProc();
- ULONG _cRef; // interface reference count
- LOAD_STATE _loadstate;
- DB_LORDINAL _cCols; // count of columns
- DBROWCOUNT _cRows; // count of rows
- DWORD _dwEnum; // items to enumerate (ENUM_*)
- BITBOOL _fSortDirty: 1; // TRUE: the sort criteria is dirty
- BITBOOL _fFilterDirty: 1; // TRUE: the sort criteria is dirty
- BITBOOL _fAppsEnumed : 1; // TRUE if we have already finished enumerating apps
- BITBOOL _fInEnumOp : 1; // TRUE if we are in a enumeraion opertion
- IShellAppManager * _psam;
- IARPEvent * _parpevt;
- IMtxArray * _pmtxarray; // data is stored here
- CComBSTR _cbstrSort; // sort string. contains name of column to sort.
- CComBSTR _cbstrCategory; // category. used only for published apps.
- };
- HRESULT CDataSrc_CreateInstance(REFIID riid, LPVOID * ppvObj);
- #endif //DOWNLEVEL_PLATFORM
- #endif // _DATASRC_H_