https://git.reactos.org/?p=reactos.git;a=commitdiff;h=2e797accd3c391c072f7a…
commit 2e797accd3c391c072f7a1c0eca8cd078dc2c820
Author: Eric Kohl <eric.kohl(a)reactos.org>
AuthorDate: Sat Feb 23 12:51:14 2019 +0100
Commit: Eric Kohl <eric.kohl(a)reactos.org>
CommitDate: Sat Feb 23 12:53:05 2019 +0100
[SNDVOL32] Advanced Controls dialog: Initialize the Other Controls
---
base/applications/sndvol32/advanced.c | 62 ++++++++++++++++++++++++++++++-----
base/applications/sndvol32/sndvol32.c | 9 ++---
base/applications/sndvol32/sndvol32.h | 1 +
3 files changed, 60 insertions(+), 12 deletions(-)
diff --git a/base/applications/sndvol32/advanced.c
b/base/applications/sndvol32/advanced.c
index 598cacff8d..1274912501 100644
--- a/base/applications/sndvol32/advanced.c
+++ b/base/applications/sndvol32/advanced.c
@@ -13,16 +13,20 @@ OnInitDialog(
HWND hwndDlg,
PADVANCED_CONTEXT Context)
{
- WCHAR szRawTitle[256], szCookedTitle[256];
MIXERCONTROLDETAILS_UNSIGNED UnsignedDetails;
+ MIXERCONTROLDETAILS_BOOLEAN BooleanDetails;
+ WCHAR szRawBuffer[256], szCookedBuffer[256];
LPMIXERCONTROL Control = NULL;
UINT ControlCount = 0, Index;
DWORD i, dwStep, dwPosition;
+ DWORD dwOtherControls = 0;
+ RECT rect;
+ LONG dy;
/* Set the dialog title */
- LoadStringW(hAppInstance, IDS_ADVANCED_CONTROLS, szRawTitle, ARRAYSIZE(szRawTitle));
- StringCchPrintfW(szCookedTitle, ARRAYSIZE(szCookedTitle), szRawTitle,
Context->LineName);
- SetWindowTextW(hwndDlg, szCookedTitle);
+ LoadStringW(hAppInstance, IDS_ADVANCED_CONTROLS, szRawBuffer,
ARRAYSIZE(szRawBuffer));
+ StringCchPrintfW(szCookedBuffer, ARRAYSIZE(szCookedBuffer), szRawBuffer,
Context->LineName);
+ SetWindowTextW(hwndDlg, szCookedBuffer);
/* Disable the tone controls */
for (i = IDC_ADV_BASS_LOW; i<= IDC_ADV_TREBLE_SLIDER; i++)
@@ -56,6 +60,8 @@ OnInitDialog(
{
if (Control[Index].dwControlType == MIXERCONTROL_CONTROLTYPE_BASS)
{
+ /* Bass control */
+
if (SndMixerGetVolumeControlDetails(Context->Mixer,
Control[Index].dwControlID, 1, sizeof(MIXERCONTROLDETAILS_UNSIGNED),
(LPVOID)&UnsignedDetails) != -1)
{
for (i = IDC_ADV_BASS_LOW; i<= IDC_ADV_BASS_SLIDER; i++)
@@ -68,6 +74,8 @@ OnInitDialog(
}
else if (Control[Index].dwControlType == MIXERCONTROL_CONTROLTYPE_TREBLE)
{
+ /* Treble control */
+
if (SndMixerGetVolumeControlDetails(Context->Mixer,
Control[Index].dwControlID, 1, sizeof(MIXERCONTROLDETAILS_UNSIGNED),
(LPVOID)&UnsignedDetails) != -1)
{
for (i = IDC_ADV_TREBLE_LOW; i<= IDC_ADV_TREBLE_SLIDER; i++)
@@ -78,18 +86,56 @@ OnInitDialog(
SendDlgItemMessageW(hwndDlg, IDC_ADV_TREBLE_SLIDER, TBM_SETPOS,
(WPARAM)TRUE, dwPosition);
}
}
- else if (Control[Index].dwControlType != MIXERCONTROL_CONTROLTYPE_VOLUME
&&
- Control[Index].dwControlType != MIXERCONTROL_CONTROLTYPE_MUTE)
+ else if (((Control[Index].dwControlType & (MIXERCONTROL_CT_CLASS_MASK |
MIXERCONTROL_CT_SUBCLASS_MASK | MIXERCONTROL_CT_UNITS_MASK)) ==
MIXERCONTROL_CONTROLTYPE_BOOLEAN) &&
+ (Control[Index].dwControlType != MIXERCONTROL_CONTROLTYPE_MUTE))
{
- ShowWindow(GetDlgItem(hwndDlg, IDC_ADV_OTHER_CONTROLS), SW_SHOWNORMAL);
- ShowWindow(GetDlgItem(hwndDlg, IDC_ADV_OTHER_TEXT), SW_SHOWNORMAL);
+ /* All boolean controls but the Mute control (Maximum of 2) */
+
+ if (dwOtherControls < 2)
+ {
+ if (SndMixerGetVolumeControlDetails(Context->Mixer,
Control[Index].dwControlID, 1, sizeof(MIXERCONTROLDETAILS_BOOLEAN),
(LPVOID)&BooleanDetails) != -1)
+ {
+ LoadStringW(hAppInstance, IDS_OTHER_CONTROLS1 + dwOtherControls,
szRawBuffer, ARRAYSIZE(szRawBuffer));
+ StringCchPrintfW(szCookedBuffer, ARRAYSIZE(szCookedBuffer),
szRawBuffer, Control[Index].szName);
+ SetWindowTextW(GetDlgItem(hwndDlg, IDC_ADV_OTHER_CHECK1 +
dwOtherControls), szCookedBuffer);
+ ShowWindow(GetDlgItem(hwndDlg, IDC_ADV_OTHER_CHECK1 +
dwOtherControls), SW_SHOWNORMAL);
+
+ SendDlgItemMessageW(hwndDlg, IDC_ADV_OTHER_CHECK1 +
dwOtherControls, BM_SETCHECK, (WPARAM)BooleanDetails.fValue, 0);
+
+ dwOtherControls++;
+ }
+ }
}
}
/* free controls */
HeapFree(GetProcessHeap(), 0, Control);
}
+
+ if (dwOtherControls != 0)
+ {
+ /* Show the 'Other controls' groupbox and text */
+ ShowWindow(GetDlgItem(hwndDlg, IDC_ADV_OTHER_CONTROLS), SW_SHOWNORMAL);
+ ShowWindow(GetDlgItem(hwndDlg, IDC_ADV_OTHER_TEXT), SW_SHOWNORMAL);
+
+ /* Resize the dialog */
+ GetWindowRect(hwndDlg, &rect);
+
+ dy = MulDiv(73, Context->MixerWindow->baseUnit.cy, 8);
+ rect.bottom += dy;
+
+ SetWindowPos(hwndDlg, HWND_TOP, rect.left, rect.top, rect.right - rect.left,
rect.bottom - rect.top, SWP_NOMOVE | SWP_NOZORDER);
+
+ /* Move the 'Close' button down */
+ GetWindowRect(GetDlgItem(hwndDlg, IDOK), &rect);
+ MapWindowPoints(HWND_DESKTOP, hwndDlg, (LPPOINT)&rect, 2);
+
+ rect.top += dy;
+ rect.bottom += dy;
+
+ SetWindowPos(GetDlgItem(hwndDlg, IDOK), HWND_TOP, rect.left, rect.top, rect.right
- rect.left, rect.bottom - rect.top, SWP_NOSIZE | SWP_NOZORDER);
+ }
}
diff --git a/base/applications/sndvol32/sndvol32.c
b/base/applications/sndvol32/sndvol32.c
index 8398151ed0..9a5578dc96 100644
--- a/base/applications/sndvol32/sndvol32.c
+++ b/base/applications/sndvol32/sndvol32.c
@@ -658,7 +658,7 @@ SetVolumeCallback(PSND_MIXER Mixer, DWORD LineID, LPMIXERLINE Line,
PVOID Ctx)
{
if (Context->bVertical)
{
- if ((Control[Index].dwControlType & MIXERCONTROL_CT_CLASS_MASK) ==
MIXERCONTROL_CT_CLASS_FADER)
+ if (Control[Index].dwControlType == MIXERCONTROL_CONTROLTYPE_VOLUME)
{
DWORD LineOffset, volumePosition, balancePosition;
DWORD volumeStep, balanceStep;
@@ -724,7 +724,7 @@ SetVolumeCallback(PSND_MIXER Mixer, DWORD LineID, LPMIXERLINE Line,
PVOID Ctx)
}
else if (Context->bSwitch)
{
- if ((Control[Index].dwControlType & MIXERCONTROL_CT_CLASS_MASK) ==
MIXERCONTROL_CT_CLASS_SWITCH)
+ if (Control[Index].dwControlType == MIXERCONTROL_CONTROLTYPE_MUTE)
{
/* set up details */
bDetails.fValue = Context->SliderPos;
@@ -783,7 +783,7 @@ MixerControlChangeCallback(PSND_MIXER Mixer, DWORD LineID, LPMIXERLINE
Line, PVO
{
if (Control[Index].dwControlID == PtrToUlong(Context))
{
- if ((Control[Index].dwControlType & MIXERCONTROL_CT_CLASS_MASK) ==
MIXERCONTROL_CT_CLASS_SWITCH)
+ if (Control[Index].dwControlType == MIXERCONTROL_CONTROLTYPE_MUTE)
{
MIXERCONTROLDETAILS_BOOLEAN Details;
@@ -794,7 +794,7 @@ MixerControlChangeCallback(PSND_MIXER Mixer, DWORD LineID, LPMIXERLINE
Line, PVO
UpdateDialogLineSwitchControl(&Preferences, Line,
Details.fValue);
}
}
- else if ((Control[Index].dwControlType & MIXERCONTROL_CT_CLASS_MASK) ==
MIXERCONTROL_CT_CLASS_FADER)
+ else if (Control[Index].dwControlType == MIXERCONTROL_CONTROLTYPE_VOLUME)
{
/* get volume control details */
if (SndMixerGetVolumeControlDetails(Preferences.MixerWindow->Mixer,
Control[Index].dwControlID, Line->cChannels, sizeof(MIXERCONTROLDETAILS_UNSIGNED),
(LPVOID)pVolumeDetails) != -1)
@@ -1025,6 +1025,7 @@ MainWindowProc(HWND hwnd,
/* get line name */
if (GetDlgItemTextW(hwnd, CtrlID, AdvancedContext.LineName,
MIXER_LONG_NAME_CHARS) != 0)
{
+ AdvancedContext.MixerWindow = Preferences.MixerWindow;
AdvancedContext.Mixer =
Preferences.MixerWindow->Mixer;
AdvancedContext.Line =
SndMixerGetLineByName(Preferences.MixerWindow->Mixer,
Preferences.SelectedLine,
diff --git a/base/applications/sndvol32/sndvol32.h
b/base/applications/sndvol32/sndvol32.h
index e324584bc4..4dcf58bebb 100644
--- a/base/applications/sndvol32/sndvol32.h
+++ b/base/applications/sndvol32/sndvol32.h
@@ -127,6 +127,7 @@ typedef struct _SET_VOLUME_CONTEXT
typedef struct _ADVANCED_CONTEXT
{
WCHAR LineName[MIXER_LONG_NAME_CHARS];
+ PMIXER_WINDOW MixerWindow;
PSND_MIXER Mixer;
LPMIXERLINE Line;
} ADVANCED_CONTEXT, *PADVANCED_CONTEXT;