L5: dock-panel button refinements — overflow menu, tooltips, opposite-mode tag buttons

Top-bar rare-capture variants move to a right-anchored More popup; short faces gain
hover-delay full-name tooltips (prefix stripped); bottom bar becomes four opposite-mode
Item/Track tag buttons + Show Both (Toggle/Activates dropped); wider cluster gaps. New
pure overflow_menu/mode_enable/tooltip modules, CTest-covered. Same actions, same contract.
This commit is contained in:
2026-07-26 23:56:49 -04:00
parent 0c7b871d8d
commit 7cd0771e45
11 changed files with 1025 additions and 53 deletions
+52 -1
View File
@@ -385,6 +385,42 @@ add_library(footer_bar STATIC src/footer_bar.cpp)
target_include_directories(footer_bar PUBLIC src)
target_link_libraries(footer_bar PUBLIC prune_button)
# ---------------------------------------------------------------------------
# 2q) Pure overflow_menu layout — NO REAPER, NO SWELL, NO LICE. The Phase L (L5,
# refinement 1) top-toolbar "⋯" More-button geometry: band rect -> right-anchored
# menu-button rect (suppressed when the band is too narrow) + the horizontal reserve
# the action_bar must leave for it, and point -> in/out hit-test. Split out so the
# button placement + reserve math is unit-tested outside the DAW; the bank_panel
# L1-kit draw + TrackPopupMenu popup + NamedCommandLookup/Main_OnCommand dispatch are
# DAW-verified. Mirror of prune_button / mode_switch.
# ---------------------------------------------------------------------------
add_library(overflow_menu STATIC src/overflow_menu.cpp)
target_include_directories(overflow_menu PUBLIC src)
# ---------------------------------------------------------------------------
# 2r) Pure mode_enable predicate — NO REAPER, NO SWELL, NO LICE. The Phase L (L5,
# refinement 3) opposite-mode tag-button enablement: (active mode id, button target
# mode) -> live/disabled, so only the buttons for the OPPOSITE of the active mode are
# clickable. Split out so both active modes are covered by CTest (not only whichever a
# DAW pass sat in); the bank_panel reads the active mode from view().activeModeId() and
# draws disabled buttons in the kit Disabled state. Depends on view_mode_model for the
# seed mode-id constants (kArrangeModeId / kDesignModeId — ONE home for the ids).
# ---------------------------------------------------------------------------
add_library(mode_enable STATIC src/mode_enable.cpp)
target_include_directories(mode_enable PUBLIC src)
target_link_libraries(mode_enable PUBLIC view_mode_model)
# ---------------------------------------------------------------------------
# 2s) Pure tooltip layout — NO REAPER, NO SWELL, NO LICE. The Phase L (L5, refinement 2)
# custom hover-delay tooltip's placement geometry (anchor rect + text extent + client
# bounds -> tooltip box, preferring below, flipping above near the bottom edge, clamped
# to the client) + the action DISPLAY-PREFIX strip helper. Split out so placement + the
# prefix strip are unit-tested outside the DAW; the bank_panel hover timer + LICE overlay
# draw are DAW-verified. Mirror of prune_button / component_geometry.
# ---------------------------------------------------------------------------
add_library(tooltip STATIC src/tooltip.cpp)
target_include_directories(tooltip PUBLIC src)
# ---------------------------------------------------------------------------
# 3) Standalone tests for the pure modules (run without launching REAPER).
# ---------------------------------------------------------------------------
@@ -503,6 +539,18 @@ add_executable(footer_bar_tests tests/test_footer_bar.cpp)
target_link_libraries(footer_bar_tests PRIVATE footer_bar)
add_test(NAME footer_bar_tests COMMAND footer_bar_tests)
add_executable(overflow_menu_tests tests/test_overflow_menu.cpp)
target_link_libraries(overflow_menu_tests PRIVATE overflow_menu)
add_test(NAME overflow_menu_tests COMMAND overflow_menu_tests)
add_executable(mode_enable_tests tests/test_mode_enable.cpp)
target_link_libraries(mode_enable_tests PRIVATE mode_enable)
add_test(NAME mode_enable_tests COMMAND mode_enable_tests)
add_executable(tooltip_tests tests/test_tooltip.cpp)
target_link_libraries(tooltip_tests PRIVATE tooltip)
add_test(NAME tooltip_tests COMMAND tooltip_tests)
# ---------------------------------------------------------------------------
# 4) The REAPER extension — a loadable module (dlopen'd by REAPER, not linked).
# ---------------------------------------------------------------------------
@@ -548,8 +596,11 @@ add_library(reaper_reasampler MODULE
src/drag_out_win.cpp
src/action_bar.cpp
src/footer_bar.cpp
src/overflow_menu.cpp
src/mode_enable.cpp
src/tooltip.cpp
)
target_link_libraries(reaper_reasampler PRIVATE bank_model capture_paths peaks bank_grid mode_switch tab_strip view_mode_model insert_plan render_settings batch_capture tail_control realtime_record bank_book wav_trim owned_manifest prune_reconcile prune_button app_version provenance action_buttons drag_out theme component_geometry action_bar footer_bar)
target_link_libraries(reaper_reasampler PRIVATE bank_model capture_paths peaks bank_grid mode_switch tab_strip view_mode_model insert_plan render_settings batch_capture tail_control realtime_record bank_book wav_trim owned_manifest prune_reconcile prune_button app_version provenance action_buttons drag_out theme component_geometry action_bar footer_bar overflow_menu mode_enable tooltip)
target_include_directories(reaper_reasampler PRIVATE ${SDK_INC} ${WDL_INC})
# OUTPUT_NAME is channel-derived (Phase V, V4): "reaper_reasampler" (stable, default) or
# "reaper_reasampler_beta" (beta). REAPER dlopen's any reaper_* module, so both channels'