341 lines
9.5 KiB
C++
341 lines
9.5 KiB
C++
#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; }
|
||
|
||
// 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);
|
||
|
||
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); }
|
||
|
||
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_
|
||
|
||
|