terminal/src/host/CommandListPopup.hpp

51 lines
1.5 KiB
C++

/*++
Copyright (c) Microsoft Corporation
Licensed under the MIT license.
Module Name:
- CommandListPopup.hpp
Abstract:
- Popup used for use command list input
- contains code pulled from popup.cpp and cmdline.cpp
Author:
- Austin Diviness (AustDi) 18-Aug-2018
--*/
#pragma once
#include "popup.h"
class CommandListPopup : public Popup
{
public:
CommandListPopup(SCREEN_INFORMATION& screenInfo, const CommandHistory& history);
[[nodiscard]] NTSTATUS Process(COOKED_READ_DATA& cookedReadData) noexcept override;
protected:
void _DrawContent() override;
private:
void _drawList();
void _update(const SHORT delta, const bool wrap = false);
void _updateHighlight(const SHORT oldCommand, const SHORT newCommand);
void _handleReturn(COOKED_READ_DATA& cookedReadData);
void _cycleSelectionToMatchingCommands(COOKED_READ_DATA& cookedReadData, const wchar_t wch);
void _setBottomIndex();
[[nodiscard]] NTSTATUS _handlePopupKeys(COOKED_READ_DATA& cookedReadData, const wchar_t wch, const DWORD modifiers) noexcept;
[[nodiscard]] NTSTATUS _deleteSelection(COOKED_READ_DATA& cookedReadData) noexcept;
[[nodiscard]] NTSTATUS _swapUp(COOKED_READ_DATA& cookedReadData) noexcept;
[[nodiscard]] NTSTATUS _swapDown(COOKED_READ_DATA& cookedReadData) noexcept;
SHORT _currentCommand;
SHORT _bottomIndex; // number of command displayed on last line of popup
const CommandHistory& _history;
#ifdef UNIT_TESTING
friend class CommandListPopupTests;
#endif
};