Added code for local and remote renaming files and folders.


git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@449 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/vncviewer/FTDialog.cxx b/vncviewer/FTDialog.cxx
index 64c8f3a..a02ae75 100644
--- a/vncviewer/FTDialog.cxx
+++ b/vncviewer/FTDialog.cxx
@@ -43,6 +43,7 @@
   m_pProgress = NULL;
   m_pCancelingDlg = NULL;
   m_pCreateFolderDlg = NULL;
+  m_pRenameDlg = NULL;
 
   m_hwndFTDialog = NULL;
   m_hwndLocalPath = NULL;
@@ -170,6 +171,21 @@
     m_pProgress = NULL;
   }
 
+  if(m_pCancelingDlg != NULL) {
+    delete m_pCancelingDlg;
+    m_pCancelingDlg = NULL;
+  }
+
+  if (m_pCreateFolderDlg != NULL) {
+    delete m_pCreateFolderDlg;
+    m_pCreateFolderDlg = NULL;
+  }
+
+  if(m_pRenameDlg != NULL) {
+    delete m_pRenameDlg;
+    m_pRenameDlg = NULL;
+  }
+
   if (DestroyWindow(m_hwndFTDialog)) m_hwndFTDialog = NULL;
 }
 
@@ -442,15 +458,53 @@
 void 
 FTDialog::onLocalRename()
 {
-  MessageBox(NULL, "onLocalRename", "FTDialog", MB_OK);
+  if (m_pRenameDlg != NULL) return;
 
+  FileInfo fi;
+  if (m_pLocalLV->getSelectedItems(&fi) == 1) {
+    unsigned int flags = fi.getFlagsAt(0);
+    m_pRenameDlg = new FTDialog::RenameDlg(this);
+    if (m_pRenameDlg != NULL) {
+      if (flags & FT_ATTR_DIR) {
+        m_pRenameDlg->create(fi.getNameAt(0), true);
+      } else {
+        m_pRenameDlg->create(fi.getNameAt(0), false);
+      }
+      if (strlen(m_pRenameDlg->getFolderName()) > 0) {
+        FolderManager fm;
+        fm.renameIt(m_szLocalPath, fi.getNameAt(0), m_pRenameDlg->getFolderName());
+        showLocalLVItems();
+      }
+      delete m_pRenameDlg;
+      m_pRenameDlg = NULL;
+    }
+  }
+  setButtonsState();
 }
 
 void 
 FTDialog::onRemoteRename()
 {
-  MessageBox(NULL, "onRemoteRename", "FTDialog", MB_OK);
+  if (m_pRenameDlg != NULL) return;
 
+  FileInfo fi;
+  if (m_pRemoteLV->getSelectedItems(&fi) == 1) {
+    unsigned int flags = fi.getFlagsAt(0);
+    m_pRenameDlg = new FTDialog::RenameDlg(this);
+    if (m_pRenameDlg != NULL) {
+      if (flags & FT_ATTR_DIR) {
+        m_pRenameDlg->create(fi.getNameAt(0), true);
+      } else {
+        m_pRenameDlg->create(fi.getNameAt(0), false);
+      }
+      if (strlen(m_pRenameDlg->getFolderName()) > 0) {
+        m_pFileTransfer->renameRemote(m_szRemotePath, fi.getNameAt(0), m_pRenameDlg->getFolderName());
+      }
+      delete m_pRenameDlg;
+      m_pRenameDlg = NULL;
+    }
+  }
+  setButtonsState();
 }
 
 void 
@@ -938,3 +992,37 @@
   strcpy(m_szFolderName, getItemString(IDC_FTFOLDERNAME));
   return true;
 }
+
+FTDialog::RenameDlg::RenameDlg(FTDialog *pFTDlg) : CreateFolderDlg(pFTDlg)
+{
+  m_bFolder = false;
+}
+
+FTDialog::RenameDlg::~RenameDlg()
+{
+}
+
+bool 
+FTDialog::RenameDlg::create(char *pFilename, bool bFolder)
+{
+  m_bFolder = bFolder;
+  strcpy(m_szFilename, pFilename);
+  return showDialog(MAKEINTRESOURCE(IDD_FTCREATEFOLDER), m_pFTDlg->getWndHandle());
+}
+
+void
+FTDialog::RenameDlg::initDialog()
+{
+  char buf[2*FT_FILENAME_SIZE];
+  if (m_bFolder) {
+    SetWindowText(handle, "Rename Folder");
+    sprintf(buf, "Rename Folder '%s'", m_szFilename);
+  } else {
+    SetWindowText(handle, "Rename File");
+    sprintf(buf, "Rename File '%s'", m_szFilename);
+  }
+
+  setItemString(IDC_FTTEXT, buf);
+  setItemString(IDC_FTFOLDERNAME, m_szFilename);
+  SendDlgItemMessage(handle, IDC_FTFOLDERNAME, EM_SETSEL, (WPARAM) 0, (LPARAM) -1);
+}
\ No newline at end of file