Commit Graph
100 Commits
Author SHA1 Message Date
ocornut 529c73ba21 MultiSelect: Shift+Tab doesn't enable Shift select on landing item. 2024-07-18 18:19:21 +02:00
ocornut a8a1f29512 MultiSelect: (breaking) renamed ImGuiMultiSelectFlags_BoxSelect -> ImGuiMultiSelectFlags_BoxSelect2d. Which include not assuming one flag imply the other.
Amend 2024/05/31 commit.
2024-07-18 18:19:21 +02:00
ocornut c52346850d MultiSelect: ImGuiSelectionBasicStorage: added PreserveOrder, maintain implicit order data in storage.
Little tested but provided for completeness.
2024-07-18 18:19:21 +02:00
ocornut df664329cb MultiSelect: provide RangeDirection to allow selection handler to handler backward shift+click. 2024-07-18 18:19:21 +02:00
ocornut 3ac367ff41 MultiSelect: ImGuiSelectionBasicStorage: (breaking) rework GetNextSelectedItem() api to avoid ambiguity/failure when user uses a zero id. 2024-07-18 18:19:21 +02:00
ocornut f472f17054 Demo: Assets Browser: added a way to disable sorting and hide sorting options.
This is mostly designed to showcase that on very large sets (e.g. 1 million) most of the time is likely spent on sorting.
2024-07-18 18:19:21 +02:00
ocornut c07864f64a MultiSelect: ImGuiSelectionBasicStorage: move function bodies to cpp file.
+ make ImGuiStorage::BuildSortByKey() less affected by msvc debug mode.
2024-07-18 18:19:21 +02:00
ocornut 2af3b2ac81 MultiSelect: ImGuiSelectionBasicStorage: simplify by removing compacting code (compacting may be opt-in?).
GetNextSelectedItem() wrapper gives us more flexibility to work on this kind of stuff now.
2024-07-18 18:19:21 +02:00
ocornut e61612a687 MultiSelect: ImGuiSelectionBasicStorage: rework to accept massive selections requests without flinching.
Batch modification + storage only keeps selected items.
2024-07-18 18:19:21 +02:00
ocornut e1fd25051e MultiSelect: ImGuiSelectionBasicStorage: added GetNextSelectedItem() to abstract selection storage from user. Amend Assets Browser demo to handle drag and drop correctly. 2024-07-18 18:19:21 +02:00
ocornut c3d7aa252b MultiSelect: comments, header tweaks., simplication (some of it on wiki). 2024-07-18 18:19:21 +02:00
ocornut db4898cb91 MultiSelect: added ImGuiSelectionExternalStorage helper. Simplify bool demo. 2024-07-18 18:19:20 +02:00
ocornut f9caf4447a MultiSelect: fixed ImGuiSelectionBasicStorage::Swap() helper. 2024-07-18 18:19:20 +02:00
ocornut c94cf6f01f MultiSelect: added ImGuiSelectionBasicStorage::GetStorageIdFromIndex() indirection to be easier on the reader.
Tempting to make it a virtual.
2024-07-18 18:19:20 +02:00
ocornut ab995d3d4f MultiSelect: (breaking) Added 'items_count' parameter to BeginMultiSelect(). Will enable extra features, and remove equivalent param from ImGuiSelectionBasicStorage::ApplyRequests(. 2024-07-18 18:19:20 +02:00
ocornut 443b034895 MultiSelect: mark parent child window as navigable into, with highlight. Assume user will always submit interactive items. 2024-07-18 18:19:20 +02:00
ocornut f6b5caf82c MultiSelect: (breaking) renamed ImGuiMultiSelectFlags_BoxSelect -> ImGuiMultiSelectFlags_BoxSelect1d, ImGuiMultiSelectFlags_BoxSelect2d -> ImGuiMultiSelectFlags_BoxSelect.
ImGuiMultiSelectFlags_BoxSelect1d being an optimization it is the optional flag.
2024-07-18 18:19:20 +02:00
ocornut 7bbbbea200 MultiSelect: Box-Select: fixes for checkboxes support. Comments. 2024-07-18 18:19:20 +02:00
ocornut 2f56df4839 MultiSelect: (breaking) renamed ImGuiSelectionBasicStorage::AdapterData to UserData. 2024-07-18 18:19:20 +02:00
ocornut 1113f13f83 MultiSelect: Box-Select: fixed "when dragging from void" implementation messing with calling BeginMultiSelect() without a selection size. 2024-07-18 18:19:20 +02:00
ocornut 81548cb6bf MultiSelect: added GetMultiSelectState() + store LastSelectionSize as provided by user, convenient for quick debugging and testing. 2024-07-18 18:19:20 +02:00
ocornut dc0a1682e3 MultiSelect: Box-Select: when dragging from void, first hit item sets NavId by simulating a press, so navigation can resume from that spot. 2024-07-18 18:19:20 +02:00
ocornut 65ebc0513b MultiSelect: Box-Select: minor refactor, tidying up. 2024-07-18 18:19:20 +02:00
ocornut 9435a3185a RangeSelect/MultiSelect: (Breaking) Added current_selection_size to BeginMultiSelect().
Required for shortcut routing so we can e.g. have Escape be used to clear selection THEN to exit child window.
2024-07-18 18:19:19 +02:00
ocornut 955210ae5b MultiSelect: Demo: use Shortcut().
Got rid of suggestion to move Delete signal processing to BeginMultiSelect(), seems unnecessary.
2024-07-18 18:19:19 +02:00
ocornut 0be238ec58 MultiSelect: Box-Select: fix preventing focus. amend determination of scope_hovered for decorated/non-child windows + avoid stealing NavId. (#7424) 2024-07-18 18:19:19 +02:00
ocornut e7a734f78d MultiSelect: added ImGuiMultiSelectFlags_NoAutoSelect, ImGuiMultiSelectFlags_NoAutoClear features + added Checkbox Demo
Refer to "widgets_multiselect_checkboxes" in imgui_test_suite.
2024-07-18 18:19:19 +02:00
ocornut a639346fba MultiSelect: Demo: make various child windows resizable, with synched heights for the dual list box demo. 2024-07-18 18:19:19 +02:00
ocornut 2111e3597b MultiSelect: Comments + tweaked location for widgets to test ImGuiItemFlags_IsMultiSelect to avoid misleading into thinking doing it before ItemAdd() is necessary. 2024-07-18 18:19:19 +02:00
ocornut dbc67bbf23 MultiSelect: Simplified ImGuiSelectionBasicStorage by using a single SetItemSelected() entry point. 2024-07-18 18:19:19 +02:00
ocornut f36a03c317 MultiSelect: (Breaking) merge ImGuiSelectionRequestType_Clear and ImGuiSelectionRequestType_SelectAll into ImGuiSelectionRequestType_SetAll., rename ImGuiSelectionRequest::RangeSelected to Selected.
The reasoning is that it makes it easier/faster to write an adhoc ImGuiMultiSelectIO handler (e.g. trying to apply multi-select to checkboxes)
2024-07-18 18:19:19 +02:00
ocornut b13a78e6b2 MultiSelect: Fixed ImGuiMultiSelectFlags_SelectOnClickRelease over tree node arrow. 2024-07-18 18:19:19 +02:00
ocornut 9337151a01 MultiSelect: Box-Select: Fixed initial drag from not claiming hovered id, preventing window behind to move for a frame. 2024-07-18 18:19:19 +02:00
ocornut 3141d87ef8 MultiSelect: Box-Select: Fixed CTRL+drag from void clearing items. 2024-07-18 18:19:18 +02:00
ocornut 8312c75fef MultiSelect: Added ImGuiMultiSelectFlags_NoRangeSelect. Fixed ImGuiMultiSelectFlags_ScopeRect not querying proper window hover. 2024-07-18 18:19:18 +02:00
ocornut d439f590ab MultiSelect: Comments + Assets Browser : Tweak colors. 2024-07-18 18:19:18 +02:00
ocornut 6c4bf8e56e MultiSelect: Fixed ImGuiSelectionBasicStorage::ApplyRequests() incorrectly maintaining selection size on SelectAll. 2024-07-18 18:19:18 +02:00
ocornut f3d77d8e71 MultiSelect: Box-Select: Further refactor to extra mode code away from multi-select function into box-select funcitons. 2024-07-18 18:19:18 +02:00
ocornut 907268a430 MultiSelect: Box-Select: Fixed scrolling on high framerates. 2024-07-18 18:19:18 +02:00
ocornut 5d9de14493 MultiSelect: Box-Select: Refactor: Renames.
Split into two commits to facilite looking into previous one if needed.
2024-07-18 18:19:18 +02:00
ocornut 75bac1aac6 MultiSelect: Box-Select: Refactor into its own structure, designed for single-instance but closer to being reusable outside Multi-Select.
Kept same member names.
2024-07-18 18:19:18 +02:00
ocornut 15391762dd MultiSelect: Box-Select: Added ImGuiMultiSelectFlags_BoxSelect2d support. Enabled in Asset Browser. Selectable() supports it. 2024-07-18 18:19:18 +02:00
ocornut 1ac469b50f MultiSelect: Box-Select: Fixed holes when using with clipper (in 1D list.)
Clipper accounts for Selectable() layout oddity as BoxSelect is sensitive to it.
Also tweaked scroll triggering region inward.
Rename ImGuiMultiSelectFlags_NoBoxSelectScroll to ImGuiMultiSelectFlags_BoxSelectNoScroll.
Fixed use with ImGuiMultiSelectFlags_SinglaSelect.
2024-07-18 18:19:18 +02:00
ocornut 7546a2d345 MultiSelect: Demo: Assets Browser: track scrolling target so we can roughly land on hovered item.
It's impossible to do this perfectly without some form of locking on item because as the hovered item X position changes it's easy to drift.
2024-07-18 18:19:18 +02:00
ocornut 750e23998f MultiSelect: Demo: Assets Browser: added deletion support. Store ID in selection. Moved QueueDeletion to local var to emphasis that this is a user extension. 2024-07-18 18:19:18 +02:00
ocornut 51fe0bfcf6 MultiSelect: reworked comments in imgui.h now that we have our own section. 2024-07-18 18:19:17 +02:00
ocornut 0f633c1d99 MultiSelect: move demo's ExampleSelection to main api as a convenient ImGuiSelectionBasicStorage for basic users. 2024-07-18 18:19:17 +02:00
ocornut e0282347db MultiSelect: remove ImGuiSelectionRequest/ImGuiMultiSelectIO details from public api to reduce confusion + comments. 2024-07-18 18:19:17 +02:00
ocornut 0af6fbb51d MultiSelect: added support for nested/stacked BeginMultiSelect().
Mimicking table logic, reusing amortized buffers.
2024-07-18 18:19:17 +02:00
ocornut b747d6fe59 MultiSelect: Demo: rework and move selection adapter inside ExampleSelection. 2024-07-18 18:19:17 +02:00
ocornut aa4d64be92 MultiSelect: Box-Select: added scroll support. 2024-07-18 18:19:17 +02:00
ocornut f904a6646c MultiSelect: Box-Select: added support for ImGuiMultiSelectFlags_BoxSelect.
(v11)
FIXME: broken on clipping demo.
2024-07-18 18:19:17 +02:00
ocornut 90305c57e4 MultiSelect: (breaking) renamed ImGuiMultiSelectFlags_ClearOnClickWindowVoid -> ImGuiMultiSelectFlags_ClearOnClickVoid. Added ImGuiMultiSelectFlags_ScopeWindow, ImGuiMultiSelectFlags_ScopeRect. 2024-07-18 18:19:17 +02:00
ocornut bf01795483 Demo: Assets Browser: add hit spacing, requierd for box-select patterns. 2024-07-18 18:19:17 +02:00
ocornut 3d41994a63 MultiSelect: simplify clearing ImGuiMultiSelectTempData. 2024-07-18 18:19:17 +02:00
ocornut 33fc61a091 MultiSelect: use a single ImGuiMultiSelectIO buffer.
+ using local storage var in EndMultiSelect(), should be no-op.
2024-07-18 18:19:17 +02:00
ocornut 5941edd9f7 MultiSelect: added support for recovery in ErrorCheckEndWindowRecover(). 2024-07-18 18:19:17 +02:00
ocornut c527cba470 MultiSelect: we don't need to ever write to EndIO.RangeSrcItem as this is not meant to be used. 2024-07-18 18:19:16 +02:00
ocornut 6feff6ff05 MultiSelect: (Breaking) io contains a ImVector<ImGuiSelectionRequest> list. 2024-07-18 18:19:16 +02:00
ocornut a6adfb2b49 MultiSelect: added missing call on Shutdown(). Better reuse selection buffer. 2024-07-18 18:19:16 +02:00
ocornut c3998b70cc MultiSelect: clarified purpose and use of IsItemToggledSelection(). Added assert. Moved to multi-selection section of imgui.h. 2024-07-18 18:19:16 +02:00
ocornut 2765fdb43e MultiSelect: removed seemingly unnecessary block in BeginMultiSelect().
- EndIO.RangeSelected always set along with EndIO.RequestSetRange
- Trying to assert for the assignment making a difference when EndIO.RequestSetRange is already set couldn't find a case (tests passing).
2024-07-18 18:19:16 +02:00
ocornut 88df590145 Demo: Assets Browser: store items, sorting, type overlay. 2024-07-18 18:19:16 +02:00
ocornut d18e57e673 Demo: Assets Browser: Added assets browser demo. 2024-07-18 18:19:16 +02:00
ocornut 82de6c470b MultiSelect: Added ImGuiMultiSelectFlags_SelectOnClickRelease to allow dragging an unselected item without altering selection + update drag and drop demo. 2024-07-18 18:19:16 +02:00
ocornut 5628dda5a5 MultiSelect: move shared logic to MultiSelectItemHeader().
No logic change AFAIK but added an indent level in MultiSelectItemHeader(). Logic changes will come in next commit.
2024-07-18 18:19:16 +02:00
ocornut 9da4efed2a MultiSelect: moved RequestClear output so it'll match request list version better. Use Storage->RangeSrcItem in EndMultiSelect(). 2024-07-18 18:19:16 +02:00
ocornut a6f43dfadd MultiSelect: ImGuiMultiSelectIO's field are not used during loop anymore, stripping them out of comments. 2024-07-18 18:19:16 +02:00
ocornut dce02f5c4b Demo: Dual List Box: Added a dual list box (6648) 2024-07-18 18:19:16 +02:00
ocornut ba698df7bb MultiSelect: Demo: Deletion: Various renames to clarify. Use adapter and item list in both ApplyDeletion functions.
This also minify the patch for an alternative/wip attmept at redesgining pre/post deletion logic. But turns out current attempt may be easier to grasp.
2024-07-18 18:19:16 +02:00
ocornut e1d2109208 MultiSelect: Demo: Deletion: Rework ApplyDeletionPreLoop to use adapter + fix PostLoop not using right value of RequestFocusItem.
Recovery made it transparent visually but user side selection would be empty for a frame before recovery.
2024-07-18 18:19:16 +02:00
ocornut fa516c3d76 MultiSelect: Demo: Make ExampleSelection use ImGuiID. More self-explanatory. 2024-07-18 18:19:15 +02:00
ocornut 530155d85a MultiSelect: Demo: Remove UserDataToIndex from ExampleSelectionAdapter.
Seems to make a better demo this way.
2024-07-18 18:19:15 +02:00
ocornut 8c1f659b3d MultiSelect: Demo: rework ExampleSelection with an ExampleSelectionAdapter layer, allowing to share more code accross examples using different storage systems.
Not ideal way to showcase this demo but this is really more flexible.
2024-07-18 18:19:15 +02:00
ocornut 8fe6b31952 MultiSelect: (Breaking) Removed RangeSrcPassedBy in favor of favoring user to call IncludeByIndex(RangeSrcItem) which is easier/simpler to honor.
Especially as recent changes made it required to also update RangeSrcPassedBy after last clipper Step.
Should now be simpler.
2024-07-18 18:19:15 +02:00
ocornut 6ddc5f38af MultiSelect: Demo: added simpler demo using Clipper. Clarify RangeSrcPassedBy doc. 2024-07-18 18:19:15 +02:00
ocornut c3753809b1 MultiSelect: Demo: rework ExampleSelection names to map better to typical user code + variety of Comments tweaks. 2024-07-18 18:19:15 +02:00
ocornut ff95fdb668 MultiSelect: (Breaking) RequestSetRange's parameter are RangeFirstItem...RangeLastItem (which was always ordered unlike RangeSrcItem...RangeDstItme). Removed RangeDstItem. Removed RangeDirection. 2024-07-18 18:19:15 +02:00
ocornut af83a3eea4 MultiSelect: clear selection when leaving a scope with a nav directional request.
May need to clarify how to depends on actions being performed (e.g. click doesn't).
May become optional?
2024-07-18 18:19:15 +02:00
ocornut 6821401a3f MultiSelect: Tweak debug log to print decimal+hex values for item data.
Struggled to get standard PRIX64 to work on CI.
2024-07-18 18:19:15 +02:00
ocornut c9eb3714e8 MultiSelect: move HasSelectionData to ImGuiItemFlags to facilitate copying around in standardized fieds.
Required/motivated to simplify support for ImGuiTreeNodeFlags_NavLeftJumpsBackHere (bc3c0ce) in this branch.
2024-07-18 18:19:15 +02:00
ocornut e82b49d2d4 MultiSelect: (Breaking) Use ImGuiSelectionUserData (= ImS64) instead of void* for selection user data.
Less confusing for most users, less casting.
2024-07-18 18:19:15 +02:00
ocornut 140a2f0565 MultiSelect: Comments, tweaks.
+ Alignment to reduce noise on next commit.
2024-07-18 18:19:15 +02:00
ocornut 847b1dde8c MultiSelect: (Breaking) Fix + Rename ImGuiMultiSelectFlags_NoMultiSelect to ImGuiMultiSelectFlags_SingleSelect as it seems easier to grasp.
Feature was broken by "Tidying up..." June 30 commit.
2024-07-18 18:19:15 +02:00
ocornut 0cf376348b MultiSelect: Cleanup unused comments/code. 2024-07-18 18:19:14 +02:00
ocornut ab9326f4ae MultiSelect: Fixed right-click handling in MultiSelectItemFooter() when not focused. 2024-07-18 18:19:14 +02:00
ocornut e3616e151f MultiSelect: Demo: Delete items from menu. 2024-07-18 18:19:14 +02:00
ocornut c0035705ca MultiSelect: Further simplication of user code to support Deletion.
Provide standard RequestFocusItem storage.
2024-07-18 18:19:14 +02:00
ocornut df1eeb9a20 MultiSelect: Maintain NavIdSelected for user. Simplify deletion demo. 2024-07-18 18:19:14 +02:00
ocornut 9223ffc255 MultiSelect: (Breaking) BeginMultiSelect() doesn't need two last params maintained by users. Moving some storage from user to core. Proper deletion demo. 2024-07-18 18:19:14 +02:00
ocornut 564dde0ee3 MultiSelect: Demo: first-draft of user-side deletion idioms.
(will need support from lib)
2024-07-18 18:19:14 +02:00
ocornut 387fc13894 MultiSelect: Clarify and better enforce lifetime of BeginMultiSelect() value. 2024-07-18 18:19:14 +02:00
ocornut 961b81c362 MultiSelect: Tidying up/simpllifying MultiSelectItemFooter().
Intended to be entirely a no-op, merely a transform of source code for simplification. But committing separatey from behavior change in previous change.
2024-07-18 18:19:14 +02:00
ocornut 1ea9ca748c MultiSelect: Remove the need for using IsItemToggledSelection(). Update comments.
This is the simple version that past our tests. MultiSelectItemFooter() is in need of a cleanup.
2024-07-18 18:19:14 +02:00
ocornut 6ef70a97fd MultiSelect: Remove ImGuiMultiSelectFlags_NoUnselect because I currently can't find use for this specific design.
And/or it seem partly broken.
2024-07-18 18:19:14 +02:00
ocornut ccf43d6a96 MultiSelect: (Breaking) Renamed 'RangeValue' -> 'RangeSelected' + amend comments. 2024-07-18 18:19:14 +02:00
ocornut a83326bc52 MultiSelect: (Breaking) Renamed 'RangeSrc -> 'RangeSrcItem', "RangeDst' -> 'RangeDstItem'
This is necessary to have consistent names in upcoming fields (NavIdItem etc.)
2024-07-18 18:19:13 +02:00
ocornut a39f9e7661 MultiSelect: Internals rename of IO fields to avoid ambiguity with io/rw concepts + memset constructors, tweaks.
debug
2024-07-18 18:19:13 +02:00
ocornut c61ada200f MultiSelect: Demo tweak. Removed multi-scope from Advanced (too messy), made it a seperate mini-demo. 2024-07-18 18:19:13 +02:00
ocornut 35b5ebc9b5 MultiSelect: (Breaking) Rename ImGuiMultiSelectData to ImGuiMultiSelectIO. 2024-07-18 18:19:13 +02:00