From b6593c2a83be3edd52df2fe8f1e962eb1758b10a Mon Sep 17 00:00:00 2001 From: Bruno Herbelin Date: Wed, 24 Nov 2021 00:15:40 +0100 Subject: [PATCH] Added date to snapshot Allows showing date of version --- ActionManager.cpp | 23 ++++++++++++++++++++++- ActionManager.h | 1 + UserInterfaceManager.cpp | 37 ++++++++++++++++++++++++++----------- 3 files changed, 49 insertions(+), 12 deletions(-) diff --git a/ActionManager.cpp b/ActionManager.cpp index 219c316..b83bc87 100644 --- a/ActionManager.cpp +++ b/ActionManager.cpp @@ -31,6 +31,7 @@ #include "Settings.h" #include "BaseToolkit.h" #include "Interpolator.h" +#include "SystemToolkit.h" #include "ActionManager.h" @@ -50,6 +51,8 @@ void captureMixerSession(tinyxml2::XMLDocument *doc, std::string node, std::stri doc->InsertEndChild(sessionNode); // label describes the action sessionNode->SetAttribute("label", label.c_str() ); + // label describes the action + sessionNode->SetAttribute("date", SystemToolkit::date_time_string().c_str() ); // view indicates the view when this action occured sessionNode->SetAttribute("view", (int) Mixer::manager().view()->mode()); @@ -301,6 +304,23 @@ std::string Action::label(uint64_t snapshotid) const return label; } +std::string Action::date(uint64_t snapshotid) const +{ + std::string date = ""; + + // get snapshot node of target in current session + Session *se = Mixer::manager().session(); + const XMLElement *snap = se->snapshots()->xmlDoc_->FirstChildElement( SNAPSHOT_NODE(snapshotid).c_str() ); + + if (snap){ + const char *d = snap->Attribute("date"); + if (d) + date = std::string(d); + } + + return date; +} + void Action::setLabel (uint64_t snapshotid, const std::string &label) { open(snapshotid); @@ -327,7 +347,8 @@ FrameBufferImage *Action::thumbnail(uint64_t snapshotid) const void Action::clearSnapshots() { Session *se = Mixer::manager().session(); - se->snapshots()->keys_.clear(); + while (!se->snapshots()->keys_.empty()) + remove(se->snapshots()->keys_.front()); } void Action::remove(uint64_t snapshotid) diff --git a/ActionManager.h b/ActionManager.h index eddd3de..4ffd49e 100644 --- a/ActionManager.h +++ b/ActionManager.h @@ -50,6 +50,7 @@ public: void remove (uint64_t snapshotid = 0); std::string label (uint64_t snapshotid) const; + std::string date (uint64_t snapshotid) const; std::list labels () const; void setLabel (uint64_t snapshotid, const std::string &label); FrameBufferImage *thumbnail (uint64_t snapshotid) const; diff --git a/UserInterfaceManager.cpp b/UserInterfaceManager.cpp index 870ea2e..4f2af1e 100644 --- a/UserInterfaceManager.cpp +++ b/UserInterfaceManager.cpp @@ -101,6 +101,17 @@ void ShowSandbox(bool* p_open); void SetMouseCursor(ImVec2 mousepos, View::Cursor c = View::Cursor()); void SetNextWindowVisible(ImVec2 pos, ImVec2 size, float margin = 180.f); +std::string readable_date_time_string(std::string date){ + if (date.length()<12) + return ""; + std::string s = date.substr(0, 12); + s.insert(10, ":"); + s.insert(8, " "); + s.insert(6, "/"); + s.insert(4, "/"); + return s; +} + // globals const std::chrono::milliseconds timeout = std::chrono::milliseconds(4); std::vector< std::future > _video_recorders; @@ -4569,6 +4580,14 @@ void Navigator::RenderMainPannelVimix() // the session file exists if (!sessionfilename.empty()) { + // Folder + std::string path = SystemToolkit::path_filename(sessionfilename); + std::string label = BaseToolkit::trunc_string(path, 23); + label = BaseToolkit::transliterate(label); + ImGuiToolkit::ButtonOpenUrl( label.c_str(), path.c_str(), ImVec2(IMGUI_RIGHT_ALIGN, 0) ); + ImGui::SameLine(); + ImGui::Text("Folder"); + // Thumbnail static Thumbnail _file_thumbnail; static FrameBufferImage *thumbnail = nullptr; @@ -4603,12 +4622,6 @@ void Navigator::RenderMainPannelVimix() ImGui::PopStyleVar(); } ImGui::SetCursorPos( pos_bot ); - - // Folder - std::string path = SystemToolkit::path_filename(sessionfilename); - std::string label = BaseToolkit::trunc_string(path, 23); - label = BaseToolkit::transliterate(label); - ImGuiToolkit::ButtonOpenUrl( label.c_str(), path.c_str(), ImVec2(IMGUI_RIGHT_ALIGN, 0) ); } } @@ -4734,6 +4747,7 @@ void Navigator::RenderMainPannelVimix() static uint64_t _selected = 0; static Thumbnail _snap_thumbnail; static std::string _snap_label = ""; + static std::string _snap_date = ""; int count_over = 0; ImVec2 size = ImVec2( ImGui::GetContentRegionAvailWidth(), ImGui::GetTextLineHeight() ); @@ -4780,6 +4794,7 @@ void Navigator::RenderMainPannelVimix() // load label and thumbnail only if current changed if (current_over != _over) { _snap_label = Action::manager().label(_over); + _snap_date = "Version of " + readable_date_time_string(Action::manager().date(_over)); FrameBufferImage *im = Action::manager().thumbnail(_over); if (im) { // set image content to thumbnail display @@ -4793,6 +4808,7 @@ void Navigator::RenderMainPannelVimix() // draw thumbnail in tooltip ImGui::BeginTooltip(); _snap_thumbnail.Render(size.x); + ImGui::Text(_snap_date.c_str()); ImGui::EndTooltip(); ++count_over; // prevents display twice on item overlap } @@ -4803,17 +4819,16 @@ void Navigator::RenderMainPannelVimix() if (ImGui::BeginPopup( "MenuSnapshot" ) && current > 0 ) { _selected = current; - ImGui::TextDisabled("Edit"); + // snapshot thumbnail + _snap_thumbnail.Render(size.x); // snapshot editable label ImGui::SetNextItemWidth(size.x); if ( ImGuiToolkit::InputText("##Rename", &_snap_label ) ) Action::manager().setLabel( current, _snap_label); - // snapshot thumbnail - _snap_thumbnail.Render(size.x); // snapshot actions - if (ImGui::Selectable( " " ICON_FA_ANGLE_DOUBLE_RIGHT " Restore", false, 0, size )) + if (ImGui::Selectable( ICON_FA_ANGLE_DOUBLE_RIGHT " Restore", false, 0, size )) Action::manager().restore(); - if (ImGui::Selectable( ICON_FA_CODE_BRANCH "_ Remove", false, 0, size )) + if (ImGui::Selectable( ICON_FA_CODE_BRANCH "- Remove", false, 0, size )) Action::manager().remove(); ImGui::EndPopup(); }