https://git.reactos.org/?p=reactos.git;a=commitdiff;h=2e797accd3c391c072f7a1c0eca8cd078dc2c820

commit 2e797accd3c391c072f7a1c0eca8cd078dc2c820
Author:     Eric Kohl <eric.k...@reactos.org>
AuthorDate: Sat Feb 23 12:51:14 2019 +0100
Commit:     Eric Kohl <eric.k...@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;

Reply via email to