mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-20 00:51:42 +00:00
81 lines
2.1 KiB
C++
81 lines
2.1 KiB
C++
|
|
// Copyright (c) FIRST and other WPILib contributors.
|
||
|
|
// Open Source Software; you can modify and/or share it under the terms of
|
||
|
|
// the WPILib BSD license file in the root directory of this project.
|
||
|
|
|
||
|
|
#include "sysid/Util.h"
|
||
|
|
|
||
|
|
#include <filesystem>
|
||
|
|
#include <stdexcept>
|
||
|
|
|
||
|
|
#include <imgui.h>
|
||
|
|
#include <wpi/raw_ostream.h>
|
||
|
|
|
||
|
|
void sysid::CreateTooltip(const char* text) {
|
||
|
|
ImGui::SameLine();
|
||
|
|
ImGui::TextDisabled(" (?)");
|
||
|
|
|
||
|
|
if (ImGui::IsItemHovered()) {
|
||
|
|
ImGui::BeginTooltip();
|
||
|
|
ImGui::PushTextWrapPos(ImGui::GetFontSize() * 35.0f);
|
||
|
|
ImGui::TextUnformatted(text);
|
||
|
|
ImGui::PopTextWrapPos();
|
||
|
|
ImGui::EndTooltip();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
void sysid::CreateErrorPopup(bool& isError, std::string_view errorMessage) {
|
||
|
|
if (isError) {
|
||
|
|
ImGui::OpenPopup("Exception Caught!");
|
||
|
|
}
|
||
|
|
|
||
|
|
// Handle exceptions.
|
||
|
|
ImGui::SetNextWindowSize(ImVec2(480.f, 0.0f));
|
||
|
|
if (ImGui::BeginPopupModal("Exception Caught!")) {
|
||
|
|
ImGui::PushTextWrapPos(0.0f);
|
||
|
|
ImGui::TextColored(ImVec4(1.0f, 0.4f, 0.4f, 1.0f), "%s",
|
||
|
|
errorMessage.data());
|
||
|
|
ImGui::PopTextWrapPos();
|
||
|
|
if (ImGui::Button("Close")) {
|
||
|
|
ImGui::CloseCurrentPopup();
|
||
|
|
isError = false;
|
||
|
|
}
|
||
|
|
ImGui::EndPopup();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
std::string_view sysid::GetAbbreviation(std::string_view unit) {
|
||
|
|
if (unit == "Meters") {
|
||
|
|
return "m";
|
||
|
|
} else if (unit == "Feet") {
|
||
|
|
return "ft";
|
||
|
|
} else if (unit == "Inches") {
|
||
|
|
return "in";
|
||
|
|
} else if (unit == "Radians") {
|
||
|
|
return "rad";
|
||
|
|
} else if (unit == "Degrees") {
|
||
|
|
return "deg";
|
||
|
|
} else if (unit == "Rotations") {
|
||
|
|
return "rot";
|
||
|
|
} else {
|
||
|
|
throw std::runtime_error("Invalid Unit");
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
void sysid::SaveFile(std::string_view contents,
|
||
|
|
const std::filesystem::path& path) {
|
||
|
|
// Create the path if it doesn't already exist.
|
||
|
|
std::filesystem::create_directories(path.root_directory());
|
||
|
|
|
||
|
|
// Open a fd_ostream to write to file.
|
||
|
|
std::error_code ec;
|
||
|
|
wpi::raw_fd_ostream ostream{path.string(), ec};
|
||
|
|
|
||
|
|
// Check error code.
|
||
|
|
if (ec) {
|
||
|
|
throw std::runtime_error("Cannot write to file: " + ec.message());
|
||
|
|
}
|
||
|
|
|
||
|
|
// Write contents.
|
||
|
|
ostream << contents;
|
||
|
|
}
|