diff --git a/glass/CMakeLists.txt b/glass/CMakeLists.txt index bb9c4fe82a8..41a7819343f 100644 --- a/glass/CMakeLists.txt +++ b/glass/CMakeLists.txt @@ -50,9 +50,10 @@ install(DIRECTORY src/libnt/native/include/ DESTINATION "${include_dest}/glass") # glass application # +configure_file(src/app/generate/WPILibVersion.cpp.in WPILibVersion.cpp) GENERATE_RESOURCES(src/app/native/resources generated/app/cpp GLASS glass glass_resources_src) -file(GLOB glass_src src/app/native/cpp/*.cpp) +file(GLOB glass_src src/app/native/cpp/*.cpp ${CMAKE_CURRENT_BINARY_DIR}/WPILibVersion.cpp) if (WIN32) set(glass_rc src/app/native/win/glass.rc) diff --git a/glass/build.gradle b/glass/build.gradle index afa30b47dc0..ad977ada0a9 100644 --- a/glass/build.gradle +++ b/glass/build.gradle @@ -21,11 +21,50 @@ if (!project.hasProperty('onlylinuxathena') && !project.hasProperty('onlylinuxra apply from: "${rootDir}/shared/resources.gradle" apply from: "${rootDir}/shared/config.gradle" + def wpilibVersionFileInput = file("src/app/generate/WPILibVersion.cpp.in") + def wpilibVersionFileOutput = file("$buildDir/generated/app/cpp/WPILibVersion.cpp") + + task generateCppVersion() { + description = 'Generates the wpilib version class' + group = 'WPILib' + + outputs.file wpilibVersionFileOutput + inputs.file wpilibVersionFileInput + + if (wpilibVersioning.releaseMode) { + outputs.upToDateWhen { false } + } + + // We follow a simple set of checks to determine whether we should generate a new version file: + // 1. If the release type is not development, we generate a new version file + // 2. If there is no generated version number, we generate a new version file + // 3. If there is a generated build number, and the release type is development, then we will + // only generate if the publish task is run. + doLast { + def version = wpilibVersioning.version.get() + println "Writing version ${version} to $wpilibVersionFileOutput" + + if (wpilibVersionFileOutput.exists()) { + wpilibVersionFileOutput.delete() + } + def read = wpilibVersionFileInput.text.replace('${wpilib_version}', version) + wpilibVersionFileOutput.write(read) + } + } + + gradle.taskGraph.addTaskExecutionGraphListener { graph -> + def willPublish = graph.hasTask(publish) + if (willPublish) { + generateCppVersion.outputs.upToDateWhen { false } + } + } + def generateTask = createGenerateResourcesTask('app', 'GLASS', 'glass', project) project(':').libraryBuild.dependsOn build tasks.withType(CppCompile) { dependsOn generateTask + dependsOn generateCppVersion } nativeUtils.exportsConfigs { diff --git a/glass/src/app/generate/WPILibVersion.cpp.in b/glass/src/app/generate/WPILibVersion.cpp.in new file mode 100644 index 00000000000..b0a44905207 --- /dev/null +++ b/glass/src/app/generate/WPILibVersion.cpp.in @@ -0,0 +1,7 @@ +/* + * Autogenerated file! Do not manually edit this file. This version is regenerated + * any time the publish task is run, or when this file is deleted. + */ +const char* GetWPILibVersion() { + return "${wpilib_version}"; +} diff --git a/glass/src/app/native/cpp/main.cpp b/glass/src/app/native/cpp/main.cpp index 36c7f5538ea..247e3526521 100644 --- a/glass/src/app/native/cpp/main.cpp +++ b/glass/src/app/native/cpp/main.cpp @@ -21,6 +21,8 @@ namespace gui = wpi::gui; +const char* GetWPILibVersion(); + namespace glass { wpi::StringRef GetResource_glass_16_png(); wpi::StringRef GetResource_glass_32_png(); @@ -181,7 +183,29 @@ int main() { gPlotProvider->DisplayMenu(); ImGui::EndMenu(); } + + bool about = false; + if (ImGui::BeginMenu("Info")) { + if (ImGui::MenuItem("About")) { + about = true; + } + ImGui::EndMenu(); + } ImGui::EndMainMenuBar(); + + if (about) { + ImGui::OpenPopup("About"); + about = false; + } + if (ImGui::BeginPopupModal("About")) { + ImGui::Text("Glass: A different kind of dashboard"); + ImGui::Separator(); + ImGui::Text("v%s", GetWPILibVersion()); + if (ImGui::Button("Close")) { + ImGui::CloseCurrentPopup(); + } + ImGui::EndPopup(); + } }); gui::Initialize("Glass - DISCONNECTED", 1024, 768);