From: Dennis Syrovatsky Date: Wed, 14 Dec 2005 10:18:21 +0000 (+0000) Subject: Added dialog for canceling file transfer. X-Git-Tag: v0.0.90~384^2~391 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=7b53c6667d79452a0fb3a8c361b0057aec56ea14;p=tigervnc.git Added dialog for canceling file transfer. Added new class FTDialog::CancelingDlg. git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@444 3789f03b-4d11-0410-bbf8-ca57d06f2519 --- diff --git a/vncviewer/FTDialog.cxx b/vncviewer/FTDialog.cxx index 99c9ca20..d958f5b0 100644 --- a/vncviewer/FTDialog.cxx +++ b/vncviewer/FTDialog.cxx @@ -39,6 +39,7 @@ FTDialog::FTDialog(HINSTANCE hInst, FileTransfer *pFT) m_pLocalLV = NULL; m_pRemoteLV = NULL; m_pProgress = NULL; + m_pCancelingDlg = NULL; m_hwndFTDialog = NULL; m_hwndLocalPath = NULL; @@ -223,6 +224,9 @@ FTDialog::FTDialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) case IDC_FTDOWNLOAD: _this->onDownload(); return FALSE; + case IDC_FTCANCEL: + _this->onFTCancel(); + return FALSE; case IDM_FTCOPY: case IDM_FTRENAME: case IDM_FTDELETE: @@ -405,6 +409,7 @@ FTDialog::onUpload() if (m_pLocalLV->getSelectedItems(&fi) > 0) { m_pFileTransfer->addTransferQueue(m_szLocalPath, m_szRemotePath, &fi, FT_ATTR_COPY_UPLOAD); } + refreshBtnState(); } void @@ -414,6 +419,7 @@ FTDialog::onDownload() if (m_pRemoteLV->getSelectedItems(&fi) > 0) { m_pFileTransfer->addTransferQueue(m_szLocalPath, m_szRemotePath, &fi, FT_ATTR_COPY_DOWNLOAD); } + refreshBtnState(); } void @@ -437,6 +443,7 @@ FTDialog::onLocalDelete() if (m_pLocalLV->getSelectedItems(&fi) > 0) { m_pFileTransfer->addDeleteQueue(m_szLocalPath, &fi, FT_ATTR_DELETE_LOCAL); } + refreshBtnState(); } void @@ -446,13 +453,28 @@ FTDialog::onRemoteDelete() if (m_pRemoteLV->getSelectedItems(&fi) > 0) { m_pFileTransfer->addDeleteQueue(m_szRemotePath, &fi, FT_ATTR_DELETE_REMOTE); } + refreshBtnState(); } void FTDialog::onFTCancel() { - MessageBox(NULL, "onFTCancel", "FTDialog", MB_OK); + if (m_pCancelingDlg != NULL) return; + + m_pCancelingDlg = new CancelingDlg(this); + + m_pCancelingDlg->create(); +} + +void +FTDialog::cancelTransfer(bool bResult) +{ + if (m_pCancelingDlg != NULL) { + delete m_pCancelingDlg; + m_pCancelingDlg = NULL; + } + MessageBox(NULL, "FTDialog::cancelTransfer()", "FTDialog::cancelTransfer()", MB_OK); } void @@ -638,7 +660,10 @@ FTDialog::refreshBtnState() } else { } } - m_BtnState.cancelBtn = false; + if (m_pFileTransfer->isTransferEnable()) + m_BtnState.cancelBtn = true; + else + m_BtnState.cancelBtn = false; } void @@ -690,6 +715,16 @@ FTDialog::setStatusText(LPCSTR format,...) } } +void +FTDialog::processDlgMsgs() +{ + MSG msg; + while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) != 0) { + TranslateMessage(&msg); + DispatchMessage(&msg); + } +} + void FTDialog::postCheckTransferQueueMsg() { @@ -707,3 +742,88 @@ FTDialog::postCheckDeleteQueueMsg() { PostMessage(m_hwndFTDialog, m_msgCheckDeleteQueue, 0, 0); } + +FTDialog::CancelingDlg::CancelingDlg(FTDialog *pFTDlg) +{ + m_pFTDlg = pFTDlg; + m_hwndDlg = NULL; +} + +FTDialog::CancelingDlg::~CancelingDlg() +{ + destroy(); +} + +bool +FTDialog::CancelingDlg::create() +{ + if (m_hwndDlg != NULL) return false; + + m_hwndDlg = CreateDialogParam(GetModuleHandle(0), + MAKEINTRESOURCE(IDD_FTCANCELING), + NULL, + (DLGPROC) cancelingDlgProc, + (LONG) this); + + if (m_hwndDlg == NULL) return false; + + ShowWindow(m_hwndDlg, SW_SHOW); + DrawIcon(GetDC(m_hwndDlg), 15, 22, LoadIcon(NULL, IDI_QUESTION)); + UpdateWindow(m_hwndDlg); + + return true; +} + +bool +FTDialog::CancelingDlg::destroy() +{ + if (m_hwndDlg == NULL) return true; + + if (DestroyWindow(m_hwndDlg)) { + m_hwndDlg = NULL; + return true; + } else { + return false; + } +} + +bool +FTDialog::CancelingDlg::close(bool bResult) +{ + if (m_hwndDlg == NULL) return true; + + destroy(); + + m_pFTDlg->cancelTransfer(bResult); + + return false; +} + +BOOL CALLBACK +FTDialog::CancelingDlg::cancelingDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + FTDialog::CancelingDlg *_this = (FTDialog::CancelingDlg *) GetWindowLong(hwnd, GWL_USERDATA); + switch (uMsg) + { + case WM_INITDIALOG: + SetWindowLong(hwnd, GWL_USERDATA, (LONG) lParam); + SetForegroundWindow(hwnd); + return TRUE; + + case WM_COMMAND: + switch (LOWORD(wParam)) + { + case IDOK: + _this->close(true); + return TRUE; + case IDCANCEL: + _this->close(false); + return TRUE; + } + break; + case WM_CLOSE: + _this->close(false); + return TRUE; + } + return FALSE; +} diff --git a/vncviewer/FTDialog.h b/vncviewer/FTDialog.h index eff08158..0c833431 100644 --- a/vncviewer/FTDialog.h +++ b/vncviewer/FTDialog.h @@ -46,6 +46,10 @@ namespace rfb { bool createFTDialog(HWND hwndParent); bool closeFTDialog(); void destroyFTDialog(); + + void processDlgMsgs(); + + void cancelTransfer(bool bResult); static BOOL CALLBACK FTDialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); @@ -149,6 +153,28 @@ namespace rfb { } FTBUTTONSSTATE; FTBUTTONSSTATE m_BtnState; + + public: + class CancelingDlg + { + public: + CancelingDlg(FTDialog *pFTDlg); + ~CancelingDlg(); + + static BOOL CALLBACK cancelingDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); + + bool create(); + bool destroy(); + + private: + FTDialog *m_pFTDlg; + HWND m_hwndDlg; + + bool close(bool bResult); + }; + + private: + CancelingDlg *m_pCancelingDlg; }; } } diff --git a/vncviewer/FileTransfer.cxx b/vncviewer/FileTransfer.cxx index 61024598..a0c1cf96 100644 --- a/vncviewer/FileTransfer.cxx +++ b/vncviewer/FileTransfer.cxx @@ -322,6 +322,8 @@ FileTransfer::downloadFile() void FileTransfer::uploadFilePortion() { + if (m_bFTDlgShown) m_pFTDialog->processDlgMsgs(); + if (m_fileReader.isCreated()) { char buf[FT_MAX_SENDING_SIZE]; unsigned int bytesRead = 0; @@ -406,6 +408,8 @@ FileTransfer::procFileDownloadDataMsg() return false; } + if (m_bFTDlgShown) m_pFTDialog->processDlgMsgs(); + if (bufSize > 0) { unsigned int bytesWritten = 0; m_fileWriter.write(pFile, bufSize, &bytesWritten); diff --git a/vncviewer/FileTransfer.h b/vncviewer/FileTransfer.h index bd1b75d2..c2facd57 100644 --- a/vncviewer/FileTransfer.h +++ b/vncviewer/FileTransfer.h @@ -104,7 +104,6 @@ namespace rfb { DWORD64 m_dw64SizeSending; unsigned int m_dirSizeRqstNum; - }; } } diff --git a/vncviewer/resource.h b/vncviewer/resource.h index 55c84e0b..8413d17b 100644 --- a/vncviewer/resource.h +++ b/vncviewer/resource.h @@ -25,6 +25,7 @@ #define IDI_FTFILE 127 #define IDI_FTRELOAD 128 #define IDR_FTMENU 130 +#define IDD_FTCANCELING 131 #define IDC_PASSWORD 1000 #define IDC_CONNECTING_TEXT 1001 #define IDC_SERVER_EDIT 1002 @@ -134,7 +135,7 @@ // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 131 +#define _APS_NEXT_RESOURCE_VALUE 132 #define _APS_NEXT_COMMAND_VALUE 40028 #define _APS_NEXT_CONTROL_VALUE 1083 #define _APS_NEXT_SYMED_VALUE 101 diff --git a/vncviewer/vncviewer.rc b/vncviewer/vncviewer.rc index 2cd20fab..531a78cf 100644 --- a/vncviewer/vncviewer.rc +++ b/vncviewer/vncviewer.rc @@ -12,6 +12,54 @@ ///////////////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// Russian resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_RUS) +#ifdef _WIN32 +LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT +#pragma code_page(1251) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_FTCANCELING DIALOG DISCARDABLE 0, 0, 193, 63 +STYLE DS_SYSMODAL | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Canceling Active File Transfer" +FONT 8, "MS Sans Serif" +BEGIN + DEFPUSHBUTTON "Yes",IDOK,40,42,50,14 + PUSHBUTTON "No",IDCANCEL,102,42,50,14 + LTEXT "FileTransfer is active.\nAre you sure you want to cancel transfer?", + IDC_STATIC,42,14,133,19 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO DISCARDABLE +BEGIN + IDD_FTCANCELING, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 186 + TOPMARGIN, 7 + BOTTOMMARGIN, 56 + END +END +#endif // APSTUDIO_INVOKED + +#endif // Russian resources +///////////////////////////////////////////////////////////////////////////// + + ///////////////////////////////////////////////////////////////////////////// // English (U.S.) resources