Develop and Download Open Source Software

Browse Subversion Repository

Diff of /trunk/teraterm/teraterm/filesys_log.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 10143 by nmaya, Thu Jun 23 23:59:07 2022 UTC revision 10144 by nmaya, Sat Aug 13 11:35:14 2022 UTC
# Line 389  typedef struct { Line 389  typedef struct {
389          FLogDlgInfo_t *info;          FLogDlgInfo_t *info;
390          // work          // work
391          BOOL file_exist;          BOOL file_exist;
392          int current_bom;          int current_bom; // 存在するファイルのエンコーディング(ファイルのBOMから判定)
393          TTTSet *pts;          TTTSet *pts;
394          TComVar *pcv;          TComVar *pcv;
395  } LogDlgWork_t;  } LogDlgWork_t;
396    
397  static void ArrangeControls(HWND Dialog, LogDlgWork_t *work)  
398    /*
399     * Log ダイアログのうち、Enable/Disable が変化するコントロール
400     *
401     * - Append
402     *   指定されたファイルが存在する場合は Enable
403     *   指定されたファイルが存在しない場合は Disable
404     *
405     * - BOM, Encoding
406     *   Text かつ New/Overwrite の場合に Enable
407     *   そうでない場合に Disable
408     *
409     * - Plain Text, Timestamp, Timestamp 種別
410     *   Text の場合は Enable
411     *   Binary の場合は Disable
412     *
413     * - Timestamp 種別
414     *   Timestamp=on の場合は Enable
415     *   Timestamp=off の場合は Disable
416     */
417    
418    static void ArrangeControls(HWND Dialog, LogDlgWork_t *work,
419                                WORD Append, WORD LogBinary,
420                                WORD LogTypePlainText, WORD LogTimestamp)
421  {  {
422          if (work->file_exist) {          if (work->file_exist) {
423                    // Append ラジオボタンは、ファイルがあるときだけ有効になる
424                  EnableWindow(GetDlgItem(Dialog, IDC_APPEND), TRUE);                  EnableWindow(GetDlgItem(Dialog, IDC_APPEND), TRUE);
425                  if (work->pts->Append > 0) {  
426                    if (Append > 0) {
427                          CheckRadioButton(Dialog, IDC_NEW_OVERWRITE, IDC_APPEND, IDC_APPEND);                          CheckRadioButton(Dialog, IDC_NEW_OVERWRITE, IDC_APPEND, IDC_APPEND);
428                  }                  }
429                    else {
430                            CheckRadioButton(Dialog, IDC_NEW_OVERWRITE, IDC_APPEND, IDC_NEW_OVERWRITE);
431                    }
432          }          }
433          else {          else { // ファイルがない -> 新規
                 // ファイルがない -> 新規  
434                  EnableWindow(GetDlgItem(Dialog, IDC_APPEND), FALSE);                  EnableWindow(GetDlgItem(Dialog, IDC_APPEND), FALSE);
435                  CheckRadioButton(Dialog, IDC_NEW_OVERWRITE, IDC_APPEND, IDC_NEW_OVERWRITE);                  CheckRadioButton(Dialog, IDC_NEW_OVERWRITE, IDC_APPEND, IDC_NEW_OVERWRITE);
436          }          }
437    
438          if (work->file_exist && IsDlgButtonChecked(Dialog, IDC_APPEND) == BST_CHECKED) {          if (!LogBinary && !Append) {
439                  // ファイルが存在する && append                  EnableWindow(GetDlgItem(Dialog, IDC_BOM), TRUE);
440                  int bom = work->current_bom;                  EnableWindow(GetDlgItem(Dialog, IDC_TEXTCODING_DROPDOWN), TRUE);
441                  if (bom != 0) {          }
442                          // BOM有り          else {
443                          CheckDlgButton(Dialog, IDC_BOM, BST_CHECKED);                  EnableWindow(GetDlgItem(Dialog, IDC_BOM), FALSE);
444                          int cur =                  EnableWindow(GetDlgItem(Dialog, IDC_TEXTCODING_DROPDOWN), FALSE);
445                                  bom == 1 ? 0 :          }
446                                  bom == 2 ? 1 :  
447                                  bom == 3 ? 2 : 0;          if (LogBinary) {
448                          SendDlgItemMessage(Dialog, IDC_TEXTCODING_DROPDOWN, CB_SETCURSEL, cur, 0);                  CheckRadioButton(Dialog, IDC_FOPTBIN, IDC_FOPTTEXT, IDC_FOPTBIN);
449    
450                    DisableDlgItem(Dialog, IDC_PLAINTEXT, IDC_PLAINTEXT);
451                    DisableDlgItem(Dialog, IDC_TIMESTAMP, IDC_TIMESTAMP);
452                    DisableDlgItem(Dialog, IDC_TIMESTAMPTYPE, IDC_TIMESTAMPTYPE);
453            }
454            else {
455                    CheckRadioButton(Dialog, IDC_FOPTBIN, IDC_FOPTTEXT, IDC_FOPTTEXT);
456    
457                    EnableDlgItem(Dialog, IDC_PLAINTEXT, IDC_PLAINTEXT);
458                    EnableDlgItem(Dialog, IDC_TIMESTAMP, IDC_TIMESTAMP);
459                    EnableDlgItem(Dialog, IDC_TIMESTAMPTYPE, IDC_TIMESTAMPTYPE);
460    
461                    if (LogTypePlainText) {
462                            SetRB(Dialog, 1, IDC_PLAINTEXT, IDC_PLAINTEXT);
463                  }                  }
464                  else {                  if (LogTimestamp) {
465                          // BOMなし                          SetRB(Dialog, 1, IDC_TIMESTAMP, IDC_TIMESTAMP);
                         CheckDlgButton(Dialog, IDC_BOM, BST_UNCHECKED);  
                         SendDlgItemMessage(Dialog, IDC_TEXTCODING_DROPDOWN, CB_SETCURSEL, 0, 0);  
466                  }                  }
467                  if (IsDlgButtonChecked(Dialog, IDC_FOPTTEXT) == BST_CHECKED) {                  else {
468                          EnableWindow(GetDlgItem(Dialog, IDC_BOM), FALSE);                          DisableDlgItem(Dialog, IDC_TIMESTAMPTYPE, IDC_TIMESTAMPTYPE);
                         if (bom != 0) {  
                                 // BOM有り  
                                 EnableWindow(GetDlgItem(Dialog, IDC_TEXTCODING_DROPDOWN), FALSE);  
                         }  
                         else {  
                                 // BOMなし  
                                 EnableWindow(GetDlgItem(Dialog, IDC_TEXTCODING_DROPDOWN), TRUE);  
                         }  
469                  }                  }
470          }          }
471          else {  
472                  // ファイルがない 又は appendではない(上書き)          if (work->file_exist && Append) {
473                  CheckRadioButton(Dialog, IDC_NEW_OVERWRITE, IDC_APPEND, IDC_NEW_OVERWRITE);                  // 既存ファイルのエンコーディングを反映する
474                  CheckDlgButton(Dialog, IDC_BOM, BST_CHECKED);                  int bom = work->current_bom;
475                  SendDlgItemMessage(Dialog, IDC_TEXTCODING_DROPDOWN, CB_SETCURSEL, 0, 0);                  int cur =
476                  if (IsDlgButtonChecked(Dialog, IDC_FOPTTEXT) == BST_CHECKED) {                          bom == 1 ? 0 :
477                          EnableWindow(GetDlgItem(Dialog, IDC_BOM), TRUE);                          bom == 2 ? 1 :
478                  }                          bom == 3 ? 2 : 0;
479                    SendDlgItemMessage(Dialog, IDC_TEXTCODING_DROPDOWN, CB_SETCURSEL, cur, 0);
480          }          }
481  }  }
482    
# Line 455  static void CheckLogFile(HWND Dialog, co Line 487  static void CheckLogFile(HWND Dialog, co
487          CheckLogFile(filename, &exist, &bom);          CheckLogFile(filename, &exist, &bom);
488          work->file_exist = exist;          work->file_exist = exist;
489          work->current_bom = bom;          work->current_bom = bom;
         ArrangeControls(Dialog, work);  
490  }  }
491    
492  static INT_PTR CALLBACK LogFnHook(HWND Dialog, UINT Message, WPARAM wParam, LPARAM lParam)  static INT_PTR CALLBACK LogFnHook(HWND Dialog, UINT Message, WPARAM wParam, LPARAM lParam)
# Line 481  static INT_PTR CALLBACK LogFnHook(HWND D Line 512  static INT_PTR CALLBACK LogFnHook(HWND D
512          };          };
513          LogDlgWork_t *work = (LogDlgWork_t *)GetWindowLongPtr(Dialog, DWLP_USER);          LogDlgWork_t *work = (LogDlgWork_t *)GetWindowLongPtr(Dialog, DWLP_USER);
514    
515          if (Message ==  RegisterWindowMessage(HELPMSGSTRING)) {          if (Message == RegisterWindowMessage(HELPMSGSTRING)) {
516                  // コモンダイアログからのヘルプメッセージを付け替える                  // コモンダイアログからのヘルプメッセージを付け替える
517                  Message = WM_COMMAND;                  Message = WM_COMMAND;
518                  wParam = IDHELP;                  wParam = IDHELP;
# Line 495  static INT_PTR CALLBACK LogFnHook(HWND D Line 526  static INT_PTR CALLBACK LogFnHook(HWND D
526    
527                  SetDlgTextsW(Dialog, TextInfos, _countof(TextInfos), pts->UILanguageFileW);                  SetDlgTextsW(Dialog, TextInfos, _countof(TextInfos), pts->UILanguageFileW);
528                  SetI18nListW("Tera Term", Dialog, IDC_TIMESTAMPTYPE, timestamp_list, _countof(timestamp_list),                  SetI18nListW("Tera Term", Dialog, IDC_TIMESTAMPTYPE, timestamp_list, _countof(timestamp_list),
529                                           pts->UILanguageFileW, 0);                               pts->UILanguageFileW, 0);
530    
531                  SendDlgItemMessage(Dialog, IDC_TEXTCODING_DROPDOWN, CB_ADDSTRING, 0, (LPARAM)"UTF-8");                  SendDlgItemMessage(Dialog, IDC_TEXTCODING_DROPDOWN, CB_ADDSTRING, 0, (LPARAM)"UTF-8");
532                  SendDlgItemMessage(Dialog, IDC_TEXTCODING_DROPDOWN, CB_ADDSTRING, 0, (LPARAM)"UTF-16LE");                  SendDlgItemMessage(Dialog, IDC_TEXTCODING_DROPDOWN, CB_ADDSTRING, 0, (LPARAM)"UTF-16LE");
# Line 504  static INT_PTR CALLBACK LogFnHook(HWND D Line 535  static INT_PTR CALLBACK LogFnHook(HWND D
535    
536                  SetDlgItemTextW(Dialog, IDC_FOPT_FILENAME_EDIT, work->info->filename);                  SetDlgItemTextW(Dialog, IDC_FOPT_FILENAME_EDIT, work->info->filename);
537    
538                  // Binary/Text チェックボックス                  // timestamp 種別
539                  if (pts->LogBinary) {                  int tstype = pts->LogTimestampType == TIMESTAMP_LOCAL ? 0 :
540                          CheckRadioButton(Dialog, IDC_FOPTBIN, IDC_FOPTTEXT, IDC_FOPTBIN);                               pts->LogTimestampType == TIMESTAMP_UTC ? 1 :
541                          EnableWindow(GetDlgItem(Dialog, IDC_TEXTCODING_DROPDOWN), FALSE);                               pts->LogTimestampType == TIMESTAMP_ELAPSED_LOGSTART ? 2 :
542                          EnableWindow(GetDlgItem(Dialog, IDC_BOM), FALSE);                               pts->LogTimestampType == TIMESTAMP_ELAPSED_CONNECTED ? 3 : 0;
543                  }                  SendDlgItemMessage(Dialog, IDC_TIMESTAMPTYPE, CB_SETCURSEL, tstype, 0);
                 else {  
                         CheckRadioButton(Dialog, IDC_FOPTBIN, IDC_FOPTTEXT, IDC_FOPTTEXT);  
                 }  
544    
                 // Plain Text チェックボックス  
                 if (pts->LogBinary) {  
                         // Binaryフラグが有効なときはチェックできない  
                         DisableDlgItem(Dialog, IDC_PLAINTEXT, IDC_PLAINTEXT);  
                 }  
                 else if (pts->LogTypePlainText) {  
                         SetRB(Dialog, 1, IDC_PLAINTEXT, IDC_PLAINTEXT);  
                 }  
545    
546                  // Hide dialogチェックボックス (2008.1.30 maya)                  CheckLogFile(Dialog, work->info->filename, work);
547                    ArrangeControls(Dialog, work, pts->Append, pts->LogBinary, pts->LogTypePlainText, pts->LogTimestamp);
548                    work->info->filename = NULL;
549    
550                    // Hide dialog チェックボックス
551                  if (pts->LogHideDialog) {                  if (pts->LogHideDialog) {
552                          SetRB(Dialog, 1, IDC_HIDEDIALOG, IDC_HIDEDIALOG);                          SetRB(Dialog, 1, IDC_HIDEDIALOG, IDC_HIDEDIALOG);
553                  }                  }
554    
555                  // Include screen bufferチェックボックス (2013.9.29 yutaka)                  // Include screen buffer チェックボックス
556                  if (pts->LogAllBuffIncludedInFirst) {                  if (pts->LogAllBuffIncludedInFirst) {
557                          SetRB(Dialog, 1, IDC_ALLBUFF_INFIRST, IDC_ALLBUFF_INFIRST);                          SetRB(Dialog, 1, IDC_ALLBUFF_INFIRST, IDC_ALLBUFF_INFIRST);
558                  }                  }
559    
                 // timestampチェックボックス (2006.7.23 maya)  
                 if (pts->LogBinary) {  
                         // Binaryフラグが有効なときはチェックできない  
                         DisableDlgItem(Dialog, IDC_TIMESTAMP, IDC_TIMESTAMP);  
                 }  
                 else if (pts->LogTimestamp) {  
                         SetRB(Dialog, 1, IDC_TIMESTAMP, IDC_TIMESTAMP);  
                 }  
   
                 // timestamp 種別  
                 int tstype = pts->LogTimestampType == TIMESTAMP_LOCAL ? 0 :  
                                 pts->LogTimestampType == TIMESTAMP_UTC ? 1 :  
                                 pts->LogTimestampType == TIMESTAMP_ELAPSED_LOGSTART ? 2 :  
                                 pts->LogTimestampType == TIMESTAMP_ELAPSED_CONNECTED ? 3 : 0;  
                 SendDlgItemMessage(Dialog, IDC_TIMESTAMPTYPE, CB_SETCURSEL, tstype, 0);  
                 if (pts->LogBinary || !pts->LogTimestamp) {  
                         DisableDlgItem(Dialog, IDC_TIMESTAMPTYPE, IDC_TIMESTAMPTYPE);  
                 }  
   
                 CheckLogFile(Dialog, work->info->filename, work);  
                 work->info->filename = NULL;  
   
560                  CenterWindow(Dialog, GetParent(Dialog));                  CenterWindow(Dialog, GetParent(Dialog));
561    
562                  return TRUE;                  return TRUE;
# Line 624  static INT_PTR CALLBACK LogFnHook(HWND D Line 626  static INT_PTR CALLBACK LogFnHook(HWND D
626    
627                          break;                          break;
628                  }                  }
629                  case IDC_FOPTBIN:                  case IDC_NEW_OVERWRITE:
630                          EnableWindow(GetDlgItem(Dialog, IDC_TEXTCODING_DROPDOWN), FALSE);                  case IDC_APPEND:
                         EnableWindow(GetDlgItem(Dialog, IDC_BOM), FALSE);  
                         DisableDlgItem(Dialog, IDC_PLAINTEXT, IDC_TIMESTAMP);  
                         DisableDlgItem(Dialog, IDC_TIMESTAMPTYPE, IDC_TIMESTAMPTYPE);  
                         break;  
631                  case IDC_FOPTTEXT:                  case IDC_FOPTTEXT:
632                          ArrangeControls(Dialog, work);                  case IDC_FOPTBIN:
                         EnableDlgItem(Dialog, IDC_PLAINTEXT, IDC_TIMESTAMP);  
                         // FALLTHROUGH -- BinFlag が off の時は Timestamp 種別の有効/無効を設定する  
633                  case IDC_TIMESTAMP:                  case IDC_TIMESTAMP:
634                          if (IsDlgButtonChecked(Dialog, IDC_TIMESTAMP) == BST_CHECKED) {                          {
635                                  EnableDlgItem(Dialog, IDC_TIMESTAMPTYPE, IDC_TIMESTAMPTYPE);                                  WORD Appnd, LogBinary, LogTypePlainText, LogTimestamp;
636                          }                                  GetRB(Dialog, &Appnd, IDC_APPEND, IDC_APPEND);
637                          else {                                  GetRB(Dialog, &LogBinary, IDC_FOPTBIN, IDC_FOPTBIN);
638                                  DisableDlgItem(Dialog, IDC_TIMESTAMPTYPE, IDC_TIMESTAMPTYPE);                                  GetRB(Dialog, &LogTypePlainText, IDC_PLAINTEXT, IDC_PLAINTEXT);
639                                    GetRB(Dialog, &LogTimestamp, IDC_TIMESTAMP, IDC_TIMESTAMP);
640                                    ArrangeControls(Dialog, work, Appnd, LogBinary, LogTypePlainText, LogTimestamp);
641                          }                          }
642                          break;                          break;
643                  case IDC_FOPT_FILENAME_EDIT:                  case IDC_FOPT_FILENAME_EDIT:
# Line 648  static INT_PTR CALLBACK LogFnHook(HWND D Line 646  static INT_PTR CALLBACK LogFnHook(HWND D
646                                  hGetDlgItemTextW(Dialog, IDC_FOPT_FILENAME_EDIT, &filename);                                  hGetDlgItemTextW(Dialog, IDC_FOPT_FILENAME_EDIT, &filename);
647                                  CheckLogFile(Dialog, filename, work);                                  CheckLogFile(Dialog, filename, work);
648                                  free(filename);                                  free(filename);
649                                    {
650                                            WORD Appnd, LogBinary, LogTypePlainText, LogTimestamp;
651                                            GetRB(Dialog, &Appnd, IDC_APPEND, IDC_APPEND);
652                                            GetRB(Dialog, &LogBinary, IDC_FOPTBIN, IDC_FOPTBIN);
653                                            GetRB(Dialog, &LogTypePlainText, IDC_PLAINTEXT, IDC_PLAINTEXT);
654                                            GetRB(Dialog, &LogTimestamp, IDC_TIMESTAMP, IDC_TIMESTAMP);
655                                            ArrangeControls(Dialog, work, Appnd, LogBinary, LogTypePlainText, LogTimestamp);
656                                    }
657                          }                          }
658                          break;                          break;
                 case IDC_NEW_OVERWRITE:  
                         if (IsDlgButtonChecked(Dialog, IDC_FOPTTEXT) == BST_CHECKED) {  
                                 EnableWindow(GetDlgItem(Dialog, IDC_BOM), TRUE);  
                                 EnableWindow(GetDlgItem(Dialog, IDC_TEXTCODING_DROPDOWN), TRUE);  
                                 CheckDlgButton(Dialog, IDC_BOM, BST_CHECKED);  
                                 SendDlgItemMessage(Dialog, IDC_TEXTCODING_DROPDOWN, CB_SETCURSEL, 0, 0);  
                         }  
                         break;  
                 case IDC_APPEND:  
                         ArrangeControls(Dialog, work);  
                         break;  
659                  }                  }
660                  break;                  break;
661          case WM_DROPFILES: {          case WM_DROPFILES: {

Legend:
Removed from v.10143  
changed lines
  Added in v.10144

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26