16
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-07-21 13:39:18 +02:00

recording

This commit is contained in:
milek7
2019-03-25 01:12:19 +01:00
parent 99c0888965
commit aa8d66e5da
6 changed files with 148 additions and 3 deletions

View File

@@ -194,11 +194,11 @@ void ui::map_panel::render_contents()
static enum { MODE_MANUAL = 0, MODE_CAMERA, MODE_VEHICLE } mode = MODE_MANUAL;
ImGui::RadioButton("manual", (int *)&mode, 0);
ImGui::RadioButton("Pan", (int *)&mode, 0);
ImGui::SameLine();
ImGui::RadioButton("cam", (int *)&mode, 1);
ImGui::RadioButton("Follow camera", (int *)&mode, 1);
ImGui::SameLine();
ImGui::RadioButton("vehicle", (int *)&mode, 2);
ImGui::RadioButton("Follow vehicle", (int *)&mode, 2);
ImVec2 surface_size_im = ImGui::GetContentRegionAvail();
glm::vec2 surface_size(surface_size_im.x, surface_size_im.y);

110
widgets/trainingcard.cpp Normal file
View File

@@ -0,0 +1,110 @@
#include "stdafx.h"
#include "widgets/trainingcard.h"
trainingcard_panel::trainingcard_panel()
: ui_panel("Raport szkolenia", false)
{
//size = {400, 500};
clear();
}
void trainingcard_panel::clear()
{
start_time_wall.reset();
state.store(0);
place.clear();
trainee_name.clear();
instructor_name.clear();
remarks.clear();
place.resize(256, 0);
trainee_name.resize(256, 0);
instructor_name.resize(256, 0);
remarks.resize(4096, 0);
}
void trainingcard_panel::save_thread_func()
{
std::tm *tm = std::localtime(&(*start_time_wall));
std::string rep = std::to_string(tm->tm_year + 1900) + std::to_string(tm->tm_mon + 1) + std::to_string(tm->tm_mday)
+ std::to_string(tm->tm_hour) + std::to_string(tm->tm_min) + "_" + trainee_name + "_" + instructor_name;
state.store(EndRecording(rep));
}
void trainingcard_panel::render_contents()
{
if (ImGui::BeginPopupModal("Zapisywanie danych")) {
ImGui::SetWindowSize(ImVec2(-1, -1));
int s = state.load();
if (s == 1) {
ImGui::CloseCurrentPopup();
clear();
}
if (s < 1) {
if (s == 0)
ImGui::TextUnformatted("Error occured please contact with administrator!");
if (s == -1)
ImGui::TextUnformatted("The recording of the training has not been archived, please do not start the next training before manually archiving the file!");
if (ImGui::Button("OK")) {
ImGui::CloseCurrentPopup();
clear();
}
}
if (s == 2)
ImGui::TextUnformatted(u8"Proszę czekać, trwa archiwizacja nagrania...");
ImGui::EndPopup();
return;
}
if (start_time_wall) {
std::tm *tm = std::localtime(&(*start_time_wall));
std::string rep = u8"Czas rozpoczęcia: " + std::to_string(tm->tm_year + 1900) + "-" + std::to_string(tm->tm_mon + 1) + "-" + std::to_string(tm->tm_mday)
+ " " + std::to_string(tm->tm_hour) + ":" + std::to_string(tm->tm_min);
ImGui::TextUnformatted(rep.c_str());
}
ImGui::TextUnformatted("Miejsce:");
ImGui::SameLine();
ImGui::InputText("##place", &place[0], place.size());
ImGui::TextUnformatted("Szkolony:");
ImGui::SameLine();
ImGui::InputText("##trainee", &trainee_name[0], trainee_name.size());
ImGui::TextUnformatted("Instruktor:");
ImGui::SameLine();
ImGui::InputText("##instructor", &instructor_name[0], instructor_name.size());
/*
ImGui::TextUnformatted("Uwagi");
ImGui::InputTextMultiline("##remarks", &remarks[0], remarks.size(), ImVec2(-1.0f, 200.0f));
*/
if (!start_time_wall) {
if (ImGui::Button("Rozpocznij szkolenie")) {
start_time_wall = std::time(nullptr);
int ret = StartRecording();
if (ret != 1) {
state.store(ret);
ImGui::OpenPopup("Zapisywanie danych");
}
}
}
else {
if (ImGui::Button(u8"Zakończ szkolenie")) {
state.store(2);
if (save_thread.joinable())
save_thread.join();
save_thread = std::thread(&trainingcard_panel::save_thread_func, this);
ImGui::OpenPopup("Zapisywanie danych");
}
}
}

30
widgets/trainingcard.h Normal file
View File

@@ -0,0 +1,30 @@
#include "uilayer.h"
class trainingcard_panel : public ui_panel
{
std::string place;
std::string trainee_name;
std::string instructor_name;
std::string remarks;
std::optional<std::time_t> start_time_wall;
std::thread save_thread;
std::atomic<int> state;
void save_thread_func();
void clear();
virtual int StartRecording( void ) {
return 1;
}
virtual int EndRecording( std::string training_identifier ) {
std::this_thread::sleep_for(std::chrono::duration<float>(5.0f));
return 1;
}
public:
trainingcard_panel();
void render_contents() override;
};