// 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 #include #include #include 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; }