]> source.dussan.org Git - tigervnc.git/commitdiff
Added code for local and remote renaming files and folders.
authorDennis Syrovatsky <dennis@tightvnc.com>
Wed, 14 Dec 2005 16:42:33 +0000 (16:42 +0000)
committerDennis Syrovatsky <dennis@tightvnc.com>
Wed, 14 Dec 2005 16:42:33 +0000 (16:42 +0000)
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@449 3789f03b-4d11-0410-bbf8-ca57d06f2519

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

index 06daf311eeb085583ac0593dcc6f3d65ea98bb58..349e0f75c93e5b35850555623209d49bbcb847d1 100644 (file)
@@ -44,6 +44,18 @@ FolderManager::createDir(char *pFullPath)
   return true;
 }
 
+bool
+FolderManager::renameIt(char *pPath, char *pOldName, char *pNewName)
+{
+  char fullOldName[FT_FILENAME_SIZE];
+  char fullNewName[FT_FILENAME_SIZE];
+
+  sprintf(fullOldName, "%s\\%s", pPath, pOldName);
+  sprintf(fullNewName, "%s\\%s", pPath, pNewName);
+
+  return renameIt(fullOldName, fullNewName);
+}
+
 bool 
 FolderManager::renameIt(char *pOldName, char *pNewName)
 {
index 55f352d19fb0dcc5c09db24c446a01917c83dcb2..97a6538db6e9f6f26501eeddf63489a1e1b84a73 100644 (file)
@@ -39,6 +39,7 @@ namespace rfb {
       bool createDir(char *pFullPath);
 
       bool renameIt(char *pOldName, char *pNewName);
+      bool renameIt(char *pPath, char *pOldName, char *pNewName);
       
       bool deleteIt(char *pPrefix, FileInfo *pFI);
       bool deleteIt(char *pFullPath);
index 64c8f3ab1ca097215c32417461f7f3427c5d4166..a02ae756549f7206ec8af3a573a60474010bb553 100644 (file)
@@ -43,6 +43,7 @@ FTDialog::FTDialog(HINSTANCE hInst, FileTransfer *pFT)
   m_pProgress = NULL;
   m_pCancelingDlg = NULL;
   m_pCreateFolderDlg = NULL;
+  m_pRenameDlg = NULL;
 
   m_hwndFTDialog = NULL;
   m_hwndLocalPath = NULL;
@@ -170,6 +171,21 @@ FTDialog::destroyFTDialog()
     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 @@ FTDialog::onDownload()
 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 @@ FTDialog::CreateFolderDlg::onOk()
   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
index e362f95d049a3a677eff770200edcd0e58a2a27d..04b1c9bb06b1975fd7259ab9b41a248e2c2d78bc 100644 (file)
@@ -198,13 +198,31 @@ namespace rfb {
         bool create();
         char *getFolderName() { return m_szFolderName; }
 
-      private:
+      protected:
         FTDialog *m_pFTDlg;
         char m_szFolderName[FT_FILENAME_SIZE];
       };
 
       private:
         CreateFolderDlg *m_pCreateFolderDlg;
+
+    public:
+      class RenameDlg : public CreateFolderDlg
+      {
+      public:
+        RenameDlg(FTDialog *pFTDlg);
+        ~RenameDlg();
+
+        bool create(char *pFilename, bool bFolder);
+        void initDialog();
+
+      private:
+        bool m_bFolder;
+        char m_szFilename[FT_FILENAME_SIZE];
+      };
+
+      private:
+        RenameDlg *m_pRenameDlg;
     };
   }
 }
index 37475060fc5c589ce8aa3f337f4034a0a760897a..b324901eedde6580f0e7fc763758a3e5881afddd 100644 (file)
@@ -372,6 +372,21 @@ FileTransfer::createRemoteFolder(char *pPath, char *pName)
   m_pWriter->writeFileListRqst(strlen(pPath), pPath, false);
 }
 
+void 
+FileTransfer::renameRemote(char *pPath, char *pOldName, char *pNewName)
+{
+  char fullOldName[FT_FILENAME_SIZE];
+  char fullNewName[FT_FILENAME_SIZE];
+
+  sprintf(fullOldName, "%s\\%s", pPath, pOldName);
+  sprintf(fullNewName, "%s\\%s", pPath, pNewName);
+
+  m_pWriter->writeFileRenameRqst(strlen(fullOldName), strlen(fullNewName),
+                                 fullOldName, fullNewName);
+  m_queueFileListRqst.add(pPath, 0, 0, FT_FLR_DEST_MAIN);
+  m_pWriter->writeFileListRqst(strlen(pPath), pPath, false);
+}
+
 bool 
 FileTransfer::procFileListDataMsg()
 {
index eccdcd6e8b04936cf9b330128054431feb352c10..2c5d8027eadb038f93b049daeec46cbe53026cbf 100644 (file)
@@ -65,6 +65,7 @@ namespace rfb {
       void uploadFilePortion();
 
       void createRemoteFolder(char *pPath, char *pName);
+      void renameRemote(char *pPath, char *pOldName, char *pNewName);
 
       bool m_bCancel;
 
index adff6511cb4ffabb5e7be50b8bdcf9213ff3d926..4967ab9fd48ec6cfbedec56ee301469added5ac2 100644 (file)
 #define IDC_CONFIRM_TEXT                1080
 #define IDC_EDIT2                       1082
 #define IDC_FTFOLDERNAME                1083
+#define IDC_FTTEXT                      1084
 #define ID_TOOLBAR                      40002
 #define ID_CLOSE                        40003
 #define ID_OPTIONS                      40004
 #ifndef APSTUDIO_READONLY_SYMBOLS
 #define _APS_NEXT_RESOURCE_VALUE        133
 #define _APS_NEXT_COMMAND_VALUE         40028
-#define _APS_NEXT_CONTROL_VALUE         1084
+#define _APS_NEXT_CONTROL_VALUE         1085
 #define _APS_NEXT_SYMED_VALUE           101
 #endif
 #endif
index 90171badc17e3eeb123f44b8e545c89389c41cfe..d0e01f786b617d6651c9965925c18caadb262746 100644 (file)
@@ -369,7 +369,7 @@ BEGIN
     EDITTEXT        IDC_FTFOLDERNAME,7,19,179,14,ES_AUTOHSCROLL
     DEFPUSHBUTTON   "OK",IDOK,80,42,50,14
     PUSHBUTTON      "Cancel",IDCANCEL,136,42,50,14
-    LTEXT           "New Folder Name",IDC_STATIC,7,7,179,8
+    LTEXT           "New Folder Name",IDC_FTTEXT,7,7,179,8
 END