// // Created by Lenn on 2025/10/14. // #include #include "component.hh" #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace creeper; namespace capro = card::pro; namespace lnpro = linear::pro; namespace impro = image::pro; namespace ibpro = icon_button::pro; namespace slpro = select_widget::pro; static auto ComConfigComponent(ThemeManager& manager, auto&& callback) { auto slogen_context = std::make_shared>(); slogen_context->set_silent("BanG Bream! It's MyGo!!!"); // 创建一个MutableValue来存储MatSelect的选项 auto select_com_context = std::make_shared>(); select_com_context->set_silent(QStringList {}); auto select_baud_context = std::make_shared>(); select_baud_context->set_silent(QStringList {"9600", "115200"}); const auto row = new Row { // lnpro::Item { // text_field::pro::ThemeManager {manager}, // text_field::pro::LeadingIcon {material::icon::kSearch, material::regular::font}, // MutableForward { // text_field::pro::LabelText {}, // slogen_context, // }, // }, lnpro::Item { slpro::ThemeManager {manager}, slpro::LeadingIcon {material::icon::kArrowDropDown, material::regular::font}, slpro::IndexChanged {[&](auto& self){ qDebug() << self.currentIndex();}}, slpro::LeadingText {"COM"}, }, lnpro::Item { slpro::ThemeManager {manager }, slpro::LeadingIcon { material::icon::kArrowDropDown, material::regular::font}, slpro::IndexChanged {[&](auto& self){ qDebug() << self.currentIndex();}}, slpro::LeadingText {"Baud"}, // slpro::MutableItems {select_baud_context}, MutableForward { slpro::SelectItems {}, select_baud_context, } }, // lnpro::Item { // // slpro::ThemeManager {manager}, // // slpro::LeadingIcon {material::icon::kArrowDropDown, material::regular::font}, // // slpro::IndexChanged {} // // } lnpro::SpacingItem {20}, lnpro::Item { ibpro::ThemeManager {manager}, ibpro::FixedSize {40, 40}, ibpro::Color { IconButton::Color::TONAL }, ibpro::Font { material::kRoundSmallFont }, // ibpro::FontIcon { material::icon::kFavorite }, ibpro::FontIcon { material::icon::kAddLink }, ibpro::Clickable {[slogen_context] { constexpr auto random_slogen = [] { constexpr auto slogens = std::array { "为什么要演奏《春日影》!", "我从来不觉得玩乐队开心过。", "我好想…成为人啊!", "那你愿意……跟我组一辈子的乐队吗?", "过去软弱的我…已经死了。", }; static std::random_device rd; static std::mt19937 gen(rd()); std::uniform_int_distribution<> dist(0, slogens.size() - 1); return QString::fromUtf8(slogens[dist(gen)]); }; *slogen_context = random_slogen(); }}, }, lnpro::Item { ibpro::ThemeManager { manager }, ibpro::FixedSize { 40, 40 }, ibpro::Color { IconButton::Color::TONAL }, ibpro::Font { material::kRoundSmallFont }, ibpro::FontIcon { material::icon::kRefresh }, ibpro::Clickable {[select_baud_context] { // 定义两组不同的选项 static constexpr auto options_group1 = std::array { "第一组选项1", "第一组选项2", "第一组选项3" }; static constexpr auto options_group2 = std::array { "第二组选项A", "第二组选项B", "第二组选项C", "第二组选项D" }; // 随机选择一组选项 static std::random_device rd; static std::mt19937 gen(rd()); std::uniform_int_distribution<> dist(0, 1); QStringList new_options; if (dist(gen) == 0) { for (const auto& option : options_group1) { new_options << QString::fromUtf8(option); } } else { for (const auto& option : options_group2) { new_options << QString::fromUtf8(option); } } qDebug() << new_options; // 更新选项列表,MatSelect会自动刷新 *select_baud_context = new_options; }}, }, }; return new Widget { widget::pro::Layout {row}, }; } auto ViewComponent(ViewComponentState& state) noexcept -> raw_pointer { const auto texts = std::array { std::make_shared>("0.500"), std::make_shared>("0.500"), std::make_shared>("0.500"), }; const auto progresses = std::array { std::make_shared>(0.5), std::make_shared>(0.5), std::make_shared>(0.5), }; return new FilledCard { capro::ThemeManager { state.manager }, capro::SizePolicy {QSizePolicy::Expanding}, capro::Layout { lnpro::Alignment {Qt::AlignTop}, lnpro::Margin {10}, lnpro::Spacing {10}, lnpro::Item { ComConfigComponent(state.manager, [texts, progresses] { constexpr auto random_unit = []() { static std::random_device rd; static std::mt19937 gen(rd()); static std::uniform_real_distribution dist(0.0, 1.0); return dist(gen); }; for (auto&& [string, number] : std::views::zip(texts, progresses)) { auto v = random_unit(); *number = v; *string = QString::number(v, 'f', 3); } }), }, }, }; }