645 Commits

Author SHA1 Message Date
Cameron Cawley 8a01c2a0b0 GUI: Use Common::SharedPtr for reusing surfaces 2026-04-14 18:46:14 +03:00
Lothar Serra Mari bbe40c58c5 BASE: GUI: Show version build date/time only on non-release builds
Historically, we should the version build date wherever we display
the current ScummVM version.

However, this leads to issues with toolchains that care about reproducible
builds and thus set "fake" timestamps, e.g.

https://github.com/flathub/org.scummvm.ScummVM/pull/60#issuecomment-4150167445

Since we can derive the approximate release date based on our
new versioning scheme, it makes sense to hide the build date
from release builds and only use it for development builds
to keep track of "old" and "new" builds.
2026-04-12 14:38:56 +02:00
Antonio 84e4dd0cdf GUI: Preserve multi-selection when changing grouping 2026-04-07 13:52:03 +02:00
Cameron Cawley d98f910947 GUI: Provide default title and button label for SaveLoadChooser 2026-04-06 23:30:42 +03:00
Antonio aa493898ad GUI: Fix cursor jump in GroupedList after game removal 2026-03-31 14:56:51 +02:00
sluicebox 98242e4f2f GUI: Use MessageDialog when removing a single game 2026-03-25 11:34:45 +02:00
sluicebox 34e2f9ac39 GUI: Use standard hotkeys in RemovalConfirmationDialog 2026-03-25 11:34:45 +02:00
Le Philousophe 48f72f1d32 GUI: Disable Load Game button in Grid launcher
Fix #16614.
2026-03-22 18:41:10 +01:00
phyulwin e86fe749d7 GUI: Enable advanced search in Grid view
The Launcher search box supports rich syntax as documented
(e.g. engine:, platform:, lang=). This works correctly in
List view but was not working in Grid (Icons) view.

In Grid view, advanced expressions were ignored because
the filter logic was not hooked into GridWidget.

Connect GridWidget to the existing Launcher filter matcher so
Grid view uses the same search implementation as List view.
2026-02-25 10:11:04 +01:00
Mohit Bankar ebb1d87858 GUI: Implement scrollable game removal confirmation dialog
Add RemovalConfirmationDialog with scrollable game list display.
2026-02-11 22:16:04 +01:00
Eugene Sandulenko 7cb7a322c1 GUI: Added Help button to Launcher, GMM and the Browser dialog
It leads to the Markdown help. In the launcher we show button
only on highres, non-classic themes, due to absence of vertical space

Also bump the theme version.
2026-02-08 15:56:42 +01:00
Mohit Bankar 5858c62da4 GUI: Unify game removal confirmation dialog implementation
Move confirmRemoveGames() to LauncherDialog base class to eliminate code
duplication between list and grid views. Populate _domainTitles for both
views to ensure proper game titles are displayed in removal dialogs.
2026-01-31 12:46:29 +03:00
Mohit Bankar 8e99bd35c0 GUI: Improve translation compatibility in game removal dialog
Replace dynamic plural formatting with static (s) notation to simplify
translation. Minor indentation fix.
2026-01-31 12:46:29 +03:00
Mohit Bankar 2c23b8bb37 GUI: Add hasAnySelection() to consolidate selection checking
Replaces repetitive loops checking for any selected item with a single
helper method, reducing code duplication and improving maintainability.
2026-01-31 12:46:29 +03:00
Mohit Bankar 2b41731836 GUI: Unify selection access with virtual getSelectedItems() method
Adds virtual method to LauncherDialog that returns selected items from
the appropriate widget, allowing code to work with selections polymorphically.
2026-01-31 12:46:29 +03:00
Mohit Bankar bd1b8bb2c9 GUI: Simplify method name - LauncherDialog::performGameRemoval to removeGames
Renames method for better clarity and consistency with the codebase's
naming conventions.
2026-01-31 12:46:29 +03:00
Mohit Bankar c5475e5bd0 GUI: Simplify variable naming - selectedItemsBool to selectedItems
Removes redundant type suffix from bool array variable names throughout
LauncherSimple methods, improving code clarity and consistency.
2026-01-31 12:46:29 +03:00
Mohit Bankar 375449cb59 GUI: Separate LauncherGrid::updateSelectionAfterRemoval() implementation
Moves the inline method implementation from the class declaration to a
separate method body, improving code organization and consistency with
other launcher methods.
2026-01-31 12:46:29 +03:00
Mohit Bankar 31d9733482 GUI: Refactor game removal to use common virtual method
Replace removeListGames() and removeGridGames() with a single virtual
confirmRemoveGames() method in LauncherDialog. Move selection validation
logic and selection array retrieval into each subclass implementation,
eliminating duplicate checking code in command handlers. Simplify
LauncherSimple and LauncherGrid removal logic while maintaining the
same functionality.
2026-01-31 12:46:29 +03:00
Mohit Bankar 2fbfc34b51 GUI: Simplify selection restoration after game removal
Add getVisualPos() method to ListWidget to convert real data indices to
visual indices in filtered/grouped lists. Simplify selection restoration
in both LauncherSimple and LauncherGrid using MIN() to handle out-of-bounds
cases cleanly. Move _lastSelectionStartItem to public for direct access.
2026-01-31 12:46:29 +03:00
Mohit Bankar 171568aec0 GUI: Improve comments for game removal 2026-01-31 12:46:29 +03:00
Mohit Bankar 6f7909f557 GUI: Use more appropriate condition for multi-selection detection
Change selection count check from selectedCount == 2 to selectedCount > 1
to better reflect the intent of detecting multi-selection.
2026-01-31 12:46:29 +03:00
Mohit Bankar 3037fd364b GUI: Add comments explaining button enable logic in list view
Add comments explaining selection requirements for Start, Edit, Remove,
and Load buttons.
2026-01-31 12:46:29 +03:00
Mohit Bankar 212ce75f98 GUI: Show game count and limit removal confirmation list to 10 items
Add counter to removal confirmation dialog displaying total number of
games to be removed. Display maximum 10 game names with ellipsis if
more games are selected, improving UX for bulk removals.
2026-01-31 12:46:29 +03:00
Mohit Bankar 8400ccd03d GUI: Improve comments in game removal validation
Co-Authored-By: Eugene Sandulenko <sev@scummvm.org>
2026-01-31 12:46:29 +03:00
Mohit Bankar 9fe0037314 GUI: Fix button enable logic in launcher list view
Optimize selection counting with early exit, and fix Remove/Load button
state by using explicit hasSelection flag instead of relying on stale
_selectedItem. This ensures buttons properly disable when all items are
deselected.
2026-01-31 12:46:29 +03:00
Mohit Bankar 21bbca9c5b GUI: Refactor selection methods in list and grid widgets
Replace duplicate addSelectedItem() and removeSelectedItem() methods with
a single markSelectedItem(int item, bool state) method in both ListWidget
and GridWidget. Update all callers across list.cpp, grid.cpp, groupedlist.cpp,
and launcher.cpp to use the new unified method.
2026-01-31 12:46:29 +03:00
Mohit Bankar 3bf41f2e66 GUI: Implement bool array selection for ListWidget and GridWidget
- Replace int array _selectedEntries with bool array _selectedItems in GridWidget
- Rename getSelectedItemsBool() to getSelectedItems() in ListWidget
- Update performGameRemoval() to accept bool array parameter
- Simplify selection logic and improve deletion efficiency
2026-01-31 12:46:29 +03:00
Mohit Bankar 5b0896697c GUI: Unify game removal logic in launcher views
Consolidate single and multi-removal logic to use multi-removal functions
in both LauncherSimple and LauncherGrid. Remove unnecessary branching and
add validation to ensure at least one item is selected before removal.
2026-01-31 12:46:29 +03:00
Mohit Bankar 473bf9b28f GUI: Optimize multi-selection in ListWidget
Switch ListWidget multi-selection tracking from Common::Array<int> to Common::Array<bool> for add, remove, and lookup operations.
Update all selection-related methods and launcher integration
2026-01-31 12:46:29 +03:00
Mohit Bankar ac0927e463 GUI: Fix grid alphabetic grouping to use user description
Previously, grid view grouped games by internal title, causing mismatches with list view. Now, both views use the user-defined game description for alphabetical grouping, ensuring consistent group headers. Other grouping modes are unchanged.
2026-01-31 12:46:29 +03:00
Mohit Bankar adc0b6beed GUI: Refactor removal logic, fix list shift-click anchor
Refactor game removal logic to reduce duplication between grid and list views.
Fix an issue in ListWidget where shift-click multi-selection updated the anchor
before selecting the range. The anchor is now updated after the range selection,
ensuring multi-selection works as expected.
2026-01-31 12:46:29 +03:00
Eugene Sandulenko df22ad0803 Revert "GUI: Add missing filter matcher to grid widget"
This reverts commit 5871726e9a.
2026-01-07 18:18:23 +01:00
jaskaran-singh-77 5871726e9a GUI: Add missing filter matcher to grid widget 2026-01-07 17:58:01 +03:00
Eugene Sandulenko 5488c9eb7d GUI: Fix complication with grid launcher disabled 2026-01-06 23:34:23 +01:00
Mohit Bankar fe2b8890fb GUI: Confirm multi-selection game removal
When Delete key is pressed in the list view and multiple items are selected, call removeMultipleGames(selectedItems) to show the multi-selection confirmation dialog. Single-item behavior is unchanged.
2026-01-07 01:01:47 +03:00
Mohit Bankar 06fc2359be GUI: Unify game and add-on removal logic
Move duplicated removal logic into a new LauncherDialog::removeGamesWithAddons() helper and call it from LauncherSimple::removeMultipleGames() and LauncherGrid::removeSelectedGames(). The helper removes a game domain, its add-ons, and flushes configuration to disk. Reduces duplication and ensures consistent behavior across launcher views.
2026-01-07 01:01:47 +03:00
Mohit Bankar 8e46e1d4d8 GUI: Clarify remove confirmation message
Change the confirmation prompt shown when removing multiple game configurations in List view. Previous wording: "Are you sure you want to remove the following games?" Now: "Do you really want to remove the following game configurations?"

Co-authored-by: Eugene Sandulenko <sev@scummvm.org>
2026-01-07 01:01:47 +03:00
Mohit Bankar d32433346e GUI: Limit multi-selection to launcher dialog only
- Added _multiSelectEnabled flag to ListWidget and GridWidget (default: false)

- Added setMultiSelectEnabled() and isMultiSelectEnabled() methods

- Gated Ctrl+Click and Shift+Click logic behind _multiSelectEnabled check

- GroupedListWidget inherits this behavior from ListWidget
2026-01-07 01:01:47 +03:00
Mohit Bankar 9c53832087 GUI: Add multi-selection and range select to launcher grid
Implement multi-selection in the launcher grid:
• Ctrl + Click toggles selection of individual entries
• Shift + Click selects a contiguous range from the last to the current selection
• Selected entries are consistently stored in sorted order
• Removal confirmation dialog now shows user-friendly game names
• Improved modifier key handling for reliable Ctrl and Shift detection
2026-01-07 01:01:47 +03:00
Mohit Bankar cbf8a88b31 GUI: Add multi-selection, batch removal, and improved button states in launcher
• Enable multi-selection in the launcher list widget (mouse, Ctrl+Click, Shift+Click).

• Update button states: disable Start, Load, and Game Options when multiple entries are selected.

• Add batch removal confirmation dialog listing selected entries.

• Refactor selection logic and highlighting in both filtered and grouped views.

• Fix group header fold indicator rendering for better UI consistency.
2026-01-07 01:01:47 +03:00
Cameron Cawley a166015406 GUI: Translate the default OK button in message boxes 2026-01-04 03:01:19 +03:00
Christian Kündig a7b33fbd9b CLOUD: Remove unneeded checks for USE_LIBCURL
USE_CLOUD is only set if libcurl (or another potential future http client) is enabled.
2025-08-13 18:38:54 +02:00
Simon Delamarre e773b9443e GUI: Add-ons support in game launcher
- Display add-ons greyed out under their base game in list mode (unless
some grouping is active)
- Add an "- Add-on" suffix to add'ons' description
- Hide add-ons in grid mode
- Ensure add-ons cannot be run, edited or removed from the launcher
- Ensure removing the base game also removes all its add-ons
2025-07-21 14:13:28 +02:00
Simon Delamarre 2e10337804 GUI: Ensure add-ons cannot be added as an independent game
Through single add or mass add
2025-07-21 14:13:28 +02:00
Le Philousophe 908c7f7326 GUI: Remove useless sizing
The size is set by the theme engine
2025-07-13 17:26:37 +02:00
Thierry Crozat 2d44bc8f26 GUI: Fix preserving the selection in GroupedListWidget when changing group
The selection needs to be reset after reloading the closed groups
and reaplying the filter. Otherwise it may be lost when we do so.
2025-06-11 23:04:25 +01:00
Thierry Crozat ed9748a61d GUI: Fix filter not applied after closing the game options
When rebuilding the list of games for the grouped list widget  we
need to apply the filter after reloading the list of closed groups.
Otherwise the filter is lost when we set the closed groups.
2025-06-11 23:04:25 +01:00
sluicebox 2effd5865e GUI: Cleanup game removal code 2025-06-10 08:06:41 +03:00
TusharGautam29 8c7e8bf715 GUI: Implement GlobalOptionsDialog dumping in dumpAllDialogs 2025-04-08 21:53:20 +02:00