| 55 |
#include "font_pp.h" |
#include "font_pp.h" |
| 56 |
#include "asprintf.h" |
#include "asprintf.h" |
| 57 |
#include "win32helper.h" |
#include "win32helper.h" |
| 58 |
|
#include "themedlg.h" |
| 59 |
|
|
| 60 |
const mouse_cursor_t MouseCursor[] = { |
const mouse_cursor_t MouseCursor[] = { |
| 61 |
{"ARROW", IDC_ARROW}, |
{"ARROW", IDC_ARROW}, |
| 650 |
{ IDC_ALPHABLEND, "DLG_TAB_VISUAL_ALPHA" }, |
{ IDC_ALPHABLEND, "DLG_TAB_VISUAL_ALPHA" }, |
| 651 |
{ IDC_ALPHA_BLEND_ACTIVE_LABEL, "DLG_TAB_VISUAL_ALPHA_ACTIVE" }, |
{ IDC_ALPHA_BLEND_ACTIVE_LABEL, "DLG_TAB_VISUAL_ALPHA_ACTIVE" }, |
| 652 |
{ IDC_ALPHA_BLEND_INACTIVE_LABEL, "DLG_TAB_VISUAL_ALPHA_INACTIVE" }, |
{ IDC_ALPHA_BLEND_INACTIVE_LABEL, "DLG_TAB_VISUAL_ALPHA_INACTIVE" }, |
| 653 |
|
#if 0 |
| 654 |
{ IDC_ETERM_LOOKFEEL, "DLG_TAB_VISUAL_ETERM" }, |
{ IDC_ETERM_LOOKFEEL, "DLG_TAB_VISUAL_ETERM" }, |
| 655 |
|
#endif |
| 656 |
{ IDC_MIXED_THEME_FILE, "DLG_TAB_VISUAL_BGMIXED_THEMEFILE" }, |
{ IDC_MIXED_THEME_FILE, "DLG_TAB_VISUAL_BGMIXED_THEMEFILE" }, |
| 657 |
{ IDC_BGIMG_CHECK, "DLG_TAB_VISUAL_BGIMG" }, |
{ IDC_BGIMG_CHECK, "DLG_TAB_VISUAL_BGIMG" }, |
| 658 |
{ IDC_BGIMG_BRIGHTNESS, "DLG_TAB_VISUAL_BGIMG_BRIGHTNESS" }, |
{ IDC_BGIMG_BRIGHTNESS, "DLG_TAB_VISUAL_BGIMG_BRIGHTNESS" }, |
| 697 |
EnableDlgItem(IDC_ALPHA_BLEND_INACTIVE, isLayeredWindowSupported); |
EnableDlgItem(IDC_ALPHA_BLEND_INACTIVE, isLayeredWindowSupported); |
| 698 |
EnableDlgItem(IDC_ALPHA_BLEND_INACTIVE_TRACKBAR, isLayeredWindowSupported); |
EnableDlgItem(IDC_ALPHA_BLEND_INACTIVE_TRACKBAR, isLayeredWindowSupported); |
| 699 |
|
|
| 700 |
// (2)[BG] BGEnable |
// (2) theme file |
| 701 |
SetCheck(IDC_ETERM_LOOKFEEL, ts.EtermLookfeel.BGEnable); |
{ |
| 702 |
|
SendDlgItemMessageA(IDC_THEME_FILE, CB_ADDSTRING, 0, (LPARAM)"使用しない"); |
| 703 |
|
SendDlgItemMessageA(IDC_THEME_FILE, CB_ADDSTRING, 1, (LPARAM)"固定テーマ(テーマファイル指定)"); |
| 704 |
|
SendDlgItemMessageA(IDC_THEME_FILE, CB_ADDSTRING, 2, (LPARAM)"ランダムテーマ"); |
| 705 |
|
int sel = ts.EtermLookfeel.BGEnable; |
| 706 |
|
if (sel < 0) sel = 0; |
| 707 |
|
if (sel > 2) sel = 2; |
| 708 |
|
SendDlgItemMessageA(IDC_THEME_FILE, CB_SETCURSEL, sel, 0); |
| 709 |
|
BOOL enable = (sel == 1) ? TRUE : FALSE; |
| 710 |
|
EnableDlgItem(IDC_THEME_EDIT, enable); |
| 711 |
|
EnableDlgItem(IDC_THEME_BUTTON, enable); |
| 712 |
|
|
| 713 |
// Eterm look-feelの背景画像指定。 |
SetDlgItemTextW(IDC_THEME_EDIT, ts.EtermLookfeel.BGThemeFileW); |
|
SetDlgItemTextA(IDC_BGIMG_EDIT, ts.BGImageFilePath); |
|
|
|
|
|
SetDlgItemNum(IDC_EDIT_BGIMG_BRIGHTNESS, ts.BGImgBrightness); |
|
|
|
|
|
// BGEnable関係なく、チェックボックスを付ける。 |
|
|
if (strcmp(ts.EtermLookfeel.BGThemeFile, BG_THEME_IMAGEFILE) == 0) { |
|
|
SetCheck(IDC_BGIMG_CHECK, BST_CHECKED); |
|
|
} else { |
|
|
SetCheck(IDC_BGIMG_CHECK, BST_UNCHECKED); |
|
|
} |
|
|
// テーマファイルを無視する場合は壁紙と混合しない。 |
|
|
if (ts.EtermLookfeel.BGIgnoreThemeFile) { |
|
|
SetCheck(IDC_MIXED_THEME_FILE, BST_UNCHECKED); |
|
|
} else { |
|
|
SetCheck(IDC_MIXED_THEME_FILE, BST_CHECKED); |
|
|
} |
|
|
|
|
|
if (ts.EtermLookfeel.BGEnable) { |
|
|
EnableDlgItem(IDC_BGIMG_CHECK, TRUE); |
|
|
EnableDlgItem(IDC_MIXED_THEME_FILE, TRUE); |
|
|
|
|
|
if (strcmp(ts.EtermLookfeel.BGThemeFile, BG_THEME_IMAGEFILE) == 0) { |
|
|
EnableDlgItem(IDC_BGIMG_EDIT, TRUE); |
|
|
EnableDlgItem(IDC_BGIMG_BUTTON, TRUE); |
|
|
|
|
|
EnableDlgItem(IDC_BGIMG_BRIGHTNESS, TRUE); |
|
|
EnableDlgItem(IDC_EDIT_BGIMG_BRIGHTNESS, TRUE); |
|
|
} else { |
|
|
EnableDlgItem(IDC_BGIMG_EDIT, FALSE); |
|
|
EnableDlgItem(IDC_BGIMG_BUTTON, FALSE); |
|
|
|
|
|
EnableDlgItem(IDC_BGIMG_BRIGHTNESS, FALSE); |
|
|
EnableDlgItem(IDC_EDIT_BGIMG_BRIGHTNESS, FALSE); |
|
|
} |
|
|
|
|
|
} else { |
|
|
EnableDlgItem(IDC_BGIMG_CHECK, FALSE); |
|
|
EnableDlgItem(IDC_BGIMG_EDIT, FALSE); |
|
|
EnableDlgItem(IDC_BGIMG_BUTTON, FALSE); |
|
|
|
|
|
EnableDlgItem(IDC_BGIMG_BRIGHTNESS, FALSE); |
|
|
EnableDlgItem(IDC_EDIT_BGIMG_BRIGHTNESS, FALSE); |
|
|
|
|
|
EnableDlgItem(IDC_MIXED_THEME_FILE, FALSE); |
|
| 714 |
} |
} |
| 715 |
|
|
| 716 |
// (3)Mouse cursor type |
// (3)Mouse cursor type |
| 842 |
int sel; |
int sel; |
| 843 |
|
|
| 844 |
switch (wParam) { |
switch (wParam) { |
| 845 |
case IDC_ETERM_LOOKFEEL: |
case IDC_THEME_EDITOR_BUTTON | (BN_CLICKED << 16): { |
| 846 |
// チェックされたら Enable/Disable をトグルする。 |
ThemeDialog(m_hInst, m_hWnd, &cv); |
| 847 |
if (GetCheck(IDC_ETERM_LOOKFEEL)) { |
break; |
| 848 |
EnableDlgItem(IDC_MIXED_THEME_FILE, TRUE); |
} |
| 849 |
EnableDlgItem(IDC_BGIMG_CHECK, TRUE); |
case IDC_THEME_FILE | (CBN_SELCHANGE << 16): { |
| 850 |
if (GetCheck(IDC_BGIMG_CHECK)) { |
int r = GetCurSel(IDC_THEME_FILE); |
| 851 |
EnableDlgItem(IDC_BGIMG_EDIT, TRUE); |
// 固定のとき、ファイル名を入力できるようにする |
| 852 |
EnableDlgItem(IDC_BGIMG_BUTTON, TRUE); |
BOOL enable = (r == 1) ? TRUE : FALSE; |
| 853 |
|
EnableDlgItem(IDC_THEME_EDIT, enable); |
| 854 |
EnableDlgItem(IDC_BGIMG_BRIGHTNESS, TRUE); |
EnableDlgItem(IDC_THEME_BUTTON, enable); |
| 855 |
EnableDlgItem(IDC_EDIT_BGIMG_BRIGHTNESS, TRUE); |
break; |
| 856 |
} else { |
} |
| 857 |
EnableDlgItem(IDC_BGIMG_EDIT, FALSE); |
case IDC_THEME_BUTTON | (BN_CLICKED << 16): { |
| 858 |
EnableDlgItem(IDC_BGIMG_BUTTON, FALSE); |
// テーマファイルを選択する |
| 859 |
|
OPENFILENAMEW ofn = {}; |
| 860 |
|
wchar_t szFile[MAX_PATH]; |
| 861 |
|
wchar_t *curdir; |
| 862 |
|
wchar_t *theme_dir; |
| 863 |
|
hGetCurrentDirectoryW(&curdir); |
| 864 |
|
|
| 865 |
EnableDlgItem(IDC_BGIMG_BRIGHTNESS, FALSE); |
if (GetFileAttributesW(ts.EtermLookfeel.BGThemeFileW) != INVALID_FILE_ATTRIBUTES) { |
| 866 |
EnableDlgItem(IDC_EDIT_BGIMG_BRIGHTNESS, FALSE); |
wcsncpy_s(szFile, _countof(szFile), ts.EtermLookfeel.BGThemeFileW, _TRUNCATE); |
| 867 |
} |
} else { |
| 868 |
} else { |
szFile[0] = 0; |
| 869 |
EnableDlgItem(IDC_BGIMG_CHECK, FALSE); |
} |
|
EnableDlgItem(IDC_BGIMG_EDIT, FALSE); |
|
|
EnableDlgItem(IDC_BGIMG_BUTTON, FALSE); |
|
|
|
|
|
EnableDlgItem(IDC_BGIMG_BRIGHTNESS, FALSE); |
|
|
EnableDlgItem(IDC_EDIT_BGIMG_BRIGHTNESS, FALSE); |
|
|
|
|
|
// 無効化されたら、BGThemeFile を元に戻す。 |
|
|
strncpy_s(ts.EtermLookfeel.BGThemeFile, BG_THEME_IMAGEFILE_DEFAULT, sizeof(ts.EtermLookfeel.BGThemeFile)); |
|
|
// 背景画像も無効化する。 |
|
|
SetDlgItemText(IDC_BGIMG_EDIT, ""); |
|
|
SetDlgItemInt(IDC_EDIT_BGIMG_BRIGHTNESS, BG_THEME_IMAGE_BRIGHTNESS_DEFAULT); |
|
|
|
|
|
EnableDlgItem(IDC_MIXED_THEME_FILE, FALSE); |
|
|
} |
|
|
return TRUE; |
|
|
|
|
|
case IDC_MIXED_THEME_FILE: |
|
|
if (GetCheck(IDC_MIXED_THEME_FILE)) { |
|
|
// 背景画像のチェックは外す。 |
|
|
SetCheck(IDC_BGIMG_CHECK, BST_UNCHECKED); |
|
|
} |
|
|
return TRUE; |
|
|
|
|
|
case IDC_BGIMG_CHECK: |
|
|
if (GetCheck(IDC_BGIMG_CHECK)) { |
|
|
EnableDlgItem(IDC_BGIMG_EDIT, TRUE); |
|
|
EnableDlgItem(IDC_BGIMG_BUTTON, TRUE); |
|
|
|
|
|
EnableDlgItem(IDC_BGIMG_BRIGHTNESS, TRUE); |
|
|
EnableDlgItem(IDC_EDIT_BGIMG_BRIGHTNESS, TRUE); |
|
|
|
|
|
strncpy_s(ts.EtermLookfeel.BGThemeFile, BG_THEME_IMAGEFILE, sizeof(ts.EtermLookfeel.BGThemeFile)); |
|
|
// 混合のチェックは外す。 |
|
|
SetCheck(IDC_MIXED_THEME_FILE, BST_UNCHECKED); |
|
|
} else { |
|
|
EnableDlgItem(IDC_BGIMG_EDIT, FALSE); |
|
|
EnableDlgItem(IDC_BGIMG_BUTTON, FALSE); |
|
| 870 |
|
|
| 871 |
EnableDlgItem(IDC_BGIMG_BRIGHTNESS, FALSE); |
aswprintf(&theme_dir, L"%s\\theme", ts.HomeDirW); |
|
EnableDlgItem(IDC_EDIT_BGIMG_BRIGHTNESS, FALSE); |
|
| 872 |
|
|
| 873 |
// 無効化されたら、BGThemeFile を元に戻す。 |
ofn.lStructSize = get_OPENFILENAME_SIZEW(); |
| 874 |
strncpy_s(ts.EtermLookfeel.BGThemeFile, BG_THEME_IMAGEFILE_DEFAULT, sizeof(ts.EtermLookfeel.BGThemeFile)); |
ofn.hwndOwner = GetSafeHwnd(); |
| 875 |
// 背景画像も無効化する。 |
ofn.lpstrFilter = L"Theme Files(*.ini)\0*.ini\0All Files(*.*)\0*.*\0"; |
| 876 |
SetDlgItemText(IDC_BGIMG_EDIT, ""); |
ofn.lpstrFile = szFile; |
| 877 |
SetDlgItemInt(IDC_EDIT_BGIMG_BRIGHTNESS, BG_THEME_IMAGE_BRIGHTNESS_DEFAULT); |
ofn.nMaxFile = _countof(szFile); |
| 878 |
} |
ofn.lpstrTitle = L"select theme file"; |
| 879 |
return TRUE; |
ofn.lpstrInitialDir = theme_dir; |
| 880 |
|
ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; |
| 881 |
|
BOOL ok = GetOpenFileNameW(&ofn); |
| 882 |
|
SetCurrentDirectoryW(curdir); |
| 883 |
|
free(curdir); |
| 884 |
|
free(theme_dir); |
| 885 |
|
if (ok) { |
| 886 |
|
SetDlgItemTextW(IDC_THEME_EDIT, szFile); |
| 887 |
|
} |
| 888 |
|
return TRUE; |
| 889 |
|
} |
| 890 |
|
|
| 891 |
case IDC_BGIMG_BUTTON | (BN_CLICKED << 16): |
case IDC_BGIMG_BUTTON | (BN_CLICKED << 16): |
| 892 |
// 背景画像をダイアログで指定する。 |
// 背景画像をダイアログで指定する。 |
| 893 |
{ |
{ |
| 894 |
OPENFILENAMEW ofn; |
OPENFILENAMEW ofn; |
| 895 |
wchar_t szFile[MAX_PATH]; |
wchar_t szFile[MAX_PATH]; |
| 896 |
|
wchar_t *curdir; |
| 897 |
|
hGetCurrentDirectoryW(&curdir); |
| 898 |
|
|
| 899 |
memset(&ofn, 0, sizeof(ofn)); |
memset(&ofn, 0, sizeof(ofn)); |
| 900 |
memset(szFile, 0, sizeof(szFile)); |
memset(szFile, 0, sizeof(szFile)); |
| 906 |
ofn.lpstrTitle = L"select image file"; |
ofn.lpstrTitle = L"select image file"; |
| 907 |
ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; |
ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; |
| 908 |
BOOL ok = GetOpenFileNameW(&ofn); |
BOOL ok = GetOpenFileNameW(&ofn); |
| 909 |
|
SetCurrentDirectoryW(curdir); |
| 910 |
|
free(curdir); |
| 911 |
if (ok) { |
if (ok) { |
| 912 |
SetDlgItemTextW(IDC_BGIMG_EDIT, szFile); |
SetDlgItemTextW(IDC_BGIMG_EDIT, szFile); |
| 913 |
} |
} |
| 1068 |
(i > 255) ? 255 : i; |
(i > 255) ? 255 : i; |
| 1069 |
} |
} |
| 1070 |
|
|
| 1071 |
// (2) |
// (2) テーマファイル選択 |
| 1072 |
// グローバル変数 BGEnable を直接書き換えると、プログラムが落ちることが |
{ |
| 1073 |
// あるのでコピーを修正するのみとする。(2005.4.24 yutaka) |
int r = GetCurSel(IDC_THEME_FILE); |
| 1074 |
if (ts.EtermLookfeel.BGEnable != GetCheck(IDC_ETERM_LOOKFEEL)) { |
switch (r) { |
| 1075 |
flag_changed = 1; |
default: |
| 1076 |
ts.EtermLookfeel.BGEnable = GetCheck(IDC_ETERM_LOOKFEEL); |
assert(FALSE); |
| 1077 |
} |
// fall through |
| 1078 |
if (ts.EtermLookfeel.BGEnable) { |
case 0: |
| 1079 |
GetDlgItemTextA(IDC_BGIMG_EDIT, ts.BGImageFilePath, sizeof(ts.BGImageFilePath)); |
ts.EtermLookfeel.BGEnable = 0; |
| 1080 |
} else { |
break; |
| 1081 |
strncpy_s(ts.BGImageFilePath, sizeof(ts.BGImageFilePath), "%SystemRoot%\\Web\\Wallpaper\\*.bmp", _TRUNCATE); |
case 1: { |
| 1082 |
} |
// テーマファイル指定 |
| 1083 |
|
ts.EtermLookfeel.BGEnable = 1; |
| 1084 |
|
|
| 1085 |
GetDlgItemTextA(IDC_EDIT_BGIMG_BRIGHTNESS, buf, sizeof(buf)); |
wchar_t* theme_file; |
| 1086 |
if (isdigit(buf[0])) { |
hGetDlgItemTextW(m_hWnd, IDC_THEME_EDIT, &theme_file); |
|
int i = atoi(buf); |
|
|
ts.BGImgBrightness = |
|
|
(i < 0) ? 0 : |
|
|
(i > 255) ? 255 : i; |
|
|
} |
|
| 1087 |
|
|
| 1088 |
// テーマファイルを最終設定する。 |
if (ts.EtermLookfeel.BGThemeFileW != NULL) { |
| 1089 |
if (ts.EtermLookfeel.BGEnable) { |
free(ts.EtermLookfeel.BGThemeFileW); |
| 1090 |
if (GetCheck(IDC_BGIMG_CHECK)) { |
} |
| 1091 |
strncpy_s(ts.EtermLookfeel.BGThemeFile, BG_THEME_IMAGEFILE, sizeof(ts.EtermLookfeel.BGThemeFile)); |
ts.EtermLookfeel.BGThemeFileW = theme_file; |
| 1092 |
} else { |
break; |
| 1093 |
strncpy_s(ts.EtermLookfeel.BGThemeFile, BG_THEME_IMAGEFILE_DEFAULT, sizeof(ts.EtermLookfeel.BGThemeFile)); |
} |
| 1094 |
|
case 2: { |
| 1095 |
|
// ランダムテーマ |
| 1096 |
|
ts.EtermLookfeel.BGEnable = 2; |
| 1097 |
|
if (ts.EtermLookfeel.BGThemeFileW != NULL) { |
| 1098 |
|
free(ts.EtermLookfeel.BGThemeFileW); |
| 1099 |
|
} |
| 1100 |
|
ts.EtermLookfeel.BGThemeFileW = NULL; |
| 1101 |
|
break; |
| 1102 |
} |
} |
|
if (GetCheck(IDC_MIXED_THEME_FILE)) { |
|
|
// 壁紙と混合の場合、デフォルトに戻しておく。 |
|
|
ts.EtermLookfeel.BGIgnoreThemeFile = FALSE; |
|
|
} else { |
|
|
// テーマファイルを無視する。 |
|
|
ts.EtermLookfeel.BGIgnoreThemeFile = TRUE; |
|
| 1103 |
} |
} |
|
|
|
|
} else { |
|
|
// BGが無効の場合はデフォルトに戻しておく。 |
|
|
strncpy_s(ts.EtermLookfeel.BGThemeFile, BG_THEME_IMAGEFILE_DEFAULT, sizeof(ts.EtermLookfeel.BGThemeFile)); |
|
| 1104 |
} |
} |
| 1105 |
|
|
| 1106 |
|
|