1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 08:47:44 +00:00

Solitaire: Add key combo to dump the state of the layout

Useful for chasing down bugs.
This commit is contained in:
Timothy Flynn 2021-05-15 22:13:11 -04:00 committed by Andreas Kling
parent ce030ca584
commit ddb278ab85
5 changed files with 85 additions and 1 deletions

View file

@ -7,6 +7,7 @@
#pragma once
#include "Card.h"
#include <AK/Format.h>
#include <AK/Vector.h>
namespace Solitaire {
@ -28,6 +29,7 @@ public:
bool is_empty() const { return m_stack.is_empty(); }
bool is_focused() const { return m_focused; }
Type type() const { return m_type; }
const NonnullRefPtrVector<Card>& stack() const { return m_stack; }
size_t count() const { return m_stack.size(); }
const Card& peek() const { return m_stack.last(); }
Card& peek() { return m_stack.last(); }
@ -84,3 +86,41 @@ private:
};
}
template<>
struct AK::Formatter<Solitaire::CardStack> : Formatter<FormatString> {
void format(FormatBuilder& builder, const Solitaire::CardStack& stack)
{
StringView type;
switch (stack.type()) {
case Solitaire::CardStack::Type::Stock:
type = "Stock"sv;
break;
case Solitaire::CardStack::Type::Normal:
type = "Normal"sv;
break;
case Solitaire::CardStack::Type::Foundation:
type = "Foundation"sv;
break;
case Solitaire::CardStack::Type::Waste:
type = "Waste"sv;
break;
case Solitaire::CardStack::Type::Play:
type = "Play"sv;
break;
default:
VERIFY_NOT_REACHED();
}
StringBuilder cards;
bool first_card = true;
for (const auto& card : stack.stack()) {
cards.appendff("{}{}", (first_card ? "" : " "), card);
first_card = false;
}
Formatter<FormatString>::format(builder, "{:<10} {:>16}: {}", type, stack.bounding_box(), cards.build());
}
};