]> source.dussan.org Git - tigervnc.git/commitdiff
Added dialog for canceling file transfer.
authorDennis Syrovatsky <dennis@tightvnc.com>
Wed, 14 Dec 2005 10:18:21 +0000 (10:18 +0000)
committerDennis Syrovatsky <dennis@tightvnc.com>
Wed, 14 Dec 2005 10:18:21 +0000 (10:18 +0000)
Added new class FTDialog::CancelingDlg.

git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@444 3789f03b-4d11-0410-bbf8-ca57d06f2519

vncviewer/FTDialog.cxx
vncviewer/FTDialog.h
vncviewer/FileTransfer.cxx
vncviewer/FileTransfer.h
vncviewer/resource.h
vncviewer/vncviewer.rc

index 99c9ca203e6f4295636ed44413b8931ef1bae740..d958f5b056d459c7dbe1d2dfff0c262eb964e102 100644 (file)
@@ -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;
+}
index eff081588ef32030f90e55d9b17be89d1491483e..0c833431a7b069169d82aafca0b447c8ccd9ae73 100644 (file)
@@ -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;
     };
   }
 }
index 610245986c5ad78672e4cc82e55935924ca294d1..a0c1cf9678906b101ecfc1e311516f7d3ed7788c 100644 (file)
@@ -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);
index bd1b75d2b58d7add244bcc9f9f2bcea5c32b3e53..c2facd57d7fe8eb1b0ee94716e66d1b4c47d975f 100644 (file)
@@ -104,7 +104,6 @@ namespace rfb {
 
       DWORD64 m_dw64SizeSending;
       unsigned int m_dirSizeRqstNum;
-
     };
   }
 }
index 55c84e0bda4d78edfeed5936913f639e8e7f4fdb..8413d17b0131f624c74ac7ecaf624b832f9246c6 100644 (file)
@@ -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
 // 
 #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
index 2cd20fab20138091bf780fca4d4323cda751efbb..531a78cfd78d1779bf700ae3169bd0af755b5308 100644 (file)
 /////////////////////////////////////////////////////////////////////////////
 #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