Commit Graph
2186 Commits
Author SHA1 Message Date
Hakan Seven 2d9b828b87 ci(snap): build from shared Linux payload 2026-08-16 08:16:09 +03:00
Hakan Seven 679c471c61 Merge pull request #586 from Nozzit/snap-packaging
feat(snap): Snap Store packaging
2026-08-16 08:08:19 +03:00
Hakan Seven 2d2ea97613 chore(release): prepare v0.9.6 v0.9.6 2026-08-15 23:33:18 +03:00
Hakan Seven 5630f48b4e feat: improve start page links 2026-08-15 23:33:18 +03:00
Hakan Seven da3488ed00 Merge pull request #711 2026-08-15 23:11:37 +03:00
Hakan Seven 2b224d390f feat: add subreddit to start page 2026-08-15 23:11:29 +03:00
Hakan Seven 1dded7f881 fix: restore workspace verification 2026-08-15 23:11:26 +03:00
Hakan Seven d36134900d chore: update workspace dependencies 2026-08-15 23:11:21 +03:00
Hakan Seven 405da13a65 docs: move translations under docs/readme 2026-08-15 22:14:22 +03:00
gianlucafiore e901e72d6d Merge pull request #772 from gianlucafiore/fix/stretch-multi-selection
Allow multiple selection windows in STRETCH
2026-08-15 15:02:48 -03:00
gianlucafiore 7810d2c154 fix: allow multiple stretch selection windows 2026-08-15 15:01:05 -03:00
gianlucafiore 3f989fe94c Merge pull request #771 from gianlucafiore/fix/overlapping-grips
Fix overlapping grips moving independently
2026-08-15 14:23:17 -03:00
gianlucafiore bc9e206c19 fix: move coincident grips together 2026-08-15 14:22:22 -03:00
Hakan Seven a9c6f03196 Merge pull request #751 from schoeller/ocs_plugin_api_v4
V4 plugin API and host integration
2026-08-15 20:18:13 +03:00
Hakan Seven f247d15f6e feat(plugin): harden V4 host integration
Preserve legacy wire indices and route concurrent V4 responses and background requests by correlation and stable tab ID.
2026-08-15 20:17:43 +03:00
Hakan Seven 6cc1bf9755 fix(layer): centralize rename flow 2026-08-15 19:56:35 +03:00
Karim Jerbi b4da342f0e refactor(ribbon): derive the Block Palette button highlight from app state
The ribbon kept its own \show_block_palette\ copy that the app had to
manually sync at every mutation point (the BLOCKPALETTE command and the
dock Close handler). Drop the copy and thread the app's authoritative
\show_block_palette\ into \Ribbon::view\ at render time, so the button
highlight can't drift from the panel's true visibility — those two
handlers are now mutate-points only and the ribbon view is the single
place that reads the state back.
2026-08-15 14:42:08 +01:00
Karim Jerbi c3e3132b39 refactor(props): key active fields by a typed enum, not a sentinel string
The \\\x01attr\\x01…\ sentinel-prefixed string was used to tell geometry
fields (\&'static str\ names) apart from block attribute rows (runtime
tags) in \ctive_field\ and \dit_buf\. Replace it with a \FieldKey\
enum (\Geom(&'static str)\ / \Attr(String)\), so the two namespaces can't
collide by construction: \dit_buf\ is now \HashMap<FieldKey, String>\,
\ctive_field\ is \Option<FieldKey>\, and the sentinel decoding in
\ctive_key_id\ is replaced by \FieldKey::widget_id\.

While touching the key plumbing, replace \prop_field_key_for_id\'s
per-event scan of every section x prop (with a \String\ format per
candidate) with an O(1) precomputed \HashMap<iced::widget::Id, FieldKey>\
(\ield_key_by_id\), built once in \
efresh_properties\ alongside the
sections — and rebuilt after \make_sections_read_only\ so rows demoted
to read-only stop mapping. \PropSyncActive\ now does a single map lookup
per event.
2026-08-15 14:29:20 +01:00
Karim Jerbi eead4eb5f0 perf(props): skip focus sweep when the properties panel is hidden
The global left-click listener fires PropPointerPressed on every mouse
press anywhere in the app, and the handler used to launch a full
widget-tree focus sweep on each one - even when the Properties panel
was closed. Gate the sweep on dock_panel_visible(Properties): when the
panel is hidden the handler now returns Task::none, turning an O(whole
UI) traversal per click into an O(1) boolean check in the common case.

The other sweep call sites already gate via sync_active_field_if_any;
this was the only ungated one.

Tests:
- hidden_properties_panel_skips_the_focus_sweep - a click with the
  panel closed returns a Task::none (units == 0), i.e. no sweep.
- visible_properties_panel_runs_the_focus_sweep - a click with the
  panel open still fires the sweep (units > 0), preserving the
  select-whole-value behavior.
2026-08-15 13:49:26 +01:00
Karim Jerbi 9afb634557 chore(git): enforce LF line endings via .gitattributes 2026-08-15 13:12:34 +01:00
Karim Jerbi 41223f09d7 feat(plot): read-only rows use the shared selectable read-only field 2026-08-15 11:59:45 +01:00
Karim Jerbi 8e6b60910c feat(style): align mleader read-only field width with editable fields 2026-08-15 11:59:45 +01:00
Karim Jerbi d5b5f0781f feat(style): dim style read-only fields use the shared read-only field 2026-08-15 11:59:45 +01:00
Karim Jerbi 71d4eb96e5 feat(style): mleader style read-only rows use the shared read-only field 2026-08-15 11:59:45 +01:00
Karim Jerbi 61c3497d7f feat(text-style): read-only rows use the shared selectable read-only field 2026-08-15 11:59:45 +01:00
Karim Jerbi f2c4d389db feat(props): read-only rows use the shared selectable read-only field 2026-08-15 11:59:44 +01:00
Karim Jerbi f2b375ab24 feat(read-only): add shared selectable read-only field helper 2026-08-15 11:59:44 +01:00
Hakan Seven 93748f5788 Merge pull request #770 from NgoQuocViet2001/fix-layer-rename-state
fix(layers): handle case-only and current layer renames
2026-08-15 13:31:10 +03:00
Hakan Seven 37325f4d63 fix(layers): keep rename state consistent
Keep table keys, entity references, dependency caches, and current
layer handles aligned across case-only and mixed-case renames.

Refs #764
Refs #765
2026-08-15 13:22:06 +03:00
NgoQuocViet2001 9c6adedc44 fix: keep layer rename state in sync 2026-08-15 15:56:15 +07:00
Karim Jerbi fbab4c4934 feat(ribbon): Block Palette button reflects panel open state
The Insert tab's Block Palette button now behaves like the View tab toggles
(UCS Icon, View Cube, Ortho, Properties, File Tabs, Layout Tabs): it stays
highlighted while the block palette panel is open and clears when closed.

The Ribbon gains a show_block_palette flag with a set_block_palette setter,
fed into ToggleState and mapped in is_active_tool for the BLOCKPALETTE tool
id. show_block_palette on the app remains the single source of truth; both
mutation paths now mirror it onto the ribbon:

- BLOCKPALETTE / BLOCKSPALETTE command toggles ribbon state alongside the
  panel (src/app/commands/blocks.rs).
- Closing the panel via the dock rail close button clears the ribbon state,
  matching how Close(Properties) already syncs (src/app/update/dialog.rs).
2026-08-14 23:33:45 +01:00
Karim Jerbi 28e5deb222 fix(dock): don't panic clamping panel width when window is minimized 2026-08-14 23:06:53 +01:00
Karim Jerbi df940ad58e fix(dock): size drag preview by visible panels, not stack size
The drag preview divided the edge height by the raw panel count on the target
side. Closed panels keep their stack slot, so a hidden panel (e.g. the block
palette tucked away while Properties stays open) split the ghost and the drop
index as if it were rendering — leaving a half-height preview on that edge.
Size slots from the panels actually rendered on the edge instead, via a shared
visibility helper used by both the drop-index math and the ghost/edge-tint
geometry.
2026-08-14 22:24:57 +01:00
Karim Jerbi 2a0b7805c0 fix(dock): size drag preview slots by the edge viewport height
The dock drag preview computed slot heights and drop indices from the full
window height, but docked panel columns only span the model viewport, so the
preview overlay and insertion point drifted below the actual dock edge. Use the
current viewport height so the ghost and drop index line up with the panels.
2026-08-14 21:21:40 +01:00
Karim Jerbi 9f68034a60 feat(props): select whole value when a property field is clicked
Clicking an editable property value field now selects its entire value instead
of only placing the caret, so typing immediately replaces it. The click is
observed through a global left-press subscription (PropPointerPressed); a focus
sweep reports which widget took focus and PropSyncActive maps it back to the
active property row, then issues a select-all operation only when focus landed
on a different field.

The active row stays highlighted while its text input holds keyboard focus and
clears when focus moves elsewhere.
2026-08-14 21:21:40 +01:00
Karim Jerbi dceb9626ae fix(dock): block palette reflects new blocks without reopening
Creating a block from selected entities now bumps the geometry epoch, so the
block palette's per-update stale check notices the new definition and refreshes
its list in place instead of requiring the user to close and reopen the panel.
2026-08-14 21:21:40 +01:00
Karim Jerbi bd33600ee7 fix(dock): single-panel drag preview is one full-height slot
drop_index previously mapped a pointer position inside a lone full-height panel
to a top/bottom insertion split, offering an impossible drop. Clamp to the
single slot when the edge holds one panel, and cover the multi-slot mapping with
tests.
2026-08-14 21:21:40 +01:00
Karim Jerbi 94667f9512 feat(dock): active and dragging rail tab styling
Style the dock rail tab by its panel state: the expanded (active) panel's tab
gets a primary-colored highlight and border, and a tab whose panel is being
dragged gets a lighter primary tint, so the user can see which panel owns the
edge at a glance.
2026-08-14 21:21:40 +01:00
gianlucafiore 577530d2e8 Merge pull request #768 from gianlucafiore/fix/annotative-text-units
Fix annotative text scaling for drawing units
2026-08-14 15:39:26 -03:00
gianlucafiore f47ab7e891 fix: respect drawing units for annotative text 2026-08-14 15:38:54 -03:00
Sebastian 83d7a4d7db plugin: parallel release fetches, faster shutdown, uninstall runner stop
- Run Plugin Manager release fetches on OS threads so they execute in

  parallel instead of serialising on the async executor.

- Reduce V4Connection shutdown poll from 3s to 100ms; the runner is killed

  and reaped without blocking host shutdown.

- Add PluginManager::remove and PluginProcess::shutdown_and_wait so

  uninstall can stop the runner before deleting files, fixing Windows

  access-denied errors on plugin removal.

- Rebuild ribbon immediately after uninstall so the tab disappears.
2026-08-14 20:18:59 +02:00
Hakan Seven 2c08b92267 docs(readme): add localized guides 2026-08-14 12:00:33 +03:00
Hakan Seven 8dec848afb docs(readme): redesign project overview 2026-08-14 11:22:12 +03:00
Hakan Seven 26fd9a3c02 feat(i18n): add seven UI locales 2026-08-14 11:06:53 +03:00
NozzitandClaude Opus 5 9a48ab6b61 docs(snap): translate inline comments from Dutch to English
Requested in review: this repo's working language is English, so the
comments carried over from the OpenAEC sibling repos have been
translated. No functional changes -- only comments and log/error strings.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-08-14 09:39:29 +02:00
Hakan Seven 844ae227ec Change OCS Web link to www.opencadstudio.com
Updated the OCS Web URL for browser access.
2026-08-14 01:09:47 +03:00
Hakan Seven 5a6ba9dd94 fix(web): use custom domain root 2026-08-14 00:58:53 +03:00
Hakan Seven e58bef39dc fix(web): use browser-safe render timing 2026-08-13 23:57:51 +03:00
gianlucafiore 0ea5a10570 Merge pull request #759 from gianlucafiore/fix/text-double-click-edit
Fix text editing on double click
2026-08-13 17:55:44 -03:00
gianlucafiore 4aa317f413 fix: restore text editing on double click 2026-08-13 17:53:24 -03:00