X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/putty/blobdiff_plain/d3a22f7952add0b13fac029efb18faae537795bd..03169ad0902dcea0737ad7c92a9248e9fe6022e7:/windlg.c diff --git a/windlg.c b/windlg.c index 391938a8..133c2d2a 100644 --- a/windlg.c +++ b/windlg.c @@ -168,6 +168,13 @@ static int CALLBACK AboutProc (HWND hwnd, UINT msg, EnableWindow(hwnd, 1); SetActiveWindow(hwnd); return 0; + + case IDA_WEB: + /* Load web browser */ + ShellExecute(hwnd, "open", + "http://www.chiark.greenend.org.uk/~sgtatham/putty/", + 0, 0, SW_SHOWDEFAULT); + return 0; } return 0; case WM_CLOSE: @@ -216,6 +223,7 @@ enum { IDCX_ABOUT = IDC_ABOUT, IDCX_TVSTATIC, IDCX_TREEVIEW, controlstartvalue, sessionpanelend, loggingpanelstart, + IDC_TITLE_LOGGING, IDC_BOX_LOGGING1, IDC_LSTATSTATIC, IDC_LSTATOFF, @@ -252,6 +260,7 @@ enum { IDCX_ABOUT = IDC_ABOUT, IDCX_TVSTATIC, IDCX_TREEVIEW, controlstartvalue, IDC_CURNORMAL, IDC_CURAPPLIC, IDC_COMPOSEKEY, + IDC_CTRLALTKEYS, keyboardpanelend, terminalpanelstart, @@ -261,9 +270,10 @@ enum { IDCX_ABOUT = IDC_ABOUT, IDCX_TVSTATIC, IDCX_TREEVIEW, controlstartvalue, IDC_WRAPMODE, IDC_DECOM, IDC_LFHASCR, - IDC_BEEP, IDC_BCE, IDC_BLINKTEXT, + IDC_ANSWERBACK, + IDC_ANSWEREDIT, IDC_ECHOSTATIC, IDC_ECHOBACKEND, IDC_ECHOYES, @@ -274,6 +284,28 @@ enum { IDCX_ABOUT = IDC_ABOUT, IDCX_TVSTATIC, IDCX_TREEVIEW, controlstartvalue, IDC_EDITNO, terminalpanelend, + bellpanelstart, + IDC_TITLE_BELL, + IDC_BOX_BELL1, + IDC_BOX_BELL2, + IDC_BELLSTATIC, + IDC_BELL_DISABLED, + IDC_BELL_DEFAULT, + IDC_BELL_WAVEFILE, + IDC_BELL_VISUAL, + IDC_BELL_WAVESTATIC, + IDC_BELL_WAVEEDIT, + IDC_BELL_WAVEBROWSE, + IDC_BELLOVL, + IDC_BELLOVLNSTATIC, + IDC_BELLOVLN, + IDC_BELLOVLTSTATIC, + IDC_BELLOVLT, + IDC_BELLOVLEXPLAIN, + IDC_BELLOVLSSTATIC, + IDC_BELLOVLS, + bellpanelend, + windowpanelstart, IDC_TITLE_WINDOW, IDC_BOX_WINDOW1, @@ -517,12 +549,14 @@ static void init_dlg_ctrls(HWND hwnd) { CheckDlgButton (hwnd, IDC_ALTSPACE, cfg.alt_space); CheckDlgButton (hwnd, IDC_ALTONLY, cfg.alt_only); CheckDlgButton (hwnd, IDC_COMPOSEKEY, cfg.compose_key); + CheckDlgButton (hwnd, IDC_CTRLALTKEYS, cfg.ctrlaltkeys); CheckRadioButton (hwnd, IDC_ECHOBACKEND, IDC_ECHONO, cfg.localecho == LD_BACKEND ? IDC_ECHOBACKEND: cfg.localecho == LD_YES ? IDC_ECHOYES : IDC_ECHONO); CheckRadioButton (hwnd, IDC_EDITBACKEND, IDC_EDITNO, cfg.localedit == LD_BACKEND ? IDC_EDITBACKEND: cfg.localedit == LD_YES ? IDC_EDITYES : IDC_EDITNO); + SetDlgItemText (hwnd, IDC_ANSWEREDIT, cfg.answerback); CheckDlgButton (hwnd, IDC_ALWAYSONTOP, cfg.alwaysontop); CheckDlgButton (hwnd, IDC_SCROLLKEY, cfg.scroll_on_key); CheckDlgButton (hwnd, IDC_SCROLLDISP, cfg.scroll_on_disp); @@ -535,7 +569,17 @@ static void init_dlg_ctrls(HWND hwnd) { SetDlgItemInt (hwnd, IDC_SAVEEDIT, cfg.savelines, FALSE); fmtfont (fontstatic); SetDlgItemText (hwnd, IDC_FONTSTATIC, fontstatic); - CheckDlgButton (hwnd, IDC_BEEP, cfg.beep); + CheckRadioButton (hwnd, IDC_BELL_DISABLED, IDC_BELL_VISUAL, + cfg.beep==BELL_DISABLED ? IDC_BELL_DISABLED : + cfg.beep==BELL_DEFAULT ? IDC_BELL_DEFAULT : + cfg.beep==BELL_WAVEFILE ? IDC_BELL_WAVEFILE : + cfg.beep==BELL_VISUAL ? IDC_BELL_VISUAL : IDC_BELL_DEFAULT); + SetDlgItemText (hwnd, IDC_BELL_WAVEEDIT, cfg.bell_wavefile); + CheckDlgButton (hwnd, IDC_BELLOVL, cfg.bellovl); + SetDlgItemInt (hwnd, IDC_BELLOVLN, cfg.bellovl_n, FALSE); + SetDlgItemInt (hwnd, IDC_BELLOVLT, cfg.bellovl_t, FALSE); + SetDlgItemInt (hwnd, IDC_BELLOVLS, cfg.bellovl_s, FALSE); + CheckDlgButton (hwnd, IDC_BCE, cfg.bce); CheckDlgButton (hwnd, IDC_BLINKTEXT, cfg.blinktext); @@ -726,7 +770,7 @@ static void create_controls(HWND hwnd, int dlgtype, int panel) { struct ctlpos cp; ctlposinit(&cp, hwnd, 80, 3, 13); bartitle(&cp, "Options controlling session logging", - IDC_TITLE_TERMINAL); + IDC_TITLE_LOGGING); beginbox(&cp, NULL, IDC_BOX_LOGGING1); radiobig(&cp, "Session logging:", IDC_LSTATSTATIC, @@ -740,7 +784,7 @@ static void create_controls(HWND hwnd, int dlgtype, int panel) { } if (panel == terminalpanelstart) { - /* The Terminal panel. Accelerators used: [acgo] wdlben ht */ + /* The Terminal panel. Accelerators used: [acgo] wdlen hts */ struct ctlpos cp; ctlposinit(&cp, hwnd, 80, 3, 13); bartitle(&cp, "Options controlling the terminal emulation", @@ -750,9 +794,11 @@ static void create_controls(HWND hwnd, int dlgtype, int panel) { checkbox(&cp, "Auto &wrap mode initially on", IDC_WRAPMODE); checkbox(&cp, "&DEC Origin Mode initially on", IDC_DECOM); checkbox(&cp, "Implicit CR in every &LF", IDC_LFHASCR); - checkbox(&cp, "&Beep enabled", IDC_BEEP); checkbox(&cp, "Use background colour to &erase screen", IDC_BCE); checkbox(&cp, "Enable bli&nking text", IDC_BLINKTEXT); + multiedit(&cp, + "An&swerback to ^E:", IDC_ANSWERBACK, + IDC_ANSWEREDIT, 100, NULL); endbox(&cp); beginbox(&cp, "Line discipline options", @@ -768,8 +814,41 @@ static void create_controls(HWND hwnd, int dlgtype, int panel) { endbox(&cp); } + if (panel == bellpanelstart) { + /* The Bell panel. Accelerators used: [acgo] bdsm w */ + struct ctlpos cp; + ctlposinit(&cp, hwnd, 80, 3, 13); + bartitle(&cp, "Options controlling the terminal bell", + IDC_TITLE_BELL); + beginbox(&cp, "Set the style of bell", + IDC_BOX_BELL1); + radiobig(&cp, + "Action to happen when a &bell occurs:", IDC_BELLSTATIC, + "None (bell disabled)", IDC_BELL_DISABLED, + "Play Windows Default Sound", IDC_BELL_DEFAULT, + "Play a custom sound file", IDC_BELL_WAVEFILE, + "Visual bell (flash window)", IDC_BELL_VISUAL, NULL); + editbutton(&cp, "Custom sound file to play as a bell:", + IDC_BELL_WAVESTATIC, IDC_BELL_WAVEEDIT, + "Bro&wse...", IDC_BELL_WAVEBROWSE); + endbox(&cp); + beginbox(&cp, "Control the bell overload behaviour", + IDC_BOX_BELL2); + checkbox(&cp, "Bell is temporarily &disabled when over-used", + IDC_BELLOVL); + staticedit(&cp, "Over-use means this &many bells...", + IDC_BELLOVLNSTATIC, IDC_BELLOVLN, 20); + staticedit(&cp, "... in this many &seconds", + IDC_BELLOVLTSTATIC, IDC_BELLOVLT, 20); + statictext(&cp, "The bell is re-enabled after a few seconds of silence.", + IDC_BELLOVLEXPLAIN); + staticedit(&cp, "Seconds of silence required", + IDC_BELLOVLSSTATIC, IDC_BELLOVLS, 20); + endbox(&cp); + } + if (panel == keyboardpanelstart) { - /* The Keyboard panel. Accelerators used: [acgo] h?sr~lxv unpymie t */ + /* The Keyboard panel. Accelerators used: [acgo] h?sr~lxvunpymietd */ struct ctlpos cp; ctlposinit(&cp, hwnd, 80, 3, 13); bartitle(&cp, "Options controlling the effects of keys", @@ -806,8 +885,10 @@ static void create_controls(HWND hwnd, int dlgtype, int panel) { endbox(&cp); beginbox(&cp, "Enable extra keyboard features:", IDC_BOX_KEYBOARD3); - checkbox(&cp, "Application and AltGr ac&t as Compose key", + checkbox(&cp, "AltGr ac&ts as Compose key", IDC_COMPOSEKEY); + checkbox(&cp, "Control-Alt is &different from AltGr", + IDC_CTRLALTKEYS); endbox(&cp); } @@ -1148,6 +1229,7 @@ static int GenericMainDlgProc (HWND hwnd, UINT msg, treeview_insert(&tvfaff, 1, "Logging"); treeview_insert(&tvfaff, 0, "Terminal"); treeview_insert(&tvfaff, 1, "Keyboard"); + treeview_insert(&tvfaff, 1, "Bell"); treeview_insert(&tvfaff, 0, "Window"); treeview_insert(&tvfaff, 1, "Appearance"); treeview_insert(&tvfaff, 1, "Translation"); @@ -1215,6 +1297,8 @@ static int GenericMainDlgProc (HWND hwnd, UINT msg, create_controls(hwnd, dlgtype, keyboardpanelstart); if (!strcmp(buffer, "Terminal")) create_controls(hwnd, dlgtype, terminalpanelstart); + if (!strcmp(buffer, "Bell")) + create_controls(hwnd, dlgtype, bellpanelstart); if (!strcmp(buffer, "Window")) create_controls(hwnd, dlgtype, windowpanelstart); if (!strcmp(buffer, "Appearance")) @@ -1485,6 +1569,11 @@ static int GenericMainDlgProc (HWND hwnd, UINT msg, if (LOWORD(wParam)==IDC_EDITNO) cfg.localedit=LD_NO; } break; + case IDC_ANSWEREDIT: + if (HIWORD(wParam) == EN_CHANGE) + GetDlgItemText (hwnd, IDC_ANSWEREDIT, cfg.answerback, + sizeof(cfg.answerback)-1); + break; case IDC_ALWAYSONTOP: if (HIWORD(wParam) == BN_CLICKED || HIWORD(wParam) == BN_DOUBLECLICKED) @@ -1505,6 +1594,11 @@ static int GenericMainDlgProc (HWND hwnd, UINT msg, HIWORD(wParam) == BN_DOUBLECLICKED) cfg.compose_key = IsDlgButtonChecked (hwnd, IDC_COMPOSEKEY); break; + case IDC_CTRLALTKEYS: + if (HIWORD(wParam) == BN_CLICKED || + HIWORD(wParam) == BN_DOUBLECLICKED) + cfg.ctrlaltkeys = IsDlgButtonChecked (hwnd, IDC_CTRLALTKEYS); + break; case IDC_WRAPMODE: if (HIWORD(wParam) == BN_CLICKED || HIWORD(wParam) == BN_DOUBLECLICKED) @@ -1561,11 +1655,62 @@ static int GenericMainDlgProc (HWND hwnd, UINT msg, SetDlgItemText (hwnd, IDC_FONTSTATIC, fontstatic); } break; - case IDC_BEEP: + case IDC_BELL_DISABLED: + case IDC_BELL_DEFAULT: + case IDC_BELL_WAVEFILE: + case IDC_BELL_VISUAL: + if (HIWORD(wParam) == BN_CLICKED || + HIWORD(wParam) == BN_DOUBLECLICKED) { + if (LOWORD(wParam)==IDC_BELL_DISABLED) cfg.beep = BELL_DISABLED; + if (LOWORD(wParam)==IDC_BELL_DEFAULT) cfg.beep = BELL_DEFAULT; + if (LOWORD(wParam)==IDC_BELL_WAVEFILE) cfg.beep = BELL_WAVEFILE; + if (LOWORD(wParam)==IDC_BELL_VISUAL) cfg.beep = BELL_VISUAL; + } + break; + case IDC_BELL_WAVEBROWSE: + memset(&of, 0, sizeof(of)); +#ifdef OPENFILENAME_SIZE_VERSION_400 + of.lStructSize = OPENFILENAME_SIZE_VERSION_400; +#else + of.lStructSize = sizeof(of); +#endif + of.hwndOwner = hwnd; + of.lpstrFilter = "Wave Files\0*.WAV\0AllFiles\0*\0\0\0"; + of.lpstrCustomFilter = NULL; + of.nFilterIndex = 1; + of.lpstrFile = filename; strcpy(filename, cfg.bell_wavefile); + of.nMaxFile = sizeof(filename); + of.lpstrFileTitle = NULL; + of.lpstrInitialDir = NULL; + of.lpstrTitle = "Select Bell Sound File"; + of.Flags = 0; + if (GetOpenFileName(&of)) { + strcpy(cfg.bell_wavefile, filename); + SetDlgItemText (hwnd, IDC_BELL_WAVEEDIT, cfg.bell_wavefile); + } + break; + case IDC_BELL_WAVEEDIT: + if (HIWORD(wParam) == EN_CHANGE) + GetDlgItemText (hwnd, IDC_BELL_WAVEEDIT, cfg.bell_wavefile, + sizeof(cfg.bell_wavefile)-1); + break; + case IDC_BELLOVL: if (HIWORD(wParam) == BN_CLICKED || HIWORD(wParam) == BN_DOUBLECLICKED) - cfg.beep = IsDlgButtonChecked (hwnd, IDC_BEEP); + cfg.bellovl = IsDlgButtonChecked (hwnd, IDC_BELLOVL); break; + case IDC_BELLOVLN: + if (HIWORD(wParam) == EN_CHANGE) + MyGetDlgItemInt (hwnd, IDC_BELLOVLN, &cfg.bellovl_n); + break; + case IDC_BELLOVLT: + if (HIWORD(wParam) == EN_CHANGE) + MyGetDlgItemInt (hwnd, IDC_BELLOVLT, &cfg.bellovl_t); + break; + case IDC_BELLOVLS: + if (HIWORD(wParam) == EN_CHANGE) + MyGetDlgItemInt (hwnd, IDC_BELLOVLS, &cfg.bellovl_s); + break; case IDC_BLINKTEXT: if (HIWORD(wParam) == BN_CLICKED || HIWORD(wParam) == BN_DOUBLECLICKED)