| 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 |
|
|
| 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) |
| 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; |
| 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"); |
| 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; |
| 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: |
| 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: { |