63 lines
1.7 KiB
C
63 lines
1.7 KiB
C
![]() |
#pragma once
|
||
|
|
||
|
#define XTR_COMMAND_UPD(cmd) \
|
||
|
ON_UPDATE_COMMAND_UI(cmd, &ThisClass::OnUpdateCommandUI) \
|
||
|
ON_COMMAND_EX(cmd, &ThisClass::OnCommandRun)
|
||
|
|
||
|
#define XTR_COMMAND(cmd) \
|
||
|
ON_COMMAND_EX(cmd, &ThisClass::OnCommandRun)
|
||
|
|
||
|
namespace xtr::ui {
|
||
|
|
||
|
static constexpr auto s_ScrollWidth = 22;
|
||
|
static constexpr auto s_TooltipWidth = 400;
|
||
|
|
||
|
TEXTMETRIC GlobalTextMetrics();
|
||
|
TEXTMETRIC TextMetricsOf(const CWnd& wndCtrl);
|
||
|
|
||
|
CRect LocalCoordinatesFor(const CWnd& wndCtrl);
|
||
|
CRect ClientRect(const CWnd& wndCtrl);
|
||
|
CRect WindowRect(const CWnd& wndCtrl);
|
||
|
CString WindowText(const CWnd& wndCtrl);
|
||
|
|
||
|
CString TrimText(CString text);
|
||
|
|
||
|
class Header {
|
||
|
public:
|
||
|
struct Column;
|
||
|
private:
|
||
|
std::vector<Column> columns{};
|
||
|
|
||
|
public:
|
||
|
~Header() = default;
|
||
|
Header() = default;
|
||
|
Header(const Header&) = delete;
|
||
|
Header& operator=(const Header&) = delete;
|
||
|
|
||
|
public:
|
||
|
enum Alignment : uint8_t { left = LVCFMT_LEFT, right = LVCFMT_RIGHT, center = LVCFMT_CENTER};
|
||
|
struct Column {
|
||
|
CString label;
|
||
|
Alignment alignment;
|
||
|
std::optional<int> width;
|
||
|
|
||
|
Column(CString label, Alignment alignment, std::optional<int> width)
|
||
|
: label{ label }, alignment{ alignment }, width{ width } {}
|
||
|
Column(uint32_t sid, Alignment alignment, std::optional<int> width)
|
||
|
: label{ mfc::LoadSID(sid) }, alignment{ alignment }, width{ width } {}
|
||
|
};
|
||
|
|
||
|
public:
|
||
|
void AddColumn(const Column& newColumn) {
|
||
|
columns.emplace_back(newColumn);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
friend void InitHeaderFor(CListCtrl& listCtr, const Header& header);
|
||
|
friend void InitReversedHeaderFor(CListCtrl& listCtr, const Header& header);
|
||
|
};
|
||
|
|
||
|
void InitHeaderFor(CListCtrl& listCtr, const Header& header);
|
||
|
void InitReversedHeaderFor(CListCtrl& listCtr, const Header& header);
|
||
|
|
||
|
} // namespace xtr::ui
|