else
{
if (PrefContext->MixerWindow->Mode == NORMAL_MODE)
+ {
PrefContext->MixerWindow->bHasExtendedControls = TRUE;
+
+ wID = (PrefContext->MixerWindow->DialogCount + 1) * IDC_LINE_ADVANCED;
+
+ /* get dialog control */
+ hDlgCtrl = GetDlgItem(PrefContext->MixerWindow->hWnd, wID);
+ if (hDlgCtrl != NULL)
+ {
+ ShowWindow(hDlgCtrl,
+ PrefContext->MixerWindow->bShowExtendedControls ? SW_SHOWNORMAL : SW_HIDE);
+ }
+ }
}
}
{
HWND hDlgCtrl;
RECT statusRect;
+ UINT i;
+ LONG dy;
/* set dialog count to zero */
PrefContext->MixerWindow->DialogCount = 0;
-
+ PrefContext->MixerWindow->bHasExtendedControls = FALSE;
SetRectEmpty(&PrefContext->MixerWindow->rect);
/* enumerate controls */
SndMixerEnumConnections(PrefContext->MixerWindow->Mixer, PrefContext->SelectedLine, EnumConnectionsCallback, (PVOID)PrefContext);
- if (PrefContext->MixerWindow->bHasExtendedControls)
- {
- EnableMenuItem(GetMenu(PrefContext->MixerWindow->hWnd), IDM_ADVANCED_CONTROLS, MF_BYCOMMAND | MF_ENABLED);
- }
+ /* Update the 'Advanced Controls' menu item */
+ EnableMenuItem(GetMenu(PrefContext->MixerWindow->hWnd),
+ IDM_ADVANCED_CONTROLS,
+ MF_BYCOMMAND | (PrefContext->MixerWindow->bHasExtendedControls ? MF_ENABLED : MF_GRAYED));
+ /* Add some height for the status bar */
if (PrefContext->MixerWindow->hStatusBar)
{
GetWindowRect(PrefContext->MixerWindow->hStatusBar, &statusRect);
PrefContext->MixerWindow->rect.bottom += (statusRect.bottom - statusRect.top);
}
+ /* Add height of the 'Advanced' button */
+ dy = MulDiv(ADVANCED_BUTTON_HEIGHT, PrefContext->MixerWindow->baseUnit.cy, 8);
+ if (PrefContext->MixerWindow->bShowExtendedControls && PrefContext->MixerWindow->bHasExtendedControls)
+ PrefContext->MixerWindow->rect.bottom += dy;
+
/* now move the window */
AdjustWindowRect(&PrefContext->MixerWindow->rect, WS_DLGFRAME | WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_VISIBLE, TRUE);
SetWindowPos(PrefContext->MixerWindow->hWnd, HWND_TOP, PrefContext->MixerWindow->rect.left, PrefContext->MixerWindow->rect.top, PrefContext->MixerWindow->rect.right - PrefContext->MixerWindow->rect.left, PrefContext->MixerWindow->rect.bottom - PrefContext->MixerWindow->rect.top, SWP_NOMOVE | SWP_NOZORDER);
SWP_NOZORDER);
}
+ /* Resize the vertical line separators */
+ for (i = 0; i < PrefContext->MixerWindow->DialogCount; i++)
+ {
+ hDlgCtrl = GetDlgItem(PrefContext->MixerWindow->hWnd, (i + 1) * IDC_LINE_SEP);
+ if (hDlgCtrl != NULL)
+ {
+ GetWindowRect(hDlgCtrl, &statusRect);
+ if (PrefContext->MixerWindow->bShowExtendedControls && PrefContext->MixerWindow->bHasExtendedControls)
+ statusRect.bottom += dy;
+
+ SetWindowPos(hDlgCtrl,
+ HWND_TOP,
+ 0,
+ 0,
+ statusRect.right - statusRect.left,
+ statusRect.bottom - statusRect.top,
+ SWP_NOMOVE | SWP_NOZORDER);
+ }
+ }
+
/* Hide the last line separator */
- hDlgCtrl = GetDlgItem(PrefContext->MixerWindow->hWnd, IDC_LINE_SEP * PrefContext->MixerWindow->DialogCount /*PrefContext->Count*/);
+ hDlgCtrl = GetDlgItem(PrefContext->MixerWindow->hWnd, IDC_LINE_SEP * PrefContext->MixerWindow->DialogCount);
if (hDlgCtrl != NULL)
{
ShowWindow(hDlgCtrl, SW_HIDE);
return TRUE;
}
-
-static VOID
-ResizeMixerWindow(
- PMIXER_WINDOW MixerWindow)
-{
- RECT statusRect;
- HWND hDlgCtrl;
- UINT i;
- LONG dy;
-
- if (MixerWindow->Mode != NORMAL_MODE)
- return;
-
- if (MixerWindow->bHasExtendedControls == FALSE)
- return;
-
- if (MixerWindow->hStatusBar)
- {
- GetWindowRect(MixerWindow->hStatusBar, &statusRect);
- }
-
- /* Height of the 'Advanced' button in dialog units plus 2 units bottom space */
- #define BUTTON_HEIGHT 16
- dy = MulDiv(BUTTON_HEIGHT, MixerWindow->baseUnit.cy, 8);
-
- if (MixerWindow->bShowExtendedControls)
- MixerWindow->rect.bottom += dy;
- else
- MixerWindow->rect.bottom -= dy;
-
- SetWindowPos(MixerWindow->hWnd,
- HWND_TOP,
- MixerWindow->rect.left,
- MixerWindow->rect.top,
- MixerWindow->rect.right - MixerWindow->rect.left,
- MixerWindow->rect.bottom - MixerWindow->rect.top,
- SWP_NOMOVE | SWP_NOZORDER);
-
- if (MixerWindow->hStatusBar)
- {
- SetWindowPos(MixerWindow->hStatusBar,
- HWND_TOP,
- statusRect.left,
- MixerWindow->rect.bottom - (statusRect.bottom - statusRect.top),
- MixerWindow->rect.right - MixerWindow->rect.left,
- statusRect.bottom - statusRect.top,
- SWP_NOZORDER);
- }
-
- for (i = 0; i < MixerWindow->DialogCount; i++)
- {
- hDlgCtrl = GetDlgItem(MixerWindow->hWnd, IDC_LINE_SEP * i);
- if (hDlgCtrl != NULL)
- {
- GetWindowRect(hDlgCtrl, &statusRect);
- if (MixerWindow->bShowExtendedControls)
- statusRect.bottom += dy;
- else
- statusRect.bottom -= dy;
-
- SetWindowPos(hDlgCtrl,
- HWND_TOP,
- 0,
- 0,
- statusRect.right - statusRect.left,
- statusRect.bottom - statusRect.top,
- SWP_NOMOVE | SWP_NOZORDER);
- }
- }
-}
-
-
static LRESULT CALLBACK
MainWindowProc(HWND hwnd,
UINT uMsg,
CheckMenuItem(GetMenu(hwnd),
IDM_ADVANCED_CONTROLS,
MF_BYCOMMAND | (MixerWindow->bShowExtendedControls ? MF_CHECKED : MF_UNCHECKED));
- ResizeMixerWindow(MixerWindow);
+ RebuildMixerWindowControls(&Preferences);
break;
case IDM_EXIT:
CtrlID = LOWORD(wParam);
/* check if the message is from the line switch */
- if (HIWORD(wParam) == BN_CLICKED && (CtrlID % IDC_LINE_SWITCH == 0))
+ if (HIWORD(wParam) == BN_CLICKED)
{
- /* compute line offset */
- LineOffset = CtrlID / IDC_LINE_SWITCH;
+ if (CtrlID % IDC_LINE_SWITCH == 0)
+ {
+ /* compute line offset */
+ LineOffset = CtrlID / IDC_LINE_SWITCH;
+
+ /* compute window id of line name static control */
+ CtrlID = LineOffset * IDC_LINE_NAME;
- /* compute window id of line name static control */
- CtrlID = LineOffset * IDC_LINE_NAME;
+ /* get line name */
+ if (GetDlgItemTextW(hwnd, CtrlID, Context.LineName, MIXER_LONG_NAME_CHARS) != 0)
+ {
+ /* setup context */
+ Context.SliderPos = SendMessage((HWND)lParam, BM_GETCHECK, 0, 0);
+ Context.bVertical = FALSE;
+ Context.bSwitch = TRUE;
- /* get line name */
- if (GetDlgItemTextW(hwnd, CtrlID, Context.LineName, MIXER_LONG_NAME_CHARS) != 0)
+ /* set volume */
+ SndMixerEnumConnections(Preferences.MixerWindow->Mixer, Preferences.SelectedLine, SetVolumeCallback, (LPVOID)&Context);
+ }
+ }
+ else if (CtrlID % IDC_LINE_ADVANCED == 0)
{
- /* setup context */
- Context.SliderPos = SendMessage((HWND)lParam, BM_GETCHECK, 0, 0);
- Context.bVertical = FALSE;
- Context.bSwitch = TRUE;
- /* set volume */
- SndMixerEnumConnections(Preferences.MixerWindow->Mixer, Preferences.SelectedLine, SetVolumeCallback, (LPVOID)&Context);
}
}
}
-
}
break;
}