Help window, setting to show/hide Tooltips

Menu and keyboard shortcut declaration centralized. List of all keyboard shortcuts. ImGuiToolkit unified tooltips.
This commit is contained in:
Bruno Herbelin
2021-12-12 23:12:56 +01:00
parent 731a1af1a6
commit a7689a8f54
8 changed files with 353 additions and 99 deletions

View File

@@ -39,6 +39,7 @@
#include "ImGuiToolkit.h" #include "ImGuiToolkit.h"
bool tooltips_enabled = true;
unsigned int textureicons = 0; unsigned int textureicons = 0;
std::map <ImGuiToolkit::font_style, ImFont*>fontmap; std::map <ImGuiToolkit::font_style, ImFont*>fontmap;
@@ -71,7 +72,7 @@ bool ImGuiToolkit::ButtonToggle( const char* label, bool* toggle, const char *to
} }
bool ImGuiToolkit::ButtonSwitch(const char* label, bool* toggle, const char* help) bool ImGuiToolkit::ButtonSwitch(const char* label, bool* toggle, const char* shortcut)
{ {
bool ret = false; bool ret = false;
@@ -114,9 +115,9 @@ bool ImGuiToolkit::ButtonSwitch(const char* label, bool* toggle, const char* hel
col_bg = ImGui::GetColorU32(ImLerp(colors[ImGuiCol_FrameBg], colors[ImGuiCol_TabActive], t)); col_bg = ImGui::GetColorU32(ImLerp(colors[ImGuiCol_FrameBg], colors[ImGuiCol_TabActive], t));
// draw help text if present // draw help text if present
if (help) { if (shortcut) {
ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(0.6, 0.6, 0.6, 0.9f)); ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(0.6, 0.6, 0.6, 0.9f));
ImGui::RenderText(draw_pos, help); ImGui::RenderText(draw_pos, shortcut);
ImGui::PopStyleColor(1); ImGui::PopStyleColor(1);
} }
@@ -233,11 +234,7 @@ bool ImGuiToolkit::IconButton(int i, int j, const char *tooltip)
// tooltip // tooltip
if (tooltip != nullptr && hovered) if (tooltip != nullptr && hovered)
{ ImGuiToolkit::ToolTip(tooltip);
ImGui::BeginTooltip();
ImGui::Text("%s", tooltip);
ImGui::EndTooltip();
}
// draw icon // draw icon
ImGui::SetCursorScreenPos(draw_pos); ImGui::SetCursorScreenPos(draw_pos);
@@ -267,11 +264,7 @@ bool ImGuiToolkit::IconButton(const char* icon, const char *tooltip)
ImGui::Text(icon); ImGui::Text(icon);
if (tooltip != nullptr && ImGui::IsItemHovered()) if (tooltip != nullptr && ImGui::IsItemHovered())
{ ImGuiToolkit::ToolTip(tooltip);
ImGui::BeginTooltip();
ImGui::Text("%s", tooltip);
ImGui::EndTooltip();
}
ImGui::PopID(); ImGui::PopID();
return ret; return ret;
@@ -304,11 +297,7 @@ bool ImGuiToolkit::IconToggle(int i, int j, int i_toggle, int j_toggle, bool* to
int tooltipid = *toggle ? 1 : 0; int tooltipid = *toggle ? 1 : 0;
if (tooltips != nullptr && tooltips[tooltipid] != nullptr && ImGui::IsItemHovered()) if (tooltips != nullptr && tooltips[tooltipid] != nullptr && ImGui::IsItemHovered())
{ ImGuiToolkit::ToolTip(tooltips[tooltipid]);
ImGui::BeginTooltip();
ImGui::Text("%s", tooltips[tooltipid]);
ImGui::EndTooltip();
}
ImGui::PopID(); ImGui::PopID();
return ret; return ret;
@@ -510,8 +499,22 @@ void ImGuiToolkit::ShowIconsWindow(bool* p_open)
} }
} }
void ImGuiToolkit::setToolTipsEnabled (bool on)
{
tooltips_enabled = on;
}
bool ImGuiToolkit::toolTipsEnabled ()
{
return tooltips_enabled;
}
void ImGuiToolkit::ToolTip(const char* desc, const char* shortcut) void ImGuiToolkit::ToolTip(const char* desc, const char* shortcut)
{ {
if (!tooltips_enabled)
return;
ImGuiToolkit::PushFont(ImGuiToolkit::FONT_DEFAULT); ImGuiToolkit::PushFont(ImGuiToolkit::FONT_DEFAULT);
ImGui::BeginTooltip(); ImGui::BeginTooltip();
ImGui::PushTextWrapPos(ImGui::GetFontSize() * 14.0f); ImGui::PushTextWrapPos(ImGui::GetFontSize() * 14.0f);
@@ -531,16 +534,24 @@ void ImGuiToolkit::ToolTip(const char* desc, const char* shortcut)
// Helper to display a little (?) mark which shows a tooltip when hovered. // Helper to display a little (?) mark which shows a tooltip when hovered.
void ImGuiToolkit::HelpMarker(const char* desc, const char* icon, const char* shortcut) void ImGuiToolkit::HelpMarker(const char* desc, const char* icon, const char* shortcut)
{ {
if (tooltips_enabled) {
ImGui::TextDisabled( icon ); ImGui::TextDisabled( icon );
if (ImGui::IsItemHovered()) if (ImGui::IsItemHovered())
ToolTip(desc, shortcut); ImGuiToolkit::ToolTip(desc, shortcut);
}
else
ImGui::Text(" ");
} }
void ImGuiToolkit::HelpIcon(const char* desc, int i, int j, const char* shortcut) void ImGuiToolkit::HelpIcon(const char* desc, int i, int j, const char* shortcut)
{ {
if (tooltips_enabled) {
ImGuiToolkit::Icon(i, j, false); ImGuiToolkit::Icon(i, j, false);
if (ImGui::IsItemHovered()) if (ImGui::IsItemHovered())
ToolTip(desc, shortcut); ImGuiToolkit::ToolTip(desc, shortcut);
}
else
ImGui::Text(" ");
} }

View File

@@ -33,10 +33,12 @@ namespace ImGuiToolkit
// buttons // buttons
bool ButtonToggle (const char* label, bool* toggle, const char *tooltip = nullptr); bool ButtonToggle (const char* label, bool* toggle, const char *tooltip = nullptr);
bool ButtonSwitch (const char* label, bool* toggle, const char *help = nullptr); bool ButtonSwitch (const char* label, bool* toggle, const char *shortcut = nullptr);
void ButtonOpenUrl (const char* label, const char* url, const ImVec2& size_arg = ImVec2(0,0)); void ButtonOpenUrl (const char* label, const char* url, const ImVec2& size_arg = ImVec2(0,0));
// tooltip and mouse over // tooltip and mouse over help
void setToolTipsEnabled (bool on);
bool toolTipsEnabled ();
void ToolTip (const char* desc, const char* shortcut = nullptr); void ToolTip (const char* desc, const char* shortcut = nullptr);
void HelpMarker (const char* desc, const char* icon = ICON_FA_QUESTION_CIRCLE, const char* shortcut = nullptr); void HelpMarker (const char* desc, const char* icon = ICON_FA_QUESTION_CIRCLE, const char* shortcut = nullptr);
void HelpIcon (const char* desc, int i = 19, int j = 5, const char* shortcut = nullptr); void HelpIcon (const char* desc, int i = 19, int j = 5, const char* shortcut = nullptr);

View File

@@ -107,6 +107,7 @@ void Settings::Save(uint64_t runtime)
applicationNode->SetAttribute("save_snapshot", application.save_version_snapshot); applicationNode->SetAttribute("save_snapshot", application.save_version_snapshot);
applicationNode->SetAttribute("smooth_cursor", application.smooth_cursor); applicationNode->SetAttribute("smooth_cursor", application.smooth_cursor);
applicationNode->SetAttribute("action_history_follow_view", application.action_history_follow_view); applicationNode->SetAttribute("action_history_follow_view", application.action_history_follow_view);
applicationNode->SetAttribute("show_tooptips", application.show_tooptips);
applicationNode->SetAttribute("accept_connections", application.accept_connections); applicationNode->SetAttribute("accept_connections", application.accept_connections);
applicationNode->SetAttribute("pannel_history_mode", application.pannel_current_session_mode); applicationNode->SetAttribute("pannel_history_mode", application.pannel_current_session_mode);
pRoot->InsertEndChild(applicationNode); pRoot->InsertEndChild(applicationNode);
@@ -339,6 +340,7 @@ void Settings::Load()
applicationNode->QueryBoolAttribute("save_snapshot", &application.save_version_snapshot); applicationNode->QueryBoolAttribute("save_snapshot", &application.save_version_snapshot);
applicationNode->QueryBoolAttribute("smooth_cursor", &application.smooth_cursor); applicationNode->QueryBoolAttribute("smooth_cursor", &application.smooth_cursor);
applicationNode->QueryBoolAttribute("action_history_follow_view", &application.action_history_follow_view); applicationNode->QueryBoolAttribute("action_history_follow_view", &application.action_history_follow_view);
applicationNode->QueryBoolAttribute("show_tooptips", &application.show_tooptips);
applicationNode->QueryBoolAttribute("accept_connections", &application.accept_connections); applicationNode->QueryBoolAttribute("accept_connections", &application.accept_connections);
applicationNode->QueryIntAttribute("pannel_history_mode", &application.pannel_current_session_mode); applicationNode->QueryIntAttribute("pannel_history_mode", &application.pannel_current_session_mode);
} }

View File

@@ -207,6 +207,7 @@ struct Application
bool smooth_transition; bool smooth_transition;
bool smooth_cursor; bool smooth_cursor;
bool action_history_follow_view; bool action_history_follow_view;
bool show_tooptips;
int pannel_current_session_mode; int pannel_current_session_mode;
@@ -257,6 +258,7 @@ struct Application
save_version_snapshot = false; save_version_snapshot = false;
smooth_cursor = false; smooth_cursor = false;
action_history_follow_view = false; action_history_follow_view = false;
show_tooptips = true;
accept_connections = false; accept_connections = false;
pannel_current_session_mode = 0; pannel_current_session_mode = 0;
current_view = 1; current_view = 1;

View File

@@ -924,7 +924,7 @@ void CloneSource::accept(Visitor& v)
glm::ivec2 CloneSource::icon() const glm::ivec2 CloneSource::icon() const
{ {
return glm::ivec2(9, 2); return glm::ivec2(ICON_SOURCE_CLONE);
} }
std::string CloneSource::info() const std::string CloneSource::info() const

View File

@@ -220,7 +220,10 @@ bool UserInterface::Init()
// init dialogs // init dialogs
sessionopendialog = new DialogToolkit::OpenSessionDialog("Open Session"); sessionopendialog = new DialogToolkit::OpenSessionDialog("Open Session");
sessionsavedialog = new DialogToolkit::SaveSessionDialog("Save Session"); sessionsavedialog = new DialogToolkit::SaveSessionDialog("Save Session");
sessionimportdialog = new DialogToolkit::OpenSessionDialog("Import Session") ; sessionimportdialog = new DialogToolkit::OpenSessionDialog("Import Session");
// init tooltips
ImGuiToolkit::setToolTipsEnabled(Settings::application.show_tooptips);
return true; return true;
} }
@@ -484,7 +487,7 @@ void UserInterface::handleKeyboard()
{ {
ImGui::Text(" Leave vimix? [Q to confirm]"); ImGui::Text(" Leave vimix? [Q to confirm]");
// Clic Quit or press Q to confirm exit // Clic Quit or press Q to confirm exit
if (ImGui::Button( ICON_FA_POWER_OFF " Quit ", ImVec2(250,0)) || if (ImGui::Button( MENU_QUIT, ImVec2(250,0)) ||
( !confirm_quit_popup && ImGui::IsKeyPressed( GLFW_KEY_Q )) ) ( !confirm_quit_popup && ImGui::IsKeyPressed( GLFW_KEY_Q )) )
Rendering::manager().close(); Rendering::manager().close();
ImGui::EndPopup(); ImGui::EndPopup();
@@ -884,7 +887,7 @@ void UserInterface::showMenuEdit()
const char *clipboard = ImGui::GetClipboardText(); const char *clipboard = ImGui::GetClipboardText();
bool has_clipboard = (clipboard != nullptr && strlen(clipboard) > 0 && SessionLoader::isClipboard(clipboard)); bool has_clipboard = (clipboard != nullptr && strlen(clipboard) > 0 && SessionLoader::isClipboard(clipboard));
if (ImGui::MenuItem( ICON_FA_CUT " Cut", CTRL_MOD "X", false, has_selection)) { if (ImGui::MenuItem( MENU_CUT, SHORTCUT_CUT, false, has_selection)) {
std::string copied_text = Mixer::selection().clipboard(); std::string copied_text = Mixer::selection().clipboard();
if (!copied_text.empty()) { if (!copied_text.empty()) {
ImGui::SetClipboardText(copied_text.c_str()); ImGui::SetClipboardText(copied_text.c_str());
@@ -892,45 +895,45 @@ void UserInterface::showMenuEdit()
} }
navigator.hidePannel(); navigator.hidePannel();
} }
if (ImGui::MenuItem( ICON_FA_COPY " Copy", CTRL_MOD "C", false, has_selection)) { if (ImGui::MenuItem( MENU_COPY, SHORTCUT_COPY, false, has_selection)) {
std::string copied_text = Mixer::selection().clipboard(); std::string copied_text = Mixer::selection().clipboard();
if (!copied_text.empty()) if (!copied_text.empty())
ImGui::SetClipboardText(copied_text.c_str()); ImGui::SetClipboardText(copied_text.c_str());
navigator.hidePannel(); navigator.hidePannel();
} }
if (ImGui::MenuItem( ICON_FA_PASTE " Paste", CTRL_MOD "V", false, has_clipboard)) { if (ImGui::MenuItem( MENU_PASTE, SHORTCUT_PASTE, false, has_clipboard)) {
Mixer::manager().paste(clipboard); Mixer::manager().paste(clipboard);
navigator.hidePannel(); navigator.hidePannel();
} }
if (ImGui::MenuItem( ICON_FA_LIST " Select all", CTRL_MOD "A")) { if (ImGui::MenuItem( MENU_SELECTALL, SHORTCUT_SELECTALL)) {
Mixer::manager().view()->selectAll(); Mixer::manager().view()->selectAll();
navigator.hidePannel(); navigator.hidePannel();
} }
ImGui::Separator(); ImGui::Separator();
if ( ImGui::MenuItem( ICON_FA_UNDO " Undo", CTRL_MOD "Z") ) if ( ImGui::MenuItem( MENU_UNDO, SHORTCUT_UNDO) )
Action::manager().undo(); Action::manager().undo();
if ( ImGui::MenuItem( ICON_FA_REDO " Redo", CTRL_MOD "Shift+Z") ) if ( ImGui::MenuItem( MENU_REDO, SHORTCUT_REDO) )
Action::manager().redo(); Action::manager().redo();
} }
void UserInterface::showMenuFile() void UserInterface::showMenuFile()
{ {
if (ImGui::MenuItem( ICON_FA_FILE " New", CTRL_MOD "W")) { if (ImGui::MenuItem( MENU_NEW_FILE, SHORTCUT_NEW_FILE)) {
Mixer::manager().close(); Mixer::manager().close();
navigator.hidePannel(); navigator.hidePannel();
} }
ImGui::SetNextItemWidth( ImGui::GetContentRegionAvail().x * 0.6f); ImGui::SetNextItemWidth( ImGui::GetContentRegionAvail().x * 0.54f);
ImGui::Combo("Ratio", &Settings::application.render.ratio, FrameBuffer::aspect_ratio_name, IM_ARRAYSIZE(FrameBuffer::aspect_ratio_name) ); ImGui::Combo("Ratio", &Settings::application.render.ratio, FrameBuffer::aspect_ratio_name, IM_ARRAYSIZE(FrameBuffer::aspect_ratio_name) );
ImGui::SetNextItemWidth( ImGui::GetContentRegionAvail().x * 0.6f); ImGui::SetNextItemWidth( ImGui::GetContentRegionAvail().x * 0.54f);
ImGui::Combo("Height", &Settings::application.render.res, FrameBuffer::resolution_name, IM_ARRAYSIZE(FrameBuffer::resolution_name) ); ImGui::Combo("Height", &Settings::application.render.res, FrameBuffer::resolution_name, IM_ARRAYSIZE(FrameBuffer::resolution_name) );
ImGui::Separator(); ImGui::Separator();
ImGui::MenuItem( ICON_FA_LEVEL_UP_ALT " Open last on start", nullptr, &Settings::application.recentSessions.load_at_start); ImGui::MenuItem( ICON_FA_LEVEL_UP_ALT " Open last on start", nullptr, &Settings::application.recentSessions.load_at_start);
if (ImGui::MenuItem( ICON_FA_FILE_UPLOAD " Open", CTRL_MOD "O")) if (ImGui::MenuItem( MENU_OPEN_FILE, SHORTCUT_OPEN_FILE))
selectOpenFilename(); selectOpenFilename();
if (ImGui::MenuItem( ICON_FA_FILE_UPLOAD " Re-open", CTRL_MOD "Shift+O")) if (ImGui::MenuItem( MENU_REOPEN_FILE, SHORTCUT_REOPEN_FILE))
Mixer::manager().load( Mixer::manager().session()->filename() ); Mixer::manager().load( Mixer::manager().session()->filename() );
if (ImGui::MenuItem( ICON_FA_FILE_EXPORT " Import") && sessionimportdialog) { if (ImGui::MenuItem( ICON_FA_FILE_EXPORT " Import") && sessionimportdialog) {
@@ -938,17 +941,19 @@ void UserInterface::showMenuFile()
sessionimportdialog->open(); sessionimportdialog->open();
navigator.hidePannel(); navigator.hidePannel();
} }
if (ImGui::MenuItem( ICON_FA_FILE_DOWNLOAD " Save", CTRL_MOD "S")) { if (ImGui::MenuItem( MENU_SAVE_FILE, SHORTCUT_SAVE_FILE)) {
if (saveOrSaveAs()) if (saveOrSaveAs())
navigator.hidePannel(); navigator.hidePannel();
} }
if (ImGui::MenuItem( ICON_FA_FILE_DOWNLOAD " Save as", CTRL_MOD "Shift+S")) if (ImGui::MenuItem( MENU_SAVEAS_FILE, SHORTCUT_SAVEAS_FILE))
selectSaveFilename(); selectSaveFilename();
ImGui::MenuItem( ICON_FA_LEVEL_DOWN_ALT " Save on exit", nullptr, &Settings::application.recentSessions.save_on_exit); ImGui::MenuItem( ICON_FA_LEVEL_DOWN_ALT " Save on exit", nullptr, &Settings::application.recentSessions.save_on_exit);
ImGui::Separator(); ImGui::Separator();
if (ImGui::MenuItem( ICON_FA_POWER_OFF " Quit", CTRL_MOD "Q")) if (ImGui::MenuItem( MENU_HELP, SHORTCUT_HELP))
Settings::application.widget.help = true;
if (ImGui::MenuItem( MENU_QUIT, SHORTCUT_QUIT))
Rendering::manager().close(); Rendering::manager().close();
} }
@@ -1036,13 +1041,13 @@ void UserInterface::RenderTimer()
// output manager menu // output manager menu
ImGui::Separator(); ImGui::Separator();
bool pinned = Settings::application.widget.timer_view == Settings::application.current_view; bool pinned = Settings::application.widget.timer_view == Settings::application.current_view;
if ( ImGui::MenuItem( ICON_FA_MAP_PIN " Pin window to view", nullptr, &pinned) ){ if ( ImGui::MenuItem( MENU_PINWINDOW, nullptr, &pinned) ){
if (pinned) if (pinned)
Settings::application.widget.timer_view = Settings::application.current_view; Settings::application.widget.timer_view = Settings::application.current_view;
else else
Settings::application.widget.timer_view = -1; Settings::application.widget.timer_view = -1;
} }
if ( ImGui::MenuItem( ICON_FA_TIMES " Close") ) if ( ImGui::MenuItem( MENU_CLOSE, SHORTCUT_TIMER) )
Settings::application.widget.timer = false; Settings::application.widget.timer = false;
ImGui::EndMenu(); ImGui::EndMenu();
@@ -1307,43 +1312,45 @@ void UserInterface::RenderPreview()
Rendering::manager().outputWindow().show(); Rendering::manager().outputWindow().show();
bool isfullscreen = Rendering::manager().outputWindow().isFullscreen(); bool isfullscreen = Rendering::manager().outputWindow().isFullscreen();
if ( ImGui::MenuItem( ICON_FA_EXPAND_ALT " Fullscreen window", CTRL_MOD "F", &isfullscreen) ) { if ( ImGui::MenuItem( MENU_OUTPUTFULLSCREEN, SHORTCUT_OUTPUTFULLSCREEN, &isfullscreen) ) {
Rendering::manager().outputWindow().show(); Rendering::manager().outputWindow().show();
Rendering::manager().outputWindow().toggleFullscreen(); Rendering::manager().outputWindow().toggleFullscreen();
} }
ImGui::MenuItem( ICON_FA_EYE_SLASH " Disable", "END", &Settings::application.render.disabled); ImGui::MenuItem( MENU_OUTPUTDISABLE, SHORTCUT_OUTPUTDISABLE, &Settings::application.render.disabled);
// output manager menu // output manager menu
ImGui::Separator(); ImGui::Separator();
bool pinned = Settings::application.widget.preview_view == Settings::application.current_view; bool pinned = Settings::application.widget.preview_view == Settings::application.current_view;
if ( ImGui::MenuItem( ICON_FA_MAP_PIN " Pin window to view", nullptr, &pinned) ){ if ( ImGui::MenuItem( MENU_PINWINDOW, nullptr, &pinned) ){
if (pinned) if (pinned)
Settings::application.widget.preview_view = Settings::application.current_view; Settings::application.widget.preview_view = Settings::application.current_view;
else else
Settings::application.widget.preview_view = -1; Settings::application.widget.preview_view = -1;
} }
if ( ImGui::MenuItem( ICON_FA_TIMES " Close", CTRL_MOD "D") ) if ( ImGui::MenuItem( MENU_CLOSE, SHORTCUT_OUTPUT) )
Settings::application.widget.preview = false; Settings::application.widget.preview = false;
ImGui::EndMenu(); ImGui::EndMenu();
} }
if (ImGui::BeginMenu("Record")) if (ImGui::BeginMenu("Record"))
{ {
if ( ImGui::MenuItem( ICON_FA_CAMERA_RETRO " Capture frame", CTRL_MOD "Shitf+R") ) ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(IMGUI_COLOR_CAPTURE, 0.8f));
if ( ImGui::MenuItem( MENU_CAPTUREFRAME, SHORTCUT_CAPTUREFRAME) )
FrameGrabbing::manager().add(new PNGRecorder); FrameGrabbing::manager().add(new PNGRecorder);
ImGui::PopStyleColor(1);
// temporary disabled // temporary disabled
if (!_video_recorders.empty()) { if (!_video_recorders.empty()) {
ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(IMGUI_COLOR_RECORD, 0.8f)); ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(IMGUI_COLOR_RECORD, 0.8f));
ImGui::MenuItem( ICON_FA_SQUARE " Record", CTRL_MOD "R", false, false); ImGui::MenuItem( MENU_RECORD, SHORTCUT_RECORD, false, false);
ImGui::MenuItem( ICON_FA_STOP_CIRCLE " Save & continue", CTRL_MOD "Alt+R", false, false); ImGui::MenuItem( MENU_RECORDCONT, SHORTCUT_RECORDCONT, false, false);
ImGui::PopStyleColor(1); ImGui::PopStyleColor(1);
} }
// Stop recording menu (recorder already exists) // Stop recording menu (recorder already exists)
else if (video_recorder_) { else if (video_recorder_) {
ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(IMGUI_COLOR_RECORD, 0.8f)); ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(IMGUI_COLOR_RECORD, 0.8f));
if ( ImGui::MenuItem( ICON_FA_SQUARE " Stop Record", CTRL_MOD "R") ) { if ( ImGui::MenuItem( ICON_FA_SQUARE " Stop Record", SHORTCUT_RECORD) ) {
// prepare for next time user open new source panel to show the recording // prepare for next time user open new source panel to show the recording
if (Settings::application.recentRecordings.load_at_start) if (Settings::application.recentRecordings.load_at_start)
navigator.setNewMedia(Navigator::MEDIA_RECORDING); navigator.setNewMedia(Navigator::MEDIA_RECORDING);
@@ -1351,7 +1358,7 @@ void UserInterface::RenderPreview()
video_recorder_->stop(); video_recorder_->stop();
} }
// offer the 'save & continue' recording // offer the 'save & continue' recording
if ( ImGui::MenuItem( ICON_FA_STOP_CIRCLE " Save & continue", CTRL_MOD "Alt+R") ) { if ( ImGui::MenuItem( MENU_RECORDCONT, SHORTCUT_RECORDCONT) ) {
// prepare for next time user open new source panel to show the recording // prepare for next time user open new source panel to show the recording
if (Settings::application.recentRecordings.load_at_start) if (Settings::application.recentRecordings.load_at_start)
navigator.setNewMedia(Navigator::MEDIA_RECORDING); navigator.setNewMedia(Navigator::MEDIA_RECORDING);
@@ -1366,11 +1373,11 @@ void UserInterface::RenderPreview()
// start recording // start recording
else { else {
ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(IMGUI_COLOR_RECORD, 0.9f)); ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(IMGUI_COLOR_RECORD, 0.9f));
if ( ImGui::MenuItem( ICON_FA_CIRCLE " Record", CTRL_MOD "R") ) { if ( ImGui::MenuItem( MENU_RECORD, SHORTCUT_RECORD) ) {
_video_recorders.emplace_back( std::async(std::launch::async, delayTrigger, new VideoRecorder, _video_recorders.emplace_back( std::async(std::launch::async, delayTrigger, new VideoRecorder,
std::chrono::seconds(Settings::application.record.delay)) ); std::chrono::seconds(Settings::application.record.delay)) );
} }
ImGui::MenuItem( ICON_FA_STOP_CIRCLE " Save & continue", CTRL_MOD "Alt+R", false, false); ImGui::MenuItem( MENU_RECORDCONT, SHORTCUT_RECORDCONT, false, false);
ImGui::PopStyleColor(1); ImGui::PopStyleColor(1);
} }
// Options menu // Options menu
@@ -1764,20 +1771,20 @@ void UserInterface::RenderShaderEditor()
editor.SetReadOnly(ro); editor.SetReadOnly(ro);
ImGui::Separator(); ImGui::Separator();
if (ImGui::MenuItem( ICON_FA_UNDO " Undo", CTRL_MOD "Z", nullptr, !ro && editor.CanUndo())) if (ImGui::MenuItem( MENU_UNDO, SHORTCUT_UNDO, nullptr, !ro && editor.CanUndo()))
editor.Undo(); editor.Undo();
if (ImGui::MenuItem( ICON_FA_REDO " Redo", CTRL_MOD "Y", nullptr, !ro && editor.CanRedo())) if (ImGui::MenuItem( MENU_REDO, SHORTCUT_REDO, nullptr, !ro && editor.CanRedo()))
editor.Redo(); editor.Redo();
ImGui::Separator(); ImGui::Separator();
if (ImGui::MenuItem( ICON_FA_COPY " Copy", CTRL_MOD "C", nullptr, editor.HasSelection())) if (ImGui::MenuItem( MENU_COPY, SHORTCUT_COPY, nullptr, editor.HasSelection()))
editor.Copy(); editor.Copy();
if (ImGui::MenuItem( ICON_FA_CUT " Cut", CTRL_MOD "X", nullptr, !ro && editor.HasSelection())) if (ImGui::MenuItem( MENU_CUT, SHORTCUT_CUT, nullptr, !ro && editor.HasSelection()))
editor.Cut(); editor.Cut();
if (ImGui::MenuItem( ICON_FA_ERASER " Delete", "Del", nullptr, !ro && editor.HasSelection())) if (ImGui::MenuItem( MENU_DELETE, SHORTCUT_DELETE, nullptr, !ro && editor.HasSelection()))
editor.Delete(); editor.Delete();
if (ImGui::MenuItem( ICON_FA_PASTE " Paste", CTRL_MOD "V", nullptr, !ro && ImGui::GetClipboardText() != nullptr)) if (ImGui::MenuItem( MENU_PASTE, SHORTCUT_PASTE, nullptr, !ro && ImGui::GetClipboardText() != nullptr))
editor.Paste(); editor.Paste();
ImGui::Separator(); ImGui::Separator();
@@ -1959,8 +1966,6 @@ void UserInterface::RenderAbout(bool* p_open)
ImGui::Spacing(); ImGui::Spacing();
ImGuiToolkit::ButtonOpenUrl("Visit vimix website", "https://brunoherbelin.github.io/vimix/", ImVec2(ImGui::GetContentRegionAvail().x, 0)); ImGuiToolkit::ButtonOpenUrl("Visit vimix website", "https://brunoherbelin.github.io/vimix/", ImVec2(ImGui::GetContentRegionAvail().x, 0));
ImGuiToolkit::ButtonOpenUrl("User Manual", "https://github.com/brunoherbelin/vimix/wiki/User-manual", ImVec2(ImGui::GetContentRegionAvail().x, 0));
ImGui::Spacing(); ImGui::Spacing();
ImGui::Text("\nvimix is built using the following libraries:"); ImGui::Text("\nvimix is built using the following libraries:");
@@ -2247,38 +2252,212 @@ void HelperToolbox::Render()
ImGui::SetNextWindowPos(ImVec2(40, 40), ImGuiCond_FirstUseEver); ImGui::SetNextWindowPos(ImVec2(40, 40), ImGuiCond_FirstUseEver);
ImGui::SetNextWindowSize(ImVec2(400, 300), ImGuiCond_FirstUseEver); ImGui::SetNextWindowSize(ImVec2(400, 300), ImGuiCond_FirstUseEver);
ImGui::SetNextWindowSizeConstraints(ImVec2(350, 300), ImVec2(FLT_MAX, FLT_MAX)); ImGui::SetNextWindowSizeConstraints(ImVec2(350, 300), ImVec2(FLT_MAX, FLT_MAX));
if ( !ImGui::Begin(IMGUI_TITLE_HELP, &Settings::application.widget.help) )
if ( !ImGui::Begin(IMGUI_TITLE_HELP, &Settings::application.widget.help, ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_MenuBar | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoCollapse ) )
{ {
ImGui::End(); ImGui::End();
return; return;
} }
if (ImGui::CollapsingHeader("File repair")) // menu (no title bar)
if (ImGui::BeginMenuBar())
{
// Close and widget menu
if (ImGuiToolkit::IconButton(4,16))
Settings::application.widget.help = false;
if (ImGui::BeginMenu(IMGUI_TITLE_HELP))
{
// Enable/Disable Ableton Link
if ( ImGui::MenuItem( ICON_FA_EXTERNAL_LINK_ALT " Online user manual") ) {
SystemToolkit::open("https://github.com/brunoherbelin/vimix/wiki/User-manual");
}
// Enable/Disable tooltips
if ( ImGui::MenuItem( ICON_FA_QUESTION_CIRCLE " Show tooltips", nullptr, &Settings::application.show_tooptips) ) {
ImGuiToolkit::setToolTipsEnabled( Settings::application.show_tooptips );
}
// output manager menu
ImGui::Separator();
if ( ImGui::MenuItem( ICON_FA_TIMES " Close") )
Settings::application.widget.help = false;
ImGui::EndMenu();
}
ImGui::EndMenuBar();
}
const float width_window = ImGui::GetWindowSize().x - ImGui::GetFontSize();
const float width_column0 = ImGui::GetFontSize() * 6;
if (ImGui::CollapsingHeader("Views"))
{ {
ImGui::Columns(2, "viewscolumn", false); // 4-ways, with border
ImGui::SetColumnWidth(0, width_column0);
ImGui::PushTextWrapPos(width_window );
ImGui::Text(ICON_FA_BULLSEYE " Mixing"); ImGui::NextColumn();
ImGui::Text ("Adjust opacity of sources, visible in the center and transparent on the side. Sources are de-activated outside of darker circle.");
ImGui::NextColumn();
ImGui::Text(ICON_FA_OBJECT_UNGROUP " Geometry"); ImGui::NextColumn();
ImGui::Text ("Move, scale, rotate or crop sources to place them in the output frame.");
ImGui::NextColumn();
ImGui::Text(ICON_FA_LAYER_GROUP " Layers"); ImGui::NextColumn();
ImGui::Text ("Organize the rendering order of sources, from background to foreground.");
ImGui::NextColumn();
ImGui::Text(ICON_FA_CHESS_BOARD " Texturing"); ImGui::NextColumn();
ImGui::Text ("Apply masks or freely paint the texture on the source surface. Repeat or crop the graphics.");
ImGui::NextColumn();
ImGui::Columns(1);
ImGui::PopTextWrapPos();
}
if (ImGui::CollapsingHeader("Windows"))
{
ImGui::Columns(2, "windowcolumn", false); // 4-ways, with border
ImGui::SetColumnWidth(0, width_column0);
ImGui::PushTextWrapPos(width_window );
ImGui::Text(ICON_FA_STICKY_NOTE " Notes"); ImGui::NextColumn();
ImGui::Text ("Place sticky notes into your session.");
ImGui::NextColumn();
ImGui::Text(ICON_FA_PLAY_CIRCLE " Player"); ImGui::NextColumn();
ImGui::Text ("Play, pause, rewind videos or dynamic sources. Control play duration, speed and synchronize multiple videos.");
ImGui::NextColumn();
ImGui::Text(ICON_FA_DESKTOP " Output"); ImGui::NextColumn();
ImGui::Text ("Preview the output displayed in the rendering window. Control video recording and sharing to other vimix in local network.");
ImGui::NextColumn();
ImGui::Text(ICON_FA_CLOCK " Timer"); ImGui::NextColumn();
ImGui::Text ("Keep track of time with a stopwatch or a metronome (Ableton Link).");
ImGui::NextColumn();
ImGui::Columns(1);
ImGui::PopTextWrapPos();
}
if (ImGui::CollapsingHeader("Sources"))
{
ImGui::Columns(2, "windowcolumn", false); // 4-ways, with border
ImGui::SetColumnWidth(0, width_column0);
ImGui::PushTextWrapPos(width_window );
ImGuiToolkit::Icon(ICON_SOURCE_VIDEO); ImGui::SameLine(0, 10);ImGui::Text("Video"); ImGui::NextColumn();
ImGui::Text ("Video file (*.mpg, *mov, *.avi, etc.).");
ImGui::NextColumn();
ImGuiToolkit::Icon(ICON_SOURCE_IMAGE); ImGui::SameLine(0, 10);ImGui::Text("Image"); ImGui::NextColumn();
ImGui::Text ("Image file (*.jpg, *.png, etc.) or vector graphics (*.svg).");
ImGui::NextColumn();
ImGuiToolkit::Icon(ICON_SOURCE_SESSION); ImGui::SameLine(0, 10);ImGui::Text("Session"); ImGui::NextColumn();
ImGui::Text ("Render a session (*.mix) as a source.");
ImGui::NextColumn();
ImGuiToolkit::Icon(ICON_SOURCE_SEQUENCE); ImGui::SameLine(0, 10);ImGui::Text("Sequence"); ImGui::NextColumn();
ImGui::Text ("Serie of images (*.jpg, *.png, etc.) numbered sequentially.");
ImGui::NextColumn();
ImGuiToolkit::Icon(ICON_SOURCE_DEVICE); ImGui::SameLine(0, 10);ImGui::Text("Device"); ImGui::NextColumn();
ImGui::Text ("Connected webcam or frame grabber.");
ImGui::NextColumn();
ImGuiToolkit::Icon(ICON_SOURCE_DEVICE_SCREEN); ImGui::SameLine(0, 10);ImGui::Text("Screen"); ImGui::NextColumn();
ImGui::Text ("Screen capture.");
ImGui::NextColumn();
ImGuiToolkit::Icon(ICON_SOURCE_NETWORK); ImGui::SameLine(0, 10);ImGui::Text("Network"); ImGui::NextColumn();
ImGui::Text ("Connected stream from another vimix in the local network (shared output stream).");
ImGui::NextColumn();
ImGuiToolkit::Icon(ICON_SOURCE_PATTERN); ImGui::SameLine(0, 10);ImGui::Text("Pattern"); ImGui::NextColumn();
ImGui::Text ("Algorithmically generated source; colors, grids, test patterns, timers...");
ImGui::NextColumn();
ImGuiToolkit::Icon(ICON_SOURCE_RENDER); ImGui::SameLine(0, 10);ImGui::Text("Rendering"); ImGui::NextColumn();
ImGui::Text ("Loopback the rendering output as a source.");
ImGui::NextColumn();
ImGuiToolkit::Icon(ICON_SOURCE_CLONE); ImGui::SameLine(0, 10);ImGui::Text("Clone"); ImGui::NextColumn();
ImGui::Text ("Clone a source (original images) into another source.");
ImGui::NextColumn();
ImGuiToolkit::Icon(ICON_SOURCE_GROUP); ImGui::SameLine(0, 10);ImGui::Text("Group"); ImGui::NextColumn();
ImGui::Text ("Group of sources rendered together after flatten in Layers view.");
ImGui::Columns(1);
ImGui::PopTextWrapPos();
} }
if (ImGui::CollapsingHeader("Keyboard shortcuts")) if (ImGui::CollapsingHeader("Keyboard shortcuts"))
{ {
ImGui::Columns(2, "mycolumns"); // 4-ways, with border ImGui::Columns(2, "keyscolumns", false); // 4-ways, with border
ImGui::SetColumnWidth(0, width_column0);
ImGui::Text("HOME"); ImGui::NextColumn(); ImGui::Text("HOME"); ImGui::NextColumn();
ImGui::Text("Main menu"); ImGui::NextColumn(); ImGui::Text(ICON_FA_BARS " Main menu"); ImGui::NextColumn();
ImGui::Text("INS"); ImGui::NextColumn(); ImGui::Text("INS"); ImGui::NextColumn();
ImGui::Text("New source"); ImGui::NextColumn(); ImGui::Text(ICON_FA_PLUS " New source"); ImGui::NextColumn();
ImGui::Text("F1"); ImGui::NextColumn(); ImGui::Text("F1"); ImGui::NextColumn();
ImGui::Text("Mixing view"); ImGui::NextColumn(); ImGui::Text(ICON_FA_BULLSEYE " Mixing view"); ImGui::NextColumn();
ImGui::Text("F2"); ImGui::NextColumn(); ImGui::Text("F2"); ImGui::NextColumn();
ImGui::Text("Geometry view"); ImGui::NextColumn(); ImGui::Text(ICON_FA_OBJECT_UNGROUP " Geometry view"); ImGui::NextColumn();
ImGui::Text("F3"); ImGui::NextColumn(); ImGui::Text("F3"); ImGui::NextColumn();
ImGui::Text("Layers view"); ImGui::NextColumn(); ImGui::Text(ICON_FA_LAYER_GROUP " Layers view"); ImGui::NextColumn();
ImGui::Text("F4"); ImGui::NextColumn(); ImGui::Text("F4"); ImGui::NextColumn();
ImGui::Text("Texturing view"); ImGui::NextColumn(); ImGui::Text(ICON_FA_CHESS_BOARD " Texturing view"); ImGui::NextColumn();
ImGui::Text(CTRL_MOD "TAB"); ImGui::NextColumn(); ImGui::Text(CTRL_MOD "TAB"); ImGui::NextColumn();
ImGui::Text("Change view"); ImGui::NextColumn(); ImGui::Text("Switch view"); ImGui::NextColumn();
ImGui::Separator(); ImGui::Separator();
ImGui::Text("Ctrl + O"); ImGui::NextColumn(); ImGui::Text(SHORTCUT_FULLSCREEN); ImGui::NextColumn();
ImGui::Text("Open Session file"); ImGui::NextColumn(); ImGui::Text(ICON_FA_EXPAND_ALT TOOLTIP_FULLSCREEN "main window"); ImGui::NextColumn();
ImGui::Text(SHORTCUT_NOTE); ImGui::NextColumn();
ImGui::Text(ICON_FA_STICKY_NOTE TOOLTIP_NOTE); ImGui::NextColumn();
ImGui::Text(SHORTCUT_PLAYER); ImGui::NextColumn();
ImGui::Text(ICON_FA_PLAY_CIRCLE TOOLTIP_PLAYER "window" ); ImGui::NextColumn();
ImGui::Text(SHORTCUT_OUTPUT); ImGui::NextColumn();
ImGui::Text(ICON_FA_DESKTOP TOOLTIP_OUTPUT "window"); ImGui::NextColumn();
ImGui::Text(SHORTCUT_TIMER); ImGui::NextColumn();
ImGui::Text(ICON_FA_CLOCK TOOLTIP_TIMER "window"); ImGui::NextColumn();
ImGui::Separator(); ImGui::Separator();
ImGui::Text(SHORTCUT_NEW_FILE); ImGui::NextColumn();
ImGui::Text(MENU_NEW_FILE " session"); ImGui::NextColumn();
ImGui::Text(SHORTCUT_OPEN_FILE); ImGui::NextColumn();
ImGui::Text(MENU_OPEN_FILE " session"); ImGui::NextColumn();
ImGui::Text(SHORTCUT_REOPEN_FILE); ImGui::NextColumn();
ImGui::Text(MENU_REOPEN_FILE " session"); ImGui::NextColumn();
ImGui::Text(SHORTCUT_SAVE_FILE); ImGui::NextColumn();
ImGui::Text(MENU_SAVE_FILE " session"); ImGui::NextColumn();
ImGui::Text(SHORTCUT_SAVEAS_FILE); ImGui::NextColumn();
ImGui::Text(MENU_SAVEAS_FILE " session"); ImGui::NextColumn();
ImGui::Separator();
ImGui::Text(SHORTCUT_CUT); ImGui::NextColumn();
ImGui::Text(MENU_CUT " source"); ImGui::NextColumn();
ImGui::Text(SHORTCUT_COPY); ImGui::NextColumn();
ImGui::Text(MENU_COPY " source"); ImGui::NextColumn();
ImGui::Text(SHORTCUT_PASTE); ImGui::NextColumn();
ImGui::Text(MENU_PASTE); ImGui::NextColumn();
ImGui::Text(SHORTCUT_SELECTALL); ImGui::NextColumn();
ImGui::Text(MENU_SELECTALL " source"); ImGui::NextColumn();
ImGui::Text(SHORTCUT_UNDO); ImGui::NextColumn();
ImGui::Text(MENU_UNDO); ImGui::NextColumn();
ImGui::Text(SHORTCUT_REDO); ImGui::NextColumn();
ImGui::Text(MENU_REDO); ImGui::NextColumn();
ImGui::Separator();
ImGui::Text(SHORTCUT_CAPTUREFRAME); ImGui::NextColumn();
ImGui::Text(MENU_CAPTUREFRAME " Output"); ImGui::NextColumn();
ImGui::Text(SHORTCUT_RECORD); ImGui::NextColumn();
ImGui::Text(MENU_RECORD " Output"); ImGui::NextColumn();
ImGui::Text(SHORTCUT_RECORDCONT); ImGui::NextColumn();
ImGui::Text(MENU_RECORDCONT " recording"); ImGui::NextColumn();
ImGui::Text(SHORTCUT_OUTPUTFULLSCREEN); ImGui::NextColumn();
ImGui::Text(MENU_OUTPUTFULLSCREEN " output window"); ImGui::NextColumn();
ImGui::Text(SHORTCUT_OUTPUTDISABLE); ImGui::NextColumn();
ImGui::Text(MENU_OUTPUTDISABLE " output window"); ImGui::NextColumn();
ImGui::Separator();
ImGui::Text("Space"); ImGui::NextColumn();
ImGui::Text("Toggle Play/Pause selected videos"); ImGui::NextColumn();
ImGui::Text("B"); ImGui::NextColumn();
ImGui::Text("Back restart selected videos"); ImGui::NextColumn();
ImGui::Text(ICON_FA_ARROW_LEFT ICON_FA_ARROW_UP ICON_FA_ARROW_DOWN ICON_FA_ARROW_RIGHT ); ImGui::NextColumn();
ImGui::Text("Move the source in the canvas"); ImGui::NextColumn();
ImGui::Separator();
ImGui::Text(SHORTCUT_HELP); ImGui::NextColumn();
ImGui::Text(MENU_HELP " window"); ImGui::NextColumn();
ImGui::Text(SHORTCUT_QUIT); ImGui::NextColumn();
ImGui::Text(MENU_QUIT); ImGui::NextColumn();
ImGui::Columns(1); ImGui::Columns(1);
} }
@@ -2425,14 +2604,14 @@ void SourceController::Render()
// Menu section for window management // Menu section for window management
ImGui::Separator(); ImGui::Separator();
bool pinned = Settings::application.widget.media_player_view == Settings::application.current_view; bool pinned = Settings::application.widget.media_player_view == Settings::application.current_view;
if ( ImGui::MenuItem( ICON_FA_MAP_PIN " Pin window to view", nullptr, &pinned) ){ if ( ImGui::MenuItem( MENU_PINWINDOW, nullptr, &pinned) ){
if (pinned) if (pinned)
Settings::application.widget.media_player_view = Settings::application.current_view; Settings::application.widget.media_player_view = Settings::application.current_view;
else else
Settings::application.widget.media_player_view = -1; Settings::application.widget.media_player_view = -1;
} }
if ( ImGui::MenuItem( ICON_FA_TIMES " Close", CTRL_MOD "P") ) { if ( ImGui::MenuItem( MENU_CLOSE, SHORTCUT_PLAYER) ) {
Settings::application.widget.media_player = false; Settings::application.widget.media_player = false;
selection_.clear(); selection_.clear();
} }
@@ -4713,7 +4892,7 @@ void Navigator::RenderMainPannelVimix()
hidePannel(); hidePannel();
} }
if (ImGui::IsItemHovered()) if (ImGui::IsItemHovered())
ImGuiToolkit::ToolTip("New session", CTRL_MOD "W"); ImGuiToolkit::ToolTip("New session", SHORTCUT_NEW_FILE);
ImGui::SetCursorPos( ImVec2( pannel_width_ IMGUI_RIGHT_ALIGN, pos_bot.y - 2.f * ImGui::GetFrameHeightWithSpacing())); ImGui::SetCursorPos( ImVec2( pannel_width_ IMGUI_RIGHT_ALIGN, pos_bot.y - 2.f * ImGui::GetFrameHeightWithSpacing()));
ImGuiToolkit::HelpMarker("Select the history of recently opened files or a folder. " ImGuiToolkit::HelpMarker("Select the history of recently opened files or a folder. "
@@ -5126,19 +5305,19 @@ void Navigator::RenderMainPannelVimix()
ImGui::Spacing(); ImGui::Spacing();
ImGuiToolkit::PushFont(ImGuiToolkit::FONT_LARGE); ImGuiToolkit::PushFont(ImGuiToolkit::FONT_LARGE);
std::string tooltip_ = ""; std::pair<std::string, std::string> tooltip_;
ImGui::SameLine(0, 0.5f * ImGui::GetTextLineHeight()); ImGui::SameLine(0, 0.5f * ImGui::GetTextLineHeight());
if ( ImGuiToolkit::IconButton( Rendering::manager().mainWindow().isFullscreen() ? ICON_FA_COMPRESS_ALT : ICON_FA_EXPAND_ALT ) ) if ( ImGuiToolkit::IconButton( Rendering::manager().mainWindow().isFullscreen() ? ICON_FA_COMPRESS_ALT : ICON_FA_EXPAND_ALT ) )
Rendering::manager().mainWindow().toggleFullscreen(); Rendering::manager().mainWindow().toggleFullscreen();
if (ImGui::IsItemHovered()) if (ImGui::IsItemHovered())
tooltip_ = "Fullscreen " CTRL_MOD "Shift+F"; tooltip_ = {TOOLTIP_FULLSCREEN, SHORTCUT_FULLSCREEN};
ImGui::SameLine(0, ImGui::GetTextLineHeight()); ImGui::SameLine(0, ImGui::GetTextLineHeight());
if ( ImGuiToolkit::IconButton( ICON_FA_STICKY_NOTE ) ) if ( ImGuiToolkit::IconButton( ICON_FA_STICKY_NOTE ) )
Mixer::manager().session()->addNote(); Mixer::manager().session()->addNote();
if (ImGui::IsItemHovered()) if (ImGui::IsItemHovered())
tooltip_ = "New note " CTRL_MOD "Shift+N"; tooltip_ = { TOOLTIP_NOTE, SHORTCUT_NOTE};
ImGui::SameLine(0, ImGui::GetTextLineHeight()); ImGui::SameLine(0, ImGui::GetTextLineHeight());
if ( ImGuiToolkit::IconButton( ICON_FA_PLAY_CIRCLE ) ) { if ( ImGuiToolkit::IconButton( ICON_FA_PLAY_CIRCLE ) ) {
@@ -5148,7 +5327,7 @@ void Navigator::RenderMainPannelVimix()
Settings::application.widget.media_player = !Settings::application.widget.media_player; Settings::application.widget.media_player = !Settings::application.widget.media_player;
} }
if (ImGui::IsItemHovered()) if (ImGui::IsItemHovered())
tooltip_ = "Player " CTRL_MOD "P"; tooltip_ = { TOOLTIP_PLAYER, SHORTCUT_PLAYER};
ImGui::SameLine(0, ImGui::GetTextLineHeight()); ImGui::SameLine(0, ImGui::GetTextLineHeight());
if ( ImGuiToolkit::IconButton( ICON_FA_DESKTOP ) ) { if ( ImGuiToolkit::IconButton( ICON_FA_DESKTOP ) ) {
@@ -5158,7 +5337,7 @@ void Navigator::RenderMainPannelVimix()
Settings::application.widget.preview = !Settings::application.widget.preview; Settings::application.widget.preview = !Settings::application.widget.preview;
} }
if (ImGui::IsItemHovered()) if (ImGui::IsItemHovered())
tooltip_ = "Output " CTRL_MOD "D"; tooltip_ = { TOOLTIP_OUTPUT, SHORTCUT_OUTPUT};
ImGui::SameLine(0, ImGui::GetTextLineHeight()); ImGui::SameLine(0, ImGui::GetTextLineHeight());
if ( ImGuiToolkit::IconButton( ICON_FA_CLOCK ) ) { if ( ImGuiToolkit::IconButton( ICON_FA_CLOCK ) ) {
@@ -5168,11 +5347,11 @@ void Navigator::RenderMainPannelVimix()
Settings::application.widget.timer = !Settings::application.widget.timer; Settings::application.widget.timer = !Settings::application.widget.timer;
} }
if (ImGui::IsItemHovered()) if (ImGui::IsItemHovered())
tooltip_ = "Timer " CTRL_MOD "T"; tooltip_ = { TOOLTIP_TIMER, SHORTCUT_TIMER};
ImGui::PopFont(); ImGui::PopFont();
if (!tooltip_.empty()) { if (!tooltip_.first.empty()) {
ImGuiToolkit::ToolTip(tooltip_.substr(0, tooltip_.size()-12).c_str(), tooltip_.substr(tooltip_.size()-12, 12).c_str()); ImGuiToolkit::ToolTip(tooltip_.first.c_str(), tooltip_.second.c_str());
} }
} }
@@ -5389,10 +5568,14 @@ void Navigator::RenderMainPannel()
} }
// About & System config toggle // About & System config toggle
if ( ImGui::Button( ICON_FA_CROW " About vimix", ImVec2(pannel_width_ IMGUI_RIGHT_ALIGN, 0)) ) ImGui::PushStyleColor(ImGuiCol_Button, ImVec4());
const char *button_label[2] = {ICON_FA_CROW " About vimix", "About vimix"};
if ( ImGui::Button( button_label[show_icon], ImVec2(pannel_width_ IMGUI_RIGHT_ALIGN, 0)) )
UserInterface::manager().show_vimix_about = true; UserInterface::manager().show_vimix_about = true;
ImGui::SameLine(0, ImGui::GetTextLineHeightWithSpacing()); ImGui::SameLine(0, ImGui::GetTextLineHeightWithSpacing());
ImGuiToolkit::IconToggle(13,5,12,5,&show_config_); const char *tooltip[2] = {"Settings", "Settings"};
ImGuiToolkit::IconToggle(13,5,12,5, &show_config_, tooltip);
ImGui::PopStyleColor();
ImGui::End(); ImGui::End();
@@ -5623,7 +5806,7 @@ void ShowAboutOpengl(bool* p_open)
if (show_opengl_info) if (show_opengl_info)
{ {
ImGui::Separator(); ImGui::Separator();
bool copy_to_clipboard = ImGui::Button( ICON_FA_COPY " Copy"); bool copy_to_clipboard = ImGui::Button(MENU_COPY);
ImGui::SameLine(0.f, 60.f); ImGui::SameLine(0.f, 60.f);
static char _openglfilter[64] = ""; static char _openglfilter[64] = "";
ImGui::InputText("Filter", _openglfilter, 64); ImGui::InputText("Filter", _openglfilter, 64);
@@ -5686,7 +5869,7 @@ void ShowAboutGStreamer(bool* p_open)
if (show_config_info) if (show_config_info)
{ {
ImGui::Separator(); ImGui::Separator();
bool copy_to_clipboard = ImGui::Button( ICON_FA_COPY " Copy"); bool copy_to_clipboard = ImGui::Button(MENU_COPY);
ImGui::SameLine(0.f, 60.f); ImGui::SameLine(0.f, 60.f);
static char _filter[64] = ""; ImGui::InputText("Filter", _filter, 64); static char _filter[64] = ""; ImGui::InputText("Filter", _filter, 64);
ImGui::SameLine(); ImGui::SameLine();

View File

@@ -10,6 +10,64 @@
#define NAV_MENU 66 #define NAV_MENU 66
#define NAV_TRANS 67 #define NAV_TRANS 67
#ifdef APPLE
#define CTRL_MOD "Cmd+"
#else
#define CTRL_MOD "Ctrl+"
#endif
#define MENU_NEW_FILE ICON_FA_FILE " New"
#define SHORTCUT_NEW_FILE CTRL_MOD "W"
#define MENU_OPEN_FILE ICON_FA_FILE_UPLOAD " Open"
#define SHORTCUT_OPEN_FILE CTRL_MOD "O"
#define MENU_REOPEN_FILE ICON_FA_FILE_UPLOAD " Re-open"
#define SHORTCUT_REOPEN_FILE CTRL_MOD "Shift+O"
#define MENU_SAVE_FILE ICON_FA_FILE_DOWNLOAD " Save"
#define SHORTCUT_SAVE_FILE CTRL_MOD "S"
#define MENU_SAVEAS_FILE ICON_FA_FILE_DOWNLOAD " Save as"
#define SHORTCUT_SAVEAS_FILE CTRL_MOD "Shift+S"
#define MENU_HELP ICON_FA_LIFE_RING " Help"
#define SHORTCUT_HELP CTRL_MOD "H"
#define MENU_QUIT ICON_FA_POWER_OFF " Quit"
#define SHORTCUT_QUIT CTRL_MOD "Q"
#define MENU_CUT ICON_FA_CUT " Cut"
#define SHORTCUT_CUT CTRL_MOD "X"
#define MENU_COPY ICON_FA_COPY " Copy"
#define SHORTCUT_COPY CTRL_MOD "C"
#define MENU_DELETE ICON_FA_ERASER " Delete"
#define SHORTCUT_DELETE "Del"
#define MENU_PASTE ICON_FA_PASTE " Paste"
#define SHORTCUT_PASTE CTRL_MOD "V"
#define MENU_SELECTALL ICON_FA_LIST " Select all"
#define SHORTCUT_SELECTALL CTRL_MOD "A"
#define MENU_UNDO ICON_FA_UNDO " Undo"
#define SHORTCUT_UNDO CTRL_MOD "Z"
#define MENU_REDO ICON_FA_REDO " Redo"
#define SHORTCUT_REDO CTRL_MOD "Shift+Z"
#define MENU_RECORD ICON_FA_CIRCLE " Record"
#define SHORTCUT_RECORD CTRL_MOD "R"
#define MENU_RECORDCONT ICON_FA_STOP_CIRCLE " Save & continue"
#define SHORTCUT_RECORDCONT CTRL_MOD "Alt+R"
#define MENU_CAPTUREFRAME ICON_FA_CAMERA_RETRO " Capture frame"
#define SHORTCUT_CAPTUREFRAME CTRL_MOD "Shitf+R"
#define MENU_OUTPUTDISABLE ICON_FA_EYE_SLASH " Disable"
#define SHORTCUT_OUTPUTDISABLE "END"
#define MENU_OUTPUTFULLSCREEN ICON_FA_EXPAND_ALT " Fullscreen window"
#define SHORTCUT_OUTPUTFULLSCREEN CTRL_MOD "F"
#define MENU_PINWINDOW ICON_FA_MAP_PIN " Pin window to view"
#define MENU_CLOSE ICON_FA_TIMES " Close"
#define TOOLTIP_NOTE " New note "
#define SHORTCUT_NOTE CTRL_MOD "Shift+N"
#define TOOLTIP_PLAYER " Player "
#define SHORTCUT_PLAYER CTRL_MOD "P"
#define TOOLTIP_OUTPUT " Output "
#define SHORTCUT_OUTPUT CTRL_MOD "D"
#define TOOLTIP_TIMER " Timer "
#define SHORTCUT_TIMER CTRL_MOD "T"
#define TOOLTIP_FULLSCREEN " Fullscreen "
#define SHORTCUT_FULLSCREEN CTRL_MOD "Shift+F"
#include "SourceList.h" #include "SourceList.h"
#include "InfoVisitor.h" #include "InfoVisitor.h"
#include "DialogToolkit.h" #include "DialogToolkit.h"

View File

@@ -78,15 +78,11 @@
#define IMGUI_TOP_ALIGN 10 #define IMGUI_TOP_ALIGN 10
#define IMGUI_COLOR_OVERLAY IM_COL32(5, 5, 5, 150) #define IMGUI_COLOR_OVERLAY IM_COL32(5, 5, 5, 150)
#define IMGUI_COLOR_LIGHT_OVERLAY IM_COL32(5, 5, 5, 50) #define IMGUI_COLOR_LIGHT_OVERLAY IM_COL32(5, 5, 5, 50)
#define IMGUI_COLOR_CAPTURE 1.0, 0.55, 0.05
#define IMGUI_COLOR_RECORD 1.0, 0.05, 0.05 #define IMGUI_COLOR_RECORD 1.0, 0.05, 0.05
#define IMGUI_COLOR_STREAM 0.05, 0.8, 1.0 #define IMGUI_COLOR_STREAM 0.05, 0.8, 1.0
#define IMGUI_NOTIFICATION_DURATION 2.5f #define IMGUI_NOTIFICATION_DURATION 2.5f
#define IMGUI_TOOLTIP_TIMEOUT 80 #define IMGUI_TOOLTIP_TIMEOUT 80
#ifdef APPLE
#define CTRL_MOD "Cmd+"
#else
#define CTRL_MOD "Ctrl+"
#endif
#define COLOR_BGROUND 0.2f, 0.2f, 0.2f #define COLOR_BGROUND 0.2f, 0.2f, 0.2f
#define COLOR_NAVIGATOR 0.1f, 0.1f, 0.1f #define COLOR_NAVIGATOR 0.1f, 0.1f, 0.1f