// find.h : header file // #ifndef __CFIND_HEADER #define __CFIND_HEADER #include "WordBase.h" #include "FileBase.h" #include "FragInfo.h" #include "vector.h" #include "query.h" #include "AbrtSrch.h" #define UM_CLOSE (WM_USER+590) #define UM_CONNECT (WM_USER+591) #define UM_CLOSERANKS (WM_USER+592) #define UM_SIMILAR_SHOW (WM_USER+593) #define KEYCLEAR ((GetKeyState(VK_SHIFT) & 0x8000) &&(GetKeyState(VK_CONTROL) & 0x8000)) #define SZ_REGISTRY_KEY "Software\\Microsoft\\Full-Text-System\\1.0" #define SZ_OPTION_X "OptionDlgX" #define SZ_OPTION_Y "OptionDlgY" #define SZ_HOW_TO_SEARCH "How to Search" #define SZ_WHEN_TO_SEARCH "When to Search" #define SZ_WHEN_DELAY "When to Search Delay" #define SZ_WORDS_TO_SHOW "Words to Show" #define SZ_PHRASEFEEDBACK "Phrase Feedback" ///////////////////////////////////////////////////////////////////////////// // CRankDialog dialog class CRankDialog { // Construction public: CRankDialog(HINSTANCE m_hInst, UINT uID, HWND m_hDlg, CFileList *pflArticles, CTextSet **papts, UINT cTextSets, CTokenCollection *ptkc, CTitleCollection *ptlc ); ~CRankDialog(); DoModal(); BOOL Create(); void Show(BOOL bState); void DataUpdate( SimStruct * aRank, UINT cHits); void SetFocus(); void SetFont(HFONT hf); private: CTextSet **m_papts; CTokenCollection *m_ptkc; CTitleCollection *m_ptlc; HINSTANCE m_hInst; UINT m_ID; HWND m_hParent; HWND m_hDlg; SimStruct *m_aRank; UINT m_cHits; UINT m_cTextSets; CFileList *m_pflArticles; CFileList *m_pflRankedList; CFileBase *m_pfs; enum { C_CHILD_WINDOWS= 5 }; BOOL m_InIsDialogMessage; HWND m_ahwndChildren [C_CHILD_WINDOWS]; WNDPROC m_apwndprocChildren[C_CHILD_WINDOWS]; void DisconnectDialog(); LRESULT IsDlgMessageFilter(HWND hwnd, UINT msgType, WPARAM wparam, LPARAM lparam); static LRESULT CALLBACK GrandchildMessageFilter(HWND hwnd, UINT msgType, WPARAM wparam, LPARAM lparam); static LRESULT CALLBACK ChildMessageFilter(HWND hwnd, UINT msgType, WPARAM wparam, LPARAM lparam); // Implementation private: void OnOK(); void OnDisplay(); static BOOL CALLBACK DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); protected: BOOL OnInitDialog(); }; ///////////////////////////////////////////////////////////////////////////// // CFind dialog class CFind { // Construction public: static CFind* NewFind(HINSTANCE hInst, UINT idTemplate, HWND hOwner, CTextSet **papts, UINT cts, UINT ctsSlots, CTokenCollection *ptkc, CTitleCollection *ptlc ); ~CFind(); void SetTimeout(UINT uiTimeOut) {m_uiTimeOut = uiTimeOut; } UINT GetTimeout() {return m_uiTimeOut; } HWND GetHWnd(); static BOOL RegisterWndClass(HINSTANCE hInstance); int GetFragmentCount() { return m_cfiActive; } // used by Hiliter CFragInfo *GetFragment(int iFrag) { return m_apfi[iFrag]; } int GetSerial() { return m_serial; } protected: private: enum { CB_QUERY_MAX= 256, C_TERMS_MAX= 256, MAX_CB_WHITESPACE= 10, MAX_CB_FORMAT_STRING= 256, MAX_QUERY_STRING= 256}; enum { NO_WORDS= 1, NO_TOPICS= 2, LOTS_O_WORDS= 4}; HWND m_hDlg; HWND m_hwndFocus; HINSTANCE m_hInst; HFONT m_hFont; UINT m_serial; // validity count for hiliters BOOL m_fExitPending; // set if user clicked display before search is finished BOOL m_fDoneSearching; // set when all searches are completed // mfcc HWND m_hTopicsFound; HWND m_hWordsFound; HWND m_hwndEditBox; UINT m_rbgTopics; int m_iLookFor; enum { ALL_WORDS= 0, PHRASE, ANY_WORD }; // Values for m_iLookFor int m_iWordsThat; int m_iWordsThatLast; enum { BEGIN_WITH= 0, CONTAIN, END_WITH, MATCH, HAVE_SAME_STEM }; // Values for m_iWordsThat UINT m_iTokenStart; int m_iStart; int m_iEnd; int m_iDirtyFactor; int m_uiTimeOut; BOOL m_fIgnoreSelectionChanges; BOOL m_fDeferredSearch; BOOL m_bAutoSearch; BOOL m_bPhraseFeedback; UINT m_uiClearStatus; CWordBase *m_pWordBase; CFileBase *m_pfs; // CDisplayHelp *m_pdh; CTextSet **m_papts; UINT m_cts; UINT m_ctsSlots; CTokenCollection *m_ptkc; CTitleCollection *m_ptlc; WCHAR m_awcQueryPair[(CB_QUERY_MAX + 1) * sizeof(WCHAR) * 2]; PWCHAR m_pwcLastQuery; PFragInfo m_apfi[C_TERMS_MAX]; UINT m_cfiActive; UINT m_cfiAllocated; CTextDisplay *m_ptdContext; CTokenList *m_ptlTermPatterns; CFileList *m_pflArticles; CIndicatorSet *m_pisWordSet; CIndicatorSet *m_pisArticleSet; CIndicatorSet *m_pisArticleSubset; CIndicatorSet **m_ppisPhraseFilter; CRankDialog *m_pRankDialog; BOOL m_fFromSimilarTopics; POINT m_OptionDlgPos; int m_cMaxToFind; void OnApplyfeedback(); CFind(); void InitialFind(HINSTANCE hInst, UINT idTemplate, HWND hOwner, CTextSet **papts, UINT cts, UINT ctsSlots, CTokenCollection *ptkc, CTitleCollection *ptlc ); static BOOL CALLBACK DlgWndProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); static LRESULT CALLBACK DlgEdtProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); /*rmk--> PBYTE SkipBlanks(PBYTE pb, PBYTE pbLimit, PSZ pszWhiteSpaceChars); PBYTE SkipUntilBlank(PBYTE pb, PBYTE pbLimit, PSZ pszWhiteSpaceChars); <--rmk*/ void OnWordListSelCancel(); void OnWordListSelChange(); void ComputeTopicList(); void DiscardPartials(); void AddPhraseWord(CFragInfo *pfi, BOOL fAtTheEnd= TRUE); void ConstructPhraseFilter(UINT iTargetSlot); void ConstructPhraseVocabulary(); UINT CntFragmentsWithValues(UINT iExcludedToken= UINT(-1)); int OnInitDialog(HWND hDlg, HWND hFocusControl, LPARAM lParam); void OnNCDestroy(); void OnEditchangeNarrow(); void OnClearEdit(BOOL fRecovery= FALSE); void OnUpdateComboList(); void OnOptions(); void OnDisplay(); BOOL GetSel(int& iStart, int&iEnd,BOOL bNoCheck = FALSE); void OnLButtonUp(); void OnKeyUp(WPARAM nVirtKey,LPARAM lKeyData); void DirtyEditBox() ; void SetFocusToEdit(); BOOL QueueAbortDialog(); void DequeueAbortDialog(); CIndicatorSet *VocabularyFor(CIndicatorSet *pisArticles); UINT FindCurrentToken(PWCHAR pwcQuery, UINT cwcQuery, UINT iStart, PWCHAR *paStart, PWCHAR *paEnd, PUINT pcPatterns= NULL, PUINT pcbPatterns= NULL ); }; #endif