Merge pull request #138 from bobbycar-graz/cpp-refactor
More Cpp refactoring
This commit is contained in:
@ -100,6 +100,7 @@ set(headers
|
|||||||
displays/menus/presetsmenu.h
|
displays/menus/presetsmenu.h
|
||||||
displays/menus/profilesmenu.h
|
displays/menus/profilesmenu.h
|
||||||
displays/menus/selectbatterytypemenu.h
|
displays/menus/selectbatterytypemenu.h
|
||||||
|
displays/menus/selectbuildserverbranch.h
|
||||||
displays/menus/selectbuildservermenu.h
|
displays/menus/selectbuildservermenu.h
|
||||||
displays/menus/selectmodemenu.h
|
displays/menus/selectmodemenu.h
|
||||||
displays/menus/selectotabuildmenu.h
|
displays/menus/selectotabuildmenu.h
|
||||||
@ -297,6 +298,7 @@ set(sources
|
|||||||
displays/menus/presetsmenu.cpp
|
displays/menus/presetsmenu.cpp
|
||||||
displays/menus/profilesmenu.cpp
|
displays/menus/profilesmenu.cpp
|
||||||
displays/menus/selectbatterytypemenu.cpp
|
displays/menus/selectbatterytypemenu.cpp
|
||||||
|
displays/menus/selectbuildserverbranch.cpp
|
||||||
displays/menus/selectbuildservermenu.cpp
|
displays/menus/selectbuildservermenu.cpp
|
||||||
displays/menus/selectmodemenu.cpp
|
displays/menus/selectmodemenu.cpp
|
||||||
displays/menus/selectotabuildmenu.cpp
|
displays/menus/selectotabuildmenu.cpp
|
||||||
|
@ -10,7 +10,7 @@ using namespace espgui;
|
|||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
#ifdef FEATURE_LEDSTRIP
|
#ifdef FEATURE_LEDSTRIP
|
||||||
template<int16_t type>
|
template<uint16_t type>
|
||||||
class LedStripSetAnimationAction : public virtual ActionInterface
|
class LedStripSetAnimationAction : public virtual ActionInterface
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -4,9 +4,8 @@
|
|||||||
#include "textinterface.h"
|
#include "textinterface.h"
|
||||||
#include "ble_bobby.h"
|
#include "ble_bobby.h"
|
||||||
|
|
||||||
namespace {
|
|
||||||
#ifdef FEATURE_BLE
|
#ifdef FEATURE_BLE
|
||||||
struct BleServerPeerDevicesText : public virtual TextInterface {
|
struct BleServerPeerDevicesText : public virtual espgui::TextInterface {
|
||||||
public:
|
public:
|
||||||
std::string text() const override
|
std::string text() const override
|
||||||
{
|
{
|
||||||
@ -17,7 +16,7 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct BleCharacSubscribedText : public virtual TextInterface {
|
struct BleCharacSubscribedText : public virtual espgui::TextInterface {
|
||||||
public:
|
public:
|
||||||
std::string text() const override
|
std::string text() const override
|
||||||
{
|
{
|
||||||
@ -28,4 +27,3 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
}
|
|
||||||
|
@ -18,7 +18,111 @@
|
|||||||
#include "esp_http_client.h"
|
#include "esp_http_client.h"
|
||||||
|
|
||||||
#ifdef FEATURE_OTA
|
#ifdef FEATURE_OTA
|
||||||
|
|
||||||
namespace buildserver {
|
namespace buildserver {
|
||||||
|
|
||||||
|
uint16_t count_available_buildserver()
|
||||||
|
{
|
||||||
|
uint16_t count = 0;
|
||||||
|
for (const auto &otaServer : stringSettings.otaServers) {
|
||||||
|
if (!otaServer.url.empty()) count++;
|
||||||
|
}
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace SelectBranch {
|
||||||
|
cpputils::DelayedConstruction<AsyncHttpRequest> request;
|
||||||
|
bool request_running{false};
|
||||||
|
bool constructedMenu{false};
|
||||||
|
std::string request_failed{};
|
||||||
|
std::vector<std::string> branches{};
|
||||||
|
|
||||||
|
void setup_request()
|
||||||
|
{
|
||||||
|
if (!request.constructed())
|
||||||
|
{
|
||||||
|
request.construct("ota-descriptor-request", espcpputils::CoreAffinity::Core0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void start_descriptor_request(std::string server_base_url)
|
||||||
|
{
|
||||||
|
if (!request.constructed())
|
||||||
|
{
|
||||||
|
ESP_LOGW("BOBBY", "request is im oarsch");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto url = fmt::format("{}/otaDescriptor?username={}&branches", server_base_url, OTA_USERNAME);
|
||||||
|
ESP_LOGD("BOBBY", "requesting data...");
|
||||||
|
if (const auto result = request->start(url); !result)
|
||||||
|
{
|
||||||
|
ESP_LOGW("BOBBY", "request start failed");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
request_running = true;
|
||||||
|
constructedMenu = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void check_descriptor_request()
|
||||||
|
{
|
||||||
|
if (!request.constructed())
|
||||||
|
{
|
||||||
|
ESP_LOGW("BOBBY", "request is im oarsch");
|
||||||
|
request_running = false;
|
||||||
|
request_failed = "request is im oarsch";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!request->finished())
|
||||||
|
{
|
||||||
|
// ESP_LOGW("BOBBY", "Request has not finished yet.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto helper = cpputils::makeCleanupHelper([](){ request->clearFinished(); });
|
||||||
|
const std::string content = std::move(request->takeBuffer());
|
||||||
|
|
||||||
|
if (const auto result = request->result(); !result)
|
||||||
|
{
|
||||||
|
ESP_LOGW("BOBBY", "request failed: %.*s", result.error().size(), result.error().data());
|
||||||
|
request_failed = result.error();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto result = request->result();
|
||||||
|
ESP_LOGW("BOBBY", "Request finished: %s", content.c_str());
|
||||||
|
parse_response(content);
|
||||||
|
request_running = false;
|
||||||
|
request_failed = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
void parse_response(std::string response)
|
||||||
|
{
|
||||||
|
StaticJsonDocument<1024> doc;
|
||||||
|
|
||||||
|
if (const auto error = deserializeJson(doc, response))
|
||||||
|
{
|
||||||
|
ESP_LOGE("BOBBY", "Error parsing server-response => %s (%s)", error.c_str(), response.c_str());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
JsonArray arr = doc.as<JsonArray>();
|
||||||
|
branches.resize(arr.size());
|
||||||
|
|
||||||
|
for(JsonVariant v : arr) {
|
||||||
|
branches.push_back(v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool get_request_running()
|
||||||
|
{
|
||||||
|
return request_running;
|
||||||
|
}
|
||||||
|
} // namespace SelectBranch
|
||||||
|
|
||||||
|
namespace SelectBuild {
|
||||||
void buildMenuFromJson(std::string json);
|
void buildMenuFromJson(std::string json);
|
||||||
void buildMenuRequestError(std::string error);
|
void buildMenuRequestError(std::string error);
|
||||||
|
|
||||||
@ -27,7 +131,7 @@ namespace buildserver {
|
|||||||
std::array<std::string, 10> availableVersions{};
|
std::array<std::string, 10> availableVersions{};
|
||||||
bool request_running{false};
|
bool request_running{false};
|
||||||
std::string request_failed{};
|
std::string request_failed{};
|
||||||
bool parsing_finished{true};
|
bool parsing_finished{false};
|
||||||
cpputils::DelayedConstruction<AsyncHttpRequest> request;
|
cpputils::DelayedConstruction<AsyncHttpRequest> request;
|
||||||
|
|
||||||
std::string get_ota_url_from_index(uint16_t index)
|
std::string get_ota_url_from_index(uint16_t index)
|
||||||
@ -52,15 +156,6 @@ namespace buildserver {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t count_available_buildserver()
|
|
||||||
{
|
|
||||||
uint16_t count = 0;
|
|
||||||
for (const auto &otaServer : stringSettings.otaServers) {
|
|
||||||
if (!otaServer.url.empty()) count++;
|
|
||||||
}
|
|
||||||
return count;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string get_hash_url(std::string hash)
|
std::string get_hash_url(std::string hash)
|
||||||
{
|
{
|
||||||
return fmt::format(url_for_hashes, hash);
|
return fmt::format(url_for_hashes, hash);
|
||||||
@ -73,7 +168,10 @@ namespace buildserver {
|
|||||||
|
|
||||||
std::string get_descriptor_url(std::string base_url)
|
std::string get_descriptor_url(std::string base_url)
|
||||||
{
|
{
|
||||||
return fmt::format("{}/otaDescriptor?username={}", base_url, OTA_USERNAME);
|
if (stringSettings.otaServerBranch.empty())
|
||||||
|
return fmt::format("{}/otaDescriptor?username={}", base_url, OTA_USERNAME);
|
||||||
|
else
|
||||||
|
return fmt::format("{}/otaDescriptor?username={}&branch={}", base_url, OTA_USERNAME, stringSettings.otaServerBranch);
|
||||||
}
|
}
|
||||||
|
|
||||||
void parse_response_into_variables(std::string response)
|
void parse_response_into_variables(std::string response)
|
||||||
@ -172,5 +270,6 @@ namespace buildserver {
|
|||||||
{
|
{
|
||||||
return request_running;
|
return request_running;
|
||||||
}
|
}
|
||||||
}
|
} // namespace SelectBuild
|
||||||
|
} // namespace buildserver
|
||||||
#endif
|
#endif
|
||||||
|
@ -8,6 +8,24 @@
|
|||||||
|
|
||||||
#ifdef FEATURE_OTA
|
#ifdef FEATURE_OTA
|
||||||
namespace buildserver {
|
namespace buildserver {
|
||||||
|
|
||||||
|
uint16_t count_available_buildserver();
|
||||||
|
|
||||||
|
namespace SelectBranch {
|
||||||
|
extern cpputils::DelayedConstruction<AsyncHttpRequest> request;
|
||||||
|
extern bool request_running;
|
||||||
|
extern bool constructedMenu;
|
||||||
|
void setup_request();
|
||||||
|
void start_descriptor_request(std::string server_base_url);
|
||||||
|
void check_descriptor_request();
|
||||||
|
void parse_response(std::string response);
|
||||||
|
bool get_request_running();
|
||||||
|
extern std::string request_failed;
|
||||||
|
extern std::vector<std::string> branches;
|
||||||
|
} // namespace SelectBranch
|
||||||
|
|
||||||
|
namespace SelectBuild {
|
||||||
|
|
||||||
void buildMenuFromJson(std::string json);
|
void buildMenuFromJson(std::string json);
|
||||||
void buildMenuRequestError(std::string error);
|
void buildMenuRequestError(std::string error);
|
||||||
|
|
||||||
@ -20,7 +38,6 @@ namespace buildserver {
|
|||||||
extern cpputils::DelayedConstruction<AsyncHttpRequest> request;
|
extern cpputils::DelayedConstruction<AsyncHttpRequest> request;
|
||||||
|
|
||||||
std::string get_ota_url_from_index(uint16_t index);
|
std::string get_ota_url_from_index(uint16_t index);
|
||||||
uint16_t count_available_buildserver();
|
|
||||||
std::string get_hash_url(std::string hash);
|
std::string get_hash_url(std::string hash);
|
||||||
std::string get_latest_url();
|
std::string get_latest_url();
|
||||||
std::string get_descriptor_url(std::string base_url);
|
std::string get_descriptor_url(std::string base_url);
|
||||||
@ -29,5 +46,6 @@ namespace buildserver {
|
|||||||
void start_descriptor_request(std::string server_base_url);
|
void start_descriptor_request(std::string server_base_url);
|
||||||
void check_descriptor_request();
|
void check_descriptor_request();
|
||||||
bool get_request_running();
|
bool get_request_running();
|
||||||
}
|
} // namespace SelectBuild
|
||||||
|
} // namespace buildserver
|
||||||
#endif
|
#endif
|
||||||
|
@ -0,0 +1,30 @@
|
|||||||
|
#include "blesettingsmenu.h"
|
||||||
|
|
||||||
|
// local includes
|
||||||
|
#include "accessors/settingsaccessors.h"
|
||||||
|
#include "actions/dummyaction.h"
|
||||||
|
#include "actions/switchscreenaction.h"
|
||||||
|
#include "actions/toggleboolaction.h"
|
||||||
|
#include "bletexthelpers.h"
|
||||||
|
#include "checkboxicon.h"
|
||||||
|
#include "displays/menus/settingsmenu.h"
|
||||||
|
#include "icons/back.h"
|
||||||
|
#include "texts.h"
|
||||||
|
|
||||||
|
#ifdef FEATURE_BLE
|
||||||
|
|
||||||
|
using namespace espgui;
|
||||||
|
|
||||||
|
BleSettingsMenu::BleSettingsMenu()
|
||||||
|
{
|
||||||
|
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BLEENABLED>, ToggleBoolAction, CheckboxIcon, BleEnabledAccessor>>();
|
||||||
|
constructMenuItem<makeComponent<MenuItem, BleServerPeerDevicesText, DisabledColor, DummyAction>>();
|
||||||
|
constructMenuItem<makeComponent<MenuItem, BleCharacSubscribedText, DisabledColor, DummyAction>>();
|
||||||
|
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<SettingsMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
|
||||||
|
}
|
||||||
|
|
||||||
|
void BleSettingsMenu::back()
|
||||||
|
{
|
||||||
|
switchScreen<SettingsMenu>();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
@ -2,32 +2,16 @@
|
|||||||
|
|
||||||
// local includes
|
// local includes
|
||||||
#include "menudisplay.h"
|
#include "menudisplay.h"
|
||||||
#include "menuitem.h"
|
|
||||||
#include "actions/switchscreenaction.h"
|
|
||||||
#include "actions/toggleboolaction.h"
|
|
||||||
#include "checkboxicon.h"
|
|
||||||
#include "bletexthelpers.h"
|
|
||||||
#include "accessors/settingsaccessors.h"
|
|
||||||
#include "icons/back.h"
|
|
||||||
#include "texts.h"
|
#include "texts.h"
|
||||||
|
|
||||||
using namespace espgui;
|
|
||||||
|
|
||||||
namespace {
|
|
||||||
#ifdef FEATURE_BLE
|
#ifdef FEATURE_BLE
|
||||||
|
|
||||||
class BleSettingsMenu :
|
class BleSettingsMenu :
|
||||||
public MenuDisplay,
|
public espgui::MenuDisplay,
|
||||||
public StaticText<TEXT_BLESETTINGS>,
|
public espgui::StaticText<TEXT_BLESETTINGS>
|
||||||
public BackActionInterface<SwitchScreenAction<SettingsMenu>>
|
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
BleSettingsMenu()
|
BleSettingsMenu();
|
||||||
{
|
void back() override;
|
||||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BLEENABLED>, ToggleBoolAction, CheckboxIcon, BleEnabledAccessor>>();
|
|
||||||
constructMenuItem<makeComponent<MenuItem, BleServerPeerDevicesText, DisabledColor, DummyAction>>();
|
|
||||||
constructMenuItem<makeComponent<MenuItem, BleCharacSubscribedText, DisabledColor, DummyAction>>();
|
|
||||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<SettingsMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
} // namespace
|
|
||||||
|
@ -0,0 +1,46 @@
|
|||||||
|
#include "ledstripselectanimationmenu.h"
|
||||||
|
|
||||||
|
// Local includes
|
||||||
|
#include "actions/dummyaction.h"
|
||||||
|
#include "actions/ledstripanimationactions.h"
|
||||||
|
#include "actions/switchscreenaction.h"
|
||||||
|
#include "icons/back.h"
|
||||||
|
#include "ledstripdefines.h"
|
||||||
|
#include "ledstripmenu.h"
|
||||||
|
|
||||||
|
using namespace espgui;
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef FEATURE_LEDSTRIP
|
||||||
|
std::string currentSelectedAnimationText::text() const
|
||||||
|
{
|
||||||
|
switch (animation_type) {
|
||||||
|
case LedstripAnimation::DefaultRainbow:
|
||||||
|
return TEXT_ANIMATION_DEFAULTRAINBOW;
|
||||||
|
case LedstripAnimation::BetterRainbow:
|
||||||
|
return TEXT_ANIMATION_BETTERRAINBOW;
|
||||||
|
case LedstripAnimation::SpeedSync:
|
||||||
|
return TEXT_ANIMATION_SPEEDSYNCANIMATION;
|
||||||
|
case LedstripAnimation::CustomColor:
|
||||||
|
return TEXT_ANIMATION_CUSTOMCOLOR;
|
||||||
|
default:
|
||||||
|
return "Animation Unkown";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LedstripSelectAnimationMenu::LedstripSelectAnimationMenu()
|
||||||
|
{
|
||||||
|
constructMenuItem<makeComponent<MenuItem, currentSelectedAnimationText, DisabledColor, DummyAction>>();
|
||||||
|
constructMenuItem<makeComponent<MenuItem, EmptyText, DummyAction>>();
|
||||||
|
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_ANIMATION_DEFAULTRAINBOW>, LedStripSetAnimationAction<LedstripAnimation::DefaultRainbow>>>();
|
||||||
|
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_ANIMATION_BETTERRAINBOW>, LedStripSetAnimationAction<LedstripAnimation::BetterRainbow>>>();
|
||||||
|
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_ANIMATION_SPEEDSYNCANIMATION>, LedStripSetAnimationAction<LedstripAnimation::SpeedSync>>>();
|
||||||
|
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_ANIMATION_CUSTOMCOLOR>, LedStripSetAnimationAction<LedstripAnimation::CustomColor>>>();
|
||||||
|
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<LedstripMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
|
||||||
|
}
|
||||||
|
|
||||||
|
void LedstripSelectAnimationMenu::back()
|
||||||
|
{
|
||||||
|
switchScreen<LedstripMenu>();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
@ -2,54 +2,21 @@
|
|||||||
|
|
||||||
// Local includes
|
// Local includes
|
||||||
#include "menudisplay.h"
|
#include "menudisplay.h"
|
||||||
#include "utils.h"
|
|
||||||
#include "menuitem.h"
|
|
||||||
#include "ledstrip.h"
|
|
||||||
#include "ledstripselectanimationmenu.h"
|
|
||||||
#include "icons/back.h"
|
|
||||||
#include "texts.h"
|
#include "texts.h"
|
||||||
#include "actions/dummyaction.h"
|
|
||||||
#include "actions/ledstripanimationactions.h"
|
|
||||||
#include "actions/switchscreenaction.h"
|
|
||||||
#include "ledstrip.h"
|
|
||||||
#include "ledstripdefines.h"
|
|
||||||
|
|
||||||
#ifdef FEATURE_LEDSTRIP
|
#ifdef FEATURE_LEDSTRIP
|
||||||
class currentSelectedAnimationText : public virtual TextInterface { public: std::string text() const override {
|
|
||||||
switch (animation_type) {
|
class currentSelectedAnimationText : public virtual espgui::TextInterface {
|
||||||
case LEDSTRIP_ANIMATION_TYPE_DEFAULTRAINBOW:
|
public:
|
||||||
return TEXT_ANIMATION_DEFAULTRAINBOW;
|
std::string text() const override;
|
||||||
case LEDSTRIP_ANIMATION_TYPE_BETTERRAINBOW:
|
|
||||||
return TEXT_ANIMATION_BETTERRAINBOW;
|
|
||||||
case LEDSTRIP_ANIMATION_TYPE_SPEEDSYNCANIMATION:
|
|
||||||
return TEXT_ANIMATION_SPEEDSYNCANIMATION;
|
|
||||||
case LEDSTRIP_ANIMATION_TYPE_CUSTOMCOLOR:
|
|
||||||
return TEXT_ANIMATION_CUSTOMCOLOR;
|
|
||||||
default:
|
|
||||||
return "Animation Unkown";
|
|
||||||
}
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
using namespace espgui;
|
class LedstripSelectAnimationMenu :
|
||||||
|
public espgui::MenuDisplay,
|
||||||
namespace {
|
public espgui::StaticText<TEXT_SELECTANIMATION>
|
||||||
class LedstripSelectAnimationMenu :
|
{
|
||||||
public MenuDisplay,
|
public:
|
||||||
public StaticText<TEXT_SELECTANIMATION>,
|
LedstripSelectAnimationMenu();
|
||||||
public BackActionInterface<SwitchScreenAction<LedstripMenu>>
|
void back() override;
|
||||||
{
|
};
|
||||||
public:
|
|
||||||
LedstripSelectAnimationMenu()
|
|
||||||
{
|
|
||||||
constructMenuItem<makeComponent<MenuItem, currentSelectedAnimationText, DisabledColor, DummyAction>>();
|
|
||||||
constructMenuItem<makeComponent<MenuItem, EmptyText, DummyAction>>();
|
|
||||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_ANIMATION_DEFAULTRAINBOW>, LedStripSetAnimationAction<LEDSTRIP_ANIMATION_TYPE_DEFAULTRAINBOW>>>();
|
|
||||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_ANIMATION_BETTERRAINBOW>, LedStripSetAnimationAction<LEDSTRIP_ANIMATION_TYPE_BETTERRAINBOW>>>();
|
|
||||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_ANIMATION_SPEEDSYNCANIMATION>, LedStripSetAnimationAction<LEDSTRIP_ANIMATION_TYPE_SPEEDSYNCANIMATION>>>();
|
|
||||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_ANIMATION_CUSTOMCOLOR>, LedStripSetAnimationAction<LEDSTRIP_ANIMATION_TYPE_CUSTOMCOLOR>>>();
|
|
||||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<LedstripMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
} // Namespace
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
#include "icons/presets.h"
|
#include "icons/presets.h"
|
||||||
#include "icons/update.h"
|
#include "icons/update.h"
|
||||||
#include "displays/menus/selectotabuildmenu.h"
|
#include "displays/menus/selectotabuildmenu.h"
|
||||||
|
#include "displays/menus/selectbuildserverbranch.h"
|
||||||
#include "displays/menus/selectbuildservermenu.h"
|
#include "displays/menus/selectbuildservermenu.h"
|
||||||
#include "displays/menus/mainmenu.h"
|
#include "displays/menus/mainmenu.h"
|
||||||
#include "displays/updatedisplay.h"
|
#include "displays/updatedisplay.h"
|
||||||
@ -21,6 +22,7 @@ using namespace espgui;
|
|||||||
OtaMenu::OtaMenu()
|
OtaMenu::OtaMenu()
|
||||||
{
|
{
|
||||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SELECTBUILD>, SwitchScreenAction<SelectBuildMenu>, StaticMenuItemIcon<&bobbyicons::presets>>>();
|
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SELECTBUILD>, SwitchScreenAction<SelectBuildMenu>, StaticMenuItemIcon<&bobbyicons::presets>>>();
|
||||||
|
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SELECT_BRANCH>, SwitchScreenAction<SelectBuildserverBranchMenu>>>();
|
||||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_UPDATENOW>, SwitchScreenAction<UpdateDisplay>, StaticMenuItemIcon<&bobbyicons::update>>>();
|
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_UPDATENOW>, SwitchScreenAction<UpdateDisplay>, StaticMenuItemIcon<&bobbyicons::update>>>();
|
||||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SELECTBUILDSERVERMENU>, SwitchScreenAction<SelectBuildServerMenu>>>();
|
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SELECTBUILDSERVERMENU>, SwitchScreenAction<SelectBuildServerMenu>>>();
|
||||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<MainMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
|
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<MainMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
|
||||||
|
@ -0,0 +1,23 @@
|
|||||||
|
#include "profilesmenu.h"
|
||||||
|
|
||||||
|
// local includes
|
||||||
|
#include "actions/switchprofileaction.h"
|
||||||
|
#include "actions/switchscreenaction.h"
|
||||||
|
#include "displays/menus/mainmenu.h"
|
||||||
|
#include "icons/back.h"
|
||||||
|
#include "menudisplay.h"
|
||||||
|
#include "texts.h"
|
||||||
|
|
||||||
|
ProfilesMenu::ProfilesMenu()
|
||||||
|
{
|
||||||
|
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_PROFILE0>, SwitchProfileAction<0>>>();
|
||||||
|
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_PROFILE1>, SwitchProfileAction<1>>>();
|
||||||
|
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_PROFILE2>, SwitchProfileAction<2>>>();
|
||||||
|
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_PROFILE3>, SwitchProfileAction<3>>>();
|
||||||
|
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<MainMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ProfilesMenu::back()
|
||||||
|
{
|
||||||
|
switchScreen<MainMenu>();
|
||||||
|
}
|
||||||
|
@ -2,27 +2,13 @@
|
|||||||
|
|
||||||
// local includes
|
// local includes
|
||||||
#include "menudisplay.h"
|
#include "menudisplay.h"
|
||||||
#include "actions/switchprofileaction.h"
|
|
||||||
#include "actions/switchscreenaction.h"
|
|
||||||
#include "icons/back.h"
|
|
||||||
#include "texts.h"
|
#include "texts.h"
|
||||||
|
|
||||||
using namespace espgui;
|
|
||||||
|
|
||||||
namespace {
|
|
||||||
class ProfilesMenu :
|
class ProfilesMenu :
|
||||||
public MenuDisplay,
|
public espgui::MenuDisplay,
|
||||||
public StaticText<TEXT_PROFILES>,
|
public espgui::StaticText<TEXT_PROFILES>
|
||||||
public BackActionInterface<SwitchScreenAction<MainMenu>>
|
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ProfilesMenu()
|
ProfilesMenu();
|
||||||
{
|
void back() override;
|
||||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_PROFILE0>, SwitchProfileAction<0>>>();
|
|
||||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_PROFILE1>, SwitchProfileAction<1>>>();
|
|
||||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_PROFILE2>, SwitchProfileAction<2>>>();
|
|
||||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_PROFILE3>, SwitchProfileAction<3>>>();
|
|
||||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<MainMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
} // namespace
|
|
||||||
|
128
main/displays/menus/selectbuildserverbranch.cpp
Normal file
128
main/displays/menus/selectbuildserverbranch.cpp
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
#ifdef FEATURE_OTA
|
||||||
|
#include "selectbuildserverbranch.h"
|
||||||
|
|
||||||
|
// 3rd party includes
|
||||||
|
#include <espwifistack.h>
|
||||||
|
|
||||||
|
// local includes
|
||||||
|
#include "actions/dummyaction.h"
|
||||||
|
#include "actions/switchscreenaction.h"
|
||||||
|
#include "buildserver.h"
|
||||||
|
#include "displays/menus/otamenu.h"
|
||||||
|
#include "globals.h"
|
||||||
|
#include "icons/back.h"
|
||||||
|
#include "icons/reboot.h"
|
||||||
|
#include "utils.h"
|
||||||
|
|
||||||
|
#define ERR_MESSAGE(text) \
|
||||||
|
constructMenuItem<makeComponent<MenuItem, StaticText<text>, DefaultFont, StaticColor<TFT_RED>, DummyAction>>(); \
|
||||||
|
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<OtaMenu>, StaticMenuItemIcon<&espgui::icons::back>>>(); \
|
||||||
|
return;
|
||||||
|
|
||||||
|
using namespace espgui;
|
||||||
|
using namespace buildserver;
|
||||||
|
using namespace SelectBuildServerBranch;
|
||||||
|
|
||||||
|
namespace SelectBuildServerBranch {
|
||||||
|
std::string CurrentBranch::text() const
|
||||||
|
{
|
||||||
|
return stringSettings.otaServerBranch.empty() ? "All builds" : stringSettings.otaServerBranch;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string BranchMenuItem::text() const
|
||||||
|
{
|
||||||
|
return m_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
void BranchMenuItem::setName(std::string &&name)
|
||||||
|
{
|
||||||
|
m_name = std::move(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BranchMenuItem::setName(const std::string &name)
|
||||||
|
{
|
||||||
|
m_name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
void BranchMenuItem::triggered()
|
||||||
|
{
|
||||||
|
stringSettings.otaServerBranch = m_name;
|
||||||
|
saveSettings();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ClearBranchAction::triggered()
|
||||||
|
{
|
||||||
|
stringSettings.otaServerBranch = {};
|
||||||
|
saveSettings();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SelectBuildserverBranchMenu::SelectBuildserverBranchMenu()
|
||||||
|
{
|
||||||
|
using namespace SelectBuildServerBranch;
|
||||||
|
|
||||||
|
if (count_available_buildserver() < 1)
|
||||||
|
{
|
||||||
|
ERR_MESSAGE(TEXT_OTA_NOBUILDSERVERAVAILABLE); // E:No server saved.
|
||||||
|
}
|
||||||
|
|
||||||
|
if (stringSettings.otaServerUrl.empty())
|
||||||
|
{
|
||||||
|
ERR_MESSAGE(TEXT_OTA_NOBUILDSERVERSELECTED); // E:No server selected.
|
||||||
|
}
|
||||||
|
|
||||||
|
if (const auto staStatus = wifi_stack::get_sta_status(); staStatus != wifi_stack::WiFiStaStatus::CONNECTED)
|
||||||
|
{
|
||||||
|
ERR_MESSAGE(TEXT_OTA_NOCONNECTION); // E:No internet.
|
||||||
|
}
|
||||||
|
|
||||||
|
SelectBranch::setup_request();
|
||||||
|
SelectBranch::start_descriptor_request(stringSettings.otaServerUrl);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SelectBuildserverBranchMenu::update()
|
||||||
|
{
|
||||||
|
using namespace SelectBranch;
|
||||||
|
if(get_request_running())
|
||||||
|
{
|
||||||
|
check_descriptor_request();
|
||||||
|
if (!request_failed.empty())
|
||||||
|
{
|
||||||
|
this->buildMenuRequestError(request_failed);
|
||||||
|
request_failed = {};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!constructedMenu && branches.size() > 0)
|
||||||
|
{
|
||||||
|
constructedMenu = true;
|
||||||
|
constructMenuItem<makeComponent<MenuItem, CurrentBranch, DisabledColor, DummyAction>>();
|
||||||
|
constructMenuItem<makeComponent<MenuItem, EmptyText, DummyAction>>();
|
||||||
|
|
||||||
|
for (const std::string &branch : branches)
|
||||||
|
{
|
||||||
|
if (branch.empty())
|
||||||
|
continue;
|
||||||
|
auto &menuitem = constructMenuItem<BranchMenuItem>();
|
||||||
|
menuitem.setName(branch);
|
||||||
|
}
|
||||||
|
|
||||||
|
constructMenuItem<makeComponent<MenuItem, EmptyText, DummyAction>>();
|
||||||
|
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SELECT_BRANCH_CLEAR>, ClearBranchAction, StaticMenuItemIcon<&bobbyicons::reboot>>>();
|
||||||
|
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<OtaMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
|
||||||
|
}
|
||||||
|
Base::update();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SelectBuildserverBranchMenu::back()
|
||||||
|
{
|
||||||
|
switchScreen<OtaMenu>();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SelectBuildserverBranchMenu::buildMenuRequestError(std::string error)
|
||||||
|
{
|
||||||
|
auto &item = constructMenuItem<makeComponent<MenuItem, ChangeableText, DefaultFont, StaticColor<TFT_RED>, DummyAction>>();
|
||||||
|
item.setTitle(error);
|
||||||
|
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<OtaMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
|
||||||
|
}
|
||||||
|
#endif
|
46
main/displays/menus/selectbuildserverbranch.h
Normal file
46
main/displays/menus/selectbuildserverbranch.h
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
// 3rd party includes
|
||||||
|
#include <menudisplay.h>
|
||||||
|
#include <texts.h>
|
||||||
|
#ifdef FEATURE_OTA
|
||||||
|
|
||||||
|
namespace SelectBuildServerBranch {
|
||||||
|
class CurrentBranch : public virtual espgui::TextInterface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
std::string text() const override;
|
||||||
|
};
|
||||||
|
|
||||||
|
class BranchMenuItem : public espgui::MenuItem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
std::string text() const override;
|
||||||
|
void setName(std::string &&name);
|
||||||
|
void setName(const std::string &name);
|
||||||
|
|
||||||
|
void triggered() override;
|
||||||
|
private:
|
||||||
|
std::string m_name;
|
||||||
|
};
|
||||||
|
|
||||||
|
class ClearBranchAction : public virtual espgui::ActionInterface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void triggered() override;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
class SelectBuildserverBranchMenu :
|
||||||
|
public espgui::MenuDisplay,
|
||||||
|
public espgui::StaticText<TEXT_SELECT_BRANCH>
|
||||||
|
{
|
||||||
|
using Base = espgui::MenuDisplay;
|
||||||
|
public:
|
||||||
|
SelectBuildserverBranchMenu();
|
||||||
|
void buildMenuRequestError(std::string error);
|
||||||
|
void update() override;
|
||||||
|
void back() override;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
#ifdef FEATURE_OTA
|
#ifdef FEATURE_OTA
|
||||||
|
|
||||||
using namespace buildserver;
|
using namespace buildserver::SelectBuild;
|
||||||
using namespace espgui;
|
using namespace espgui;
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
#define MESSAGE(text) constructMenuItem<makeComponent<MenuItem, StaticText<text>, DefaultFont, StaticColor<TFT_RED>, DummyAction>>()
|
#define MESSAGE(text) constructMenuItem<makeComponent<MenuItem, StaticText<text>, DefaultFont, StaticColor<TFT_RED>, DummyAction>>()
|
||||||
|
|
||||||
using namespace espgui;
|
using namespace espgui;
|
||||||
using namespace buildserver;
|
using namespace buildserver::SelectBuild;
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
template<int item_color>
|
template<int item_color>
|
||||||
@ -50,7 +50,7 @@ private:
|
|||||||
|
|
||||||
SelectBuildMenu::SelectBuildMenu()
|
SelectBuildMenu::SelectBuildMenu()
|
||||||
{
|
{
|
||||||
if (count_available_buildserver() < 1)
|
if (buildserver::count_available_buildserver() < 1)
|
||||||
{
|
{
|
||||||
MESSAGE(TEXT_OTA_NOBUILDSERVERAVAILABLE);
|
MESSAGE(TEXT_OTA_NOBUILDSERVERAVAILABLE);
|
||||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<OtaMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
|
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<OtaMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
|
||||||
|
@ -16,8 +16,8 @@ using namespace std::chrono_literals;
|
|||||||
std::vector<CRGB> leds;
|
std::vector<CRGB> leds;
|
||||||
uint8_t gHue = 0;
|
uint8_t gHue = 0;
|
||||||
|
|
||||||
int16_t blinkAnimation = LEDSTRIP_OVERWRITE_NONE;
|
uint16_t blinkAnimation = LEDSTRIP_OVERWRITE_NONE;
|
||||||
int16_t animation_type = LEDSTRIP_ANIMATION_TYPE_DEFAULTRAINBOW;
|
uint16_t animation_type = LedstripAnimation::DefaultRainbow;
|
||||||
|
|
||||||
|
|
||||||
void initLedStrip()
|
void initLedStrip()
|
||||||
@ -215,10 +215,10 @@ void showAnimation()
|
|||||||
{
|
{
|
||||||
if (settings.ledstrip.enableLedAnimation && !simplified && !(asyncOtaTaskStarted && settings.ledstrip.otaMode != OtaAnimationModes::None))
|
if (settings.ledstrip.enableLedAnimation && !simplified && !(asyncOtaTaskStarted && settings.ledstrip.otaMode != OtaAnimationModes::None))
|
||||||
{
|
{
|
||||||
if (animation_type == LEDSTRIP_ANIMATION_TYPE_DEFAULTRAINBOW) showDefaultLedstrip();
|
if (animation_type == LedstripAnimation::DefaultRainbow) showDefaultLedstrip();
|
||||||
else if (animation_type == LEDSTRIP_ANIMATION_TYPE_BETTERRAINBOW) showBetterRainbow();
|
else if (animation_type == LedstripAnimation::BetterRainbow) showBetterRainbow();
|
||||||
else if (animation_type == LEDSTRIP_ANIMATION_TYPE_SPEEDSYNCANIMATION) showSpeedSyncAnimation();
|
else if (animation_type == LedstripAnimation::SpeedSync) showSpeedSyncAnimation();
|
||||||
else if (animation_type == LEDSTRIP_ANIMATION_TYPE_CUSTOMCOLOR) showCustomColor();
|
else if (animation_type == LedstripAnimation::CustomColor) showCustomColor();
|
||||||
else showDefaultLedstrip();
|
else showDefaultLedstrip();
|
||||||
}
|
}
|
||||||
else if (asyncOtaTaskStarted && settings.ledstrip.otaMode != OtaAnimationModes::None)
|
else if (asyncOtaTaskStarted && settings.ledstrip.otaMode != OtaAnimationModes::None)
|
||||||
|
@ -29,8 +29,8 @@ enum OtaAnimationModes
|
|||||||
extern std::vector<CRGB> leds;
|
extern std::vector<CRGB> leds;
|
||||||
extern uint8_t gHue;
|
extern uint8_t gHue;
|
||||||
|
|
||||||
extern int16_t blinkAnimation;
|
extern uint16_t blinkAnimation;
|
||||||
extern int16_t animation_type;
|
extern uint16_t animation_type;
|
||||||
|
|
||||||
void showDefaultLedstrip();
|
void showDefaultLedstrip();
|
||||||
void showAnimation();
|
void showAnimation();
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
#include <cstdint>
|
||||||
/*
|
/*
|
||||||
* This file contains a few defines, so you don't have to remember which ledstrip animation is which number
|
* This file contains a few defines, so you don't have to remember which ledstrip animation is which number
|
||||||
*/
|
*/
|
||||||
@ -13,11 +14,12 @@
|
|||||||
#endif
|
#endif
|
||||||
#define LEDSTRIP_OVERWRITE_BLINKBOTH 3
|
#define LEDSTRIP_OVERWRITE_BLINKBOTH 3
|
||||||
|
|
||||||
|
enum LedstripAnimation : uint16_t {
|
||||||
#define LEDSTRIP_ANIMATION_TYPE_DEFAULTRAINBOW 0
|
DefaultRainbow,
|
||||||
#define LEDSTRIP_ANIMATION_TYPE_BETTERRAINBOW 1
|
BetterRainbow,
|
||||||
#define LEDSTRIP_ANIMATION_TYPE_SPEEDSYNCANIMATION 2
|
SpeedSync,
|
||||||
#define LEDSTRIP_ANIMATION_TYPE_CUSTOMCOLOR 3
|
CustomColor
|
||||||
|
};
|
||||||
|
|
||||||
#define BLINK_LEFT_EXPR blinkAnimation != LEDSTRIP_OVERWRITE_BLINKRIGHT
|
#define BLINK_LEFT_EXPR blinkAnimation != LEDSTRIP_OVERWRITE_BLINKRIGHT
|
||||||
#define BLINK_RIGHT_EXPR blinkAnimation != LEDSTRIP_OVERWRITE_BLINKLEFT
|
#define BLINK_RIGHT_EXPR blinkAnimation != LEDSTRIP_OVERWRITE_BLINKLEFT
|
||||||
|
@ -51,6 +51,7 @@ StringSettings makeDefaultStringSettings()
|
|||||||
.otaServerUrl = {},
|
.otaServerUrl = {},
|
||||||
#endif
|
#endif
|
||||||
.ap_password = STRING(AP_PASSWORD),
|
.ap_password = STRING(AP_PASSWORD),
|
||||||
|
.otaServerBranch = {}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
} // namespace presets
|
} // namespace presets
|
||||||
|
@ -256,7 +256,7 @@ constexpr Settings::Ledstrip defaultLedstrip {
|
|||||||
#ifdef LEDSTRIP_ANIMATION_DEFAULT
|
#ifdef LEDSTRIP_ANIMATION_DEFAULT
|
||||||
.animationType = LEDSTRIP_ANIMATION_DEFAULT,
|
.animationType = LEDSTRIP_ANIMATION_DEFAULT,
|
||||||
#else
|
#else
|
||||||
.animationType = LEDSTRIP_ANIMATION_TYPE_DEFAULTRAINBOW,
|
.animationType = LedstripAnimation::DefaultRainbow,
|
||||||
#endif
|
#endif
|
||||||
.enableFullBlink = false,
|
.enableFullBlink = false,
|
||||||
.enableStVO = false,
|
.enableStVO = false,
|
||||||
|
@ -49,6 +49,7 @@ struct StringSettings
|
|||||||
std::string dns_key;
|
std::string dns_key;
|
||||||
#endif
|
#endif
|
||||||
std::string ap_password;
|
std::string ap_password;
|
||||||
|
std::string otaServerBranch;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
@ -118,6 +119,7 @@ void StringSettings::executeForEveryCommonSetting(T &&callable)
|
|||||||
callable("dnskey", dns_key);
|
callable("dnskey", dns_key);
|
||||||
#endif
|
#endif
|
||||||
callable("ap_pw", ap_password);
|
callable("ap_pw", ap_password);
|
||||||
|
callable("otaBranch", otaServerBranch);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
|
@ -533,4 +533,8 @@ char TEXT_STATSCLEAR[] = "Clear current km";
|
|||||||
char TEXT_POWERSUPPLY[] = "Powersupply";
|
char TEXT_POWERSUPPLY[] = "Powersupply";
|
||||||
#endif
|
#endif
|
||||||
char TEXT_REENABLE_MENUITEMS[] = "Show advanced";
|
char TEXT_REENABLE_MENUITEMS[] = "Show advanced";
|
||||||
|
|
||||||
|
//SelectBuildserverBranchMenu
|
||||||
|
char TEXT_SELECT_BRANCH[] = "Select Branch";
|
||||||
|
char TEXT_SELECT_BRANCH_CLEAR[] = "Clear Branch";
|
||||||
} // namespace
|
} // namespace
|
||||||
|
@ -532,6 +532,10 @@ extern char TEXT_STATSCLEAR[];
|
|||||||
extern char TEXT_POWERSUPPLY[];
|
extern char TEXT_POWERSUPPLY[];
|
||||||
#endif
|
#endif
|
||||||
extern char TEXT_REENABLE_MENUITEMS[];
|
extern char TEXT_REENABLE_MENUITEMS[];
|
||||||
|
|
||||||
|
//SelectBuildserverBranchMenu
|
||||||
|
extern char TEXT_SELECT_BRANCH[];
|
||||||
|
extern char TEXT_SELECT_BRANCH_CLEAR[];
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
using namespace bobbytexts;
|
using namespace bobbytexts;
|
||||||
|
Reference in New Issue
Block a user