[ttssh2-commit] [10799] ログダイアログでファイル名を定期的に更新するようにした

Back to archive index
scmno****@osdn***** scmno****@osdn*****
2023年 7月 6日 (木) 23:45:17 JST


Revision: 10799
          https://osdn.net/projects/ttssh2/scm/svn/commits/10799
Author:   zmatsuo
Date:     2023-07-06 23:45:17 +0900 (Thu, 06 Jul 2023)
Log Message:
-----------
ログダイアログでファイル名を定期的に更新するようにした

- 次の動作を行うと更新は停止する
  - ファイル名エディットボックスからフォーカスが移動
  - ファイル名エディットボックスをクリック
  - ファイル名エディットボックスでキー押下
- %H%M%S.log など時刻を含んでいると更新される

ticket #46392

Ticket Links:
------------
    https://osdn.net/projects/ttssh2/tracker/detail/46392

Modified Paths:
--------------
    trunk/teraterm/teraterm/filesys_log.cpp

-------------- next part --------------
Modified: trunk/teraterm/teraterm/filesys_log.cpp
===================================================================
--- trunk/teraterm/teraterm/filesys_log.cpp	2023-07-05 14:43:20 UTC (rev 10798)
+++ trunk/teraterm/teraterm/filesys_log.cpp	2023-07-06 14:45:17 UTC (rev 10799)
@@ -420,6 +420,9 @@
 	// work
 	BOOL file_exist;
 	int current_bom; // \x91\xB6\x8D݂\xB7\x82\xE9\x83t\x83@\x83C\x83\x8B\x82̃G\x83\x93\x83R\x81[\x83f\x83B\x83\x93\x83O\x81i\x83t\x83@\x83C\x83\x8B\x82\xCCBOM\x82\xA9\x82画\x92\xE8\x81j
+	UINT_PTR timer;
+	BOOL enable_timer;
+	WNDPROC proc;
 	TTTSet *pts;
 	TComVar *pcv;
 } LogDlgWork_t;
@@ -522,6 +525,21 @@
 	work->current_bom = bom;
 }
 
+static LRESULT CALLBACK FNameEditProc(HWND dlg, UINT msg,
+									  WPARAM wParam, LPARAM lParam)
+{
+	LogDlgWork_t *work = (LogDlgWork_t *)GetWindowLongPtr(dlg, GWLP_USERDATA);
+	switch (msg) {
+	case WM_KEYDOWN:
+	case WM_LBUTTONDOWN:
+	case WM_RBUTTONDOWN:
+	case WM_KILLFOCUS:
+		work->enable_timer = FALSE;
+		break;
+	}
+	return CallWindowProcW(work->proc, dlg, msg, wParam, lParam);
+}
+
 static INT_PTR CALLBACK LogFnHook(HWND Dialog, UINT Message, WPARAM wParam, LPARAM lParam)
 {
 	static const DlgTextInfo TextInfos[] = {
@@ -571,8 +589,12 @@
 		// \x83t\x83@\x83C\x83\x8B\x96\xBC\x82\xF0\x90ݒ肷\x82\xE9
 		//   \x83t\x83@\x83C\x83\x8B\x82̃`\x83F\x83b\x83N\x81A\x83R\x83\x93\x83g\x83\x8D\x81[\x83\x8B\x82̐ݒ\xE8\x82\xE0\x8Ds\x82\xED\x82\xEA\x82\xE9
 		//		WM_COMMAND, EN_CHANGE \x82\xAA\x94\xAD\x90\xB6\x82\xB7\x82\xE9
-		SetDlgItemTextW(Dialog, IDC_FOPT_FILENAME_EDIT, work->info->filename);
-		work->info->filename = NULL;
+		wchar_t *fname = FLogGetLogFilename(work->info->filename);
+		SetDlgItemTextW(Dialog, IDC_FOPT_FILENAME_EDIT, fname);
+		free(fname);
+		HWND file_edit = GetDlgItem(Dialog, IDC_FOPT_FILENAME_EDIT);
+		SetWindowLongPtr(file_edit, GWLP_USERDATA, (LONG_PTR)work);
+		work->proc = (WNDPROC)SetWindowLongPtrW(file_edit, GWLP_WNDPROC, (LONG_PTR)FNameEditProc);
 
 		// timestamp \x8E\xED\x95\xCA
 		int tstype = pts->LogTimestampType == TIMESTAMP_LOCAL ? 0 :
@@ -593,6 +615,11 @@
 
 		CenterWindow(Dialog, GetParent(Dialog));
 
+		SetFocus(GetDlgItem(Dialog, IDC_FOPT_FILENAME_EDIT));
+
+		work->enable_timer = TRUE;
+		work->timer = SetTimer(Dialog, 0, 1000, NULL);
+
 		return TRUE;
 	}
 
@@ -704,7 +731,25 @@
 		DragFinish(hDrop);
 		return TRUE;
 	}
+	case WM_TIMER: {
+		if (!work->enable_timer) {
+			KillTimer(Dialog, work->timer);
+			work->timer = 0;
+			break;
+		}
+		wchar_t *fname = FLogGetLogFilename(work->info->filename);
+		SetDlgItemTextW(Dialog, IDC_FOPT_FILENAME_EDIT, fname);
+		SendDlgItemMessageW(Dialog, IDC_FOPT_FILENAME_EDIT, EM_SETSEL, 0, -1);
+		free(fname);
+		work->timer = SetTimer(Dialog, 0, 1000, NULL);
+		break;
 	}
+	case WM_DESTROY:
+		if (work->timer != 0) {
+			KillTimer(Dialog, work->timer);
+		}
+		break;
+	}
 	return FALSE;
 }
 
@@ -1354,15 +1399,12 @@
 BOOL FLogOpenDialog(HINSTANCE hInst, HWND hWnd, FLogDlgInfo_t *info)
 {
 	LogDlgWork_t *work = (LogDlgWork_t *)calloc(sizeof(LogDlgWork_t), 1);
-	wchar_t *srcfnameW = FLogGetLogFilename(info->filename);
 	work->info = info;
-	work->info->filename = srcfnameW;
 	work->pts = &ts;
 	work->pcv = &cv;
 	INT_PTR ret = TTDialogBoxParam(
 		hInst, MAKEINTRESOURCE(IDD_LOGDLG),
 		hWnd, LogFnHook, (LPARAM)work);
-	free(srcfnameW);
 	free(work);
 	return ret == IDOK ? TRUE : FALSE;
 }


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