MCPcopy Create free account
hub / github.com/crosspoint-reader/crosspoint-reader / render

Method render

src/activities/settings/SettingsActivity.cpp:321–394  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

319}
320
321void SettingsActivity::render(RenderLock&&) {
322 renderer.clearScreen();
323
324 const auto pageWidth = renderer.getScreenWidth();
325 const auto pageHeight = renderer.getScreenHeight();
326
327 const auto& metrics = UITheme::getInstance().getMetrics();
328
329 GUI.drawHeader(renderer, Rect{0, metrics.topPadding, pageWidth, metrics.headerHeight}, tr(STR_SETTINGS_TITLE),
330 CROSSPOINT_VERSION);
331
332 std::vector<TabInfo> tabs;
333 tabs.reserve(categoryCount);
334 for (int i = 0; i < categoryCount; i++) {
335 tabs.push_back({I18N.get(categoryNames[i]), selectedCategoryIndex == i});
336 }
337 GUI.drawTabBar(renderer, Rect{0, metrics.topPadding + metrics.headerHeight, pageWidth, metrics.tabBarHeight}, tabs,
338 selectedSettingIndex == 0);
339
340 const auto& settings = *currentSettings;
341 GUI.drawList(
342 renderer,
343 Rect{0, metrics.topPadding + metrics.headerHeight + metrics.tabBarHeight + metrics.verticalSpacing, pageWidth,
344 pageHeight - (metrics.topPadding + metrics.headerHeight + metrics.tabBarHeight + metrics.buttonHintsHeight +
345 metrics.verticalSpacing * 2)},
346 settingsCount, selectedSettingIndex - 1,
347 [&settings](int index) { return std::string(I18N.get(settings[index].nameId)); }, nullptr, nullptr,
348 [&settings](int i) {
349 const auto& setting = settings[i];
350 std::string valueText = "";
351 if (setting.type == SettingType::TOGGLE && setting.valuePtr != nullptr) {
352 const bool value = SETTINGS.*(setting.valuePtr);
353 valueText = value ? tr(STR_STATE_ON) : tr(STR_STATE_OFF);
354 } else if (setting.type == SettingType::ENUM && setting.valuePtr != nullptr) {
355 const uint8_t value = SETTINGS.*(setting.valuePtr);
356 valueText = I18N.get(setting.enumValues[value]);
357 } else if (setting.type == SettingType::ENUM && setting.valueGetter) {
358 const uint8_t value = setting.valueGetter();
359 if (!setting.enumStringValues.empty() && value < setting.enumStringValues.size()) {
360 valueText = setting.enumStringValues[value];
361 } else if (value < setting.enumValues.size()) {
362 valueText = I18N.get(setting.enumValues[value]);
363 }
364 } else if (setting.type == SettingType::VALUE && setting.valuePtr != nullptr) {
365 if (setting.nameId == StrId::STR_TIME_TO_SLEEP) {
366 char valueBuffer[32];
367 if (SETTINGS.sleepTimeoutMinutes >= CrossPointSettings::SLEEP_TIMEOUT_NEVER_MINUTES) {
368 valueText = tr(STR_SLEEP_NEVER);
369 } else {
370 snprintf(valueBuffer, sizeof(valueBuffer), tr(STR_SLEEP_TIMER_VALUE_FORMAT),
371 static_cast<unsigned int>(SETTINGS.*(setting.valuePtr)));
372 valueText = valueBuffer;
373 }
374 } else {
375 valueText = std::to_string(SETTINGS.*(setting.valuePtr));
376 }
377 }
378 return valueText;

Callers

nothing calls this directly

Calls 13

getScreenWidthMethod · 0.80
getScreenHeightMethod · 0.80
push_backMethod · 0.80
getMethod · 0.80
mapLabelsMethod · 0.80
clearScreenMethod · 0.45
drawHeaderMethod · 0.45
drawTabBarMethod · 0.45
drawListMethod · 0.45
emptyMethod · 0.45
sizeMethod · 0.45
drawButtonHintsMethod · 0.45

Tested by

no test coverage detected