//
// C O N F G D L G . C P P
//
// Dialog box handling for Server configuration
//
// Author:  danielwe
// Created: 5 Mar 1997
//

#include "pch.h"
#pragma hdrstop

#include "resource.h"
#include "srvrdlg.h"
#include "srvrhlp.h"

extern const WCHAR c_szNetCfgHelpFile[];

LRESULT CServerConfigDlg::OnInitDialog(UINT uMsg, WPARAM wParam,
                                       LPARAM lParam, BOOL& bHandled)
{
    const SERVER_DLG_DATA * psdd;
    INT                     idd = 0;

    psdd = m_psc->DlgData();
    Assert(psdd);

    switch (psdd->dwSize)
    {
    case 1:
        idd = RDB_Minimize;
        break;
    case 2:
        idd = RDB_Balance;
        break;
    case 3:
        if (psdd->fLargeCache)
        {
            idd = RDB_FileSharing;
        }
        else
        {
            idd = RDB_NetApps;
        }
        break;
    default:
        AssertSz(FALSE, "Invalid Size parameter!");
        break;
    }

    CheckDlgButton(idd, TRUE);
    CheckDlgButton(CHK_Announce, psdd->fAnnounce);

    return TRUE;
}

LRESULT CServerConfigDlg::OnOk(int idCtrl, LPNMHDR pnmh, BOOL& bHandled)
{
    SERVER_DLG_DATA *   psdd;
    static const INT aidd[] =
    {
        RDB_Minimize,
        RDB_Balance,
        RDB_FileSharing,
        RDB_NetApps,
    };
    static const INT cidd = celems(aidd);
    INT         iidd;

    psdd = m_psc->DlgDataRW();
    Assert(psdd);

    // figure out which radio button was selected
    for (iidd = 0; iidd < cidd; iidd++)
    {
        if (IsDlgButtonChecked(aidd[iidd]))
            break;
    }

    AssertSz(iidd < cidd, "Umm. How could a button NOT be selected??");

    // make it 1-based instead of 0-based
    iidd++;

    psdd->fLargeCache = (iidd == 3);
    psdd->dwSize = min(iidd, 3);
    psdd->fAnnounce = IsDlgButtonChecked(CHK_Announce);
    m_psc->SetDirty();

    return 0;
}

//+---------------------------------------------------------------------------
//
//  Method: CServerConfigDlg::OnContextMenu
//
//  Desc:   Bring up context-sensitive help
//
//  Args:   Standard command parameters
//
//  Return: LRESULT
//
LRESULT
CServerConfigDlg::OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& fHandled)
{
    if (g_aHelpIDs_DLG_ServerConfig != NULL)
    {
        ::WinHelp(m_hWnd,
                  c_szNetCfgHelpFile,
                  HELP_CONTEXTMENU,
                  (ULONG_PTR)g_aHelpIDs_DLG_ServerConfig);
    }
    return 0;
}

//+---------------------------------------------------------------------------
//
//  Method: CServerConfigDlg::OnHelp
//
//  Desc:   Bring up context-sensitive help when dragging ? icon over a control
//
//  Args:   Standard command parameters
//
//  Return: LRESULT
//
//
LRESULT
CServerConfigDlg::OnHelp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& fHandled)
{
    LPHELPINFO lphi = reinterpret_cast<LPHELPINFO>(lParam);
    Assert(lphi);

    if ((g_aHelpIDs_DLG_ServerConfig != NULL) && (HELPINFO_WINDOW == lphi->iContextType))
    {
        ::WinHelp(static_cast<HWND>(lphi->hItemHandle),
                  c_szNetCfgHelpFile,
                  HELP_WM_HELP,
                  (ULONG_PTR)g_aHelpIDs_DLG_ServerConfig);
    }
    return 0;
}