summaryrefslogtreecommitdiffstats
path: root/vncviewer
diff options
context:
space:
mode:
authorDennis Syrovatsky <dennis@tightvnc.com>2005-12-14 10:18:21 +0000
committerDennis Syrovatsky <dennis@tightvnc.com>2005-12-14 10:18:21 +0000
commit7b53c6667d79452a0fb3a8c361b0057aec56ea14 (patch)
tree00805f4907bb81d49cc8f912ccd26713e80da556 /vncviewer
parent4ad6007475ffe710f4d373a5ff7d8ee93f612657 (diff)
downloadtigervnc-7b53c6667d79452a0fb3a8c361b0057aec56ea14.tar.gz
tigervnc-7b53c6667d79452a0fb3a8c361b0057aec56ea14.zip
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
Diffstat (limited to 'vncviewer')
-rw-r--r--vncviewer/FTDialog.cxx124
-rw-r--r--vncviewer/FTDialog.h26
-rw-r--r--vncviewer/FileTransfer.cxx4
-rw-r--r--vncviewer/FileTransfer.h1
-rw-r--r--vncviewer/resource.h3
-rw-r--r--vncviewer/vncviewer.rc48
6 files changed, 202 insertions, 4 deletions
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
@@ -691,6 +716,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()
{
PostMessage(m_hwndFTDialog, m_msgCheckTransferQueue, 0, 0);
@@ -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
@@ -13,6 +13,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
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)