Commit Graph

105 Commits

Author SHA1 Message Date
Martín Lucas Golini
0fa99ab9d2 Expand Git History actions and branch management
- Add SmartGit-inspired context actions to Git History commits, including checkout, merge, fast-forward merge, cherry-pick, revert, branch creation, tag creation, and copying commit IDs or complete messages.
  - Order commit actions into consistent operation, ref-creation, and clipboard groups. Hide the redundant Show in Git History action inside detached history tabs while retaining it in the source-control sidebar.
  - Add a Working Tree / Index context menu with status-aware Commit and Stage actions. Track staged and unstaged availability in the history model and keep it synchronized as repository status changes.
  - Extend the Git command wrapper with operations for creating branches at commits, creating and deleting tags, deleting remote branches, cherry-picking commits, and reverting commits.
  - Support deleting tags and remote branches from the Branches view. When deleting a local branch with an upstream, optionally delete its tracked remote branch as part of the operation.
  - Add confirmation and input dialogs for branch, tag, remote-deletion, and revert workflows. Disable history-changing commit actions while another Git operation is active.
2026-08-29 15:11:08 -03:00
Martín Lucas Golini
b3d72b5acf Fixed the autocomplete crash, root cause: getDocumentSymbols() accessed mDocs from a worker thread while document lifecycle callbacks could concurrently modify the same unordered_set, corrupting its internal state.
Added a synthetic “Working Tree / Index” first row whenever the selected repository has local or staged changes.
Displays separate changed and staged counts.
Updates dynamically from normal status refreshes without reloading commit history.
Selecting it opens the shared details view in “Uncommitted changes” mode.
Shows tracked changes from HEAD through the working tree, plus untracked-file patches.
Supports both sidebar and detached History views.
The History shortcut focuses working changes when present, otherwise the newest commit.
Added the History button beside Refresh.
Added consistent 2dp spacing between the ref dropdown and both buttons.
Added translations for the new labels.
2026-08-29 03:12:27 -03:00
Martín Lucas Golini
61d9d3c7bc Improve Git History navigation and commit details
Add a detached Git Commit History tab with a traditional table layout, persistent column widths, commit focusing, and a splitter-based commit details pane.
Register the git-show-history command and expose “Show in Git History” from commit details and history context menus. Add History and Git Commit tab icons, localized titles, appropriate tooltips, and ref-aware
tab naming.
Share the commit-details layout and behavior between standalone commit tabs and detached History views. Move view creation, widget binding, state management, controls, and asynchronous changed-file loading into
CommitDetailsState.
Display complete commit metadata and messages, GitHub links, copyable commit SHAs, colored changed-file statistics, and multi-file diffs with global expand/collapse and unified/split controls.
Improve detached-history lifecycle behavior, selection and focus handling, stale-request protection, tooltip formatting, and column recalculation. Restore “Load older commits” by preserving pagination-node
semantics while asynchronous loading is in progress.
Fix expandable History rows so merge subjects and metadata render correctly without regressing generic UITreeView cells. Add recursive commit lookup for focusing nested history entries.
Add deferred tooltip-created notifications and configure History tooltips only after their widgets exist.
Preserve tokenizer-applied UITextView color ranges during layout recalculation when custom styling is enabled, preventing changed-file statistics from losing their colors after splitter resizing.
Add the required Codicons and translations, expose UIWidget pseudo-class queries, reuse cached tree-expander drawable sources, and use SmallVector for nested stylesheet property resolution.
2026-08-29 02:15:26 -03:00
Martín Lucas Golini
ef962fc61f Improve Git History navigation and asynchronous UI safety
Add a History ref selector for HEAD, local branches, remote branches, and tags without requiring checkout. Reuse cached branch-model display strings to keep large ref lists efficient.
Make deferred main-thread callbacks lifetime-safe across ecode controllers and plugins. Initialize plugin dispatchers during UIReady and extend MainThreadLifetime to support delayed and tagged dispatch.
Fix expandable Git History rows, empty merge projections, and commit-description expansion. Display only the physical first line while collapsed and avoid duplicating it in the expanded body.
Add coverage for history ref handling and preserve stale-request guards during repository and revision changes.
Fix UIImageViewer dimension reporting for sprites by displaying the underlying texture dimensions.
The Git History interface remains a work in progress.
2026-08-28 18:52:04 -03:00
Martín Lucas Golini
baaa0a62c0 Add a work-in-progress Git History view to the source-control panel.
Display bounded first-parent commit history with asynchronous loading, independent pagination, and lazily expandable merge commits. Propagate inherited exclusions through nested merges to avoid repeating already represented history.
Add custom compact history rows, loading/error/retry states, keyboard navigation, repository and history-generation guards, and lifecycle invalidation after history-changing operations.
Add a commit details tab with full commit metadata and message, changed-line totals, GitHub links when available, and a multi-file diff viewer with global collapse and unified/split controls.
Extend UIDiffView with multi-file view controls and register the required Codicons.
The Git History interface and visual design remain a work in progress.
Fix caret positioning inside shaped ligature clusters.
Add explicit closest-glyph and interpolated ligature caret-positioning modes while keeping interpolation as the default for general text geometry.
Use the original closest-glyph behavior for caret and IME positioning in UICodeEditor, UITextEdit, UITextInput, and UIConsole, preventing cursor positions from being synthesized inside ligature glyphs.
Add regression coverage for both positioning modes.
Optimize SyntaxTokenizer by returning tokenizer results in a SmallVector, avoiding heap allocations in common cases.
2026-08-28 14:43:05 -03:00
Martín Lucas Golini
66d22ea5bb Add integrated Git conflict resolution workflow
Introduce a three-pane UIMergeView with an editable shared result
document, conflict navigation and acceptance actions, live diff
highlighting, synchronized scrolling, and contextual pane labels.

Read conflict stages directly from Git's index, detect paused merge
operations, restore conflict sessions, and support resolving, staging,
recreating, continuing, committing, and aborting operations.

Add repository-aware conflict state handling, safe asynchronous
lifetimes, merge operation UI, configurable key modifiers, i18n
strings, and focused merge-view and Git conflict tests.
2026-08-27 22:18:58 -03:00
Martín Lucas Golini
a182878837 ecode: add structured settings pages for plugins
- introduce reusable settings models, documents, and plugin settings pages
  - expose all registered plugin configuration options in the Settings panel
  - support groups, choices, editable values, lists, secrets, and JSON objects
  - stage plugin changes and persist them when the Settings window closes
  - preserve raw JSON access for advanced configuration
  - safely migrate legacy AI provider API keys
  - add translated plugin setting labels and descriptions
  - remove the obsolete plugin GUI configuration API
  - fix autocomplete signature documentation persistence
  - fix AI model catalog refresh interval loading
2026-08-26 01:37:28 -03:00
Martín Lucas Golini
864b2a9b3f Improve asynchronous filesystem event processing
- queue and batch filesystem model updates on the main thread
  - process directory-tree updates and worker-affine listeners asynchronously
  - coalesce adjacent modified events for the same path
  - preserve captured file metadata across delayed event delivery
  - add event, path, and thread-affinity filters for listener subscriptions
  - configure optimized per-plugin filesystem subscriptions
  - make listener removal wait for active callbacks safely
  - handle self-removal without deadlocking
  - support allocation-free matching of moved source paths
  - synchronize project directory-tree mutations with active searches
  - centralize diff-view button visibility around find/replace state
  - improve code editor wrap-content and scrollbar sizing
  - add queue, listener, and filesystem-model regression tests
2026-08-21 01:32:36 -03:00
Martín Lucas Golini
74d9fa660c ecode: add multi-file Git status operations
Enable multiple selection in the Git status tree and apply stage, unstage, discard, open, and diff actions to all applicable files.
Open selected diffs in a single multi-file diff view, including portable handling for untracked files, and group mutating operations by repository.
Make the commit dialog resizable, allow its text editor to grow with the window, and wrap commit messages by word.
2026-08-12 00:03:25 -03:00
Martín Lucas Golini
dc377335b9 graphics: migrate drawables to shared ownership
- introduce DrawablePtr and per-consumer createInstance() semantics
  - add TextureDrawable wrappers backed by shared TexturePtr handles
  - migrate regions, sprites, nine-patches, state lists, skins, groups, gradients,
    UI widgets, tools, modules, ecode, and eeiv to shared drawable ownership
  - remove ownIt flags, manual drawable deletion, and unload-based lifetime handling
  - replace drawable callback IDs with RAII change connections
  - move Variant drawable storage outside its scalar union
  - split UIIcon source lookup from explicit drawable instance creation
  - retain icon instances used by rendering loops instead of cloning per frame
  - avoid shared source mutation in texture-region consumers
  - use drawable type tags instead of RTTI casts
  - fix nearest-size UIIcon lookup
  - document the drawable source/instance contract and add ownership tests
2026-07-20 01:09:36 -03:00
Martín Lucas Golini
89028491ef Try fix macOS not passing tests due to incorrect Window sizing in macOS CI.
Add support to diff images in UIDiffView.
2026-05-23 14:17:48 -03:00
Martín Lucas Golini
42108f442a Properly display untracked files diff view. 2026-04-24 19:36:30 -03:00
Martín Lucas Golini
527c1dc56c Fix in drop-down height calculation.
Added `--diff` parameter.
Allow to load multiple files and folders from the CLI.
2026-03-25 13:20:10 -03:00
Martín Lucas Golini
d0093a7801 Added multi-file diff / patch visualization support. 2026-03-25 00:54:48 -03:00
Martín Lucas Golini
d38415f335 UIDiffView: Added Reduced / Complete toggle. Added LCS support. A lot of extra improvements. 2026-03-24 18:50:54 -03:00
Martín Lucas Golini
534c052722 Added side by side view in the diff viewer, allow to change view mode with a switch. Performance improvements and more. 2026-03-24 13:34:56 -03:00
Martín Lucas Golini
0e923adea9 UI: Add UIDiffView for specialized diff/patch visualization
- Integrated dtl into thirdparty for native string diffing
- Implemented UIDiffView, a composite wrapper for UICodeEditor with a custom plugin (UIDiffEditorPlugin)
- Handles dynamic string diffing and standard .patch file parsing
- Automatically extracts target filename from patch headers for proper syntax highlighting
- Corrects line numbers in gutter to match the diff origins while hiding patch headers
- Wired into App::loadDiffFromPath and GitPlugin
- Added exhaustive unit tests in uidiffview_test.cpp
2026-03-23 18:50:26 -03:00
Martín Lucas Golini
ccf5a49f88 Minor fix in AI chat file links.
Minor improvements in breeze CSS rules and color scheme translator.
2026-02-23 01:05:33 -03:00
Martín Lucas Golini
619295fa62 Fix modifed files color highlight in treeview.
Minor change in AI Assistant.
2026-02-06 00:45:24 -03:00
Martín Lucas Golini
bbb8fce43f Instead of using *::cell::text and tableview::cell::icon in breeze and styles we will just use *::tableview::cell. And leave the inner elements of PushButton unaltered (since the father already can alter them).
Did some fixes in `Text::findCharacterPos` and `Text::findCharacterFromPos`, also tentatively added support for soft-wrap in those function (I haven't tested much yet).
2026-02-01 21:46:42 -03:00
Martín Lucas Golini
1789540388 Separate TextLayout result into paragraphs with ShapedTextParagraph.
Change the `Text::wrapText` implementation to use the `LineWrap::computeLineBreaks` function, so it's consistent across eepp. Also renamed the function to `Text::hardWrapText` to be more descriptive.
Added new-line support in `LineWrap::computeLineBreaks`.
2026-01-24 17:59:09 -03:00
Martín Lucas Golini
f180e58e56 Added Settings -> Window -> UI Theme -> Syntax Color Scheme to use the editor color scheme globally for the UI Theme colors, having a single color palette for the whole UI and making much easier to style the UI, this solves SpartanJ/ecode#661, since now we support one UI theme for each existing syntax color scheme. Still a WIP, I'll continue improving it during the development of 0.7.5, but it's ready to use. 2026-01-18 01:38:27 -03:00
Martín Lucas Golini
8378f2a1fa Add scrollbar type and mode options for the terminal.
Hack auto-scroll in terminal for Windows 11.
Renamed ScrollViewType and made it global, properties are now `overlay` or `outside`.
Added a couple of goodies for the terminal mode (retain side panel configuration and restore it if no terminals are left).
2025-12-21 02:01:37 -03:00
Martín Lucas Golini
7dde5826c7 In widgets rename all the addEventListener calls to on.
Some minor fixes in cpp, css, xml and html syntax highlighters.
2025-10-03 21:12:08 -03:00
Martín Lucas Golini
15f9bc3fd8 Arrange correctly the elements in statusbar on some cases.
Add the option "Open URL" in the context menu when right clickin a URL.
2025-10-03 00:05:28 -03:00
Martín Lucas Golini
9d2aec8e14 eepp: Added UIImageViewer new tool widget to view images.
Added a new UIMessageBox event: `Event::OnDiscard`, this will triggered when window is closed without confirmation (`Event::OnConfirm`). And now `Event::OnCancel` is only triggered when is manually cancelled (click the cancel button).
ecode: Greatly improved image viewing experience. Now you can switch images from the same directory with the mouse wheel, also zoom, translate and rotate the images, images open in a new tab by default but quick-preview can be activated in `Settings -> Window -> Quick Preview Images` (SpartanJ/ecode#96).
2025-09-28 00:39:17 -03:00
Martín Lucas Golini
873274e33c Initial support of drag and drop to move files and folders around from the file tree view (SpartanJ/ecode#71). 2025-09-07 02:06:53 -03:00
Martín Lucas Golini
54aaeb4931 Spell-checked the whole project. 2025-08-22 01:33:51 -03:00
Martín Lucas Golini
4877a4341a Added "Buffer Only Mode" to Global Search & Replace (#545).
emscripten build is now multi-threaded only.
2025-07-05 20:57:21 -03:00
Martín Lucas Golini
3797aa877b Minor refactor in SyntaxTokenizer.
Open .xbm and .xpm files as C (SpartanJ/ecode#532).
2025-06-28 20:55:09 -03:00
Martín Lucas Golini
c156b53e4b Rename "keyword2" to "type" and "keyword3" to "parameter".
Added some String overloaded functions.
2025-06-01 20:07:23 -03:00
Martín Lucas Golini
1d2c258ae7 Make Git plugin less verbose. 2025-04-07 21:16:20 -03:00
Martín Lucas Golini
da85af1246 Added C3 syntax highlighting and LSP support.
Refactored TextUndoStack, now uses std::variant and avoids heap allocating each command.
Fix possible crash in Process::readAll.
Fix SyntaxDefinition::setSymbols.
Some minor improvements for Odin and Ü syntax definitions.
Fix Git plugin silent configuration.
2025-04-04 01:48:39 -03:00
Martín Lucas Golini
d8aa670d12 Some minor fixes in debugger and gitplugin.
Minor visual improvement in status bar.
2025-03-14 00:30:53 -03:00
Martín Lucas Golini
0005f9ff09 Fix crash when staging/unstaging too fast (or something like that). 2025-01-27 16:07:38 -03:00
Martín Lucas Golini
c3399143df Fixes in Git plugin staging.
Added a value viewer window in debugger.
2025-01-25 12:56:41 -03:00
Martín Lucas Golini
16a0da5dab Fix git status position. 2025-01-17 20:44:40 -03:00
Martín Lucas Golini
682eac247c Set line wrap for commit text box. 2025-01-17 00:51:10 -03:00
Martín Lucas Golini
c4bd88461d Still more WIP 2025-01-03 22:01:16 -03:00
Martín Lucas Golini
cf84fc7cff Save side panel tabs order. 2025-01-01 16:18:26 -03:00
Martín Lucas Golini
0e0ce71609 Optimization to reduce almost to zero allocations during frame rendering in ecode (this gives around 6% perf gains). 2024-10-29 02:11:33 -03:00
Martín Lucas Golini
9ef654929c Display the stashes creation date. Also add a tooltip text for the stash in order to make easier to read the full name.
Fix in Process::create when parsing command arguments from string.
Fix text-align in UITooltip.
Fix in GitPlugin refreshing repositories during git lock files changes.
2024-10-25 00:10:30 -03:00
Martín Lucas Golini
1e58843896 Optimized String::toString.
Revert a change in focus behavior in UIDropDownList since it's incorrect.
Measure plugin load times.
2024-10-22 21:23:31 -03:00
Martín Lucas Golini
5a7e7e5387 Avoid crashes on plugin unload while loading. 2024-09-28 13:42:54 -03:00
Martín Lucas Golini
04e5cd5fb6 Add RegEx class. Refactor PatternMatcher. 2024-09-21 22:29:23 -03:00
Martín Lucas Golini
8da73f749d Fix icon size. 2024-07-04 12:59:46 -03:00
Martín Lucas Golini
9600f82f8c Fix Text::wrapText for string views.
ecode: Minor visual fixes.
2024-05-05 12:23:13 -03:00
Martín Lucas Golini
630a611133 Two crash fixes. 2024-04-29 13:51:50 -03:00
Martín Lucas Golini
c971c16911 Added vertical menu for status build output and app output.
Fix incorrect initialization of the Git plugin model controller when loading a folder from the Welcome Screen.
2024-04-28 01:42:43 -03:00
Martín Lucas Golini
d493674363 A couple of minor fixes. 2024-04-10 13:08:17 -03:00