/*****************************************************************************
 *
 *      diquv.c
 *
 *      The dialog box that tinkers with joystick user values.
 *
 *****************************************************************************/

#include "diquick.h"
#include "dinputd.h"

//#ifdef DEBUG

/*****************************************************************************
 *
 *      Joystick user values dialog instance data
 *
 *      Instance data for control panel joystick user values dialog box.
 *
 *****************************************************************************/

typedef struct UVDLGINFO {

    IDirectInputJoyConfig *pdjc;/* The thing we created */
    DIJOYUSERVALUES juv;

} UVDLGINFO, *PUVDLGINFO;

/*****************************************************************************
 *
 *      Uv_OnInitDialog
 *
 *****************************************************************************/

BOOL INTERNAL
Uv_OnInitDialog(HWND hdlg, LPARAM lp)
{
    PUVDLGINFO puvi = (PV)lp;
    HRESULT hres;
    TCHAR tsz[MAX_JOYSTRING];

    SetDialogPtr(hdlg, puvi);

    puvi->juv.dwSize = cbX(puvi->juv);

    hres = puvi->pdjc->lpVtbl->GetUserValues(puvi->pdjc, &puvi->juv,
                                             DIJU_USERVALUES |
                                             DIJU_GLOBALDRIVER |
                                             DIJU_GAMEPORTEMULATOR);

    if (SUCCEEDED(hres)) {
        HWND hwnd;
        int ids;

        hwnd = GetDlgItem(hdlg, IDC_JOYUV_AXIS);

        for (ids = IDS_AXIS_MIN; ids < IDS_AXIS_MAX; ids++) {
            int iItem;

            LoadString(g_hinst, ids, tsz, cA(tsz));

            iItem = ListBox_AddString(hwnd, tsz);
            if (iItem >= 0) {
                ListBox_SetItemData(hwnd, iItem, ids - IDS_AXIS_MIN);
            }
        }

        ConvertString(TRUE, puvi->juv.wszGlobalDriver, tsz, cA(tsz));

        SetDlgItemText(hdlg, IDC_JOYUV_CALLOUT, tsz);

        ConvertString(TRUE, puvi->juv.wszGameportEmulator, tsz, cA(tsz));

        SetDlgItemText(hdlg, IDC_JOYUV_EMULATOR, tsz);

#if 0
    #define IDC_JOYUV_AXIS          16
    #define IDC_JOYUV_MIN           17
    #define IDC_JOYUV_CENTER        18
    #define IDC_JOYUV_MAX           19
    #define IDC_JOYUV_DEADZONE      20
$$$
#endif
    }
    return 1;
}

/*****************************************************************************
 *
 *      Uv_DlgProc
 *
 *****************************************************************************/

INT_PTR INTERNAL
Uv_DlgProc(HWND hdlg, UINT wm, WPARAM wp, LPARAM lp)
{
    switch (wm) {
    case WM_INITDIALOG:
        return Uv_OnInitDialog(hdlg, lp);

    case WM_CLOSE:
        EndDialog(hdlg, TRUE);
        return TRUE;
    }

    return 0;
}

/*****************************************************************************
 *
 *      Uv_Create
 *
 *      Display the user values.
 *
 *****************************************************************************/

INT_PTR EXTERNAL
Uv_Create(HWND hdlg, struct IDirectInputJoyConfig *pdjc)
{
    UVDLGINFO tdi;

    tdi.pdjc = pdjc;

    return DialogBoxParam(g_hinst, MAKEINTRESOURCE(IDD_JOYUV),
                          hdlg, Uv_DlgProc, (LPARAM)&tdi);
}
//#endif