#pragma once #include class LayoutAssignedWindows { public: struct ExtendWindowModeData { std::map windowInitialIndexSet; std::map windowFinalIndex; }; public : LayoutAssignedWindows(); ~LayoutAssignedWindows() = default; void Assign(HWND window, const ZoneIndexSet& zones); void Extend(HWND window, const ZoneIndexSet& zones); void Dismiss(HWND window); std::map SnappedWindows() const noexcept; ZoneIndexSet GetZoneIndexSetFromWindow(HWND window) const noexcept; bool IsZoneEmpty(ZoneIndex zoneIndex) const noexcept; void CycleWindows(HWND window, bool reverse); const std::unique_ptr& ExtendWindowData(); private: std::map m_windowIndexSet{}; std::map> m_windowsByIndexSets{}; std::unique_ptr m_extendData{}; // Needed for ExtendWindowByDirectionAndPosition void InsertWindowIntoZone(HWND window, std::optional tabSortKeyWithinZone, const ZoneIndexSet& indexSet); HWND GetNextZoneWindow(ZoneIndexSet indexSet, HWND current, bool reverse) noexcept; };