From 6806fec02fab3424845185968487a9c332cac0f3 Mon Sep 17 00:00:00 2001 From: Dennis Syrovatsky Date: Mon, 28 Nov 2005 06:12:44 +0000 Subject: [PATCH] Big code evolution for file transfer feature. Added methods to the TransferQueue class for flag managing. Added upload() and download() methods to the FileTransfer class. Reconstruction of FTProgress class. Code improvements. git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@418 3789f03b-4d11-0410-bbf8-ca57d06f2519 --- rfb/TransferQueue.cxx | 21 +++++++++++++++- rfb/TransferQueue.h | 2 ++ rfb/fttypes.h | 20 +++++++++++++--- vncviewer/FTDialog.cxx | 15 +++++------- vncviewer/FTDialog.h | 6 +++-- vncviewer/FTProgress.cxx | 49 ++++++++++++-------------------------- vncviewer/FTProgress.h | 6 ++--- vncviewer/FileTransfer.cxx | 33 +++++++++++++++++++++++++ vncviewer/FileTransfer.h | 8 +++++++ vncviewer/vncviewer.rc | 30 +++++++++++++---------- 10 files changed, 124 insertions(+), 66 deletions(-) diff --git a/rfb/TransferQueue.cxx b/rfb/TransferQueue.cxx index 820ca686..58b92734 100644 --- a/rfb/TransferQueue.cxx +++ b/rfb/TransferQueue.cxx @@ -242,12 +242,31 @@ bool TransferQueue::setFlagsAt(unsigned int number, unsigned int value) { if ((number >= 0) && (number < m_numEntries)) { - m_pEntries[number].info.flags = value; + m_pEntries[number].info.flags = m_pEntries[number].info.flags | value; return true; } return false; } +bool +TransferQueue::clearFlagAt(unsigned int number, unsigned int value) +{ + if ((number >= 0) && (number < m_numEntries)) { + m_pEntries[number].info.flags = (m_pEntries[number].info.flags & (value ^ 0xFFFFFFFF)); + return true; + } + return false; +} + +bool +TransferQueue::setFlagToAll(unsigned int flag) +{ + for (unsigned int i = 0; i < m_numEntries; i++) { + setFlagsAt(i, flag); + } + return true; +} + bool TransferQueue::deleteAt(unsigned int number) { diff --git a/rfb/TransferQueue.h b/rfb/TransferQueue.h index b12c0582..02a043df 100644 --- a/rfb/TransferQueue.h +++ b/rfb/TransferQueue.h @@ -64,6 +64,8 @@ namespace rfb { bool setSizeAt(unsigned int number, unsigned int value); bool setDataAt(unsigned int number, unsigned int value); bool setFlagsAt(unsigned int number, unsigned int value); + bool clearFlagAt(unsigned int number, unsigned int value); + bool setFlagToAll(unsigned int flag); bool deleteAt(unsigned int number); diff --git a/rfb/fttypes.h b/rfb/fttypes.h index 229d44bd..5b08fd01 100644 --- a/rfb/fttypes.h +++ b/rfb/fttypes.h @@ -30,9 +30,23 @@ #define FT_MAX_STATUS_STRINGS 255 #define FT_MAX_LENGTH_STATUS_STRINGS 130 -#define FT_ATTR_UNKNOWN 0x00000000 -#define FT_ATTR_FILE 0x00000001 -#define FT_ATTR_DIR 0x00000002 +#define FT_ATTR_UNKNOWN 0x00000000 +#define FT_ATTR_FILE 0x00000001 +#define FT_ATTR_DIR 0x00000002 + +#define FT_ATTR_RESIZE_NEEDED 0x00040000 +#define FT_ATTR_FOLDER_EXISTS 0x00080000 +#define FT_ATTR_COPY_OVERWRITE 0x00100000 +#define FT_ATTR_FLR_UPLOAD_CHECK 0x00200000 +#define FT_ATTR_FLR_UPLOAD_ADD 0x00400000 +#define FT_ATTR_COPY_UPLOAD 0x00800000 +#define FT_ATTR_FLR_DOWNLOAD_CHECK 0x01000000 +#define FT_ATTR_FLR_DOWNLOAD_ADD 0x02000000 +#define FT_ATTR_COPY_DOWNLOAD 0x04000000 +#define FT_ATTR_DELETE_LOCAL 0x08000000 +#define FT_ATTR_DELETE_REMOTE 0x10000000 +#define FT_ATTR_RENAME_LOCAL 0x20000000 +#define FT_ATTR_RENAME_REMOTE 0x40000000 #define FT_FLR_DEST_MAIN 101 #define FT_FLR_DEST_BROWSE 102 diff --git a/vncviewer/FTDialog.cxx b/vncviewer/FTDialog.cxx index 72d9e28e..47e0c240 100644 --- a/vncviewer/FTDialog.cxx +++ b/vncviewer/FTDialog.cxx @@ -102,8 +102,6 @@ FTDialog::initFTDialog() m_pLocalLV->initialize(m_hInstance); m_pRemoteLV->initialize(m_hInstance); - m_pProgress->initialize(0,0); - m_hwndLocalPath = GetDlgItem(m_hwndFTDialog, IDC_FTLOCALPATH); m_hwndRemotePath = GetDlgItem(m_hwndFTDialog, IDC_FTREMOTEPATH); @@ -597,13 +595,6 @@ FTDialog::refreshBtnState() } } m_BtnState.cancelBtn = false; -/* - if (m_pFileTransfer->isTransferEnable()) { - setAllButtonsState(-1, -1, -1, -1, 1); - } else { - setAllButtonsState(-1, -1, -1, -1, 0); - } -*/ } void @@ -629,3 +620,9 @@ FTDialog::setButtonsState() case true: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTCANCEL), TRUE); break; } } + +void +FTDialog::setStatusText(char *pText) +{ + SetDlgItemText(m_hwndFTDialog, IDC_FTSTATUS, pText); +} diff --git a/vncviewer/FTDialog.h b/vncviewer/FTDialog.h index bfedf315..2c9ebfa1 100644 --- a/vncviewer/FTDialog.h +++ b/vncviewer/FTDialog.h @@ -51,6 +51,10 @@ namespace rfb { void addRemoteLVItems(FileInfo *pFI); void reqFolderUnavailable(); + + void setStatusText(char *pText); + + FTProgress *m_pProgress; private: FileTransfer *m_pFileTransfer; @@ -102,8 +106,6 @@ namespace rfb { FTListView *m_pLocalLV; FTListView *m_pRemoteLV; - FTProgress *m_pProgress; - int m_FTMenuSource; char m_szLocalPath[FT_FILENAME_SIZE]; diff --git a/vncviewer/FTProgress.cxx b/vncviewer/FTProgress.cxx index 46316f07..95b4dd4d 100644 --- a/vncviewer/FTProgress.cxx +++ b/vncviewer/FTProgress.cxx @@ -33,6 +33,11 @@ FTProgress::FTProgress(HWND hwndParent) m_pSingleProgress = NULL; m_pGeneralProgress = NULL; + + m_hwndSinglePercent = GetDlgItem(m_hwndParent, IDC_FTSINGLEPERCENT); + m_hwndGeneralPercent = GetDlgItem(m_hwndParent, IDC_FTGENERALPERCENT); + + m_bInitialized = createProgressBarObjects(); } FTProgress::~FTProgress() @@ -40,43 +45,35 @@ FTProgress::~FTProgress() destroyProgressBarObjects(); } -bool -FTProgress::initialize(DWORD64 totalMaxValue, DWORD maxValue) +void +FTProgress::increase(DWORD value) { - m_bInitialized = false; - - m_hwndSinglePercent = GetDlgItem(m_hwndParent, IDC_FTSINGLEPERCENT); - m_hwndGeneralPercent = GetDlgItem(m_hwndParent, IDC_FTGENERALPERCENT); - - if ((m_hwndSinglePercent == NULL) || (m_hwndGeneralPercent == NULL)) return false; - - if (!createProgressBarObjects()) return false; + if (!m_bInitialized) return; - if (!initProgressControls(totalMaxValue, maxValue)) return false; + m_pSingleProgress->increase(value); + m_pGeneralProgress->increase(value); setProgressText(); - - m_bInitialized = true; - return true; } void -FTProgress::increase(DWORD value) +FTProgress::clearAndInitGeneral(DWORD64 dw64MaxValue, DWORD64 dw64Position) { if (!m_bInitialized) return; - m_pSingleProgress->increase(value); - m_pGeneralProgress->increase(value); + m_pGeneralProgress->clear(); + m_pGeneralProgress->init(dw64MaxValue, dw64Position); setProgressText(); } void -FTProgress::clearSingle() +FTProgress::clearAndInitSingle(DWORD dwMaxValue, DWORD dwPosition) { if (!m_bInitialized) return; m_pSingleProgress->clear(); + m_pSingleProgress->init(dwMaxValue, dwPosition); setProgressText(); } @@ -130,22 +127,6 @@ FTProgress::destroyProgressBarObjects() return true; } -bool -FTProgress::initProgressControls(DWORD64 totalMaxValue, DWORD maxValue) -{ - bool bResult = true; - - if ((m_pSingleProgress != NULL) && (m_pGeneralProgress != NULL)) { - if (!m_pSingleProgress->init(totalMaxValue, 0)) return false; - if (!m_pGeneralProgress->init(maxValue, 0)) return false; - } else { - return false; - } - - setProgressText(); - return true; -} - void FTProgress::setProgressText() { diff --git a/vncviewer/FTProgress.h b/vncviewer/FTProgress.h index bcfb02c8..c36c0791 100644 --- a/vncviewer/FTProgress.h +++ b/vncviewer/FTProgress.h @@ -39,9 +39,9 @@ namespace rfb { FTProgress(HWND hwndParent); ~FTProgress(); - bool initialize(DWORD64 totalMaxValue, DWORD maxValue); void increase(DWORD value); - void clearSingle(); + void clearAndInitGeneral(DWORD64 dw64MaxValue, DWORD64 dw64Position); + void clearAndInitSingle(DWORD dwMaxValue, DWORD dwPosition); void clearAll(); private: @@ -54,8 +54,6 @@ namespace rfb { bool m_bInitialized; - bool initProgressControls(DWORD64 totalMaxValue, DWORD maxValue); - void setProgressText(); bool createProgressBarObjects(); bool destroyProgressBarObjects(); diff --git a/vncviewer/FileTransfer.cxx b/vncviewer/FileTransfer.cxx index 57e67638..2eacee30 100644 --- a/vncviewer/FileTransfer.cxx +++ b/vncviewer/FileTransfer.cxx @@ -53,6 +53,8 @@ FileTransfer::initialize(rdr::InStream *pIS, rdr::OutStream *pOS) m_pReader = new FTMsgReader(pIS); m_pWriter = new FTMsgWriter(pOS); + m_TransferQueue.free(); + m_bInitialized = true; return true; } @@ -90,6 +92,37 @@ FileTransfer::processFTMsg(int type) } } +bool +FileTransfer::isTransferEnable() +{ + if (m_TransferQueue.getNumEntries() > 0) return true; else return false; +} + +void +FileTransfer::upload(TransferQueue *pTransQueue) +{ + if ((m_bFTDlgShown) && (!isTransferEnable())) m_pFTDialog->setStatusText("Starting Copy Operation"); + + pTransQueue->setFlagToAll(FT_ATTR_RESIZE_NEEDED); + + m_TransferQueue.add(pTransQueue); + + resizeSending(); + +} + +void +FileTransfer::download(TransferQueue *pTransQueue) +{ + +} + +void +FileTransfer::resizeSending() +{ + +} + bool FileTransfer::procFileListDataMsg() { diff --git a/vncviewer/FileTransfer.h b/vncviewer/FileTransfer.h index 805c10ec..71ecf0af 100644 --- a/vncviewer/FileTransfer.h +++ b/vncviewer/FileTransfer.h @@ -49,6 +49,12 @@ namespace rfb { void requestFileList(char *pPath, int dest, bool bDirOnly); + void upload(TransferQueue *pTransQueue); + void download(TransferQueue *pTransQueue); + + bool isTransferEnable(); + void resizeSending(); + private: bool m_bFTDlgShown; bool m_bInitialized; @@ -59,6 +65,8 @@ namespace rfb { FTMsgWriter *m_pWriter; FileInfo m_queueFileListRqst; + + TransferQueue m_TransferQueue; bool procFileListDataMsg(); bool procFileDownloadDataMsg(); diff --git a/vncviewer/vncviewer.rc b/vncviewer/vncviewer.rc index a878beb0..ff8ea04a 100644 --- a/vncviewer/vncviewer.rc +++ b/vncviewer/vncviewer.rc @@ -33,20 +33,12 @@ EXSTYLE WS_EX_CONTEXTHELP | WS_EX_CONTROLPARENT CAPTION "TightVNC File Transfers" FONT 8, "MS Sans Serif" BEGIN - EDITTEXT IDC_FTLOCALPATH,7,20,155,12,ES_AUTOHSCROLL CONTROL "List1",IDC_FTLOCALLIST,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,7,40,200,196 - PUSHBUTTON "...",IDC_FTLOCALBROWSE,165,20,14,12 - PUSHBUTTON "",IDC_FTLOCALUP,179,20,14,12,BS_ICON - PUSHBUTTON "",IDC_FTLOCALRELOAD,193,20,14,12,BS_ICON - EDITTEXT IDC_FTREMOTEPATH,323,20,155,12,ES_AUTOHSCROLL CONTROL "List2",IDC_FTREMOTELIST,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,323,40,200,196 - PUSHBUTTON "...",IDC_FTREMOTEBROWSE,481,20,14,12 - PUSHBUTTON "",IDC_FTREMOTEUP,495,20,14,12,BS_ICON - PUSHBUTTON "",IDC_FTREMOTERELOAD,509,20,14,12,BS_ICON PUSHBUTTON "Upload Files and Folders",IDC_FTUPLOAD,218,66,94,12, WS_DISABLED PUSHBUTTON "Download Files and Folders",IDC_FTDOWNLOAD,218,85,94,12, @@ -54,16 +46,28 @@ BEGIN PUSHBUTTON "Cancel File Transfer",IDC_FTCANCEL,218,167,94,12, WS_DISABLED PUSHBUTTON "Close File Transfers",IDC_FTCLOSE,218,217,94,12 - COMBOBOX IDC_FTSTATUS,7,262,516,30,CBS_DROPDOWNLIST | CBS_SORT | - WS_VSCROLL | WS_TABSTOP + EDITTEXT IDC_FTLOCALPATH,7,20,155,12,ES_AUTOHSCROLL | NOT + WS_TABSTOP CTEXT "Local Computer",IDC_FTLOCALLABEL,7,7,200,10 - CTEXT "TightVNC Server",IDC_FTREMOTELABEL,323,7,200,10 - LTEXT "File Transfer",IDC_STATIC,7,245,40,8 - LTEXT "Current File",IDC_STATIC,323,245,36,8 + PUSHBUTTON "...",IDC_FTLOCALBROWSE,165,20,14,12,NOT WS_TABSTOP + PUSHBUTTON "",IDC_FTLOCALUP,179,20,14,12,BS_ICON | NOT WS_TABSTOP + PUSHBUTTON "",IDC_FTLOCALRELOAD,193,20,14,12,BS_ICON | NOT + WS_TABSTOP CONTROL "Progress1",IDC_FTGENERALPROGRESS,"msctls_progress32", WS_BORDER,55,244,128,10 + LTEXT "File Transfer",IDC_STATIC,7,245,40,8 + COMBOBOX IDC_FTSTATUS,7,262,516,30,CBS_DROPDOWNLIST | CBS_SORT | + WS_VSCROLL CONTROL "Progress1",IDC_FTSINGLEPROGRESS,"msctls_progress32", WS_BORDER,370,244,128,10 + EDITTEXT IDC_FTREMOTEPATH,323,20,155,12,ES_AUTOHSCROLL | NOT + WS_TABSTOP + PUSHBUTTON "...",IDC_FTREMOTEBROWSE,481,20,14,12,NOT WS_TABSTOP + PUSHBUTTON "",IDC_FTREMOTEUP,495,20,14,12,BS_ICON | NOT WS_TABSTOP + PUSHBUTTON "",IDC_FTREMOTERELOAD,509,20,14,12,BS_ICON | NOT + WS_TABSTOP + CTEXT "TightVNC Server",IDC_FTREMOTELABEL,323,7,200,10 + LTEXT "Current File",IDC_STATIC,323,245,36,8 CTEXT "0%",IDC_FTGENERALPERCENT,189,245,18,8 CTEXT "0%",IDC_FTSINGLEPERCENT,505,245,18,8 END -- 2.39.5