/*
* PROJECT:         input.dll
* FILE:            dll/cpl/input/edit_dialog.c
* PURPOSE:         input.dll
* PROGRAMMER:      Dmitry Chapyshev (dmitry@reactos.org)
*/

#include "input.h"
#include "locale_list.h"
#include "input_list.h"


INT_PTR CALLBACK
EditDialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    UNREFERENCED_PARAMETER(lParam);

    switch (uMsg)
    {
        case WM_INITDIALOG:
        {
            LAYOUT_LIST_NODE *pCurrentLayout;
            INPUT_LIST_NODE *pInput;
            HWND hwndList;

            pInput = (INPUT_LIST_NODE*) lParam;

            if (pInput == NULL)
                return TRUE;

            SetWindowLongPtrW(hwndDlg, GWLP_USERDATA, (LONG_PTR) pInput);

            SetWindowTextW(GetDlgItem(hwndDlg, IDC_INPUT_LANG_STR), pInput->pLocale->pszName);

            hwndList = GetDlgItem(hwndDlg, IDC_KB_LAYOUT_IME_COMBO);

            for (pCurrentLayout = LayoutList_GetFirst();
                 pCurrentLayout != NULL;
                 pCurrentLayout = pCurrentLayout->pNext)
            {
                INT iItemIndex;

                iItemIndex = ComboBox_AddString(hwndList, pCurrentLayout->pszName);
                ComboBox_SetItemData(hwndList, iItemIndex, pCurrentLayout);
            }

            ComboBox_SelectString(hwndList, 0, pInput->pLayout->pszName);
            return TRUE;
        }

        case WM_COMMAND:
        {
            switch (LOWORD(wParam))
            {
                case IDOK:
                {
                    INPUT_LIST_NODE *pInput;
                    HWND hwndList;

                    hwndList = GetDlgItem(hwndDlg, IDC_KB_LAYOUT_IME_COMBO);

                    pInput = (INPUT_LIST_NODE*) GetWindowLongPtrW(hwndDlg, GWLP_USERDATA);

                    if (pInput != NULL)
                    {
                        LAYOUT_LIST_NODE *pNewLayout;

                        pNewLayout = (LAYOUT_LIST_NODE*)ComboBox_GetItemData(hwndList,
                                                                             ComboBox_GetCurSel(hwndList));
                        if (pNewLayout != NULL)
                        {
                            pInput->pLayout = pNewLayout;
                            pInput->wFlags |= INPUT_LIST_NODE_FLAG_EDITED;
                        }
                    }

                    EndDialog(hwndDlg, LOWORD(wParam));
                }
                break;

                case IDCANCEL:
                {
                    EndDialog(hwndDlg, LOWORD(wParam));
                }
                break;
            }
        }
        break;
    }

    return FALSE;
}
