Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

344 lines
9.8 KiB

#ifndef _FT_MAIN_UI_H_
#define _FT_MAIN_UI_H_
#include "ftres.h"
#include "combotb.h"
#if defined(TEST_PLUGABLE) && defined(_DEBUG)
#include "plugable.h"
#endif
#define WM_SEND_NEXT (WM_APP + 0x201)
#define WM_BRING_TO_FRONT (WM_APP + 0x202)
#define NUM_STATUS_BAR_PARTS 3
#define SBP_TRANSFER_FILE 0
#define SBP_PROGRESS 1
#define SBP_SBICON 2
typedef struct
{
ULONG idString;
ULONG idCommand;
UINT nFlags;
}
UI_MENU_INFO;
typedef enum
{
FTUIMODE_SHOWUI = 0,
FTUIMODE_UIHIDDEN,
FTUIMODE_NOUI,
}
FTUIMode;
class CAppletWindow;
class CUiSendFileInfo
{
public:
CUiSendFileInfo(CAppletWindow *, TCHAR szDir[], TCHAR szFile[], BOOL *pfRet);
~CUiSendFileInfo(void);
// name
LPTSTR GetFullName(void) { return m_pszFullName; }
LPTSTR GetName(void) { return m_pszFileName; }
// numbers
ULONG GetSize(void) { return m_FileInfo.nFileSizeLow; }
DWORD GetFileAttribute(void) { return m_FileInfo.dwFileAttributes; }
FILETIME GetLastWrite(void) { return m_FileInfo.ftLastWriteTime; }
ULONG GetTotalSend(void) { return m_cbTotalSend; }
void SetTotalSend(ULONG cb) { m_cbTotalSend = cb; }
void SetPercentSent(long percentSent){ m_percentSent = percentSent;}
long GetPercentSent(){return m_percentSent;}
// time
FILETIME *GetLastWriteTime(void) { return &m_FileInfo.ftLastWriteTime; }
FILETIME *GetLastAccessTime(void) { return &m_FileInfo.ftLastAccessTime; }
FILETIME *GetCreationTime(void) { return &m_FileInfo.ftCreationTime; }
// file handle
MBFTFILEHANDLE GetFileHandle(void) { return m_nFileHandle; }
void SetFileHandle(MBFTFILEHANDLE nFileHandle) { m_nFileHandle = nFileHandle; }
// error code
MBFT_ERROR_CODE GetErrorCode(void) { return m_eSendErrorCode; }
void SetErrorCode(MBFT_ERROR_CODE err) { m_eSendErrorCode = err; }
void SetShowUI(void) { m_fAlreadyShowUI = TRUE; }
BOOL HasShownUI(void) { return m_fAlreadyShowUI; }
private:
HANDLE GetOpenFile(CAppletWindow *, TCHAR szDir[], TCHAR szFile[], BOOL fResolve);
long m_percentSent;
LPTSTR m_pszFullName; // allocated
LPTSTR m_pszFileName; // handy shortcut
ULONG m_cbTotalSend;
MBFTFILEHANDLE m_nFileHandle;
MBFT_ERROR_CODE m_eSendErrorCode;
BOOL m_fAlreadyShowUI;
BY_HANDLE_FILE_INFORMATION m_FileInfo;
};
class CUiRecvFileInfo
{
public:
CUiRecvFileInfo(FileOfferNotifyMsg *pMsg, HRESULT *pHr);
~CUiRecvFileInfo(void);
// name
LPTSTR GetFullName(void) { return m_pszFullName; }
LPTSTR GetName(void) { return m_pszFileName; }
LPTSTR GetRecvFolder(void) { return m_pszRecvFolder; }
// numbers
ULONG GetSize(void) { return m_cbFileSize; }
ULONG GetTotalRecvSize(void) { return m_cbTotalRecvSize; }
void SetTotalRecvSize(ULONG cbTotalRecvSize) { m_cbTotalRecvSize = cbTotalRecvSize; }
// file handle
MBFTFILEHANDLE GetFileHandle(void) { return m_nFileHandle; }
void SetFileHandle(MBFTFILEHANDLE nFileHandle) { m_nFileHandle = nFileHandle; }
private:
LPTSTR m_pszFullName; // allocated
LPTSTR m_pszFileName; // handy shortcut
MBFTFILEHANDLE m_nFileHandle;
time_t m_FileDateTime;
ULONG m_cbFileSize;
ULONG m_cbTotalRecvSize;
LPTSTR m_pszRecvFolder;
};
class CRecvDlg : public CRefCount
{
public:
CRecvDlg(CAppletWindow*, T120ConfID, T120NodeID, MBFTEVENTHANDLE, CUiRecvFileInfo *, HRESULT *);
~CRecvDlg(void);
void OnOpen(void);
void OnDelete(void);
void OnAccept(void);
void StopAnimation(void);
ULONG GetPercent(void);
void OnProgressUpdate(FileTransmitMsg *pMsg = NULL);
void OnCanceled(void);
void OnRejectedFile(void);
CUiRecvFileInfo *GetRecvFileInfo(void) { return m_pRecvFileInfo; }
MBFTEVENTHANDLE GetEventHandle(void) { return m_nEventHandle; }
MBFTFILEHANDLE GetFileHandle(void) { return m_pRecvFileInfo->GetFileHandle(); }
HWND GetHwnd(void) { return m_hwndRecvDlg; }
T120ConfID GetConfID(void) { return m_nConfID; }
T120NodeID GetSenderID(void) { return m_nidSender; }
ULONG GetTotalRecvSize(void) { return m_pRecvFileInfo->GetTotalRecvSize(); }
BOOL IsRecvComplete(void) { return m_fRecvComplete; }
private:
HWND m_hwndRecvDlg;
UINT m_idResult;
CAppletWindow *m_pWindow;
T120ConfID m_nConfID;
T120NodeID m_nidSender;
MBFTEVENTHANDLE m_nEventHandle;
CUiRecvFileInfo *m_pRecvFileInfo;
BOOL m_fRecvComplete;
BOOL m_fShownRecvCompleteUI;
HRESULT m_hr;
DWORD m_dwEstTimeLeft;
DWORD m_dwPreviousTime;
DWORD m_dwPreviousTransferred;
DWORD m_dwBytesPerSec;
DWORD m_dwStartTime;
};
class CRecvDlgList : public CQueue
{
DEFINE_CQUEUE(CRecvDlgList, CRecvDlg*)
};
class CErrorDlgList : public CList
{
DEFINE_CLIST(CErrorDlgList, HWND);
};
class CAppletWindow : public CRefCount
{
friend LRESULT OnCreate(HWND hwnd, WPARAM wParam, LPARAM lParam);
public:
CAppletWindow(BOOL fNoUI, HRESULT *);
~CAppletWindow(void);
public:
BOOL FilterMessage(MSG *msg);
//
// Applet operation
//
void RegisterEngine(MBFTEngine *);
void UnregisterEngine(void);
void RegisterRecvDlg(CRecvDlg *);
void UnregisterRecvDlg(CRecvDlg *);
CRecvDlg *FindDlgByHandles(MBFTEVENTHANDLE, MBFTFILEHANDLE);
BOOL IsInConference(void) { return (NULL != m_pEngine); }
HWND GetHwnd(void) { return m_hwndMainUI; }
HWND GetListView(void) { return m_hwndListView; }
MBFTEngine *GetEngine(void) { return m_pEngine; }
void OnEngineNotify(MBFTMsg *);
BOOL QueryShutdown(BOOL fShutdown = TRUE);
//
// Windows message derivatives
//
// WM_CREATE
BOOL CreateToolBar(void);
BOOL CreateStatusBar(void);
BOOL CreateListView(void);
BOOL CreateProgressBar(void);
// WM_NOTIFY
void OnNotifyListView(LPARAM);
// WM_DROPFILES
LRESULT OnDropFiles(HANDLE hDrop);
// WM_CONTEXTMENU
void SetContextMenuStates(void);
void OnContextMenuForMainUI(LPARAM lParam);
void OnContextMenuForListView(LPARAM lParam);
void CreateMenu(LPARAM lParam, ULONG cItems, UI_MENU_INFO aMenuInfo[]);
// WM_SIZE
void OnSizeToolBar(void);
void OnSizeStatusBar(void);
void OnSizeListView(void);
// WM_GETMINMAXINFO
void OnGetMinMaxInfo(LPMINMAXINFO);
// WM_DRAWITEM
void OnDrawItem(void);
//
// OnCommand
//
void OnAddFiles(void);
void OnRemoveFiles(void);
void OnRemoveAllFiles(void);
void OnSendAll(void);
void OnSendOne(void);
void OnStopSending(void);
void OnOpenRecvFolder(void);
void OnExit(BOOL fNoQuery = FALSE); // exit point
void OnHelp(void);
void OnAbout(void);
void OnMenuSelect(UINT uiItemID, UINT uiFlags, HMENU hSysMenu);
//
// OnEngineNotify
//
void HandleFileOfferNotify(FileOfferNotifyMsg *);
void HandleProgressNotify(FileTransmitMsg *);
void HandleErrorNotify(FileErrorMsg *);
void HandleInitUninitNotification(InitUnInitNotifyMsg *);
void HandleFileEventEndNotification(FileEventEndNotifyMsg *);
void HandlePeerNotification(PeerMsg *pMdg);
//
// Other methods
//
void BringToFront(void);
void ClearSendInfo(BOOL fUpdateMenu);
void ClearRecvInfo(void);
void UpdateUI(void); // UpdateMenu && UpdateToolBar
void UpdateTitle(void);
void UpdateMenu(void);
void UpdateToolBar(void);
void UpdateStatusBar(void);
void UpdateListView(CUiSendFileInfo *);
void ResolveShortcut(LPTSTR pszFile, LPTSTR pszFileDest);
BOOL DrawItem(LPDRAWITEMSTRUCT);
void OnCommand(WORD wId, HWND hwndCtl, WORD codeNotify);
void SetSendMode(BOOL fSendALL) { m_fSendALL = fSendALL; };
void FocusNextRecvDlg(void);
void FocusNextErrorDlg(void);
CUiSendFileInfo *ChooseFirstUnSentFile(void);
CUiSendFileInfo *ChooseSelectedFile(void);
BOOL UIHidden(void) { return m_UIMode != FTUIMODE_SHOWUI; }
FTUIMode GetUIMode(void) { return m_UIMode; }
void AddErrorDlg(HWND hwndErrorDlg) { m_ErrorDlgList.Prepend(hwndErrorDlg); }
void RemoveErrorDlg(HWND hwndErrorDlg) { m_ErrorDlgList.Remove(hwndErrorDlg); }
void SetListViewFocus(void){ListView_SetItemState(m_hwndListView, 0, LVIS_SELECTED | LVIS_FOCUSED,LVIS_SELECTED | LVIS_FOCUSED);}
protected:
void SetHwnd(HWND hwnd) { ASSERT(NULL == m_hwndMainUI); m_hwndMainUI = hwnd; }
void SaveWindowPosition(void);
BOOL HasUnSentFiles(BOOL fUnSentOnly = TRUE);
BOOL SendNow(CUiSendFileInfo *pFileInfo);
BOOL FBrowseForFolder(LPTSTR pszFolder, UINT cchMax, LPCTSTR pszTitle);
BOOL IsReceiving(void);
private:
HWND m_hwndMainUI;
HWND m_hwndStatusBar;
HWND m_hwndListView;
HWND m_hwndProgressBar; // progress bar
CComboToolbar *m_pToolbar;
HACCEL m_hAccel;
HACCEL m_hLVAccel;
TCHAR m_szDefaultDir[MAX_PATH];
HICON m_hIconInCall; // Incall icon
HICON m_hIconNotInCall; // Not incall icon
MBFTEngine *m_pEngine;
CRecvDlgList m_RecvDlgList;
CErrorDlgList m_ErrorDlgList;
BOOL m_fInFileOpenDialog;
BOOL m_fSendALL; // flag indicating whether to send one file only
FTUIMode m_UIMode; // whether the UI is hidden
CUiSendFileInfo*m_pCurrSendFileInfo;
MBFTEVENTHANDLE m_nCurrSendEventHandle;
TCHAR m_szFtMainWndClassName[32];
};
HRESULT GetRecvFolder(LPTSTR pszInFldr, LPTSTR pszOutFldr);
#endif // _FT_MAIN_UI_H_