Major code evolution.


git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@398 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/vncviewer/FTDialog.cxx b/vncviewer/FTDialog.cxx
index b37554f..67d2f64 100644
--- a/vncviewer/FTDialog.cxx
+++ b/vncviewer/FTDialog.cxx
@@ -111,6 +111,7 @@
   setIcon(IDC_FTREMOTERELOAD, IDI_FTRELOAD);
 
   showLocalLVItems();
+  showRemoteLVItems();
 
   return true;
 }
@@ -255,9 +256,20 @@
   }
 }
 
+void
+FTDialog::showRemoteLVItems()
+{
+  m_pFileTransfer->requestFileList(m_szRemotePathTmp, FT_FLR_DEST_MAIN, 0);
+}
+
 void 
 FTDialog::addRemoteLVItems(FileInfo *pFI)
 {
+  pFI->sort();
+  m_pRemoteLV->deleteAllItems();
+  m_pRemoteLV->addItems(pFI);
+  strcpy(m_szRemotePath, m_szRemotePathTmp);
+  SetWindowText(m_hwndRemotePath, m_szRemotePath);
 }
 
 void 
@@ -273,6 +285,12 @@
 {
 }
 
+void 
+FTDialog::reqFolderUnavailable()
+{
+  strcpy(m_szRemotePathTmp, m_szRemotePath);
+}
+
 int
 FTDialog::makeOneUpFolder(char *pPath)
 {
diff --git a/vncviewer/FTDialog.h b/vncviewer/FTDialog.h
index 81c3ba7..7c577ed 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 showLocalLVItems();
       void addRemoteLVItems(FileInfo *pFI);
+      void reqFolderUnavailable();
       
     private:
       FileTransfer *m_pFileTransfer;
@@ -60,6 +60,9 @@
       HWND m_hwndRemotePath;
       HINSTANCE m_hInstance;
       
+      void showLocalLVItems();
+      void showRemoteLVItems();
+
       void onLocalItemActivate(LPNMITEMACTIVATE lpnmia);
       void onRemoteItemActivate(LPNMITEMACTIVATE lpnmia);
 
diff --git a/vncviewer/FileTransfer.cxx b/vncviewer/FileTransfer.cxx
index 44cfb13..2cc84ef 100644
--- a/vncviewer/FileTransfer.cxx
+++ b/vncviewer/FileTransfer.cxx
@@ -93,6 +93,41 @@
 bool 
 FileTransfer::procFileListDataMsg()
 {
+  FileInfo fileInfo;
+  int res = m_pReader->readFileListData(&fileInfo);
+
+  bool bResult;
+  switch (m_queueFileListRqst.getFlagsAt(0))
+  {
+  case FT_FLR_DEST_MAIN:
+    if (!m_bFTDlgShown) break;
+    
+    if (res < 0) {
+      m_pFTDialog->reqFolderUnavailable();
+      bResult = true;
+    } else {
+      bResult = procFLRMain(&fileInfo);
+    }
+    break;
+  case FT_FLR_DEST_BROWSE:
+    bResult = procFLRBrowse(&fileInfo);
+    break;
+  case FT_FLR_DEST_UPLOAD:
+    bResult = procFLRUpload(&fileInfo);
+    break;
+  case FT_FLR_DEST_DOWNLOAD:
+    bResult = procFLRDownload(&fileInfo);
+    break;
+  case FT_FLR_DEST_DELETE:
+    bResult = procFLRDelete(&fileInfo);
+    break;
+  case FT_FLR_DEST_RENAME:
+    bResult = procFLRRename(&fileInfo);
+    break;
+  }
+  m_queueFileListRqst.deleteAt(0);
+  return bResult;
+  
   return false;
 }
 
@@ -125,3 +160,48 @@
 {
   return false;
 }
+
+bool 
+FileTransfer::procFLRMain(FileInfo *pFI)
+{
+  if (m_bFTDlgShown) m_pFTDialog->addRemoteLVItems(pFI);
+  return true;
+}
+
+bool 
+FileTransfer::procFLRBrowse(FileInfo *pFI)
+{
+  return false;
+}
+
+bool 
+FileTransfer::procFLRUpload(FileInfo *pFI)
+{
+  return false;
+}
+
+bool 
+FileTransfer::procFLRDownload(FileInfo *pFI)
+{
+  return false;
+}
+
+bool 
+FileTransfer::procFLRDelete(FileInfo *pFI)
+{
+  return false;
+}
+
+bool 
+FileTransfer::procFLRRename(FileInfo *pFI)
+{
+  return false;
+}
+
+void 
+FileTransfer::requestFileList(char *pPath, int dest, bool bDirOnly)
+{
+  m_queueFileListRqst.add(pPath, 0, 0, dest);
+
+  m_pWriter->writeFileListRqst(pPath, bDirOnly);
+}
\ No newline at end of file
diff --git a/vncviewer/FileTransfer.h b/vncviewer/FileTransfer.h
index 7df0c18..6bf36c9 100644
--- a/vncviewer/FileTransfer.h
+++ b/vncviewer/FileTransfer.h
@@ -27,6 +27,8 @@
 #include <rdr/InStream.h>
 #include <rdr/OutStream.h>
 #include <rfb/msgTypes.h>
+#include <rfb/FileInfo.h>
+#include <rfb/TransferQueue.h>
 #include <vncviewer/FTDialog.h>
 #include <vncviewer/FTMsgReader.h>
 #include <vncviewer/FTMsgWriter.h>
@@ -45,6 +47,8 @@
       bool processFTMsg(int type);
       bool show();
 
+      void requestFileList(char *pPath, int dest, bool bDirOnly);
+
     private:
       bool m_bFTDlgShown;
       bool m_bInitialized;
@@ -53,14 +57,23 @@
 
       FTMsgReader *m_pReader;
       FTMsgWriter *m_pWriter;
+
+      FileInfo m_queueFileListRqst;
       
       bool procFileListDataMsg();
-      bool procFileSpecDirDataMsg();
       bool procFileDownloadDataMsg();
       bool procFileUploadCancelMsg();
       bool procFileDownloadFailedMsg();
       bool procFileDirSizeDataMsg();
       bool procFileLastRqstFailedMsg();
+      
+      bool procFLRMain(FileInfo *pFI);
+      bool procFLRBrowse(FileInfo *pFI);
+      bool procFLRUpload(FileInfo *pFI);
+      bool procFLRDownload(FileInfo *pFI);
+      bool procFLRDelete(FileInfo *pFI);
+      bool procFLRRename(FileInfo *pFI);
+      
     };
   }
 }