93 lines
2.4 KiB
C++
93 lines
2.4 KiB
C++
|
/*++
|
||
|
Copyright (c) Microsoft Corporation
|
||
|
Licensed under the MIT license.
|
||
|
|
||
|
Module Name:
|
||
|
- OutputCell.hpp
|
||
|
|
||
|
Abstract:
|
||
|
- Representation of all data stored in a cell of the output buffer.
|
||
|
- RGB color supported.
|
||
|
|
||
|
Author:
|
||
|
- Austin Diviness (AustDi) 20-Mar-2018
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#pragma once
|
||
|
|
||
|
#include "DbcsAttribute.hpp"
|
||
|
#include "TextAttribute.hpp"
|
||
|
#include "OutputCellView.hpp"
|
||
|
|
||
|
#include <exception>
|
||
|
#include <variant>
|
||
|
|
||
|
class InvalidCharInfoConversionException : public std::exception
|
||
|
{
|
||
|
const char* what() noexcept
|
||
|
{
|
||
|
return "Cannot convert to CHAR_INFO without explicit TextAttribute";
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class OutputCell final
|
||
|
{
|
||
|
public:
|
||
|
OutputCell();
|
||
|
|
||
|
OutputCell(const std::wstring_view charData,
|
||
|
const DbcsAttribute dbcsAttribute,
|
||
|
const TextAttributeBehavior behavior);
|
||
|
|
||
|
OutputCell(const std::wstring_view charData,
|
||
|
const DbcsAttribute dbcsAttribute,
|
||
|
const TextAttribute textAttribute);
|
||
|
|
||
|
OutputCell(const CHAR_INFO& charInfo);
|
||
|
OutputCell(const OutputCellView& view);
|
||
|
|
||
|
OutputCell(const OutputCell&) = default;
|
||
|
OutputCell(OutputCell&&) = default;
|
||
|
|
||
|
OutputCell& operator=(const OutputCell&) = default;
|
||
|
OutputCell& operator=(OutputCell&&) = default;
|
||
|
|
||
|
~OutputCell() = default;
|
||
|
|
||
|
const std::wstring_view Chars() const noexcept;
|
||
|
void SetChars(const std::wstring_view chars);
|
||
|
|
||
|
DbcsAttribute& DbcsAttr() noexcept;
|
||
|
TextAttribute& TextAttr();
|
||
|
|
||
|
constexpr const DbcsAttribute& DbcsAttr() const
|
||
|
{
|
||
|
return _dbcsAttribute;
|
||
|
}
|
||
|
|
||
|
const TextAttribute& TextAttr() const
|
||
|
{
|
||
|
THROW_HR_IF(E_INVALIDARG, _behavior == TextAttributeBehavior::Current);
|
||
|
return _textAttribute;
|
||
|
}
|
||
|
|
||
|
constexpr TextAttributeBehavior TextAttrBehavior() const
|
||
|
{
|
||
|
return _behavior;
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
// basic_string contains a small storage internally so we don't need
|
||
|
// to worry about heap allocation for short strings.
|
||
|
std::wstring _text;
|
||
|
DbcsAttribute _dbcsAttribute;
|
||
|
TextAttribute _textAttribute;
|
||
|
TextAttributeBehavior _behavior;
|
||
|
|
||
|
void _setFromBehavior(const TextAttributeBehavior behavior);
|
||
|
void _setFromCharInfo(const CHAR_INFO& charInfo);
|
||
|
void _setFromStringView(const std::wstring_view view);
|
||
|
void _setFromOutputCellView(const OutputCellView& cell);
|
||
|
};
|