Revision: 8871 https://osdn.net/projects/ttssh2/scm/svn/commits/8871 Author: zmatsuo Date: 2020-08-06 00:05:16 +0900 (Thu, 06 Aug 2020) Log Message: ----------- ファイル転送ダイアログ(ftdlg)を汎用的に使用できるよう修正 - メンバ変数から PFileVar をなくした - TFile(PVarPFileVar), TTTSet, TComVar なしで使用可 - 従来と同等のAPIも残した Modified Paths: -------------- branches/filesys_log/teraterm/teraterm/filesys.cpp branches/filesys_log/teraterm/teraterm/filesys_log.cpp branches/filesys_log/teraterm/teraterm/ftdlg.cpp branches/filesys_log/teraterm/teraterm/ftdlg.h -------------- next part -------------- Modified: branches/filesys_log/teraterm/teraterm/filesys.cpp =================================================================== --- branches/filesys_log/teraterm/teraterm/filesys.cpp 2020-08-05 15:05:02 UTC (rev 8870) +++ branches/filesys_log/teraterm/teraterm/filesys.cpp 2020-08-05 15:05:16 UTC (rev 8871) @@ -247,7 +247,7 @@ if (FTDlg!=NULL) { FTDlg->Create(hInst, HVTWin, fv, &cv, &ts); - FTDlg->RefreshNum(); + FTDlg->RefreshNum(fv); } SendDlg = FTDlg; /* File send */ @@ -477,12 +477,12 @@ if (FileRetrySend) { if (SendVar->ByteCount != BCOld) - SendDlg->RefreshNum(); + SendDlg->RefreshNum(SendVar); return; } } FileDlgRefresh = SendVar->ByteCount; - SendDlg->RefreshNum(); + SendDlg->RefreshNum(SendVar); BCOld = SendVar->ByteCount; if (fc != 0) return; @@ -573,7 +573,7 @@ if (FileRetrySend) { if (SendVar->ByteCount != BCOld) - SendDlg->RefreshNum(); + SendDlg->RefreshNum(SendVar); return; } if (ts.LocalEcho>0) @@ -585,7 +585,7 @@ } } if ((fc==0) || ((SendVar->ByteCount % 100 == 0) && (FileBracketPtr == 0))) { - SendDlg->RefreshNum(); + SendDlg->RefreshNum(SendVar); BCOld = SendVar->ByteCount; if (fc!=0) return; Modified: branches/filesys_log/teraterm/teraterm/filesys_log.cpp =================================================================== --- branches/filesys_log/teraterm/teraterm/filesys_log.cpp 2020-08-05 15:05:02 UTC (rev 8870) +++ branches/filesys_log/teraterm/teraterm/filesys_log.cpp 2020-08-05 15:05:16 UTC (rev 8871) @@ -153,7 +153,7 @@ if (FTDlg!=NULL) { FTDlg->Create(hInst, HVTWin, fv, &cv, &ts); - FTDlg->RefreshNum(); + FTDlg->RefreshNum(fv); } // if (fv->OpId==OpLog) @@ -1192,7 +1192,7 @@ } if (FLogIsPause() || cv.ProtoFlag) return; if (FLogDlg!=NULL) - FLogDlg->RefreshNum(); + FLogDlg->RefreshNum(LogVar); // \x83\x8D\x83O\x81E\x83\x8D\x81[\x83e\x81[\x83g LogRotate(); @@ -1428,7 +1428,7 @@ LogVar->ByteCount = LogVar->ByteCount + len; if (FLogDlg!=NULL) - FLogDlg->RefreshNum(); + FLogDlg->RefreshNum(LogVar); } } Modified: branches/filesys_log/teraterm/teraterm/ftdlg.cpp =================================================================== --- branches/filesys_log/teraterm/teraterm/ftdlg.cpp 2020-08-05 15:05:02 UTC (rev 8870) +++ branches/filesys_log/teraterm/teraterm/ftdlg.cpp 2020-08-05 15:05:16 UTC (rev 8871) @@ -48,32 +48,63 @@ ///////////////////////////////////////////////////////////////////////////// // CFileTransDlg dialog -BOOL CFileTransDlg::Create(HINSTANCE hInstance, HWND hParent, PFileVar pfv, PComVar pcv, PTTSet pts) +CFileTransDlg::CFileTransDlg() { + SmallIcon = NULL; + BigIcon = NULL; + DlgCaption = NULL; + FileName = NULL; + FullName = NULL; + ProgStat = 0; +} + +CFileTransDlg::~CFileTransDlg() +{ + free(DlgCaption); + free(FileName); + free(FullName); +} + +BOOL CFileTransDlg::Create(HINSTANCE hInstance, CFileTransDlgInfo *info) +{ BOOL Ok; int fuLoad = LR_DEFAULTCOLOR; HWND hwnd; - fv = pfv; - UILanguageFile = pts->UILanguageFile; + UILanguageFile = info->UILanguageFile; + OpId = info->OpId; + DlgCaption = _strdup(info->DlgCaption); + FileName = _strdup(info->FileName); + FullName = _strdup(info->FullName); + HideDialog = info->HideDialog; + HMainWin = info->HMainWin; Pause = FALSE; hwnd = GetForegroundWindow(); - if (fv->OpId == OpLog) { // parent window is desktop + if (OpId == OpLog) { // parent window is desktop Ok = TTCDialog::Create(hInstance, GetDesktopWindow(), IDD_FILETRANSDLG); } else { // parent window is VT window Ok = TTCDialog::Create(hInstance, NULL, IDD_FILETRANSDLG); } - if (fv->OpId == OpSendFile) { - InitDlgProgress(m_hWnd, IDC_TRANSPROGRESS, &fv->ProgStat); + if (OpId == OpSendFile) { + HWND HProg = ::GetDlgItem(m_hWnd, IDC_TRANSPROGRESS); + + ProgStat = 0; + + ::SendMessage(HProg, PBM_SETRANGE, (WPARAM)0, MAKELPARAM(0, 100)); + ::SendMessage(HProg, PBM_SETSTEP, (WPARAM)1, 0); + ::SendMessage(HProg, PBM_SETPOS, (WPARAM)0, 0); + + ::ShowWindow(HProg, SW_SHOW); + ::ShowWindow(GetDlgItem(IDC_TRANS_ELAPSED), SW_SHOW); } - if (!fv->HideDialog) { + if (!HideDialog) { // Visible = False \x82̃_\x83C\x83A\x83\x8D\x83O\x82\xF0\x95\\x8E\xA6\x82\xB7\x82\xE9 ShowWindow(SW_SHOWNORMAL); - if (fv->OpId == OpLog) { + if (OpId == OpLog) { ShowWindow(SW_MINIMIZE); } } @@ -83,11 +114,26 @@ ::SetForegroundWindow(hwnd); } - fv->HWin = GetSafeHwnd(); - return Ok; } +BOOL CFileTransDlg::Create(HINSTANCE hInstance, HWND hParent, PFileVar fv, PComVar pcv, PTTSet pts) +{ + CFileTransDlgInfo info; + + info.UILanguageFile = pts->UILanguageFile; + info.OpId = fv->OpId; + info.DlgCaption = _strdup(fv->DlgCaption); + info.FileName = _strdup(&fv->FullName[fv->DirLen]); + info.FullName = _strdup(fv->FullName); + info.HideDialog = fv->HideDialog; + info.HMainWin = fv->HMainWin; + BOOL r = Create(hInstance, &info); + fv->HWin = m_hWnd; + fv->ProgStat = ProgStat; + return r; +} + /** * \x83e\x83L\x83X\x83g\x82̕ύX\x82̂\xDD */ @@ -108,7 +154,7 @@ } } -void CFileTransDlg::RefreshNum() +void CFileTransDlg::RefreshNum(DWORD StartTime, LONG FileSize, LONG ByteCount) { char NumStr[24]; double rate; @@ -116,15 +162,15 @@ static DWORD prev_elapsed; DWORD elapsed; - if (fv->OpId == OpSendFile) { - if (fv->StartTime == 0) { + if (OpId == OpSendFile) { + if (StartTime == 0) { SetDlgItemText(IDC_TRANS_ETIME, "0:00"); prev_elapsed = 0; } else { - elapsed = (GetTickCount() - fv->StartTime) / 1000; + elapsed = (GetTickCount() - StartTime) / 1000; if (elapsed != prev_elapsed && elapsed != 0) { - rate2 = fv->ByteCount / elapsed; + rate2 = ByteCount / elapsed; if (rate2 < 1200) { _snprintf_s(NumStr, sizeof(NumStr), _TRUNCATE, "%d:%02d (%dBytes/s)", elapsed / 60, elapsed % 60, rate2); } @@ -138,22 +184,30 @@ prev_elapsed = elapsed; } } - } - if (fv->OpId == OpSendFile && fv->FileSize > 0) { - rate = 100.0 * (double)fv->ByteCount / (double)fv->FileSize; - if (fv->ProgStat < (int)rate) { - fv->ProgStat = (int)rate; - SendDlgItemMessage(IDC_TRANSPROGRESS, PBM_SETPOS, (WPARAM)fv->ProgStat, 0); + if (FileSize > 0) { + rate = 100.0 * (double)ByteCount / (double)FileSize; + if (ProgStat < (int)rate) { + ProgStat = (int)rate; + SendDlgItemMessage(IDC_TRANSPROGRESS, PBM_SETPOS, (WPARAM)ProgStat, 0); + } + _snprintf_s(NumStr,sizeof(NumStr),_TRUNCATE,"%u (%3.1f%%)",ByteCount, rate); } - _snprintf_s(NumStr,sizeof(NumStr),_TRUNCATE,"%u (%3.1f%%)",fv->ByteCount, rate); + SetDlgItemText(IDC_TRANSBYTES, NumStr); } else { - _snprintf_s(NumStr,sizeof(NumStr),_TRUNCATE,"%u",fv->ByteCount); + _snprintf_s(NumStr,sizeof(NumStr),_TRUNCATE,"%u",ByteCount); + SetDlgItemText(IDC_TRANSBYTES, NumStr); } - SetDlgItemText(IDC_TRANSBYTES, NumStr); } +void CFileTransDlg::RefreshNum(TFileVar *fv) +{ + ProgStat = fv->ProgStat; + RefreshNum(fv->StartTime, fv->FileSize, fv->ByteCount); + fv->ProgStat = ProgStat; +} + ///////////////////////////////////////////////////////////////////////////// // CFileTransDlg message handler @@ -171,7 +225,7 @@ int fuLoad = LR_DEFAULTCOLOR; - if (fv->HideDialog) { + if (HideDialog) { // Visible = False \x82ł\xE0\x83t\x83H\x83A\x83O\x83\x89\x83E\x83\x93\x83h\x82ɗ\x88\x82Ă\xB5\x82܂\xA4\x82̂ŁA\x82\xBB\x82\xA4\x82Ȃ\xE7\x82Ȃ\xA2 // \x82悤\x82Ɋg\x92\xA3\x83X\x83^\x83C\x83\x8B WS_EX_NOACTIVATE \x82\xF0\x8Ew\x92肷\x82\xE9\x81B // (Windows 2000 \x88ȏ\xE3\x82ŗL\x8C\xF8) @@ -180,12 +234,10 @@ ModifyStyleEx(0, WS_EX_NOACTIVATE | WS_EX_APPWINDOW); } - SetWindowText(fv->DlgCaption); - SetDlgItemText(IDC_TRANSFNAME, &(fv->FullName[fv->DirLen])); + SetWindowText(DlgCaption); + SetDlgItemText(IDC_TRANSFNAME, FileName); + SetDlgItemText(IDC_EDIT_FULLPATH, FullName); - // \x83\x8D\x83O\x83t\x83@\x83C\x83\x8B\x82̓t\x83\x8B\x83p\x83X\x95\\x8E\xA6\x82ɂ\xB7\x82\xE9(2004.8.6 yutaka) - SetDlgItemText(IDC_EDIT_FULLPATH, &(fv->FullName[0])); - SetDlgTexts(m_hWnd, TextInfos, _countof(TextInfos), UILanguageFile); if (IsWindowsNT4()) { @@ -210,8 +262,7 @@ BOOL CFileTransDlg::OnCancel( ) { - //::PostMessage(fv->HMainWin,WM_USER_FTCANCEL,fv->OpId,0); - FileTransEnd(fv->OpId); + FileTransEnd(OpId); return TRUE; } @@ -220,14 +271,14 @@ switch (LOWORD(wParam)) { case IDC_TRANSPAUSESTART: ChangeButton(! Pause); - FileTransPause(fv->OpId, Pause); + FileTransPause(OpId, Pause); return TRUE; case IDC_TRANSHELP: - if (fv->OpId == OpLog) { - ::PostMessage(fv->HMainWin, WM_USER_DLGHELP2, HlpFileLog, 0); + if (OpId == OpLog) { + ::PostMessage(HMainWin, WM_USER_DLGHELP2, HlpFileLog, 0); } else { - ::PostMessage(fv->HMainWin, WM_USER_DLGHELP2, HlpFileSend, 0); + ::PostMessage(HMainWin, WM_USER_DLGHELP2, HlpFileSend, 0); } return TRUE; default: Modified: branches/filesys_log/teraterm/teraterm/ftdlg.h =================================================================== --- branches/filesys_log/teraterm/teraterm/ftdlg.h 2020-08-05 15:05:02 UTC (rev 8870) +++ branches/filesys_log/teraterm/teraterm/ftdlg.h 2020-08-05 15:05:16 UTC (rev 8871) @@ -34,17 +34,27 @@ ///////////////////////////////////////////////////////////////////////////// // CFileTransDlg dialog +typedef struct { + const char *UILanguageFile; + WORD OpId; + char *DlgCaption; + char *FileName; + char *FullName; + BOOL HideDialog; + HWND HMainWin; +} CFileTransDlgInfo; + class CFileTransDlg : public TTCDialog { public: - CFileTransDlg() { - SmallIcon = NULL; - BigIcon = NULL; - } + CFileTransDlg(); + ~CFileTransDlg(); + BOOL Create(HINSTANCE hInstance, CFileTransDlgInfo *info); BOOL Create(HINSTANCE hInstance, HWND hParent, PFileVar pfv, PComVar pcv, PTTSet pts); void ChangeButton(BOOL PauseFlag); - void RefreshNum(); + void RefreshNum(DWORD StartTime, LONG FileSize, LONG ByteCount); + void RefreshNum(TFileVar *fv); private: virtual BOOL OnCancel(); @@ -53,11 +63,17 @@ virtual BOOL OnInitDialog(); private: - PFileVar fv; BOOL Pause; HANDLE SmallIcon; HANDLE BigIcon; const char *UILanguageFile; + WORD OpId; + int ProgStat; // \x83v\x83\x8D\x83O\x83\x8C\x83X\x83o\x81[\x82̐i\x92\xBB\x82\xAA\x96߂\xE7\x82Ȃ\xA2\x82悤\x8BL\x89\xAF\x82\xB5\x82Ă\xA8\x82\xAD + BOOL HideDialog; + char *DlgCaption; + char *FileName; + char *FullName; + HWND HMainWin; }; typedef CFileTransDlg *PFileTransDlg;