Exteor/include/xtr/ui/UIHelper.h
2024-06-07 20:30:06 +03:00

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