1
0
Fork 0
mirror of https://github.com/gwm17/implot.git synced 2024-11-23 02:38:53 -05:00

Add BeginPopupContextLegend and EndPopup

EndPopup is just a wrapper around ImGui::EndPopup.

BeginPopupContextLegend provides easy-to-use context menus for legend
entries along the lines of ImGui::BeginPopupContextItem.
This commit is contained in:
Peter Johnson 2020-08-31 20:08:53 -07:00
parent fb19e76443
commit 8cbbfc241f
No known key found for this signature in database
GPG Key ID: D39DD4DA7D41E329
3 changed files with 33 additions and 0 deletions

View File

@ -1892,6 +1892,25 @@ void EndLegendDragDropSource() {
ImGui::EndDragDropSource(); ImGui::EndDragDropSource();
} }
bool BeginPopupContextLegend(const char* label_id, ImGuiMouseButton mouse_button) {
ImPlotContext& gp = *GImPlot;
IM_ASSERT_USER_ERROR(gp.CurrentPlot != NULL, "BeginLegendPopup() needs to be called between BeginPlot() and EndPlot()!");
ImGuiWindow* window = GImGui->CurrentWindow;
if (window->SkipItems)
return false;
ImGuiID id = ImGui::GetID(label_id);
if (ImGui::IsMouseReleased(mouse_button)) {
ImPlotItem* item = gp.CurrentPlot->Items.GetByKey(id);
if (item && item->Highlight)
ImGui::OpenPopupEx(id);
}
return ImGui::BeginPopupEx(id, ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoSavedSettings);
}
void EndPopup() {
ImGui::EndPopup();
}
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// STYLING // STYLING
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------

View File

@ -522,6 +522,11 @@ bool BeginLegendDragDropSource(const char* label_id, ImGuiDragDropFlags flags =
// End legend drag and drop source. // End legend drag and drop source.
void EndLegendDragDropSource(); void EndLegendDragDropSource();
// Begin a popup for a legend entry.
bool BeginPopupContextLegend(const char* label_id, ImGuiMouseButton mouse_button = 1);
// End a popup for a legend entry.
void EndPopup();
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// Miscellaneous // Miscellaneous
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------

View File

@ -237,10 +237,19 @@ void ShowDemoWindow(bool* p_open) {
ys2[i] = xs2[i] * xs2[i]; ys2[i] = xs2[i] * xs2[i];
} }
ImGui::BulletText("Anti-aliasing can be enabled from the plot's context menu (see Help)."); ImGui::BulletText("Anti-aliasing can be enabled from the plot's context menu (see Help).");
ImGui::BulletText("Right click on a legend item to bring up its context menu");
if (ImPlot::BeginPlot("Line Plot", "x", "f(x)")) { if (ImPlot::BeginPlot("Line Plot", "x", "f(x)")) {
ImPlot::PlotLine("sin(x)", xs1, ys1, 1001); ImPlot::PlotLine("sin(x)", xs1, ys1, 1001);
ImPlot::SetNextMarkerStyle(ImPlotMarker_Circle); ImPlot::SetNextMarkerStyle(ImPlotMarker_Circle);
ImPlot::PlotLine("x^2", xs2, ys2, 11); ImPlot::PlotLine("x^2", xs2, ys2, 11);
if (ImPlot::BeginPopupContextLegend("sin(x)")) {
ImGui::Text("Context menu for sin(x)");
ImPlot::EndPopup();
}
if (ImPlot::BeginPopupContextLegend("x^2")) {
ImGui::Text("Context menu for x^2");
ImPlot::EndPopup();
}
ImPlot::EndPlot(); ImPlot::EndPlot();
} }
} }