Skip to content

Commit

Permalink
sync dialogs
Browse files Browse the repository at this point in the history
  • Loading branch information
katahiromz committed Apr 2, 2024
1 parent cfb09bb commit 393869c
Show file tree
Hide file tree
Showing 7 changed files with 137 additions and 51 deletions.
12 changes: 11 additions & 1 deletion GUI.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4521,7 +4521,15 @@ LOGFONTW *XgGetUIFont(void)
return &s_lf;
}

HWND xg_ahSettingsWnds[3] = { 0 };
enum
{
I_SYNCED_FILE_SETTINGS,
I_SYNCED_VIEW_SETTINGS,
I_SYNCED_APPEARANCE,
I_SYNCED_MAX
};

HWND xg_ahSyncedDialogs[I_SYNCED_MAX] = { 0 };

#include "XgFileSettings.cpp"
#include "XgViewSettings.cpp"
Expand Down Expand Up @@ -4573,6 +4581,8 @@ void XgGeneralSettings(HWND hwnd, INT nStartPage = 0)
psh.nStartPage = nStartPage;

::PropertySheetW(&psh);

ZeroMemory(&xg_ahSyncedDialogs, sizeof(xg_ahSyncedDialogs));
}

void MainWnd_OnSettings(HWND hwnd)
Expand Down
66 changes: 52 additions & 14 deletions XG_SettingsDialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ static BOOL m_bUpdating = FALSE;
// [設定]ダイアログの初期化。
BOOL XG_SettingsDialog::OnInitDialog(HWND hwnd)
{
xg_ahSettingsWnds[2] = hwnd;
xg_ahSyncedDialogs[I_SYNCED_APPEARANCE] = hwnd;

// ドロップを受け付ける。
::DragAcceptFiles(hwnd, TRUE);
Expand Down Expand Up @@ -111,9 +111,56 @@ BOOL XG_SettingsDialog::OnInitDialog(HWND hwnd)
StringCchPrintfW(szText, _countof(szText), XG_OUTERFRAME_FORMAT, xg_nOuterFrameInPt);
SetDlgItemTextW(hwnd, edt7, szText);

// 同期する。
SyncFrom(hwnd);

return TRUE;
}

// 同期する。
void XG_SettingsDialog::SyncFrom(HWND hwnd)
{
BOOL bChecked;

HWND hwndTarget = xg_ahSyncedDialogs[I_SYNCED_VIEW_SETTINGS];
if (!::IsWindow(hwndTarget))
return;

bChecked = IsDlgButtonChecked(hwndTarget, chx15) == BST_CHECKED;
::CheckDlgButton(hwnd, chx3, bChecked ? BST_CHECKED : BST_UNCHECKED);

bChecked = IsDlgButtonChecked(hwndTarget, chx10) == BST_CHECKED;
::CheckDlgButton(hwnd, chx1, bChecked ? BST_CHECKED : BST_UNCHECKED);

bChecked = IsDlgButtonChecked(hwndTarget, chx12) == BST_CHECKED;
::CheckDlgButton(hwnd, chx4, bChecked ? BST_CHECKED : BST_UNCHECKED);

bChecked = IsDlgButtonChecked(hwndTarget, chx13) == BST_CHECKED;
::CheckDlgButton(hwnd, chx5, bChecked ? BST_CHECKED : BST_UNCHECKED);
}

// 他のダイアログと同期する。
void XG_SettingsDialog::SyncTo(HWND hwnd)
{
BOOL bChecked;

HWND hwndTarget = xg_ahSyncedDialogs[I_SYNCED_VIEW_SETTINGS];
if (!::IsWindow(hwndTarget))
return;

bChecked = IsDlgButtonChecked(hwnd, chx1) == BST_CHECKED;
::CheckDlgButton(hwndTarget, chx10, bChecked ? BST_CHECKED : BST_UNCHECKED);

bChecked = IsDlgButtonChecked(hwnd, chx3) == BST_CHECKED;
::CheckDlgButton(hwndTarget, chx15, bChecked ? BST_CHECKED : BST_UNCHECKED);

bChecked = IsDlgButtonChecked(hwnd, chx4) == BST_CHECKED;
::CheckDlgButton(hwndTarget, chx12, bChecked ? BST_CHECKED : BST_UNCHECKED);

bChecked = IsDlgButtonChecked(hwnd, chx5) == BST_CHECKED;
::CheckDlgButton(hwndTarget, chx13, bChecked ? BST_CHECKED : BST_UNCHECKED);
}

// [設定]ダイアログで[OK]ボタンを押された。
BOOL XG_SettingsDialog::OnOK(HWND hwnd)
{
Expand Down Expand Up @@ -911,10 +958,9 @@ XG_SettingsDialog::DialogProcDx(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPar
if (HIWORD(wParam) == BN_CLICKED)
{
// 他のダイアログと同期する。
BOOL bChecked = IsDlgButtonChecked(hwnd, chx1) == BST_CHECKED;
::CheckDlgButton(xg_ahSettingsWnds[1], chx10, bChecked ? BST_CHECKED : BST_UNCHECKED);
SyncTo(hwnd);

if (bChecked) {
if (IsDlgButtonChecked(hwnd, chx1) == BST_CHECKED) {
if (!m_bUpdating) {
m_bUpdating = TRUE;
{
Expand All @@ -941,21 +987,13 @@ XG_SettingsDialog::DialogProcDx(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPar
}
break;

case chx3: // スケルトンビュー。
case chx4: // 英小文字。
if (HIWORD(wParam) == BN_CLICKED)
{
// 他のダイアログと同期する。
BOOL bChecked = IsDlgButtonChecked(hwnd, chx4) == BST_CHECKED;
::CheckDlgButton(xg_ahSettingsWnds[1], chx12, bChecked ? BST_CHECKED : BST_UNCHECKED);
}
break;

case chx5: // ひらがな。
if (HIWORD(wParam) == BN_CLICKED)
{
// 他のダイアログと同期する。
BOOL bChecked = IsDlgButtonChecked(hwnd, chx5) == BST_CHECKED;
::CheckDlgButton(xg_ahSettingsWnds[1], chx13, bChecked ? BST_CHECKED : BST_UNCHECKED);
SyncTo(hwnd);
}
break;

Expand Down
3 changes: 3 additions & 0 deletions XG_SettingsDialog.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,4 +55,7 @@ class XG_SettingsDialog
static INT_PTR CALLBACK DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

INT_PTR DoModal(HWND hwnd);

void SyncFrom(HWND hwnd);
void SyncTo(HWND hwnd);
};
2 changes: 1 addition & 1 deletion XgFileSettings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ XgFileSettingsDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
switch (uMsg)
{
case WM_INITDIALOG:
xg_ahSettingsWnds[0] = hwnd;
xg_ahSyncedDialogs[I_SYNCED_FILE_SETTINGS] = hwnd;
// チェックボックスを初期化。
if (xg_bShowAnswerOnOpen)
CheckDlgButton(hwnd, chx1, BST_CHECKED);
Expand Down
63 changes: 48 additions & 15 deletions XgViewSettings.cpp
Original file line number Diff line number Diff line change
@@ -1,3 +1,47 @@
// 同期する。
void XgViewSettings_SyncFrom(HWND hwnd)
{
BOOL bChecked;

HWND hwndTarget = xg_ahSyncedDialogs[I_SYNCED_APPEARANCE];
if (!::IsWindow(hwndTarget))
return;

bChecked = IsDlgButtonChecked(hwndTarget, chx1) == BST_CHECKED;
::CheckDlgButton(hwnd, chx10, bChecked ? BST_CHECKED : BST_UNCHECKED);

bChecked = IsDlgButtonChecked(hwndTarget, chx3) == BST_CHECKED;
::CheckDlgButton(hwnd, chx15, bChecked ? BST_CHECKED : BST_UNCHECKED);

bChecked = IsDlgButtonChecked(hwndTarget, chx4) == BST_CHECKED;
::CheckDlgButton(hwnd, chx12, bChecked ? BST_CHECKED : BST_UNCHECKED);

bChecked = IsDlgButtonChecked(hwndTarget, chx5) == BST_CHECKED;
::CheckDlgButton(hwnd, chx13, bChecked ? BST_CHECKED : BST_UNCHECKED);
}

// 他のダイアログと同期する。
void XgViewSettings_SyncTo(HWND hwnd)
{
BOOL bChecked;

HWND hwndTarget = xg_ahSyncedDialogs[I_SYNCED_APPEARANCE];
if (!::IsWindow(hwndTarget))
return;

bChecked = IsDlgButtonChecked(hwnd, chx10) == BST_CHECKED;
::CheckDlgButton(hwndTarget, chx1, bChecked ? BST_CHECKED : BST_UNCHECKED);

bChecked = IsDlgButtonChecked(hwnd, chx15) == BST_CHECKED;
::CheckDlgButton(hwndTarget, chx3, bChecked ? BST_CHECKED : BST_UNCHECKED);

bChecked = IsDlgButtonChecked(hwnd, chx12) == BST_CHECKED;
::CheckDlgButton(hwndTarget, chx4, bChecked ? BST_CHECKED : BST_UNCHECKED);

bChecked = IsDlgButtonChecked(hwnd, chx13) == BST_CHECKED;
::CheckDlgButton(hwndTarget, chx5, bChecked ? BST_CHECKED : BST_UNCHECKED);
}

// [表示]設定。
INT_PTR CALLBACK
XgViewSettingsDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Expand All @@ -7,7 +51,7 @@ XgViewSettingsDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
switch (uMsg)
{
case WM_INITDIALOG:
xg_ahSettingsWnds[1] = hwnd;
xg_ahSyncedDialogs[I_SYNCED_VIEW_SETTINGS] = hwnd;
// チェックボックスを初期化。
if (xg_bShowToolBar)
::CheckDlgButton(hwnd, chx1, BST_CHECKED);
Expand Down Expand Up @@ -55,6 +99,7 @@ XgViewSettingsDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
::SendDlgItemMessageW(hwnd, cmb1, CB_ADDSTRING, 0, (LPARAM)L"200 %");
::SendDlgItemMessageW(hwnd, cmb1, CB_ADDSTRING, 0, (LPARAM)L"300 %");
::SetDlgItemTextW(hwnd, cmb1, (to_XGStringW(xg_nZoomRate) + L" %").c_str());
XgViewSettings_SyncFrom(hwnd);
return TRUE;

case WM_COMMAND:
Expand Down Expand Up @@ -89,24 +134,12 @@ XgViewSettingsDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
switch (LOWORD(wParam))
{
case chx10: // スケルトンビュー。
if (HIWORD(wParam) == BN_CLICKED)
{
BOOL bChecked = IsDlgButtonChecked(hwnd, chx10) == BST_CHECKED;
::CheckDlgButton(xg_ahSettingsWnds[2], chx1, bChecked ? BST_CHECKED : BST_UNCHECKED);
}
break;
case chx12: // 英小文字。
if (HIWORD(wParam) == BN_CLICKED)
{
BOOL bChecked = IsDlgButtonChecked(hwnd, chx12) == BST_CHECKED;
::CheckDlgButton(xg_ahSettingsWnds[2], chx4, bChecked ? BST_CHECKED : BST_UNCHECKED);
}
break;
case chx13: // ひらがな。
case chx15: // 二重マスの枠。
if (HIWORD(wParam) == BN_CLICKED)
{
BOOL bChecked = IsDlgButtonChecked(hwnd, chx13) == BST_CHECKED;
::CheckDlgButton(xg_ahSettingsWnds[2], chx5, bChecked ? BST_CHECKED : BST_UNCHECKED);
XgViewSettings_SyncTo(hwnd);
}
break;
}
Expand Down
21 changes: 11 additions & 10 deletions lang/en_US.rc
Original file line number Diff line number Diff line change
Expand Up @@ -657,7 +657,7 @@ FONT 9, "Tahoma"
PUSHBUTTON "Chan&ge...", psh5, 160, 44, 55, 14
PUSHBUTTON "Rese&t", psh6, 220, 44, 50, 14
AUTOCHECKBOX "S&keleton View", chx1, 10, 70, 85, 14
AUTOCHECKBOX "Dr&aw double-frame", chx3, 180, 70, 90, 14
AUTOCHECKBOX "Double-frame &line", chx3, 165, 70, 105, 15
RTEXT "Space color:", -1, 10, 96, 45, 12
PUSHBUTTON "", psh7, 60, 94, 15, 15, BS_OWNERDRAW
RTEXT "Block color:", -1, 90, 96, 45, 12
Expand Down Expand Up @@ -1518,7 +1518,7 @@ FONT 9, "Tahoma"
PUSHBUTTON "Open &Folder", psh2, 110, 115, 95, 15
}

IDD_VIEWSETTINGS DIALOG 0, 0, 220, 170
IDD_VIEWSETTINGS DIALOG 0, 0, 220, 190
CAPTION "View"
STYLE DS_CENTER | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION
FONT 9, "Tahoma"
Expand All @@ -1531,14 +1531,15 @@ FONT 9, "Tahoma"
AUTOCHECKBOX "&Numbering", chx6, 10, 105, 95, 15
AUTOCHECKBOX "&Caret", chx7, 10, 125, 95, 15
AUTOCHECKBOX "Double-&frame", chx8, 115, 5, 95, 15
AUTOCHECKBOX "&Double-frame letters", chx9, 115, 25, 95, 15
AUTOCHECKBOX "Skeleton &view", chx10, 115, 45, 95, 15
AUTOCHECKBOX "NumCro &mode", chx11, 115, 65, 95, 15
AUTOCHECKBOX "lo&wercase", chx12, 115, 85, 95, 15
AUTOCHECKBOX "&Hiragana", chx13, 115, 105, 95, 15
AUTOCHECKBOX "Checking ans&wer", chx14, 115, 125, 95, 15
RTEXT "&Zoom:", -1, 15, 150, 35, 10, SS_CENTERIMAGE | NOT WS_GROUP
COMBOBOX cmb1, 60, 150, 95, 300, CBS_HASSTRINGS | CBS_AUTOHSCROLL | CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP
AUTOCHECKBOX "Double-frame &line", chx15, 115, 25, 95, 15
AUTOCHECKBOX "&Double-frame letters", chx9, 115, 45, 95, 15
AUTOCHECKBOX "Skeleton &view", chx10, 115, 65, 95, 15
AUTOCHECKBOX "NumCro &mode", chx11, 115, 85, 95, 15
AUTOCHECKBOX "lo&wercase", chx12, 115, 105, 95, 15
AUTOCHECKBOX "&Hiragana", chx13, 115, 125, 95, 15
AUTOCHECKBOX "Checking ans&wer", chx14, 115, 145, 95, 15
RTEXT "&Zoom:", -1, 15, 170, 35, 10, SS_CENTERIMAGE | NOT WS_GROUP
COMBOBOX cmb1, 60, 170, 95, 300, CBS_HASSTRINGS | CBS_AUTOHSCROLL | CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP
}

//////////////////////////////////////////////////////////////////////////////
Expand Down
21 changes: 11 additions & 10 deletions lang/ja_JP.rc
Original file line number Diff line number Diff line change
Expand Up @@ -660,7 +660,7 @@ FONT 9, "MS UI Gothic"
PUSHBUTTON "変更(&G)...", psh5, 160, 44, 55, 14
PUSHBUTTON "リセット(&T)", psh6, 220, 44, 50, 14
AUTOCHECKBOX "スケルトン ビュー(&K)", chx1, 10, 70, 85, 14
AUTOCHECKBOX "二重マスの枠を描く(&A)", chx3, 180, 70, 90, 14
AUTOCHECKBOX "二重マスの枠(&L)", chx3, 180, 70, 90, 14
RTEXT "白マスの色(&1):", -1, 10, 96, 45, 12
PUSHBUTTON "", psh7, 60, 94, 15, 15, BS_OWNERDRAW
RTEXT "黒マスの色(&2):", -1, 90, 96, 45, 12
Expand Down Expand Up @@ -1521,7 +1521,7 @@ FONT 9, "MS UI Gothic"
PUSHBUTTON "フォルダを開く(&F)", psh2, 110, 115, 95, 15
}

IDD_VIEWSETTINGS DIALOG 0, 0, 220, 170
IDD_VIEWSETTINGS DIALOG 0, 0, 220, 190
CAPTION "表示"
STYLE DS_CENTER | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION
FONT 9, "MS UI Gothic"
Expand All @@ -1534,14 +1534,15 @@ FONT 9, "MS UI Gothic"
AUTOCHECKBOX "番号(&N)", chx6, 10, 105, 95, 15
AUTOCHECKBOX "キャレット(&C)", chx7, 10, 125, 95, 15
AUTOCHECKBOX "二重マス(&F)", chx8, 115, 5, 95, 15
AUTOCHECKBOX "二重マスの文字(&D)", chx9, 115, 25, 95, 15
AUTOCHECKBOX "スケルトン ビュー(&V)", chx10, 115, 45, 95, 15
AUTOCHECKBOX "ナンクロモード(&M)", chx11, 115, 65, 95, 15
AUTOCHECKBOX "英小文字(&W)", chx12, 115, 85, 95, 15
AUTOCHECKBOX "ひらがな(&H)", chx13, 115, 105, 95, 15
AUTOCHECKBOX "答え合わせ(&W)", chx14, 115, 125, 95, 15
RTEXT "ズーム(&Z):", -1, 15, 150, 35, 10, SS_CENTERIMAGE | NOT WS_GROUP
COMBOBOX cmb1, 60, 150, 95, 300, CBS_HASSTRINGS | CBS_AUTOHSCROLL | CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP
AUTOCHECKBOX "二重マスの枠(&L)", chx15, 115, 25, 95, 15
AUTOCHECKBOX "二重マスの文字(&D)", chx9, 115, 45, 95, 15
AUTOCHECKBOX "スケルトン ビュー(&V)", chx10, 115, 65, 95, 15
AUTOCHECKBOX "ナンクロモード(&M)", chx11, 115, 85, 95, 15
AUTOCHECKBOX "英小文字(&W)", chx12, 115, 105, 95, 15
AUTOCHECKBOX "ひらがな(&H)", chx13, 115, 125, 95, 15
AUTOCHECKBOX "答え合わせ(&W)", chx14, 115, 145, 95, 15
RTEXT "ズーム(&Z):", -1, 15, 170, 35, 10, SS_CENTERIMAGE | NOT WS_GROUP
COMBOBOX cmb1, 60, 170, 95, 300, CBS_HASSTRINGS | CBS_AUTOHSCROLL | CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP
}

//////////////////////////////////////////////////////////////////////////////
Expand Down

0 comments on commit 393869c

Please sign in to comment.