aboutsummaryrefslogtreecommitdiff
path: root/src/ui
diff options
context:
space:
mode:
authorhachem <im@hachem.wtf>2026-08-28 21:32:31 +0200
committerhachem <im@hachem.wtf>2026-08-28 21:32:31 +0200
commit86afee9b5c4954fda84d500b85328cca18ee3de4 (patch)
tree14730cde527583a77be20a55f04542412fb8fb3e /src/ui
parentf3c010f6cea20335d9697c1c2f657e71c70fb1dc (diff)
feat: breakpoint conditions and skip counts
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/ui.cpp29
1 files changed, 28 insertions, 1 deletions
diff --git a/src/ui/ui.cpp b/src/ui/ui.cpp
index 8ba1155..01c5165 100644
--- a/src/ui/ui.cpp
+++ b/src/ui/ui.cpp
@@ -523,12 +523,14 @@ namespace Hsdbg
ImGuiTableFlags_SizingStretchProp |
ImGuiTableFlags_ScrollY;
- if (ImGui::BeginTable("##breakpoints", 6, flags))
+ if (ImGui::BeginTable("##breakpoints", 8, flags))
{
ImGui::TableSetupColumn("on", ImGuiTableColumnFlags_WidthFixed, 26.0f);
ImGui::TableSetupColumn("id", ImGuiTableColumnFlags_WidthFixed, 30.0f);
ImGui::TableSetupColumn("location");
ImGui::TableSetupColumn("address");
+ ImGui::TableSetupColumn("condition");
+ ImGui::TableSetupColumn("skip", ImGuiTableColumnFlags_WidthFixed, 50.0f);
ImGui::TableSetupColumn("hits", ImGuiTableColumnFlags_WidthFixed, 40.0f);
ImGui::TableSetupColumn("", ImGuiTableColumnFlags_WidthFixed, 26.0f);
ImGui::TableSetupScrollFreeze(0, 1);
@@ -577,6 +579,31 @@ namespace Hsdbg
ImGui::TextDisabled("pending");
}
+ // imgui keeps its own buffer while an input is focused, so
+ // these copies only seed it and receive the final text
+ ImGui::TableNextColumn();
+ std::string condition = breakpoint.condition;
+ ImGui::SetNextItemWidth(-1.0f);
+
+ if (ImGui::InputTextWithHint("##condition",
+ "stop when",
+ &condition,
+ ImGuiInputTextFlags_EnterReturnsTrue))
+ {
+ debugger.set_breakpoint_condition(breakpoint.id, condition);
+ }
+
+ ImGui::TableNextColumn();
+ int ignore_count = static_cast<int>(breakpoint.ignore_count);
+ ImGui::SetNextItemWidth(-1.0f);
+
+ if (ImGui::InputInt("##skip", &ignore_count, 0, 0,
+ ImGuiInputTextFlags_EnterReturnsTrue))
+ {
+ debugger.set_breakpoint_ignore_count(breakpoint.id,
+ static_cast<uint32_t>(std::max(ignore_count, 0)));
+ }
+
ImGui::TableNextColumn();
ImGui::Text("%u", breakpoint.hit_count);