[Ttssh2-commit] [8871] ファイル転送ダイアログ(ftdlg)を汎用的に使用できるよう修正

Back to archive index
scmno****@osdn***** scmno****@osdn*****
2020年 8月 6日 (木) 00:05:17 JST


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;


Ttssh2-commit メーリングリストの案内
Back to archive index