BOOL UpdateStateInfo()

in src/propsheet/console.cpp [212:381]


BOOL UpdateStateInfo(HWND hDlg, UINT Item, int Value)
{
    switch (Item)
    {
    case IDD_SCRBUF_WIDTH:
        gpStateInfo->ScreenBufferSize.X = (SHORT)Value;

        // If we're in V2 mode with wrap text on OR if the window is larger than the buffer, adjust the window to match.
        if ((g_fForceV2 && gpStateInfo->fWrapText) || gpStateInfo->WindowSize.X > Value)
        {
            gpStateInfo->WindowSize.X = (SHORT)Value;
            UpdateItem(hDlg, IDD_WINDOW_WIDTH, Value);
        }
        break;
    case IDD_SCRBUF_HEIGHT:
        gpStateInfo->ScreenBufferSize.Y = (SHORT)Value;
        if (gpStateInfo->WindowSize.Y > Value)
        {
            gpStateInfo->WindowSize.Y = (SHORT)Value;
            UpdateItem(hDlg, IDD_WINDOW_HEIGHT, Value);
        }
        break;
    case IDD_WINDOW_WIDTH:
        gpStateInfo->WindowSize.X = (SHORT)Value;

        // If we're in V2 mode with wrap text on OR if the buffer is smaller than the window, adjust the buffer to match.
        if ((g_fForceV2 && gpStateInfo->fWrapText) || gpStateInfo->ScreenBufferSize.X < Value)
        {
            gpStateInfo->ScreenBufferSize.X = (SHORT)Value;
            UpdateItem(hDlg, IDD_SCRBUF_WIDTH, Value);
        }
        break;
    case IDD_WINDOW_HEIGHT:
        gpStateInfo->WindowSize.Y = (SHORT)Value;
        if (gpStateInfo->ScreenBufferSize.Y < Value)
        {
            gpStateInfo->ScreenBufferSize.Y = (SHORT)Value;
            UpdateItem(hDlg, IDD_SCRBUF_HEIGHT, Value);
        }
        break;
    case IDD_WINDOW_POSX:
        if (Value < 0)
        {
            gpStateInfo->WindowPosX = std::max(SHORT_MIN, Value);
        }
        else
        {
            gpStateInfo->WindowPosX = std::min(SHORT_MAX, Value);
        }
        break;
    case IDD_WINDOW_POSY:
        if (Value < 0)
        {
            gpStateInfo->WindowPosY = std::max(SHORT_MIN, Value);
        }
        else
        {
            gpStateInfo->WindowPosY = std::min(SHORT_MAX, Value);
        }
        break;
    case IDD_AUTO_POSITION:
        gpStateInfo->AutoPosition = Value;
        break;
    case IDD_COLOR_SCREEN_TEXT:
        gpStateInfo->ScreenAttributes =
            (gpStateInfo->ScreenAttributes & 0xF0) |
            (Value & 0x0F);
        break;
    case IDD_COLOR_SCREEN_BKGND:
        gpStateInfo->ScreenAttributes =
            (gpStateInfo->ScreenAttributes & 0x0F) |
            (WORD)(Value << 4);
        break;
    case IDD_COLOR_POPUP_TEXT:
        gpStateInfo->PopupAttributes =
            (gpStateInfo->PopupAttributes & 0xF0) |
            (Value & 0x0F);
        break;
    case IDD_COLOR_POPUP_BKGND:
        gpStateInfo->PopupAttributes =
            (gpStateInfo->PopupAttributes & 0x0F) |
            (WORD)(Value << 4);
        break;
    case IDD_COLOR_1:
    case IDD_COLOR_2:
    case IDD_COLOR_3:
    case IDD_COLOR_4:
    case IDD_COLOR_5:
    case IDD_COLOR_6:
    case IDD_COLOR_7:
    case IDD_COLOR_8:
    case IDD_COLOR_9:
    case IDD_COLOR_10:
    case IDD_COLOR_11:
    case IDD_COLOR_12:
    case IDD_COLOR_13:
    case IDD_COLOR_14:
    case IDD_COLOR_15:
    case IDD_COLOR_16:
        gpStateInfo->ColorTable[Item - IDD_COLOR_1] = Value;
        break;
    case IDD_LANGUAGELIST:
        /*
         * Value is a code page
         */
        gpStateInfo->CodePage = Value;
        break;
    case IDD_QUICKEDIT:
        gpStateInfo->QuickEdit = Value;
        break;
    case IDD_INSERT:
        gpStateInfo->InsertMode = Value;
        break;
    case IDD_HISTORY_SIZE:
        gpStateInfo->HistoryBufferSize = std::max(Value, 1);
        break;
    case IDD_HISTORY_NUM:
        gpStateInfo->NumberOfHistoryBuffers = std::max(Value, 1);
        break;
    case IDD_HISTORY_NODUP:
        gpStateInfo->HistoryNoDup = Value;
        break;
    case IDD_CURSOR_SMALL:
        gpStateInfo->CursorSize = 25;
        // Set the cursor to legacy style
        gpStateInfo->CursorType = 0;
        // Check the legacy radio button on the terminal page
        if (g_hTerminalDlg != INVALID_HANDLE_VALUE)
        {
            CheckRadioButton(g_hTerminalDlg,
                             IDD_TERMINAL_LEGACY_CURSOR,
                             IDD_TERMINAL_SOLIDBOX,
                             IDD_TERMINAL_LEGACY_CURSOR);
        }

        break;
    case IDD_CURSOR_MEDIUM:
        gpStateInfo->CursorSize = 50;
        // Set the cursor to legacy style
        gpStateInfo->CursorType = 0;
        // Check the legacy radio button on the terminal page
        if (g_hTerminalDlg != INVALID_HANDLE_VALUE)
        {
            CheckRadioButton(g_hTerminalDlg,
                             IDD_TERMINAL_LEGACY_CURSOR,
                             IDD_TERMINAL_SOLIDBOX,
                             IDD_TERMINAL_LEGACY_CURSOR);
        }

        break;
    case IDD_CURSOR_LARGE:
        gpStateInfo->CursorSize = 100;
        // Set the cursor to legacy style
        gpStateInfo->CursorType = 0;
        // Check the legacy radio button on the terminal page
        if (g_hTerminalDlg != INVALID_HANDLE_VALUE)
        {
            CheckRadioButton(g_hTerminalDlg,
                             IDD_TERMINAL_LEGACY_CURSOR,
                             IDD_TERMINAL_SOLIDBOX,
                             IDD_TERMINAL_LEGACY_CURSOR);
        }

        break;
    default:
        return FALSE;
    }

    return TRUE;
}