mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-19 00:41:43 +00:00
[glass] Fix position of data type in NT view (#5840)
This commit is contained in:
@@ -1089,24 +1089,60 @@ static bool SimplifyTypeString(std::string_view* ts) {
|
||||
return false;
|
||||
}
|
||||
|
||||
static std::string_view GetTypeString(NT_Type type) {
|
||||
switch (type) {
|
||||
case NT_BOOLEAN:
|
||||
return "boolean";
|
||||
case NT_INTEGER:
|
||||
return "int";
|
||||
case NT_FLOAT:
|
||||
return "float";
|
||||
case NT_DOUBLE:
|
||||
return "double";
|
||||
case NT_STRING:
|
||||
return "string";
|
||||
case NT_BOOLEAN_ARRAY:
|
||||
return "boolean[]";
|
||||
case NT_INTEGER_ARRAY:
|
||||
return "int[]";
|
||||
case NT_FLOAT_ARRAY:
|
||||
return "float[]";
|
||||
case NT_DOUBLE_ARRAY:
|
||||
return "double[]";
|
||||
case NT_STRING_ARRAY:
|
||||
return "string[]";
|
||||
case NT_RAW:
|
||||
return "raw";
|
||||
case NT_RPC:
|
||||
return "rpc";
|
||||
default:
|
||||
return "other";
|
||||
}
|
||||
}
|
||||
|
||||
static void EmitEntryValueReadonly(const NetworkTablesModel::ValueSource& entry,
|
||||
const char* typeStr,
|
||||
const char* overrideTypeStr,
|
||||
NetworkTablesFlags flags) {
|
||||
auto& val = entry.value;
|
||||
if (!val) {
|
||||
return;
|
||||
}
|
||||
|
||||
std::string_view typeStr =
|
||||
overrideTypeStr ? overrideTypeStr : GetTypeString(val.type());
|
||||
ImGui::SetNextItemWidth(-1 * (ImGui::CalcTextSize(typeStr.data()).x +
|
||||
ImGui::GetStyle().FramePadding.x));
|
||||
|
||||
switch (val.type()) {
|
||||
case NT_BOOLEAN:
|
||||
ImGui::LabelText(typeStr ? typeStr : "boolean", "%s",
|
||||
ImGui::LabelText(typeStr.data(), "%s",
|
||||
val.GetBoolean() ? "true" : "false");
|
||||
break;
|
||||
case NT_INTEGER:
|
||||
ImGui::LabelText(typeStr ? typeStr : "int", "%" PRId64, val.GetInteger());
|
||||
ImGui::LabelText(typeStr.data(), "%" PRId64, val.GetInteger());
|
||||
break;
|
||||
case NT_FLOAT:
|
||||
ImGui::LabelText(typeStr ? typeStr : "double", "%.6f", val.GetFloat());
|
||||
ImGui::LabelText(typeStr.data(), "%.6f", val.GetFloat());
|
||||
break;
|
||||
case NT_DOUBLE: {
|
||||
unsigned char precision = (flags & NetworkTablesFlags_Precision) >>
|
||||
@@ -1115,8 +1151,7 @@ static void EmitEntryValueReadonly(const NetworkTablesModel::ValueSource& entry,
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wformat-nonliteral"
|
||||
#endif
|
||||
ImGui::LabelText(typeStr ? typeStr : "double",
|
||||
fmt::format("%.{}f", precision).c_str(),
|
||||
ImGui::LabelText(typeStr.data(), fmt::format("%.{}f", precision).c_str(),
|
||||
val.GetDouble());
|
||||
#ifdef __GNUC__
|
||||
#pragma GCC diagnostic pop
|
||||
@@ -1124,33 +1159,32 @@ static void EmitEntryValueReadonly(const NetworkTablesModel::ValueSource& entry,
|
||||
break;
|
||||
}
|
||||
case NT_STRING: {
|
||||
ImGui::LabelText(typeStr ? typeStr : "string", "%s",
|
||||
entry.valueStr.c_str());
|
||||
ImGui::LabelText(typeStr.data(), "%s", entry.valueStr.c_str());
|
||||
break;
|
||||
}
|
||||
case NT_BOOLEAN_ARRAY:
|
||||
ImGui::LabelText(typeStr ? typeStr : "boolean[]", "[]");
|
||||
ImGui::LabelText(typeStr.data(), "[]");
|
||||
break;
|
||||
case NT_INTEGER_ARRAY:
|
||||
ImGui::LabelText(typeStr ? typeStr : "int[]", "[]");
|
||||
ImGui::LabelText(typeStr.data(), "[]");
|
||||
break;
|
||||
case NT_FLOAT_ARRAY:
|
||||
ImGui::LabelText(typeStr ? typeStr : "float[]", "[]");
|
||||
ImGui::LabelText(typeStr.data(), "[]");
|
||||
break;
|
||||
case NT_DOUBLE_ARRAY:
|
||||
ImGui::LabelText(typeStr ? typeStr : "double[]", "[]");
|
||||
ImGui::LabelText(typeStr.data(), "[]");
|
||||
break;
|
||||
case NT_STRING_ARRAY:
|
||||
ImGui::LabelText(typeStr ? typeStr : "string[]", "[]");
|
||||
ImGui::LabelText(typeStr.data(), "[]");
|
||||
break;
|
||||
case NT_RAW: {
|
||||
std::string_view ts = typeStr ? typeStr : "raw";
|
||||
std::string_view ts = typeStr;
|
||||
bool partial = SimplifyTypeString(&ts);
|
||||
ImGui::LabelText(val.GetRaw().empty() ? "[]" : "[...]", "%s", ts.data());
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::BeginTooltip();
|
||||
if (partial) {
|
||||
ImGui::TextUnformatted(typeStr);
|
||||
ImGui::TextUnformatted(typeStr.data());
|
||||
}
|
||||
ImGui::Text("%u bytes", static_cast<unsigned int>(val.GetRaw().size()));
|
||||
ImGui::EndTooltip();
|
||||
@@ -1158,7 +1192,7 @@ static void EmitEntryValueReadonly(const NetworkTablesModel::ValueSource& entry,
|
||||
break;
|
||||
}
|
||||
default:
|
||||
ImGui::LabelText(typeStr ? typeStr : "other", "?");
|
||||
ImGui::LabelText(typeStr.data(), "?");
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -1320,14 +1354,18 @@ static void EmitEntryValueEditable(NetworkTablesModel* model,
|
||||
return;
|
||||
}
|
||||
|
||||
const char* typeStr =
|
||||
entry.info.type_str.empty() ? nullptr : entry.info.type_str.c_str();
|
||||
std::string_view typeStr = entry.info.type_str.empty()
|
||||
? entry.info.type_str
|
||||
: GetTypeString(val.type());
|
||||
ImGui::SetNextItemWidth(-1 * (ImGui::CalcTextSize(typeStr.data()).x +
|
||||
ImGui::GetStyle().FramePadding.x));
|
||||
|
||||
ImGui::PushID(entry.info.name.c_str());
|
||||
switch (val.type()) {
|
||||
case NT_BOOLEAN: {
|
||||
static const char* boolOptions[] = {"false", "true"};
|
||||
int v = val.GetBoolean() ? 1 : 0;
|
||||
if (ImGui::Combo(typeStr ? typeStr : "boolean", &v, boolOptions, 2)) {
|
||||
if (ImGui::Combo(typeStr.data(), &v, boolOptions, 2)) {
|
||||
if (entry.publisher == 0) {
|
||||
entry.publisher =
|
||||
nt::Publish(entry.info.topic, NT_BOOLEAN, "boolean");
|
||||
@@ -1338,8 +1376,8 @@ static void EmitEntryValueEditable(NetworkTablesModel* model,
|
||||
}
|
||||
case NT_INTEGER: {
|
||||
int64_t v = val.GetInteger();
|
||||
if (ImGui::InputScalar(typeStr ? typeStr : "int", ImGuiDataType_S64, &v,
|
||||
nullptr, nullptr, nullptr,
|
||||
if (ImGui::InputScalar(typeStr.data(), ImGuiDataType_S64, &v, nullptr,
|
||||
nullptr, nullptr,
|
||||
ImGuiInputTextFlags_EnterReturnsTrue)) {
|
||||
if (entry.publisher == 0) {
|
||||
entry.publisher = nt::Publish(entry.info.topic, NT_INTEGER, "int");
|
||||
@@ -1350,7 +1388,7 @@ static void EmitEntryValueEditable(NetworkTablesModel* model,
|
||||
}
|
||||
case NT_FLOAT: {
|
||||
float v = val.GetFloat();
|
||||
if (ImGui::InputFloat(typeStr ? typeStr : "float", &v, 0, 0, "%.6f",
|
||||
if (ImGui::InputFloat(typeStr.data(), &v, 0, 0, "%.6f",
|
||||
ImGuiInputTextFlags_EnterReturnsTrue)) {
|
||||
if (entry.publisher == 0) {
|
||||
entry.publisher = nt::Publish(entry.info.topic, NT_FLOAT, "float");
|
||||
@@ -1367,7 +1405,7 @@ static void EmitEntryValueEditable(NetworkTablesModel* model,
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wformat-nonliteral"
|
||||
#endif
|
||||
if (ImGui::InputDouble(typeStr ? typeStr : "double", &v, 0, 0,
|
||||
if (ImGui::InputDouble(typeStr.data(), &v, 0, 0,
|
||||
fmt::format("%.{}f", precision).c_str(),
|
||||
ImGuiInputTextFlags_EnterReturnsTrue)) {
|
||||
if (entry.publisher == 0) {
|
||||
@@ -1382,7 +1420,7 @@ static void EmitEntryValueEditable(NetworkTablesModel* model,
|
||||
}
|
||||
case NT_STRING: {
|
||||
char* v = GetTextBuffer(entry.valueStr);
|
||||
if (ImGui::InputText(typeStr ? typeStr : "string", v, kTextBufferSize,
|
||||
if (ImGui::InputText(typeStr.data(), v, kTextBufferSize,
|
||||
ImGuiInputTextFlags_EnterReturnsTrue)) {
|
||||
if (v[0] == '"') {
|
||||
if (entry.publisher == 0) {
|
||||
@@ -1397,7 +1435,7 @@ static void EmitEntryValueEditable(NetworkTablesModel* model,
|
||||
break;
|
||||
}
|
||||
case NT_BOOLEAN_ARRAY:
|
||||
ImGui::LabelText("boolean[]", "[]");
|
||||
ImGui::LabelText(typeStr.data(), "[]");
|
||||
if (ImGui::BeginPopupContextItem("boolean[]")) {
|
||||
if (ImGui::Selectable("Edit Array")) {
|
||||
gArrayEditor =
|
||||
@@ -1410,7 +1448,7 @@ static void EmitEntryValueEditable(NetworkTablesModel* model,
|
||||
}
|
||||
break;
|
||||
case NT_INTEGER_ARRAY:
|
||||
ImGui::LabelText("int[]", "[]");
|
||||
ImGui::LabelText(typeStr.data(), "[]");
|
||||
if (ImGui::BeginPopupContextItem("int[]")) {
|
||||
if (ImGui::Selectable("Edit Array")) {
|
||||
gArrayEditor =
|
||||
@@ -1423,7 +1461,7 @@ static void EmitEntryValueEditable(NetworkTablesModel* model,
|
||||
}
|
||||
break;
|
||||
case NT_FLOAT_ARRAY:
|
||||
ImGui::LabelText("float[]", "[]");
|
||||
ImGui::LabelText(typeStr.data(), "[]");
|
||||
if (ImGui::BeginPopupContextItem("float[]")) {
|
||||
if (ImGui::Selectable("Edit Array")) {
|
||||
gArrayEditor =
|
||||
@@ -1435,7 +1473,7 @@ static void EmitEntryValueEditable(NetworkTablesModel* model,
|
||||
}
|
||||
break;
|
||||
case NT_DOUBLE_ARRAY:
|
||||
ImGui::LabelText("double[]", "[]");
|
||||
ImGui::LabelText(typeStr.data(), "[]");
|
||||
if (ImGui::BeginPopupContextItem("double[]")) {
|
||||
if (ImGui::Selectable("Edit Array")) {
|
||||
gArrayEditor =
|
||||
@@ -1447,7 +1485,7 @@ static void EmitEntryValueEditable(NetworkTablesModel* model,
|
||||
}
|
||||
break;
|
||||
case NT_STRING_ARRAY:
|
||||
ImGui::LabelText("string[]", "[]");
|
||||
ImGui::LabelText(typeStr.data(), "[]");
|
||||
if (ImGui::BeginPopupContextItem("string[]")) {
|
||||
if (ImGui::Selectable("Edit Array")) {
|
||||
gArrayEditor =
|
||||
@@ -1460,13 +1498,13 @@ static void EmitEntryValueEditable(NetworkTablesModel* model,
|
||||
}
|
||||
break;
|
||||
case NT_RAW: {
|
||||
std::string_view ts = typeStr ? typeStr : "raw";
|
||||
std::string_view ts = typeStr;
|
||||
bool partial = SimplifyTypeString(&ts);
|
||||
ImGui::LabelText(val.GetRaw().empty() ? "[]" : "[...]", "%s", ts.data());
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::BeginTooltip();
|
||||
if (partial) {
|
||||
ImGui::TextUnformatted(typeStr);
|
||||
ImGui::TextUnformatted(typeStr.data());
|
||||
}
|
||||
ImGui::Text("%u bytes", static_cast<unsigned int>(val.GetRaw().size()));
|
||||
ImGui::EndTooltip();
|
||||
@@ -1474,10 +1512,10 @@ static void EmitEntryValueEditable(NetworkTablesModel* model,
|
||||
break;
|
||||
}
|
||||
case NT_RPC:
|
||||
ImGui::LabelText(typeStr ? typeStr : "rpc", "[...]");
|
||||
ImGui::LabelText(typeStr.data(), "[...]");
|
||||
break;
|
||||
default:
|
||||
ImGui::LabelText(typeStr ? typeStr : "other", "?");
|
||||
ImGui::LabelText(typeStr.data(), "?");
|
||||
break;
|
||||
}
|
||||
ImGui::PopID();
|
||||
@@ -1671,6 +1709,9 @@ static void EmitEntry(NetworkTablesModel* model,
|
||||
}
|
||||
// make it look like a normal label w/type
|
||||
ImGui::SetCursorPos(pos);
|
||||
ImGui::SetNextItemWidth(
|
||||
-1 * (ImGui::CalcTextSize(entry.info.type_str.c_str()).x +
|
||||
ImGui::GetStyle().FramePadding.x));
|
||||
ImGui::LabelText(entry.info.type_str.c_str(), "%s", "");
|
||||
if ((entry.value.IsBooleanArray() || entry.value.IsFloatArray() ||
|
||||
entry.value.IsDoubleArray() || entry.value.IsIntegerArray() ||
|
||||
|
||||
Reference in New Issue
Block a user