void SystemView::populate() { mEntries.clear(); for(auto it = SystemData::sSystemVector.begin(); it != SystemData::sSystemVector.end(); it++) { const std::shared_ptr<ThemeData>& theme = (*it)->getTheme(); Entry e; e.name = (*it)->getName(); e.object = *it; // make logo if(theme->getElement("system", "logo", "image")) { ImageComponent* logo = new ImageComponent(mWindow); logo->setMaxSize(Eigen::Vector2f(logoSize().x(), logoSize().y())); logo->applyTheme((*it)->getTheme(), "system", "logo", ThemeFlags::PATH); logo->setPosition((logoSize().x() - logo->getSize().x()) / 2, (logoSize().y() - logo->getSize().y()) / 2); // center e.data.logo = std::shared_ptr<GuiComponent>(logo); ImageComponent* logoSelected = new ImageComponent(mWindow); logoSelected->setMaxSize(Eigen::Vector2f(logoSize().x() * SELECTED_SCALE, logoSize().y() * SELECTED_SCALE * 0.70f)); logoSelected->applyTheme((*it)->getTheme(), "system", "logo", ThemeFlags::PATH); logoSelected->setPosition((logoSize().x() - logoSelected->getSize().x()) / 2, (logoSize().y() - logoSelected->getSize().y()) / 2); // center e.data.logoSelected = std::shared_ptr<GuiComponent>(logoSelected); }else{ // no logo in theme; use text TextComponent* text = new TextComponent(mWindow, (*it)->getName(), Font::get(FONT_SIZE_LARGE), 0x000000FF, ALIGN_CENTER); text->setSize(logoSize()); e.data.logo = std::shared_ptr<GuiComponent>(text); TextComponent* textSelected = new TextComponent(mWindow, (*it)->getName(), Font::get((int)(FONT_SIZE_LARGE * SELECTED_SCALE)), 0x000000FF, ALIGN_CENTER); textSelected->setSize(logoSize()); e.data.logoSelected = std::shared_ptr<GuiComponent>(textSelected); } // make background extras e.data.backgroundExtras = std::shared_ptr<ThemeExtras>(new ThemeExtras(mWindow)); e.data.backgroundExtras->setExtras(ThemeData::makeExtras((*it)->getTheme(), "system", mWindow)); this->add(e); } }
void SystemView::populate() { mEntries.clear(); for(auto it = SystemData::sSystemVector.cbegin(); it != SystemData::sSystemVector.cend(); it++) { const std::shared_ptr<ThemeData>& theme = (*it)->getTheme(); if(mViewNeedsReload) getViewElements(theme); if((*it)->isVisible()) { Entry e; e.name = (*it)->getName(); e.object = *it; // make logo const ThemeData::ThemeElement* logoElem = theme->getElement("system", "logo", "image"); if(logoElem) { std::string path = logoElem->get<std::string>("path"); std::string defaultPath = logoElem->has("default") ? logoElem->get<std::string>("default") : ""; if((!path.empty() && ResourceManager::getInstance()->fileExists(path)) || (!defaultPath.empty() && ResourceManager::getInstance()->fileExists(defaultPath))) { ImageComponent* logo = new ImageComponent(mWindow, false, false); logo->setMaxSize(mCarousel.logoSize * mCarousel.logoScale); logo->applyTheme(theme, "system", "logo", ThemeFlags::PATH | ThemeFlags::COLOR); logo->setRotateByTargetSize(true); e.data.logo = std::shared_ptr<GuiComponent>(logo); } } if (!e.data.logo) { // no logo in theme; use text TextComponent* text = new TextComponent(mWindow, (*it)->getName(), Font::get(FONT_SIZE_LARGE), 0x000000FF, ALIGN_CENTER); text->setSize(mCarousel.logoSize * mCarousel.logoScale); text->applyTheme((*it)->getTheme(), "system", "logoText", ThemeFlags::FONT_PATH | ThemeFlags::FONT_SIZE | ThemeFlags::COLOR | ThemeFlags::FORCE_UPPERCASE | ThemeFlags::LINE_SPACING | ThemeFlags::TEXT); e.data.logo = std::shared_ptr<GuiComponent>(text); if (mCarousel.type == VERTICAL || mCarousel.type == VERTICAL_WHEEL) { text->setHorizontalAlignment(mCarousel.logoAlignment); text->setVerticalAlignment(ALIGN_CENTER); } else { text->setHorizontalAlignment(ALIGN_CENTER); text->setVerticalAlignment(mCarousel.logoAlignment); } } if (mCarousel.type == VERTICAL || mCarousel.type == VERTICAL_WHEEL) { if (mCarousel.logoAlignment == ALIGN_LEFT) e.data.logo->setOrigin(0, 0.5); else if (mCarousel.logoAlignment == ALIGN_RIGHT) e.data.logo->setOrigin(1.0, 0.5); else e.data.logo->setOrigin(0.5, 0.5); } else { if (mCarousel.logoAlignment == ALIGN_TOP) e.data.logo->setOrigin(0.5, 0); else if (mCarousel.logoAlignment == ALIGN_BOTTOM) e.data.logo->setOrigin(0.5, 1); else e.data.logo->setOrigin(0.5, 0.5); } Vector2f denormalized = mCarousel.logoSize * e.data.logo->getOrigin(); e.data.logo->setPosition(denormalized.x(), denormalized.y(), 0.0); // delete any existing extras for (auto extra : e.data.backgroundExtras) delete extra; e.data.backgroundExtras.clear(); // make background extras e.data.backgroundExtras = ThemeData::makeExtras((*it)->getTheme(), "system", mWindow); // sort the extras by z-index std::stable_sort(e.data.backgroundExtras.begin(), e.data.backgroundExtras.end(), [](GuiComponent* a, GuiComponent* b) { return b->getZIndex() > a->getZIndex(); }); this->add(e); } } if (mEntries.size() == 0) { // Something is wrong, there is not a single system to show, check if UI mode is not full if (!UIModeController::getInstance()->isUIModeFull()) { Settings::getInstance()->setString("UIMode", "Full"); mWindow->pushGui(new GuiMsgBox(mWindow, "The selected UI mode has nothing to show,\n returning to UI mode: FULL", "OK", nullptr)); } } }