Code improvements.
Added FTDialog::showLocalLVItems(...) method.


git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@389 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/vncviewer/FTDialog.cxx b/vncviewer/FTDialog.cxx
index 49c948f..72dd6ae 100644
--- a/vncviewer/FTDialog.cxx
+++ b/vncviewer/FTDialog.cxx
@@ -39,6 +39,11 @@
   m_hwndFTDialog = NULL;
   m_hwndLocalPath = NULL;
   m_hwndRemotePath = NULL;
+
+  m_szLocalPath[0] = '\0';
+  m_szRemotePath[0] = '\0';
+  m_szLocalPathTmp[0] = '\0';
+  m_szRemotePathTmp[0] = '\0';
 }
 
 FTDialog::~FTDialog()
@@ -49,7 +54,11 @@
 bool
 FTDialog::createFTDialog()
 {
-  if (m_hwndFTDialog != NULL) return true;
+  if (m_hwndFTDialog != NULL) {
+    ShowWindow(m_hwndFTDialog, SW_SHOW);
+    m_bDlgShown = true;
+    return true;
+  }
 
   m_hwndFTDialog = CreateDialogParam(m_hInstance, 
                                      MAKEINTRESOURCE(IDD_FILETRANSFER_DLG),
@@ -96,6 +105,8 @@
   m_hwndLocalPath = GetDlgItem(m_hwndLocalPath, IDC_FTLOCALPATH);
   m_hwndRemotePath = GetDlgItem(m_hwndRemotePath, IDC_FTREMOTEPATH);
 
+  showLocalLVItems();
+
   return true;
 }
 
@@ -104,7 +115,7 @@
 {
   ShowWindow(m_hwndFTDialog, SW_HIDE);
   m_bDlgShown = false;
-  return false;
+  return true;
 }
 
 void
@@ -131,62 +142,74 @@
 BOOL CALLBACK 
 FTDialog::FTDialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 {
-	FTDialog *_this = (FTDialog *) 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 IDC_FTCLOSE:
-				_this->closeFTDialog();
-				return FALSE;
-			case IDC_FTLOCALUP:
-				_this->onLocalOneUpFolder();
-				return FALSE;
-			case IDC_FTREMOTEUP:
-				_this->onRemoteOneUpFolder();
-				return FALSE;
-		}
-		}
-	break;
-
-	case WM_NOTIFY:
-		switch (LOWORD(wParam))
-		{
-		case IDC_FTLOCALLIST:
-			switch (((LPNMHDR) lParam)->code)
-			{
-				case LVN_GETDISPINFO:
-					_this->m_pLocalLV->onGetDispInfo((NMLVDISPINFO *) lParam);
-					return FALSE;
-			}
-		break;
-		case IDC_FTREMOTELIST:
-			switch (((LPNMHDR) lParam)->code)
-			{
-				case LVN_GETDISPINFO:
-					_this->m_pRemoteLV->onGetDispInfo((NMLVDISPINFO *) lParam);
-					return FALSE;
-			}
-		break;
-		}
-		break;
-	case WM_CLOSE:
-	case WM_DESTROY:
-		_this->closeFTDialog();
-		return FALSE;
-	}
-    return FALSE;
+  FTDialog *_this = (FTDialog *) 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 IDC_FTCLOSE:
+        _this->closeFTDialog();
+        return FALSE;
+      case IDC_FTLOCALUP:
+        _this->onLocalOneUpFolder();
+        return FALSE;
+      case IDC_FTREMOTEUP:
+        _this->onRemoteOneUpFolder();
+        return FALSE;
+      }
+    }
+    break;
+    
+  case WM_NOTIFY:
+    switch (LOWORD(wParam))
+    {
+    case IDC_FTLOCALLIST:
+      switch (((LPNMHDR) lParam)->code)
+      {
+      case LVN_GETDISPINFO:
+        _this->m_pLocalLV->onGetDispInfo((NMLVDISPINFO *) lParam);
+        return FALSE;
+      case LVN_ITEMACTIVATE:
+        _this->onLocalItemActivate((LPNMITEMACTIVATE) lParam);
+        return FALSE;
+      }
+      break;
+    case IDC_FTREMOTELIST:
+      switch (((LPNMHDR) lParam)->code)
+      {
+      case LVN_GETDISPINFO:
+        _this->m_pRemoteLV->onGetDispInfo((NMLVDISPINFO *) lParam);
+        return FALSE;
+      case LVN_ITEMACTIVATE:
+        _this->onRemoteItemActivate((LPNMITEMACTIVATE) lParam);
+        return FALSE;
+      }
+      break;
+    }
+    break;
+    case WM_CLOSE:
+    case WM_DESTROY:
+      _this->closeFTDialog();
+      return FALSE;
+  }
+  return FALSE;
 }
 
 void 
 FTDialog::onLocalItemActivate(LPNMITEMACTIVATE lpnmia)
 {
+  if (strlen(m_szLocalPath) == 0) {
+   strcpy(m_szLocalPathTmp, m_pLocalLV->getActivateItemName(lpnmia)); 
+  } else {
+    sprintf(m_szLocalPathTmp, "%s\\%s", m_szLocalPath, m_pLocalLV->getActivateItemName(lpnmia));
+  }
+  showLocalLVItems();
 }
 
 void 
@@ -195,21 +218,22 @@
 }
 
 void
-FTDialog::addLocalLVItems(char *pPath, FileInfo *pFI)
+FTDialog::showLocalLVItems()
 {
-  pFI->sort();
-  SetWindowText(m_hwndLocalPath, pPath);
-  m_pLocalLV->deleteAllItems();
-  m_pLocalLV->addItems(pFI);
+  FolderManager fm;
+  FileInfo fileInfo;
+  if (fm.getDirInfo(m_szLocalPathTmp, &fileInfo, 0)) {
+    fileInfo.sort();
+    m_pLocalLV->deleteAllItems();
+    m_pLocalLV->addItems(&fileInfo);
+    strcpy(m_szLocalPath, m_szLocalPathTmp);
+    SetWindowText(m_hwndLocalPath, m_szLocalPath);
+  }
 }
 
 void 
-FTDialog::addRemoteLVItems(char *pPath, FileInfo *pFI)
+FTDialog::addRemoteLVItems(FileInfo *pFI)
 {
-  pFI->sort();
-  SetWindowText(m_hwndRemotePath, pPath);
-  m_pRemoteLV->deleteAllItems();
-  m_pRemoteLV->addItems(pFI);
 }
 
 void 
diff --git a/vncviewer/FTDialog.h b/vncviewer/FTDialog.h
index b1fa68a..c8bfc54 100644
--- a/vncviewer/FTDialog.h
+++ b/vncviewer/FTDialog.h
@@ -49,8 +49,8 @@
       
       static BOOL CALLBACK FTDialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
       
-      void addLocalLVItems(char *pPath, FileInfo *pFI);
-      void addRemoteLVItems(char *pPath, FileInfo *pFI);
+      void showLocalLVItems();
+      void addRemoteLVItems(FileInfo *pFI);
       
     private:
       FileTransfer *m_pFileTransfer;
@@ -74,6 +74,11 @@
       FTListView *m_pRemoteLV;
 
       FTProgress *m_pProgress;
+
+      char m_szLocalPath[FT_FILENAME_SIZE];
+      char m_szRemotePath[FT_FILENAME_SIZE];
+      char m_szLocalPathTmp[FT_FILENAME_SIZE];
+      char m_szRemotePathTmp[FT_FILENAME_SIZE];
     };
   }
 }
diff --git a/vncviewer/FileTransfer.cxx b/vncviewer/FileTransfer.cxx
index 82888af..d690f6d 100644
--- a/vncviewer/FileTransfer.cxx
+++ b/vncviewer/FileTransfer.cxx
@@ -34,11 +34,6 @@
   m_pFTDialog = new FTDialog(GetModuleHandle(0), this);
   m_pInStream = NULL;
   m_pOutStream = NULL;
-
-  m_szLocalPath[0] = '\0';
-  m_szRemotePath[0] = '\0';
-  m_szLocalPathTmp[0] = '\0';
-  m_szRemotePathTmp[0] = '\0';
 }
 
 FileTransfer::~FileTransfer()
@@ -67,11 +62,5 @@
   if (!m_bInitialized) return false;
 
   m_bFTDlgShown = m_pFTDialog->createFTDialog();
-
-  FolderManager fm;
-  FileInfo fileInfo;
-  fm.getDirInfo("",&fileInfo, 0);
-  m_pFTDialog->addLocalLVItems("", &fileInfo);
-
   return m_bFTDlgShown;
 }
diff --git a/vncviewer/FileTransfer.h b/vncviewer/FileTransfer.h
index d358d82..76bba1e 100644
--- a/vncviewer/FileTransfer.h
+++ b/vncviewer/FileTransfer.h
@@ -49,11 +49,6 @@
 
       rdr::InStream *m_pInStream;
       rdr::OutStream *m_pOutStream;
-
-      char m_szLocalPath[FT_FILENAME_SIZE];
-      char m_szRemotePath[FT_FILENAME_SIZE];
-      char m_szLocalPathTmp[FT_FILENAME_SIZE];
-      char m_szRemotePathTmp[FT_FILENAME_SIZE];
     };
   }
 }