diff --git a/src/gui_2.py b/src/gui_2.py index 4855f5b3..274ea0b7 100644 --- a/src/gui_2.py +++ b/src/gui_2.py @@ -3826,8 +3826,8 @@ def render_discussion_entry_controls(app: App) -> None: imgui.same_line() if imgui.button("Compress"): app.controller._handle_compress_discussion() _, app.ui_auto_add_history = imgui.checkbox("Auto-add message & response to history", app.ui_auto_add_history) - imgui.text("Keep Pairs:"); imgui.same_line(); imgui.set_next_item_width(80) - ch, app.ui_disc_truncate_pairs = imgui.input_int("##trunc_pairs", app.ui_disc_truncate_pairs, 1) + imgui.text("Keep Pairs:"); imgui.same_line(); imgui.set_next_item_width(140) + ch, app.ui_disc_truncate_pairs = imgui.drag_int("##trunc_pairs", app.ui_disc_truncate_pairs, 1, 1, 999) if app.ui_disc_truncate_pairs < 1: app.ui_disc_truncate_pairs = 1 imgui.same_line() if imgui.button("Truncate"): diff --git a/tests/test_discussion_takes_gui.py b/tests/test_discussion_takes_gui.py index 07565a75..85c8b4ed 100644 --- a/tests/test_discussion_takes_gui.py +++ b/tests/test_discussion_takes_gui.py @@ -46,6 +46,7 @@ def test_render_discussion_tabs(app_instance): mock_imgui.begin_combo.return_value = False mock_imgui.input_text.return_value = (False, "") mock_imgui.input_int.return_value = (False, 0) + mock_imgui.drag_int.return_value = (False, 0) mock_imgui.input_text_multiline.return_value = (False, "") mock_imgui.button.return_value = False mock_imgui.checkbox.return_value = (False, False) @@ -78,6 +79,7 @@ def test_switching_discussion_via_tabs(app_instance): mock_imgui.begin_combo.return_value = False mock_imgui.input_text.return_value = (False, "") mock_imgui.input_int.return_value = (False, 0) + mock_imgui.drag_int.return_value = (False, 0) mock_imgui.input_text_multiline.return_value = (False, "") mock_imgui.button.return_value = False mock_imgui.checkbox.return_value = (False, False) diff --git a/tests/test_discussion_truncate_layout.py b/tests/test_discussion_truncate_layout.py new file mode 100644 index 00000000..223b55e6 --- /dev/null +++ b/tests/test_discussion_truncate_layout.py @@ -0,0 +1,18 @@ +import inspect +from src import gui_2 + +def test_keep_pairs_input_uses_adequate_width(): + src = inspect.getsource(gui_2) + marker = "Keep Pairs:" + idx = src.find(marker) + assert idx != -1, "Could not find Keep Pairs label in gui_2.py" + snippet = src[idx:idx + 200] + assert "set_next_item_width(80)" not in snippet, ( + "Keep Pairs input width is still 80px; digit values get clipped." + ) + assert "set_next_item_width(140)" in snippet, ( + "Keep Pairs input should use width 140 for 2-3 digit values." + ) + assert "drag_int" in snippet, ( + "Keep Pairs input should use drag_int for inline +/- controls." + ) diff --git a/tests/test_gui_discussion_tabs.py b/tests/test_gui_discussion_tabs.py index 66046a4c..26fb90a7 100644 --- a/tests/test_gui_discussion_tabs.py +++ b/tests/test_gui_discussion_tabs.py @@ -47,6 +47,7 @@ def test_discussion_tabs_rendered(mock_gui): mock_imgui.input_text_multiline.return_value = (False, "") mock_imgui.checkbox.return_value = (False, False) mock_imgui.input_int.return_value = (False, 0) + mock_imgui.drag_int.return_value = (False, 0) mock_clipper = MagicMock() mock_clipper.step.return_value = False diff --git a/tests/test_gui_fast_render.py b/tests/test_gui_fast_render.py index 1adc32b6..b94f8171 100644 --- a/tests/test_gui_fast_render.py +++ b/tests/test_gui_fast_render.py @@ -14,6 +14,7 @@ def test_render_context_composition_panel_fast(app_instance: App): mock_imgui.input_text.return_value = (True, "") mock_imgui.input_text_multiline.return_value = (True, "") mock_imgui.input_int.return_value = (True, 0) + mock_imgui.drag_int.return_value = (True, 0) mock_imgui.button.return_value = False mock_imgui.ListClipper.return_value.step.return_value = False mock_imscope.tab_item.return_value.__enter__.return_value = (True, True) @@ -34,6 +35,7 @@ def test_render_discussion_panel_fast(app_instance: App): mock_imgui.input_text.return_value = (True, "") mock_imgui.input_text_multiline.return_value = (True, "") mock_imgui.input_int.return_value = (True, 0) + mock_imgui.drag_int.return_value = (True, 0) mock_imgui.button.return_value = False mock_imgui.ListClipper.return_value.step.return_value = False mock_imscope.tab_item.return_value.__enter__.return_value = (True, True) @@ -59,6 +61,7 @@ def test_render_files_and_media_fast(app_instance: App): mock_imgui.input_text.return_value = (True, "") mock_imgui.input_text_multiline.return_value = (True, "") mock_imgui.input_int.return_value = (True, 0) + mock_imgui.drag_int.return_value = (True, 0) mock_imgui.button.return_value = False mock_imgui.ListClipper.return_value.step.return_value = False mock_imscope.tab_item.return_value.__enter__.return_value = (True, True) diff --git a/tests/test_gui_phase4.py b/tests/test_gui_phase4.py index 99020bf0..6e313d09 100644 --- a/tests/test_gui_phase4.py +++ b/tests/test_gui_phase4.py @@ -106,6 +106,7 @@ def test_track_discussion_toggle(mock_app: App): mock_imgui.input_text.side_effect = lambda label, value, *args, **kwargs: (False, value) mock_imgui.input_text_multiline.side_effect = lambda label, value, *args, **kwargs: (False, value) mock_imgui.input_int.side_effect = lambda label, value, *args, **kwargs: (False, value) + mock_imgui.drag_int.side_effect = lambda label, value, *args, **kwargs: (False, value) mock_imgui.begin_child.return_value = True mock_imgui.get_window_height.return_value = 800.0 mock_imgui.get_io.return_value.mouse_delta.y = 0.0 diff --git a/tests/test_gui_symbol_navigation.py b/tests/test_gui_symbol_navigation.py index 495c0046..ceca7af6 100644 --- a/tests/test_gui_symbol_navigation.py +++ b/tests/test_gui_symbol_navigation.py @@ -55,6 +55,7 @@ def test_render_discussion_panel_symbol_lookup(mock_app, role): mock_imgui.input_text.side_effect = lambda label, value, *args, **kwargs: (False, value) mock_imgui.input_text_multiline.side_effect = lambda label, value, *args, **kwargs: (False, value) mock_imgui.input_int.side_effect = lambda label, value, *args, **kwargs: (False, value) + mock_imgui.drag_int.side_effect = lambda label, value, *args, **kwargs: (False, value) mock_imgui.get_cursor_start_pos.return_value = mock_imgui.ImVec2(0,0) # Mock button click for the [Source] button