Compare commits

..

132 Commits

Author SHA1 Message Date
PaddleStroke be7d41dea7 Assembly/TechDraw: Fix exploded view views (#25426) 2025-11-18 15:54:51 -06:00
PaddleStroke 2a8d648ad3 Assembly: Fix crash on moving unconnected parts 2025-11-18 13:06:33 -06:00
Chris Hennes b2a1e2a6e1 Gui: Update About banner for 1.2-dev 2025-11-18 19:58:03 +01:00
Chris 3f42824ffa Part: fix splitting of a split that is a container / group (#25293) 2025-11-18 11:48:40 -06:00
Chris Hennes 4fa7dd76f0 Merge pull request #25244 from tetektoza/fix/25232_exp_editor_regressions
Gui: Differentiate completion activation modes in Expression Editor
2025-11-18 10:10:00 -06:00
PaddleStroke 6f90c5ea61 Sketcher: ConstraintList: prevent N transaction on box selection (#25254) 2025-11-18 09:15:03 -06:00
captain0xff 5d387ae014 PartDesign: fix the interactive controls for revolution/groove 2025-11-18 15:39:42 +01:00
Roy-043 45866b5f41 PartDesign: Update TaskFeaturePick.cpp text (Title Case mod) 2025-11-18 15:35:12 +01:00
Furgo 0b0d1ccc12 BIM: Smart removal of wall bases (#24550)
* BIM: Implement smart base removal for Walls

Previously, removing the Base object from an Arch Wall would cause the
wall to reset its position to the document origin and could lead to
unintended geometric changes for complex walls.

This commit introduces a "smart debasing" mechanism integrated into the
Component Task Panel's "Remove" button:

- For walls based on a single straight line, the operation now preserves
  the wall's global position and parametric `Length`, making it an
  independent object.
- For walls with complex bases (multi-segment, curved), a warning dialog
  is now presented to the user, explaining the consequences (shape
  alteration and position reset) before allowing the operation to
  proceed.

This is supported by new API functions `Arch.is_debasable()` and
`Arch.debaseWall()`, which contain the core logic for the feature.

Fixes: https://github.com/FreeCAD/FreeCAD/issues/24453

* BIM: Move wall debasing logic into ArchWall proxy

The logic for handling the removal of a wall's base object was previously
implemented directly within the generic `ComponentTaskPanel` in
`ArchComponent.py`. This created a tight coupling, forcing the generic
component UI to have specific knowledge about the `ArchWall` type.

This commit refactors the implementation to follow a more object-oriented
and polymorphic design:

1.  A new overridable method, `handleComponentRemoval(subobject)`, has been
    added to the base `ArchComponent` proxy class. Its default implementation
    maintains the standard removal behavior.

2.  The `_Wall` proxy class in `ArchWall.py` now overrides this method. All
    wall-specific debasing logic, including the eligibility check and the
    user-facing warning dialog, now resides entirely within this override.

3.  The `ComponentTaskPanel.removeElement` method has been simplified. It is
    now a generic dispatcher that calls `handleComponentRemoval` on the
    proxy of the object being edited, with no specific knowledge of object types.

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* BIM: Correct user warning

The operation can indeed be undone.

Co-authored-by: Roy-043 <70520633+Roy-043@users.noreply.github.com>

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Roy-043 <70520633+Roy-043@users.noreply.github.com>
2025-11-18 13:58:59 +00:00
Chris Hennes 7980d82207 Merge pull request #25044 from WandererFan/CenterMarksNotShown3
TechDraw: Vertex creation, display and selection issues
2025-11-18 05:43:49 -06:00
pre-commit-ci[bot] 151e3a987e chore: Fix formatting for missing file 2025-11-18 03:15:09 -06:00
pre-commit-ci[bot] 0f4be480b1 [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2025-11-18 04:30:12 +00:00
wandererfan 484c89818c [TD]enforce center mark print rule on print preview 2025-11-17 22:28:07 -06:00
wandererfan cf656ba77e [TD]fix center mark preferences not honored 2025-11-17 22:28:07 -06:00
wandererfan 110b4b0d95 [TD]fix lost mouse event in Projection Group 2025-11-17 22:28:07 -06:00
wandererfan 66a2dd984e [TD]fix cosmetic vertex outside frameRect is not selectable
- attempting to select a vertex outside the frameRect/boundingRect
  triggers hoverLeave event which hides the vertex.
2025-11-17 22:28:07 -06:00
wandererfan f6c75c7838 [TD]fix no vertex select in front view of projection group 2025-11-17 22:28:07 -06:00
wandererfan 2161e31328 [TD]fix fail to clear frame on selection change 2025-11-17 22:28:06 -06:00
wandererfan 73e4b296b1 [TD]fix fail to create vertex outside frame 2025-11-17 22:28:06 -06:00
wandererfan f0da095cf8 [TD]fix center marks not shown 2025-11-17 22:28:06 -06:00
wandererfan b918cac67a [TD]fix giant vertex from tracker 2025-11-17 22:28:06 -06:00
wandererfan d2bbd78c67 [TD]clear selection affects vertex display
- clearing the selection here causes the new vertex to not be displayed
2025-11-17 22:28:06 -06:00
wandererfan 4bb8f7e8eb [TD]add getExportingAny() 2025-11-17 22:28:06 -06:00
wandererfan 23290b8050 [TD]add preference methods for center marks 2025-11-17 22:28:06 -06:00
Chris f218c5f25c Import: STEP export preserve body names (#25042) 2025-11-17 22:23:21 -06:00
Chris Hennes 0a73f53990 Gui: Add translation to 'No style sheet' 2025-11-17 23:15:58 +01:00
sliptonic 8c8b26ee4b Merge pull request #25371 from tarman3/engrave_fix9114
CAM: Engrave - Fix #9114 - Unable to engrave an arc
2025-11-17 11:19:23 -06:00
sliptonic eb4231266e Merge pull request #25376 from chennes/translationStringContext
Gui: Fix context of translation strings
2025-11-17 11:15:57 -06:00
Gaël Écorchard c77e1d840c Remove functions that require Kuka files (#24984) 2025-11-17 11:15:18 -06:00
Billy Huddleston 900d5ae255 CAM: Fix crash when Path panel widgets are deleted
Prevent RuntimeError by safely handling missing or deleted geometry import
widgets in Path operation panels. This ensures the UI update code does not
fail if the underlying C++ objects are destroyed, improving stability when
panels are closed or the UI changes.

src/Mod/CAM/Path/Op/Base.py:
- Wrap geometry import widget access in try/except to avoid crashes
- Add error handling for panel widget deletion scenarios
2025-11-17 11:11:24 -06:00
Chris Hennes e0c5c89bd9 Build: Add network-failure fault tolerance to macOS signing (#25265) 2025-11-17 14:01:54 -03:00
PaddleStroke 551ab85076 Assembly: Sub-assembly: fix support for Part-wb objects (#25279)
* Assembly: Sub-assembly: fix support for Part-wb objects

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-11-17 17:59:40 +01:00
PaddleStroke 10cc4dea16 Assembly: Insert link: Handle partially loaded documents (#25275) 2025-11-17 10:55:48 -06:00
PaddleStroke 33d1d80555 Sketcher: Remove transaction from TaskSketcherConstraints::doSetVisible (#25255)
* Sketcher: Remove transaction from TaskSketcherConstraints::doSetVisible

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-11-17 17:54:55 +01:00
chris 1ec1f1506e sketcher wb: fix issue #25076, resolve grid snapping placement 2025-11-17 10:51:28 -06:00
tarman3 2e3a4d541c CAM: LeadInOut - Fix overtravel 2025-11-17 10:45:08 -06:00
David Carter f4e78e3163 Materials: Assigning material without appearance
Assigning a material without an appearance reset the appearance to the
default appearance.

There were two main problems. One was the comparison function for
App::Material objects. It would return false when the UUID or MatType
values were different although there are many circumstances where this
could be true and the appearance be the same. It also incorrectly
compared the imagePath.

The second problem was the logic for detecting if an object has already
been assigned an appearance by assigning a material or manually setting
the appearance. If assigned a material, the appearance should update but
not if it has been set manually. This logic has been corrected.
2025-11-17 17:43:14 +01:00
Chris Hennes 50392855bf CI: Update macOS Intel target version in workflow
GitHub is deprecating macOS 13 runners -- the only remaining Intel runner is now macOS 15, and it is scheduled for retirement in 2027, at which point we will no longer be able to provide Intel weeklies.
2025-11-17 17:33:25 +01:00
Chris Hennes 4d0c35dd2d Core: Convert transparency to alpha (#24891)
* Core: Convert transparency to alpha

Create new `Base::getVersion()` function for extracting a program
version enumeration given a version string.

Convert transparency to alpha value for old project files.

* Base/App: Address review comments

---------

Co-authored-by: wmayer <wmayer@freecad.org>
2025-11-17 17:15:19 +01:00
Connor9220 11eba3f25c Fix carriage returns in the Migrator Dialog Title. (#25379) 2025-11-16 22:48:09 -06:00
Jiří Pinkava 5fc650b2ff Tests: Fix value for Imperial pressure tests
The decimal was (wrongly) cahnged in 5379378626
2025-11-16 22:45:52 -06:00
Chris Hennes 0aec9c3b21 Gui: Fix context of translation strings 2025-11-16 17:12:57 -06:00
Florian Foinant-Willig 526f7f2550 TechDraw: fix "%.0w" format spec (#25367) 2025-11-16 18:51:28 +00:00
tarman3 a514cfdf4b CAM: Engrave - Fix #9114 - Unable to engrave an arc 2025-11-16 20:47:21 +02:00
Aqeel Labash a77f96ea86 Fix wording for On-view-parameters tool tip. (#24773)
* switch wording in tooltip-swap-wording

* switch wording in tooltip for On-View-Paramter
2025-11-15 19:27:03 +01:00
PaddleStroke 5da1e3d899 TaskAttacher: Remove 'reset edit' causing trouble to assembly (#25277) 2025-11-15 10:13:56 -06:00
theo-vt 15d9e14851 Sketcher: Proceed to chamfer/fillet on a vertex if there are more than 2 lines but only two non-construction lines 2025-11-15 10:08:22 -06:00
theo-vt d4bfa82161 Sketcher.planegcs: solve reference constraints with lower priority (#25318) 2025-11-15 09:54:56 -06:00
sliptonic bb172e4a6b CAM: Renaming of postprocessors and cleanup (#24771)
* Post Processor cleanup and rename

remove unused files
Basic implementation of generic post
add blending mode support for linuxcnc
add mocking for postprocessor tests
Add tests for generic post
linuxcnc test only tests linuxcnc specific functionality

minor improvements
add arc splitting to refactored post processors
Refactor smoothie post
move posts to legacy.  Remove 'refactored'
lint cleanup
fixes #19417

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-11-15 09:46:34 -06:00
mosfet80 f8afa5ac72 Update CONTRIBUTORS
Adds my name to the CONTRIBUTORS file
2025-11-15 12:55:49 +01:00
paul 29d2285ed7 [ArchStairs] Fix Landing property disable At-Each-Corner (#25278)
* [ArchStairs] Fix Landing property disable At-Each-Corner

Fix #24384

* Update src/Mod/BIM/ArchStairs.py

Co-authored-by: Roy-043 <70520633+Roy-043@users.noreply.github.com>

* Update ArchStairs.py - Typo

---------

Co-authored-by: Roy-043 <70520633+Roy-043@users.noreply.github.com>
2025-11-15 09:17:35 +00:00
tarman3 00a4de14e7 CAM: Slot operation - Tooltip - single slot (#25087)
* CAM: Slot tooltip

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Co-authored-by: sliptonic <shopinthewoods@gmail.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-11-14 23:25:14 +00:00
Roy-043 c422404020 Core: workaround for Building US unit system bug (#25288)
* Core: workaround for Building US unit system bug

Fixes #11345

This workaround should hopefully fix the Building US unit system bug at the level of the InputField code. This is the most feasible solution given that we are currently in the v1.1 feature freeze.

I use the word "hopefully" because I have not compiled and tested the code. But replacing `+` with `--` works in Python examples.

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Fix typo in comment

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-11-14 12:58:24 -06:00
Pieter Hijma 0083364dbe Doc: Improve the documentation of transactions (#21494) 2025-11-14 12:52:13 -06:00
dependabot[bot] 4fd6dc5120 Bump actions/dependency-review-action from 4.8.0 to 4.8.2
Bumps [actions/dependency-review-action](https://github.com/actions/dependency-review-action) from 4.8.0 to 4.8.2.
- [Release notes](https://github.com/actions/dependency-review-action/releases)
- [Commits](https://github.com/actions/dependency-review-action/compare/56339e523c0409420f6c2c9a2f4292bbb3c07dd3...3c4e3dcb1aa7874d2c16be7d79418e9b7efd6261)

---
updated-dependencies:
- dependency-name: actions/dependency-review-action
  dependency-version: 4.8.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-14 12:48:30 -06:00
dependabot[bot] ccc4e084aa Bump actions/download-artifact from 5.0.0 to 6.0.0
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 5.0.0 to 6.0.0.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/634f93cb2916e3fdff6788551b99b062d0335ce0...018cc2cf5baa6db3ef3c5f8a56943fffe632ef53)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-version: 6.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-14 12:48:03 -06:00
sliptonic e212f2a175 Merge pull request #25212 from tarman3/geom_segm
CAM: Path.Geom.cmdsForEdge() - remove useless 'segm'
2025-11-14 12:32:38 -06:00
sliptonic df2774ac72 Merge pull request #24185 from tarman3/loop
CAM: SelectLoop improve
2025-11-14 12:26:11 -06:00
sliptonic 011a6d93bd Merge pull request #25215 from tarman3/geom_clean
CAM: Path.Geom - fix linter errors
2025-11-14 12:25:37 -06:00
sliptonic bd844b8273 Merge pull request #24852 from tarman3/inspect_mhs
CAM: Inspect - decrease default Max Highlighter Size
2025-11-14 12:23:27 -06:00
sliptonic f9c05d18af Merge pull request #25074 from tarman3/slot_face
CAM: Slot - Reject incorrect faces selection
2025-11-14 12:15:53 -06:00
sliptonic 86037a1462 Merge pull request #23285 from davidgilkaufman/feed_rate_percentage
[CAM] Feed rate percentage for ramp and lead in/out moves
2025-11-14 12:07:49 -06:00
sliptonic 2a79543c79 Merge pull request #22598 from emmanuel-ferdman/main
CAM: Fix path dressup array test case
2025-11-14 12:05:57 -06:00
Alfred a283855697 Sketcher: Vertical dimension tooltip fix (#24839)
* Corrected all Veritical Dimension Tooltips

* Fixed error in Sketcher_de

* Fixed rest of translation file errors

* Revert "Fixed rest of translation file errors"

This reverts commit 7f3a50ac4f5de9045236668cc669bd26e1206094.

* Revert "Fixed error in Sketcher_de"

This reverts commit 49d617384e2666a245746e5c599d2962abd678d6.

* Revert "Corrected all Veritical Dimension Tooltips"

This reverts commit 4494b18cdc8d6653b441754cbf8a19d0af6ec46d.

* Corrected Vertical Dimension Tooltip
2025-11-14 17:45:16 +00:00
sliptonic c041671a1b Merge pull request #24044 from davidgilkaufman/adaptive_stepover
[CAM] Improve Adaptive operation to successfully generate for small stepover
2025-11-14 11:43:34 -06:00
sliptonic 4dd03be0dc Merge pull request #24676 from Connor9220/TappingWithAnnotations
CAM: Add rigid tapping support to linuxcnc_post.py via Annotations
2025-11-14 11:39:59 -06:00
sliptonic 587bb9179e Merge pull request #24675 from Connor9220/PathCommandAnnotations
CAM: Path command annotations
2025-11-14 11:39:31 -06:00
sliptonic 4005b78e6d Merge pull request #22764 from tarman3/postprocess
CAM: Post Process only selected Operations
2025-11-14 11:35:27 -06:00
sliptonic 5211400cae Merge pull request #25101 from tarman3/array_dressup_translate
CAM: DressupArray - Fix python import
2025-11-14 10:46:18 -06:00
Roy-043 cc7706ec6f Core: 'Stop macro recording' menu text to Title Case (#24302)
* Core: 'Stop-macro-recording' menu text to Title Case

The modified text appears in the menu during a recording session.

* Rebase
2025-11-14 15:33:12 +01:00
revaarathore11 2903f480ae Fix tooltip text mismatch for 'Dimensions only' in Sketcher Preferences (#24825) 2025-11-14 15:10:03 +01:00
FEA-eng 3aaa225145 Spreadsheet: Update SheetTableView.cpp 2025-11-14 15:03:23 +01:00
Roy-043 dbf1f00c01 GUI: DlgParameterImp.cpp more dialog titles to Title Case (#24258) 2025-11-14 13:07:25 +00:00
Roy-043 84dfab257f GUI: CommandDoc.cpp more dialog titles to Title Case (#24250)
* GUI: CommandDoc.cpp more dialog titles to Title Case

* Rebase
2025-11-14 12:49:01 +00:00
Roy-043 26615ea5d8 GUI: Restore view items and some dialog titles to Title Case (#24222) 2025-11-14 12:31:26 +00:00
Roy-043 4417f501a5 GUI: DrawStyle submenu to Title Case (#24220) 2025-11-14 12:12:41 +00:00
Roy-043 04279e27dd Rebase (#23621) 2025-11-14 11:56:24 +00:00
Furgo 93868d54b7 Define DlgScale task panel's tab order (#25300)
* Define DlgScale task panel's tab order

To improve keyboard navigation.

Fixes: https://github.com/FreeCAD/FreeCAD/issues/23772

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-11-14 10:18:29 +00:00
Stephan T. Lavavej 9e6509a3a4 Avoid using non-Standard std::locale::empty() for MSVC 2025-11-14 00:22:18 -06:00
Chris Hennes a19db66c8b CI: Add GitHub token for Crowdin sync 2025-11-14 05:08:23 +01:00
tarman3 b0a79a6f2c CAM: DressupArray - Fix python import 2025-11-14 00:11:44 +02:00
tarman3 0dc28c57d7 CAM: Path.Geom - fix linter errors 2025-11-14 00:07:05 +02:00
tarman3 e4ec4cb0df CAM: Path.Geom.cmdsForEdge() - remove useless 'segm' 2025-11-14 00:06:38 +02:00
tarman3 9d25f6f53d CAM: Inspect - decrease default Max Highlighter Size 2025-11-14 00:02:46 +02:00
tarman3 ec5b9a808d CAM: SelectLoop improve 2025-11-13 23:29:17 +02:00
tarman3 092ba973f2 CAM: Post Process only selected Operations 2025-11-13 23:25:53 +02:00
tarman3 c0ebb8e88d CAM: Slot - Reject incorrect faces selection 2025-11-13 23:09:27 +02:00
Chris Hennes cdc798ec12 CI: Update CrowdIn action to use 1.1 release branch 2025-11-13 21:43:30 +01:00
tetektoza ca1528e2a9 Gui: Use UTF-8 string instead of UTF-16 for Reset in Expression Editor
Currently `ExpLineEdit::apply()` passes `QString::constData()` to a
printf-style format string with %s. `QString::constData() returns a
const QChar* (UTF-16, 2 bytes per char), but %s expects a const char*
(UTF-8/ASCII with 1 byte per char).

This results in a string being interpreted as in "Container":
Byte 0: 'C'
Byte 1: 0x00 (high byte of UTF-16 'C', which gets interpreted as null
terminator)

So this patch uses proper conversion to null-terminated C-String before
passing it further.
2025-11-13 21:39:54 +01:00
Rehan Ahmed a704ac301d Fix case inconsistencies (#24812)
* Fix case inconsistency - Input Hints

* Fix case inconsistency - Quick Measure

* Fix case inconsistency - Navigation Indicator

* Fix case inconsistency - BIM Status Widget

* Remove .ts translation file changes

---------

Co-authored-by: Roy-043 <70520633+Roy-043@users.noreply.github.com>
2025-11-13 20:19:19 +00:00
Rahul Paul 888ba973a5 Fix(TechDraw): Capitalize OK button in TemplateFields (#24866) 2025-11-13 20:58:21 +01:00
FEA-eng a18f45914b FEM: Update constraint_tie.py 2025-11-13 20:57:22 +01:00
luzpaz 10709bd467 Fix typos and grammar (#24827)
* Fix typos and grammar
Fixes typos and grammar in several files.

* fix missed typo

* Remove unnecessary line in LeadInOut.py

---------

Co-authored-by: Roy-043 <70520633+Roy-043@users.noreply.github.com>
2025-11-13 19:53:35 +00:00
Chris Hennes e8f826d0ed Build: Bump minor version of main branch from 1.1 to 1.2 (#25274) 2025-11-13 20:35:28 +01:00
ᴩʜᴏɴᴇᴅʀᴏɪᴅ bb37dfda0e [ BIM ]: Refactor - Save Preset Stringify (#25140)
* [ BIM ]: Refactor Save Preset Stringify

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-11-13 19:53:54 +01:00
Furgo 9c22fc55f9 BIM: Update search box text for material search (#24754)
* BIM: Update search box text for material search

* BIM: change Material Manager title to title case

* BIM: change Material Manager search placeholder text to sentence case

* BIM: reword reference to tree to avoid confusion with the Tree View

* BIM: Rename button text for creating Multi-Material for consistency
2025-11-13 19:46:38 +01:00
Ryan K 32840628ae BIM: Update sketch command name to be consistent with other workbenches (#24278)
Co-authored-by: Ryan Kembrey <ryan.kembrey@student.uts>
2025-11-13 19:45:05 +01:00
Marcell Pardavi af2d42a4aa CAM: Simulator — fix model centering when HiDPI scaling is active 2025-11-13 14:34:29 +01:00
PaddleStroke da4ebb56cb Assembly: no dragger for connected parts (#25270)
* Assembly: no dragger for connected parts

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-11-13 12:07:20 +00:00
PaddleStroke e2bab72bb5 Assembly: BOM: fix settings not applied (#25269) 2025-11-13 12:05:17 +01:00
Kacper Donat eb1e0d7f11 Gui: Save previous default for overlay widgets
For some reason the empty layout was not saved for users with existing
config. To ensure that the change does not affect existing users and is
persistent for current ones we need to save value with older default
before using it. Previous solution did not work correctly as the widgets
were not persisted correctly.
2025-11-12 19:57:23 -06:00
David Kaufman 4f33d66fb3 re-fix early exit condition for repeat integer points 2025-11-12 21:36:13 +01:00
David Kaufman f4f8bd2c81 fix cam tests
tbh the test seems kind of unstable
2025-11-12 21:36:13 +01:00
David Kaufman 62caf967c7 cleanup 2025-11-12 21:36:13 +01:00
David Kaufman ad1724550e fix adaptive early exit condition for testing repeat integer points 2025-11-12 21:36:10 +01:00
David Kaufman edce05d992 avoid retrying same integer points in optimization routine 2025-11-12 21:36:10 +01:00
David Kaufman 920a2363a7 rename resolution_factor to min_step_clipper 2025-11-12 21:36:08 +01:00
David Kaufman 183e82607a Fix units/extract RESOLUTION_FACTOR from area constants
Most of the code treats RESOLUTION_FACTOR as "number of clipper units in
a single step" -- a linear distance unit. However, there are a few
locations in which it is treated as unitless, multiplied by area
constants. This commit folds the current value of RESOLUTION_FACTOR into
these other contents in preparation for declaring it to have distance
units and increasing its value.
2025-11-12 21:36:05 +01:00
David Kaufman 2f91f74ac9 refinements 2025-11-12 21:36:02 +01:00
David Kaufman 04a9579561 [CAM] WIP fix adaptive stepover bug, many debug statements remain 2025-11-12 21:36:02 +01:00
PaddleStroke 4b50d72769 Sketcher: Fix origin showing on sketch edit 2025-11-12 19:40:25 +01:00
FEA-eng 5f8f2c5bd2 FEM: Correct categories of two FEM examples (#25246)
* FEM: Update equation_electrostatics_capacitance_two_balls_ccx.py

* FEM: Update ccx_cantilever_ele_tetra4.py
2025-11-12 19:02:55 +01:00
github-actions 8432fab0a9 Update translations from Crowdin 2025-11-11 23:44:18 -06:00
tetektoza 3f6a0ee78b Gui: Differentiate completion activation modes in Expression Editor
Currently if user tries to press TAB during Expression Editor, it
inserts both the entry and its first subentry. Also, if user browses the
dropdown with arrows keys, it inserts it's values.

Root cause of that is the regression made in latest changes to chaining
completion logic which is triggered for all completion modes including
TAB, which already has its own refresh mechanism. Also,
ExpressionTextEdit connected both activated (Enter/click) and highlight
signals to the same slot, resulting in arrow key navigation inserting
completions.

So, this adds separate slots for ExpressionTextEdit to differentiate
completion modes. And also updates tab handling to pass
ActivationMode::Highlighted to prevent double chaining.
2025-11-12 00:23:04 +01:00
Chris Hennes 4fbb389ce1 Merge pull request #21019 from kadet1090/update-formatting-style 2025-11-11 10:45:10 -06:00
Kacper Donat cf2e3026a2 chore: Add formatting to .git-blame-ignore-revs 2025-11-11 13:50:35 +01:00
Billy Huddleston bbfd84d7b1 Add rigid tapping support to linuxcnc_post.py and annotate tapping commands in Tapping.py
- Added --rigid-tap argument to linuxcnc_post.py to enable G33.1 rigid tapping cycle output.
- Implemented logic to skip G80, G98, G99 commands with tapping annotation when rigid tapping is enabled.
- Enhanced handling of G84/G74 tapping cycles for rigid tapping, including pitch (K), depth (Z), dwell (G04 P), spindle reversal (M3/M4/M5), and reverse-out moves.
- Updated Tapping.py to annotate G98/G99 and G80 commands with {"operation": "tapping"} for improved post processor handling.
2025-11-10 02:48:27 -05:00
David Kaufman 7fb93c5a50 retrigger tests 2025-11-06 13:59:04 -05:00
pre-commit-ci[bot] 0976fdb0fa [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2025-11-05 23:03:33 +00:00
David Kaufman e7643dc929 fix codeql warning 2025-11-05 17:47:27 -05:00
David Kaufman 114b679f64 fix lint warnings 2025-11-05 17:47:27 -05:00
David Kaufman 6f62d69b9f fix bugs, clean up 2025-11-05 17:47:26 -05:00
David Kaufman e464cdb73d WIP update tool controller UI 2025-11-05 17:46:03 -05:00
David Kaufman d699d080e0 Fix warning about new Profile properties NumPasses and StepOver being created automatically 2025-11-05 17:46:03 -05:00
David Kaufman d1d6846af0 [CAM] migrate ramp and lead in/out feed rates to the tool controller 2025-11-05 17:46:03 -05:00
David Kaufman f7dc85ef29 update lead in/out to use feed rate from tool controller 2025-11-05 17:46:01 -05:00
David Kaufman 093152b1dc [CAM] separate controls for feed rate percent entrance vs exit 2025-11-05 17:41:32 -05:00
David Kaufman 9c5e8f8340 [CAM] Add feed rate percent to lead in/out dressup 2025-11-05 17:23:03 -05:00
David Kaufman 9ad22dcc0e [CAM] Add feed rate percent to ramp dressup 2025-11-05 17:09:40 -05:00
Billy Huddleston bcefebca5f CAM: Simplify annotation handling in GCode and improve annotation parsing
src/Mod/CAM/App/Command.cpp:
- Removed requirement for annotations= prefix; now all text after ; is treated as annotation data.
- Updated Command::toGCode to output annotations as key-value pairs in comments.
- Improved setFromGCode to extract annotations from any comment after ;.
- Enhanced annotation parsing to handle quoted strings and floating-point numbers.
- Simplified XML serialization and restoration logic for annotations.

src/Mod/CAM/App/Path.cpp:
- Added addCommandNoRecalc, allowing bulk loading of commands without repeated recalculation.
- Refactored RestoreDocFile to read GCode files line-by-line, parse each command, and call recalculate() only once after all commands are loaded.
- Added explanatory comment above the old implementation.

src/Mod/CAM/App/Path.h:
- Declared addCommandNoRecalc in the Toolpath class.

src/Mod/CAM/CAMTests/TestPathCommandAnnotations.py:
- Adjusted unit test for scientific notation annotation to check only 6 decimal places.
- Adjusted unit test 10 to properly handle assertions with the toGCode method

src/Mod/CAM/PathSimulator/AppGL/GCodeParser.cpp:
- GCodeParser::ParseLine: Truncate at first semicolon (annotations / comment)
2025-10-15 14:43:40 -04:00
Billy Huddleston a970235484 CAM: Enhance Path.Command annotations with variant type, type-safe API, and robust persistence
- Refactored `Annotations` member to use `std::variant<std::string, double>` for type-safe storage of both string and numeric values.
- Implemented C++ methods:
	- `setAnnotation(key, value)`: overloaded for string and double types.
	- `getAnnotation(key)`: returns annotation value as string.
	- `getAnnotationString(key)`: returns string annotation.
	- `getAnnotationDouble(key, fallback)`: returns numeric annotation.
	- `getAnnotationValue(key)`: returns raw variant value.
	- `hasAnnotation(key)`: checks for annotation existence.
	- `setAnnotations(annotationString)`: parses and stores values as double if possible, otherwise as string.
- Improved XML serialization (`Save`) and deserialization (`Restore`) to persist annotation types and values, including annotation count for robust restoration.
- Updated Python bindings:
	- `Annotations` property now supports mixed-type values (str/float).
	- Values are returned as native Python types.
	- Type errors are raised for invalid assignments.
- Expanded tests in `TestPathCommandAnnotations.py`:
	- Added cases for mixed-type annotations, edge cases, and in-memory persistence using `dumpContent`/`restoreContent`.
	- Verified type preservation and correct restoration.
- Ensured backward compatibility for string-only annotations and improved error handling.

**How to use annotations in Python:**

```import Path

c = Path.Command('G1', {'X': 10.0, 'Y': 20.0, 'F': 1000.0})
c.Annotations = {
	'tool_name': '6mm_endmill',      # string
	'spindle_speed': 12000.0,        # float
	'feed_rate': 1500,               # int (stored as float)
	'operation': 'pocket',           # string
	'depth_of_cut': -2.5,            # negative float
}
print(c.Annotations)  # {'tool_name': '6mm_endmill', 'spindle_speed': 12000.0, ...}
print(type(c.Annotations['spindle_speed']))  # <class 'float'>
print(type(c.Annotations['tool_name']))      # <class 'str'>

xml = c.dumpContent()
c2 = Path.Command()
c2.restoreContent(xml)
print(c2.Annotations)  # Restored with correct types

c.addAnnotations('speed:1000 operation:drill')
print(c.Annotations['speed'])        # 1000.0 (float)
print(c.Annotations['operation'])    # 'drill' (str)
```
2025-10-15 14:26:13 -04:00
Emmanuel Ferdman 1bcf0d4996 Fix path dressup array test case
Signed-off-by: Emmanuel Ferdman <emmanuelferdman@gmail.com>
2025-07-19 13:08:36 -07:00
877 changed files with 172594 additions and 164115 deletions
+1
View File
@@ -105,3 +105,4 @@ cbea6b60942f8327e6105b12e8c1d5db4647984c # FEM: Apply pre-commit to FEM files
f9d66096878c7d89c273522b9ca57bdb14fee3bc # Rearranged CommandCreateGeo.cpp
b23d5809414d63ea90bcc744212c126645051438 # BIM: add to pre-commit and apply Black formatting
50e4864efb06faf3e2126e8cb9ff9058a08a54b2 # Draft: add to pre-commit and apply Black formatting
25c3ba733889264bcb3b3c8d2287b79053c0c8ec # All: Reformat according to new standard
+1 -1
View File
@@ -24,4 +24,4 @@ jobs:
- name: 'Checkout Repository'
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- name: 'Dependency Review'
uses: actions/dependency-review-action@56339e523c0409420f6c2c9a2f4292bbb3c07dd3 # v4
uses: actions/dependency-review-action@3c4e3dcb1aa7874d2c16be7d79418e9b7efd6261 # v4
@@ -62,6 +62,7 @@ jobs:
title: "Update translations from Crowdin"
body: "Automatic Crowdin update."
labels: "translations, automated"
token: ${{ secrets.GH_TOKEN_FOR_CROWDIN_SYNC }}
delete-branch: true
add-paths: |
src
@@ -13,6 +13,7 @@ jobs:
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
with:
fetch-depth: 0
ref: releases/FreeCAD-1-1
- name: Install Qt ≥ 6.8
uses: jurplel/install-qt-action@d325aaf2a8baeeda41ad0b5d39f84a6af9bcf005
+1 -1
View File
@@ -63,7 +63,7 @@ jobs:
include:
- { target: linux-64, os: ubuntu-22.04 }
- { target: linux-arm64, os: ubuntu-22.04-arm }
- { target: osx-64, os: macos-13 }
- { target: osx-64, os: macos-15-intel }
- { target: osx-arm64, os: macos-latest }
- { target: win-64, os: windows-latest }
fail-fast: false
+1 -1
View File
@@ -62,7 +62,7 @@ jobs:
run: |
mkdir -p ${{ env.artifactsDownloadDir }}
- name: Download artifacts
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0
with:
path: ${{ env.artifactsDownloadDir }}
- name: Save input data to file
+1 -1
View File
@@ -51,7 +51,7 @@ endif()
project(FreeCAD)
set(PACKAGE_VERSION_MAJOR "1")
set(PACKAGE_VERSION_MINOR "1")
set(PACKAGE_VERSION_MINOR "2")
set(PACKAGE_VERSION_PATCH "0") # number of patch release (e.g. "4" for the 0.18.4 release)
set(PACKAGE_VERSION_SUFFIX "dev") # either "dev" for development snapshot or "" (empty string)
set(PACKAGE_BUILD_VERSION "0") # used when the same FreeCAD version will be re-released (for example using an updated LibPack)
@@ -119,8 +119,96 @@ run_codesign "${CONTAINING_FOLDER}/${APP_NAME}"
echo "Creating disk image ${DMG_NAME}"
dmgbuild -s ${DMG_SETTINGS} -Dcontaining_folder="${CONTAINING_FOLDER}" -Dapp_name="${APP_NAME}" "${VOLUME_NAME}" "${DMG_NAME}"
# Submit it for notarization (requires that an App Store API Key has been set up in the notarytool)
time xcrun notarytool submit --wait --keychain-profile "${KEYCHAIN_PROFILE}" "${DMG_NAME}"
ID_FILE="${DMG_NAME}.notarization_id"
# Assuming that notarization succeeded, it's a good practice to staple that notarization to the DMG
xcrun stapler staple "${DMG_NAME}"
# Submit it for notarization (requires that an App Store API Key has been set up in the notarytool)
# This is a *very slow* process, and occasionally the GitHub runners lose the internet connection for a short time
# during the run. So in order to be fault-tolerant, this script polls, instead of using --wait
submit_notarization_request() {
if [[ -s "$ID_FILE" ]]; then
cat "$ID_FILE"
return
fi
local out
if ! out=$(xcrun notarytool submit --keychain-profile "$KEYCHAIN_PROFILE" \
--output-format json --no-progress "$DMG_NAME" 2>&1); then
print -r -- "$out" >&2
return 1
fi
# We asked for JSON output so we had something stable, but of course parsing JSON with ZSH is ugly, so a quick bit of
# Python does it instead...
local id
id=$(print -r -- "$out" |
/usr/bin/python3 -c 'import sys, json; print(json.load(sys.stdin).get("id",""))'
)
[[ -n "$id" ]] || { print -r -- "Could not parse submission id" >&2; return 1; }
print -r -- "$id" > "$ID_FILE"
print -r -- "$id" # ID is a string here, not an integer, so I can't just return it
}
wait_for_notarization_result() {
local id="$1" attempt=0
while :; do
if xcrun notarytool wait "$id" --keychain-profile "$KEYCHAIN_PROFILE" \
--timeout 10m --no-progress >/dev/null; then
return 0
fi
(( attempt++ ))
# If the failure was transient (timeout/HTTP/connection) just retry, but make sure to check to see if the problem
# was actually that the signing failed before retrying.
local tmp_json
tmp_json=$(mktemp)
trap 'rm -f "$tmp_json"' EXIT INT TERM
xcrun notarytool info "$id" --keychain-profile "$KEYCHAIN_PROFILE" --output-format json 2>/dev/null > "$tmp_json"
/usr/bin/python3 - "$tmp_json" <<'PY'
import sys, json
try:
with open(sys.argv[1]) as f:
s = (json.load(f).get("status") or "").lower()
if s in ("invalid", "rejected"):
sys.exit(2)
else:
sys.exit(0)
except Exception:
sys.exit(1)
PY
rc=$?
rm -f "$tmp_json"
if [[ $rc == 2 ]]; then
print -r -- "Notarization was not accepted by Apple:" >&2
xcrun notarytool log "$id" --keychain-profile "$KEYCHAIN_PROFILE" >&2
return 3
fi
if [[ $attempt -gt 120 ]]; then
print -r -- "🏳️ Notarization is taking too long, bailing out. 🏳️" >&2
return 4
fi
sleep $(( (attempt<6?2**attempt:60) + RANDOM%5 )) # Increasing timeout plus jitter for multi-run safety
done
}
if ! id="$(submit_notarization_request)"; then
print -r -- "❌ Failed to submit notarization request" >&2
exit 1
fi
if [[ -z "$id" ]]; then
print -r -- "❌ Submission succeeded but no ID was returned" >&2
exit 1
fi
print "Notarization submission ID: $id"
if wait_for_notarization_result "$id"; then
print "✅ Notarization succeeded. Stapling..."
xcrun stapler staple "$DMG_NAME"
print "Stapled: $DMG_NAME"
rm -f "$ID_FILE"
else
rc=$?
print "❌ Notarization failed (code $rc)." >&2
exit "$rc"
fi
+44 -23
View File
@@ -31,31 +31,38 @@ namespace App
class Application;
/// Helper class to manager transaction (i.e. undo/redo)
/**
* @brief A helper class to manage transactions (i.e. undo/redo).
*
* An AutoTransaction object is meant to be allocated on the stack and governs
* the transactions in that scope.
*/
class AppExport AutoTransaction
{
public:
/// Private new operator to prevent heap allocation
/// Delete the new operator to prevent heap allocation.
void* operator new(std::size_t) = delete;
public:
/** Constructor
/**
* @brief Construct an auto transaction.
*
* @param name: optional new transaction name on construction
* @param tmpName: if true and a new transaction is setup, the name given is
* @param[in] name: optional new transaction name on construction
* @param[in] tmpName: if true and a new transaction is setup, the name given is
* considered as temporary, and subsequent construction of this class (or
* calling Application::setActiveTransaction()) can override the transaction
* name.
*
* The constructor increments an internal counter
* (Application::_activeTransactionGuard). The counter prevents any new
* active transaction being setup. It also prevents close (i.e. commits) the
* current active transaction until it reaches zero. It does not have any
* effect on aborting transaction, though.
* active transactions being setup. It also prevents to close
* (i.e. commits) the current active transaction until it reaches zero. It
* does not have any effect on aborting transactions though.
*/
AutoTransaction(const char* name = nullptr, bool tmpName = false);
/** Destructor
/**
* @brief Destruct an auto transaction.
*
* This destructor decrease an internal counter
* (Application::_activeTransactionGuard), and will commit any current
@@ -63,15 +70,19 @@ public:
*/
~AutoTransaction();
/** Close or abort the transaction
/**
* @brief Close or abort the transaction.
*
* This function can be used to explicitly close (i.e. commit) the
* transaction, if the current transaction ID matches the one created inside
* the constructor. For aborting, it will abort any current transaction
* the constructor. For aborting, it will abort any current transaction.
*
* @param[in] abort: if true, abort the transaction; otherwise, commit it.
*/
void close(bool abort = false);
/** Enable/Disable any AutoTransaction instance in the current stack
/**
* @brief Enable/Disable any AutoTransaction instance on the current stack.
*
* Once disabled, any empty temporary named transaction is closed. If there
* are non-empty or non-temporary named active transaction, it will not be
@@ -79,6 +90,8 @@ public:
*
* This function may be used in, for example, Gui::Document::setEdit() to
* allow a transaction live past any command scope.
*
* @param[in] enable: if true, enable the AutoTransaction; otherwise, disable it.
*/
static void setEnable(bool enable);
@@ -87,47 +100,55 @@ private:
};
/** Helper class to lock a transaction from being closed or aborted.
/**
* @brief Helper class to lock a transaction from being closed or aborted.
*
* The helper class is used to protect some critical transaction from being
* The helper class is used to protect some critical transactions from being
* closed prematurely, e.g. when deleting some object.
*/
class AppExport TransactionLocker
{
public:
/** Constructor
* @param lock: whether to activate the lock
/**
* @brief Construct a transaction locker.
*
* @param[in] lock: whether to activate the lock
*/
TransactionLocker(bool lock = true);
/** Destructor
* Unlock the transaction is this locker is active
/**
* @brief Destruct a transaction locker.
*
* Unlock the transaction if this locker is active
*/
~TransactionLocker();
/** Activate or deactivate this locker
* @param enable: whether to activate the locker
/**
* @brief Activate or deactivate this locker.
*
* An internal counter is used to support recursive locker. When activated,
* the current active transaction cannot be closed or aborted. But the
* closing call (Application::closeActiveTransaction()) will be remembered,
* and performed when the internal lock counter reaches zero.
*
* @param enable: whether to activate the locker
*/
void activate(bool enable);
/// Check if the locker is active
/// Check if the locker is active.
bool isActive() const
{
return active;
}
/// Check if transaction is being locked
/// Check if transaction is being locked.
static bool isLocked();
friend class Application;
public:
/// Private new operator to prevent heap allocation
/// Delete the new operator to prevent heap allocation.
void* operator new(std::size_t) = delete;
private:
+5 -4
View File
@@ -140,16 +140,17 @@ public:
bool operator==(const Material& m) const
{
// clang-format off
return _matType == m._matType
&& shininess == m.shininess
if (!uuid.empty() && uuid == m.uuid) {
return true;
}
return shininess == m.shininess
&& transparency == m.transparency
&& ambientColor == m.ambientColor
&& diffuseColor == m.diffuseColor
&& specularColor == m.specularColor
&& emissiveColor == m.emissiveColor
&& image == m.image
&& image == m.imagePath
&& uuid == m.uuid;
&& imagePath == m.imagePath;
// clang-format on
}
bool operator!=(const Material& m) const
+47
View File
@@ -35,6 +35,7 @@
#include <Base/Console.h>
#include <Base/Exception.h>
#include <Base/Interpreter.h>
#include <Base/ProgramVersion.h>
#include <Base/Reader.h>
#include <Base/Writer.h>
#include <Base/Quantity.h>
@@ -2226,6 +2227,25 @@ unsigned int PropertyBoolList::getMemSize() const
// PropertyColor
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
namespace
{
/// The definition of "alpha" was corrected in FreeCAD 1.1 -- returns true if the reader is working
/// on a file that pre-dates that correction.
bool readerRequiresAlphaConversion(const Base::XMLReader &reader)
{
return Base::getVersion(reader.ProgramVersion) < Base::Version::v1_1;
}
/// Given a material, invert the alpha channel of all of its colors.
void convertAlphaInMaterial(App::Material& material)
{
material.ambientColor.a = 1.0F - material.ambientColor.a;
material.diffuseColor.a = 1.0F - material.diffuseColor.a;
material.specularColor.a = 1.0F - material.specularColor.a;
material.emissiveColor.a = 1.0F - material.emissiveColor.a;
}
}
TYPESYSTEM_SOURCE(App::PropertyColor, App::Property)
//**************************************************************************
@@ -2367,6 +2387,12 @@ void PropertyColor::Restore(Base::XMLReader& reader)
reader.readElement("PropertyColor");
// get the value of my Attribute
unsigned long rgba = reader.getAttribute<unsigned long>("value");
if (readerRequiresAlphaConversion(reader)) {
// Convert transparency / alpha value
constexpr unsigned long alphaMax = 0xff;
unsigned long alpha = alphaMax - (rgba & alphaMax);
rgba = rgba - (rgba & alphaMax) + alpha;
}
setValue(rgba);
}
@@ -2448,6 +2474,8 @@ void PropertyColorList::Restore(Base::XMLReader& reader)
// initiate a file read
reader.addFile(file.c_str(), this);
}
requiresAlphaConversion = readerRequiresAlphaConversion(reader);
}
}
@@ -2472,6 +2500,11 @@ void PropertyColorList::RestoreDocFile(Base::Reader& reader)
str >> value;
it.setPackedValue(value);
}
if (requiresAlphaConversion) {
for (auto& it : values) {
it.a = 1.0F - it.a;
}
}
setValues(values);
}
@@ -2702,6 +2735,9 @@ void PropertyMaterial::Restore(Base::XMLReader& reader)
_cMat.emissiveColor.setPackedValue(reader.getAttribute<unsigned long>("emissiveColor"));
_cMat.shininess = (float)reader.getAttribute<double>("shininess");
_cMat.transparency = (float)reader.getAttribute<double>("transparency");
if (readerRequiresAlphaConversion(reader)) {
convertAlphaInMaterial(_cMat);
}
if (reader.hasAttribute("image")) {
_cMat.image = reader.getAttribute<const char*>("image");
}
@@ -3247,6 +3283,8 @@ void PropertyMaterialList::Restore(Base::XMLReader& reader)
// initiate a file read
reader.addFile(file.c_str(), this);
}
requiresAlphaConversion = readerRequiresAlphaConversion(reader);
}
}
@@ -3330,6 +3368,7 @@ void PropertyMaterialList::RestoreDocFileV0(uint32_t count, Base::Reader& reader
str >> valueF;
it.transparency = valueF;
}
convertAlpha(values);
setValues(values);
}
@@ -3360,9 +3399,17 @@ void PropertyMaterialList::RestoreDocFileV3(Base::Reader& reader)
readString(str, it.imagePath);
readString(str, it.uuid);
}
convertAlpha(values);
setValues(values);
}
void PropertyMaterialList::convertAlpha(std::vector<App::Material>& materials) const
{
if (requiresAlphaConversion) {
std::ranges::for_each(materials, convertAlphaInMaterial);
}
}
void PropertyMaterialList::readString(Base::InputStream& str, std::string& value)
{
uint32_t uCt {};
+5
View File
@@ -1091,6 +1091,9 @@ public:
protected:
Base::Color getPyValue(PyObject* py) const override;
private:
bool requiresAlphaConversion {false}; // In 1.1 the handling of alpha was inverted
};
@@ -1294,8 +1297,10 @@ private:
void verifyIndex(int index) const;
void setMinimumSizeOne();
int resizeByOneIfNeeded(int index);
void convertAlpha(std::vector<App::Material>& materials) const;
Format formatVersion {Version_0};
bool requiresAlphaConversion {false}; // In 1.1 the handling of alpha was inverted
};
+1 -1
View File
@@ -7,7 +7,7 @@
<location filename="../../Link.cpp" line="131"/>
<source>Stores the last user choice of whether to apply CopyOnChange setup to all links
that reference the same configurable object</source>
<translation>Захоўвае апошні выбар карыстальніка адносна таго, ці варта ўжываць наладу CopyOnChange да ўсіх спасылак, якія спасылаюцца на адзін і той жа аб'ект, які наладжваецца</translation>
<translation>Захоўвае апошні выбар карыстальніка адносна таго, ці варта ўжываць наладу 'Змена копіі' (CopyOnChange) да ўсіх спасылак, якія спасылаюцца на адзін і той жа аб'ект, які наладжваецца</translation>
</message>
</context>
<context>
+22 -2
View File
@@ -32,20 +32,40 @@ namespace App
class Document;
class TransactionObject;
/** Base class of transactional objects
/**
* @brief Base class of transactional objects.
*
* A transactional object provides functionality that is inherited by its
* children to ensure that these children objects can be targeted by a
* transaction.
*/
class AppExport TransactionalObject: public App::ExtensionContainer
{
PROPERTY_HEADER_WITH_OVERRIDE(App::TransactionalObject);
public:
/// Constructor
TransactionalObject();
~TransactionalObject() override;
/// Check if this object is attached to a document.
virtual bool isAttachedToDocument() const;
/**
* @brief Deteach this object from the document.
*
* @return the name of the document this object was attached to.
*/
virtual const char* detachFromDocument();
protected:
/**
* @brief Notify the document that a property is about to be changed.
*
* This function is called before the property is changed.
*
* @param[in,out] doc the document this object is attached to.
* @param[in] prop the property that is about to be changed.
*/
void onBeforeChangeProperty(Document* doc, const Property* prop);
};
+1 -13
View File
@@ -52,10 +52,6 @@ Transaction::Transaction(int id)
transID = id;
}
/**
* A destructor.
* A more elaborate description of the destructor.
*/
Transaction::~Transaction()
{
auto& index = _Objects.get<0>();
@@ -291,16 +287,8 @@ TYPESYSTEM_SOURCE_ABSTRACT(App::TransactionObject, Base::Persistence)
//**************************************************************************
// Construction/Destruction
/**
* A constructor.
* A more elaborate description of the constructor.
*/
TransactionObject::TransactionObject() = default;
/**
* A destructor.
* A more elaborate description of the destructor.
*/
TransactionObject::~TransactionObject()
{
for (auto& v : _PropChangeMap) {
@@ -344,7 +332,7 @@ void TransactionObject::applyChn(Document& /*Doc*/, TransactionalObject* pcObj,
}
// getPropertyName() is specially coded to be safe even if prop has
// been destroies. We must prepare for the case where user removed
// been destroyed. We must prepare for the case where user removed
// a dynamic property but does not recordered as transaction.
auto name = pcObj->getPropertyName(prop);
if (!name || (!data.name.empty() && data.name != name)
+164 -32
View File
@@ -40,52 +40,105 @@ class TransactionObject;
class TransactionalObject;
/** Represents a atomic transaction of the document
/**
* @brief A class that represents an atomic transaction of the document.
*
* A transaction can contain multiple actions. These actions are represented
* by TransactionObject objects. Actions can be on objects: adding one,
* removing one, or changing one. It can also be on properties: adding one or
* removing one.
*/
class AppExport Transaction: public Base::Persistence
{
TYPESYSTEM_HEADER_WITH_OVERRIDE();
public:
/** Construction
/**
* @brief Construct a transaction.
*
* @param id: transaction id. If zero, then it will be generated
* @param[in] id: The transaction id. If zero, then it will be generated
* automatically as a monotonically increasing index across the entire
* application. User can pass in a transaction id to group multiple
* transactions from different document, so that they can be undo/redo
* application. Users can pass in a transaction id to group multiple
* transactions from different document, so that they can be undone/redone
* together.
*/
explicit Transaction(int id = 0);
/// Construction
~Transaction() override;
/// apply the content to the document
/**
* @brief Apply the content of this transaction to the document.
*
* @param[in] Doc The document to apply the transaction to.
* @param[in] forward If true, apply the transaction; otherwise, undo it.
*/
void apply(Document& Doc, bool forward);
// the utf-8 name of the transaction
/// The UTF-8 name of the transaction
std::string Name;
unsigned int getMemSize() const override;
void Save(Base::Writer& writer) const override;
/// This method is used to restore properties from an XML document.
void Restore(Base::XMLReader& reader) override;
/// Return the transaction ID
/// Get the transaction ID of this transaction.
int getID() const;
/// Generate a new unique transaction ID
/// Generate a new unique transaction ID.
static int getNewID();
/// Get the last transaction ID.
static int getLastID();
/// Returns true if the transaction list is empty; otherwise returns false.
/// Check if the transaction list is empty.
bool isEmpty() const;
/// check if this object is used in a transaction
/**
* @brief Check if this object is used in a transaction.
*
* @param[in] Obj The object to check.
* @return true if the object is used in a transaction; otherwise false.
*/
bool hasObject(const TransactionalObject* Obj) const;
/**
* @brief Record renaming a property.
*
* @param[in] Obj The object of which the property to rename.
* @param[in] pcProp The property with a new name.
* @param[in] oldName The old name of the property.
*/
void renameProperty(TransactionalObject* Obj, const Property* pcProp, const char* oldName);
/**
* @brief Record adding or removing a property from an object.
*
* @param[in] Obj The object to add or remove the property from.
* @param[in] pcProp The property to add or remove.
* @param[in] add If true, add the property; otherwise, remove it.
*/
void addOrRemoveProperty(TransactionalObject* Obj, const Property* pcProp, bool add);
/**
* @brief Record adding a new object to the transaction.
*
* @param[in] Obj The object to add.
*/
void addObjectNew(TransactionalObject* Obj);
/**
* @brief Record removing an object from the transaction.
*
* @param[in] Obj The object to remove.
*/
void addObjectDel(const TransactionalObject* Obj);
/**
*@brief Record changing an object in the transaction.
*
* @param[in] Obj The object to change.
* @param[in] Prop The property that is changed.
*/
void addObjectChange(const TransactionalObject* Obj, const Property* Prop);
private:
@@ -103,41 +156,87 @@ private:
_Objects;
};
/** Represents an entry for an object in a Transaction
/**
* @brief Class that represents an entry for an object in a Transaction.
*
* This class is used to store the information about the object and its
* properties. It should not be confused with the TransactionalObject class
* that is a base class that contains functionality for a DocumentObject
* regarding transactions.
*/
class AppExport TransactionObject: public Base::Persistence
{
TYPESYSTEM_HEADER_WITH_OVERRIDE();
public:
/// Construction
TransactionObject();
/// Destruction
~TransactionObject() override;
virtual void applyNew(Document& Doc, TransactionalObject* pcObj);
virtual void applyDel(Document& Doc, TransactionalObject* pcObj);
virtual void applyChn(Document& Doc, TransactionalObject* pcObj, bool Forward);
/**
* @brief Apply the transaction that adds a new object to the document.
*
* @param[in,out] doc The document to apply the transaction to.
* @param[in,out] obj The object that is added in the transaction.
*/
virtual void applyNew(Document& doc, TransactionalObject* obj);
void setProperty(const Property* pcProp);
void renameProperty(const Property* pcProp, const char* newName);
void addOrRemoveProperty(const Property* pcProp, bool add);
/**
* @brief Apply the transaction that removes an object from the document.
*
* @param[in,out] doc The document to apply the transaction to.
* @param[in,out] obj The object that is removed in the transaction.
*/
virtual void applyDel(Document& doc, TransactionalObject* obj);
/**
* @brief Apply the transaction that changes an object in the document.
*
* @param[in,out] doc The document to apply the transaction to.
* @param[in,out] obj The object that is changed in the transaction.
* @param[in] forward If true, apply the transaction; otherwise, undo it.
*/
virtual void applyChn(Document& doc, TransactionalObject* obj, bool forward);
/**
* @brief Set the property of the object that is affected by the transaction.
*
* @param[in] prop The property that is affected by the transaction.
*/
void setProperty(const Property* prop);
/**
* @brief Rename a property.
*
* @param[in] pcProp The property with the new name.
* @param[in] oldName The old name of the property.
*/
void renameProperty(const Property* pcProp, const char* oldName);
/**
* @brief Add or remove a property from the object.
*
* @param[in] prop The property to add or remove.
* @param[in] add If true, add the property; otherwise, remove it.
*/
void addOrRemoveProperty(const Property* prop, bool add);
unsigned int getMemSize() const override;
void Save(Base::Writer& writer) const override;
/// This method is used to restore properties from an XML document.
void Restore(Base::XMLReader& reader) override;
friend class Transaction;
protected:
/// The status of the transaction object.
enum Status
{
New,
Del,
Chn
New, ///< A new object is added to the document.
Del, ///< An object is deleted from the document.
Chn ///< An object is changed in the document.
} status {New};
/// Struct to maintain property information.
struct PropData: DynamicProperty::PropData
{
Base::Type propertyType;
@@ -145,34 +244,59 @@ protected:
// for property renaming
std::string nameOrig;
};
/// A map to maintain the properties of the object.
std::unordered_map<int64_t, PropData> _PropChangeMap;
/// The name of the object in the document.
std::string _NameInDocument;
};
/** Represents an entry for a document object in a transaction
/**
* @brief Class that represents an entry for a document object in a transaction.
*/
class AppExport TransactionDocumentObject: public TransactionObject
{
TYPESYSTEM_HEADER_WITH_OVERRIDE();
public:
/// Construction
TransactionDocumentObject();
/// Destruction
~TransactionDocumentObject() override;
void applyNew(Document& Doc, TransactionalObject* pcObj) override;
void applyDel(Document& Doc, TransactionalObject* pcObj) override;
};
/**
* @brief Class that represents a factory for creating transaction objects.
*
* This class is used to create transaction objects for different types of
* transactions.
*/
class AppExport TransactionFactory
{
public:
/// Get the singleton instance of the TransactionFactory.
static TransactionFactory& instance();
/// Destruct the singleton instance of the TransactionFactory.
static void destruct();
/**
* @brief Create a transaction object for the given type.
*
* @param[in] type The type of the transaction object to create.
* @return A pointer to the created transaction object.
*/
TransactionObject* createTransaction(const Base::Type& type) const;
/**
* @brief Add a producer for a transaction object.
*
* @param[in] type The type id of the transaction object.
* @param[in,out] producer The producer to add.
*/
void addProducer(const Base::Type& type, Base::AbstractProducer* producer);
private:
@@ -183,10 +307,20 @@ private:
~TransactionFactory() = default;
};
/**
* @brief Class that represents a producer for creating transaction objects.
*
* @tparam CLASS The class of the transaction object to produce.
*/
template<class CLASS>
class TransactionProducer: public Base::AbstractProducer
{
public:
/**
* @brief Construct a transaction producer.
*
* @param[in] type The type of the transaction object.
*/
explicit TransactionProducer(const Base::Type& type)
{
TransactionFactory::instance().addProducer(type, this);
@@ -194,9 +328,7 @@ public:
~TransactionProducer() override = default;
/**
* Creates an instance of the specified transaction object.
*/
/// Creates an instance of the specified transaction object.
void* Produce() const override
{
return (new CLASS);
+84
View File
@@ -0,0 +1,84 @@
// SPDX-License-Identifier: LGPL-2.1-or-later
/***************************************************************************
* Copyright (c) 2024 Werner Mayer <wmayer[at]users.sourceforge.net> *
* *
* This file is part of FreeCAD. *
* *
* FreeCAD is free software: you can redistribute it and/or modify it *
* under the terms of the GNU Lesser General Public License as *
* published by the Free Software Foundation, either version 2.1 of the *
* License, or (at your option) any later version. *
* *
* FreeCAD is distributed in the hope that it will be useful, but *
* WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with FreeCAD. If not, see *
* <https://www.gnu.org/licenses/>. *
* *
**************************************************************************/
#ifndef BASE_PROGRAM_VERSION_H
#define BASE_PROGRAM_VERSION_H
#include <algorithm>
#include <cstdint>
#include <string_view>
#include <FCGlobal.h>
namespace Base
{
enum class Version : std::uint8_t
{
v0_1x,
v0_16,
v0_17,
v0_18,
v0_19,
v0_20,
v0_21,
v0_22,
v1_0,
v1_1,
v1_x,
};
inline Version getVersion(std::string_view str)
{
// clang-format off
struct VersionItem
{
std::string_view name;
Version version;
};
static const std::initializer_list<VersionItem> items = {
{.name="0.16", .version=Version::v0_16},
{.name="0.17", .version=Version::v0_17},
{.name="0.18", .version=Version::v0_18},
{.name="0.19", .version=Version::v0_19},
{.name="0.20", .version=Version::v0_20},
{.name="0.21", .version=Version::v0_21},
{.name="0.22", .version=Version::v0_22},
{.name="1.0" , .version=Version::v1_0 },
{.name="1.1" , .version=Version::v1_1 },
};
// clang-format on
auto it = std::ranges::find_if(items, [str](const auto& item) {
return str.compare(0, item.name.size(), item.name) == 0;
});
if (it != items.end()) {
return it->version;
}
if (!str.empty() && str[0] == '0') {
return Version::v0_1x;
}
return Version::v1_x;
}
} // namespace Base
#endif // BASE_PROGRAM_VERSION_H
-4
View File
@@ -65,11 +65,7 @@ using namespace std;
Base::XMLReader::XMLReader(const char* FileName, std::istream& str)
: _File(FileName)
{
#ifdef _MSC_VER
str.imbue(std::locale::empty());
#else
str.imbue(std::locale::classic());
#endif
// create the parser
parser = XMLReaderFactory::createXMLReader(); // NOLINT
+6 -6
View File
@@ -9,17 +9,17 @@
<translation>Стандартная (мм, кг, с, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="323"/>
<location filename="../../UnitsSchemasData.h" line="326"/>
<source>MKS (m, kg, s, °)</source>
<translation>Сістэма МКС (м, кг, с, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="587"/>
<location filename="../../UnitsSchemasData.h" line="593"/>
<source>US customary (in, lb)</source>
<translation>Звычайная Злучаных Штатаў (цалі, фунты)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="636"/>
<location filename="../../UnitsSchemasData.h" line="642"/>
<source>Imperial for Civil Eng (ft, lb, mph)</source>
<translation>Брытанская для грамадскіх інжынераў (футы, фунты, міль/г)</translation>
</message>
@@ -29,12 +29,12 @@
<translation>Брытанская сістэма (цалі, фунты)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="548"/>
<location filename="../../UnitsSchemasData.h" line="554"/>
<source>Building Euro (cm, m², m³)</source>
<translation>Еўрапейская будаўнічая (см, м², м³)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="625"/>
<location filename="../../UnitsSchemasData.h" line="631"/>
<source>Building US (ft-in, sqft, cft)</source>
<translation>Будаўнічая Злучаных Штатаў (футы-цалі, кв. футы, куб. футы)</translation>
</message>
@@ -44,7 +44,7 @@
<translation>Малыя метрычныя дэталі і CNC (мм, мм/хв)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="575"/>
<location filename="../../UnitsSchemasData.h" line="581"/>
<source>FEM (mm, N, s)</source>
<translation>МКЭ (мм, Н, с)</translation>
</message>
+6 -6
View File
@@ -9,17 +9,17 @@
<translation>Sistema Estàndard (mm, kg, s, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="323"/>
<location filename="../../UnitsSchemasData.h" line="326"/>
<source>MKS (m, kg, s, °)</source>
<translation>Sistema MKS (m, kg, s, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="587"/>
<location filename="../../UnitsSchemasData.h" line="593"/>
<source>US customary (in, lb)</source>
<translation>Sistema US (in, lb)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="636"/>
<location filename="../../UnitsSchemasData.h" line="642"/>
<source>Imperial for Civil Eng (ft, lb, mph)</source>
<translation>Sistema Imperial per Enginyeria Civil (ft, lb, mph)</translation>
</message>
@@ -29,12 +29,12 @@
<translation>Sistema imperial decimal (in, lb)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="548"/>
<location filename="../../UnitsSchemasData.h" line="554"/>
<source>Building Euro (cm, m², m³)</source>
<translation>Sistema Construcció Euro (cm, m², m³)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="625"/>
<location filename="../../UnitsSchemasData.h" line="631"/>
<source>Building US (ft-in, sqft, cft)</source>
<translation>Sistema Construcció US (ft-in, sqft, cft)</translation>
</message>
@@ -44,7 +44,7 @@
<translation>Mètrica per a peces petites i CNC (mm, mm/min)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="575"/>
<location filename="../../UnitsSchemasData.h" line="581"/>
<source>FEM (mm, N, s)</source>
<translation>FEM (mm, N, s)</translation>
</message>
+7 -7
View File
@@ -9,19 +9,19 @@
<translation>Standardní (mm, kg, s, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="323"/>
<location filename="../../UnitsSchemasData.h" line="326"/>
<source>MKS (m, kg, s, °)</source>
<translation>MKS (m, kg, s, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="587"/>
<location filename="../../UnitsSchemasData.h" line="593"/>
<source>US customary (in, lb)</source>
<translation>Obvyklé v USA (in, lb)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="636"/>
<location filename="../../UnitsSchemasData.h" line="642"/>
<source>Imperial for Civil Eng (ft, lb, mph)</source>
<translation type="unfinished">Imperial for Civil Eng (ft, lb, mph)</translation>
<translation>Imperiální pro stavebnictví (ft, lb, mph)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="75"/>
@@ -29,12 +29,12 @@
<translation>Imperiální desetinné (palce, libry)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="548"/>
<location filename="../../UnitsSchemasData.h" line="554"/>
<source>Building Euro (cm, m², m³)</source>
<translation>Stavební Euro (cm, m², m³)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="625"/>
<location filename="../../UnitsSchemasData.h" line="631"/>
<source>Building US (ft-in, sqft, cft)</source>
<translation>Stavební US (ft-in, sqft, cuft)</translation>
</message>
@@ -44,7 +44,7 @@
<translation>Metrické malé díly &amp; CNC (mm, mm/min)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="575"/>
<location filename="../../UnitsSchemasData.h" line="581"/>
<source>FEM (mm, N, s)</source>
<translation>MKP (mm, N, s)</translation>
</message>
+6 -6
View File
@@ -9,17 +9,17 @@
<translation>Standard (mm, kg, s, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="323"/>
<location filename="../../UnitsSchemasData.h" line="326"/>
<source>MKS (m, kg, s, °)</source>
<translation>MKS (m, kg, s, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="587"/>
<location filename="../../UnitsSchemasData.h" line="593"/>
<source>US customary (in, lb)</source>
<translation>Standard, US (i, lb)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="636"/>
<location filename="../../UnitsSchemasData.h" line="642"/>
<source>Imperial for Civil Eng (ft, lb, mph)</source>
<translation>Imperial for bygningsingeniører (ft, ft/s)</translation>
</message>
@@ -29,12 +29,12 @@
<translation>Imperial (i, lb)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="548"/>
<location filename="../../UnitsSchemasData.h" line="554"/>
<source>Building Euro (cm, m², m³)</source>
<translation>Bygningsstandard, EU (cm, m2, m3)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="625"/>
<location filename="../../UnitsSchemasData.h" line="631"/>
<source>Building US (ft-in, sqft, cft)</source>
<translation>Bygningsstandard, US (ft-in, sqft, cft)</translation>
</message>
@@ -44,7 +44,7 @@
<translation>Metrisk finmekanik og CNC (mm, mm/min)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="575"/>
<location filename="../../UnitsSchemasData.h" line="581"/>
<source>FEM (mm, N, s)</source>
<translation>FEM (mm, N, s)</translation>
</message>
+6 -6
View File
@@ -9,17 +9,17 @@
<translation>Standard (mm, kg, s, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="323"/>
<location filename="../../UnitsSchemasData.h" line="326"/>
<source>MKS (m, kg, s, °)</source>
<translation>MKS (m, kg, s, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="587"/>
<location filename="../../UnitsSchemasData.h" line="593"/>
<source>US customary (in, lb)</source>
<translation>US-Maßeinheiten (in, lb)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="636"/>
<location filename="../../UnitsSchemasData.h" line="642"/>
<source>Imperial for Civil Eng (ft, lb, mph)</source>
<translation>Angloamerikanisch für Bauingenieurwesen (ft, lb, mph)</translation>
</message>
@@ -29,12 +29,12 @@
<translation>Angloamerikanisch dezimal (in, lb)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="548"/>
<location filename="../../UnitsSchemasData.h" line="554"/>
<source>Building Euro (cm, m², m³)</source>
<translation>Euro-Bauwesen (cm, m², m³)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="625"/>
<location filename="../../UnitsSchemasData.h" line="631"/>
<source>Building US (ft-in, sqft, cft)</source>
<translation>US-Bauwesen (ft-in, sqft, cft)</translation>
</message>
@@ -44,7 +44,7 @@
<translation>Metrische Kleinteile &amp; CNC (mm, mm/min)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="575"/>
<location filename="../../UnitsSchemasData.h" line="581"/>
<source>FEM (mm, N, s)</source>
<translation>FEM (mm, N, s)</translation>
</message>
+6 -6
View File
@@ -9,17 +9,17 @@
<translation>Στάνταρ (mm, kg, s, ")</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="323"/>
<location filename="../../UnitsSchemasData.h" line="326"/>
<source>MKS (m, kg, s, °)</source>
<translation>MKS (m, kg, s, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="587"/>
<location filename="../../UnitsSchemasData.h" line="593"/>
<source>US customary (in, lb)</source>
<translation>Μονάδες ΗΠΑ (ίντσες/λίβρες)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="636"/>
<location filename="../../UnitsSchemasData.h" line="642"/>
<source>Imperial for Civil Eng (ft, lb, mph)</source>
<translation type="unfinished">Imperial for Civil Eng (ft, lb, mph)</translation>
</message>
@@ -29,12 +29,12 @@
<translation>Αγγλοσαξονικό Συστήματος Μονάδων (ίντσες/λίβρες)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="548"/>
<location filename="../../UnitsSchemasData.h" line="554"/>
<source>Building Euro (cm, m², m³)</source>
<translation>Μονάδες Μέτρησης Ευρώπης (εκατοστά cm,/τετραγωνικά μέτρα cm²/κυβικά μέτρα m³)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="625"/>
<location filename="../../UnitsSchemasData.h" line="631"/>
<source>Building US (ft-in, sqft, cft)</source>
<translation>Μονάδες Μέτρησης ΗΠΑ (πόδια-ίντσες/τετραγωνικά πόδια/κυβικά πόδια)</translation>
</message>
@@ -44,7 +44,7 @@
<translation>Μετρικό σύστημα μικρών εξαρτημάτων &amp; CNC (χιλιοστά mm, χιλιοστά/λεπτά mm/min) </translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="575"/>
<location filename="../../UnitsSchemasData.h" line="581"/>
<source>FEM (mm, N, s)</source>
<translation>FEM (mm, N, sec)</translation>
</message>
@@ -9,19 +9,19 @@
<translation>Estándar (mm, kg, s, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="323"/>
<location filename="../../UnitsSchemasData.h" line="326"/>
<source>MKS (m, kg, s, °)</source>
<translation>MKS (m, kg, s, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="587"/>
<location filename="../../UnitsSchemasData.h" line="593"/>
<source>US customary (in, lb)</source>
<translation>Sistema estadounidense (EE. UU) (in, lb)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="636"/>
<location filename="../../UnitsSchemasData.h" line="642"/>
<source>Imperial for Civil Eng (ft, lb, mph)</source>
<translation type="unfinished">Imperial for Civil Eng (ft, lb, mph)</translation>
<translation>Imperiales para ingeniería civil (pies, libras, millas por hora)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="75"/>
@@ -29,12 +29,12 @@
<translation>Decimales imperiales (in, lb)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="548"/>
<location filename="../../UnitsSchemasData.h" line="554"/>
<source>Building Euro (cm, m², m³)</source>
<translation>Construcción Euro (cm, m², m³)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="625"/>
<location filename="../../UnitsSchemasData.h" line="631"/>
<source>Building US (ft-in, sqft, cft)</source>
<translation>Construcción US (ft-in, sqft, cft)</translation>
</message>
@@ -44,7 +44,7 @@
<translation>Piezas pequeñas métricas y CNC (mm, mm/min)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="575"/>
<location filename="../../UnitsSchemasData.h" line="581"/>
<source>FEM (mm, N, s)</source>
<translation>FEM (mm, N, s)</translation>
</message>
+6 -6
View File
@@ -9,17 +9,17 @@
<translation>Estandarra (mm, kg, s, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="323"/>
<location filename="../../UnitsSchemasData.h" line="326"/>
<source>MKS (m, kg, s, °)</source>
<translation>MKS (m, kg, s, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="587"/>
<location filename="../../UnitsSchemasData.h" line="593"/>
<source>US customary (in, lb)</source>
<translation>AEBko pertsonalizatua (in, lb)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="636"/>
<location filename="../../UnitsSchemasData.h" line="642"/>
<source>Imperial for Civil Eng (ft, lb, mph)</source>
<translation type="unfinished">Imperial for Civil Eng (ft, lb, mph)</translation>
</message>
@@ -29,12 +29,12 @@
<translation>Dezimal inperiala (in, lb)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="548"/>
<location filename="../../UnitsSchemasData.h" line="554"/>
<source>Building Euro (cm, m², m³)</source>
<translation>Europar neurriak (cm, m², m³)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="625"/>
<location filename="../../UnitsSchemasData.h" line="631"/>
<source>Building US (ft-in, sqft, cft)</source>
<translation>AEBetako neurriak (ft-in, sqft, cft)</translation>
</message>
@@ -44,7 +44,7 @@
<translation type="unfinished">Metric small parts &amp; CNC (mm, mm/min)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="575"/>
<location filename="../../UnitsSchemasData.h" line="581"/>
<source>FEM (mm, N, s)</source>
<translation>FEM (mm, N, s)</translation>
</message>
+6 -6
View File
@@ -9,17 +9,17 @@
<translation>Standardi (mm, kg, s, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="323"/>
<location filename="../../UnitsSchemasData.h" line="326"/>
<source>MKS (m, kg, s, °)</source>
<translation>MKS (m, kg, s, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="587"/>
<location filename="../../UnitsSchemasData.h" line="593"/>
<source>US customary (in, lb)</source>
<translation>USA:n yksikköjärjestelmä (tuumat/ paunat)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="636"/>
<location filename="../../UnitsSchemasData.h" line="642"/>
<source>Imperial for Civil Eng (ft, lb, mph)</source>
<translation>Brittiläinen, maa- ja vesirakentaminen (ft, lb, mph)</translation>
</message>
@@ -29,12 +29,12 @@
<translation>Englantilainen desimaaliluku (tuumat / paunat)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="548"/>
<location filename="../../UnitsSchemasData.h" line="554"/>
<source>Building Euro (cm, m², m³)</source>
<translation>Rakentaminen Euro (cm/m²/m³)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="625"/>
<location filename="../../UnitsSchemasData.h" line="631"/>
<source>Building US (ft-in, sqft, cft)</source>
<translation>Rakentaminen USA (ft-in, sqft, cft)</translation>
</message>
@@ -44,7 +44,7 @@
<translation>Metrinen, pienet osat &amp; CNC (mm, mm/min)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="575"/>
<location filename="../../UnitsSchemasData.h" line="581"/>
<source>FEM (mm, N, s)</source>
<translation>FEM (mm, N, s)</translation>
</message>
+6 -6
View File
@@ -9,17 +9,17 @@
<translation>Standard (mm, kg, s, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="323"/>
<location filename="../../UnitsSchemasData.h" line="326"/>
<source>MKS (m, kg, s, °)</source>
<translation>MKS (m, kg, s, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="587"/>
<location filename="../../UnitsSchemasData.h" line="593"/>
<source>US customary (in, lb)</source>
<translation>Unités états-uniennes (in, lb)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="636"/>
<location filename="../../UnitsSchemasData.h" line="642"/>
<source>Imperial for Civil Eng (ft, lb, mph)</source>
<translation>Impérial pour le génie civil (ft, lb, mph)</translation>
</message>
@@ -29,12 +29,12 @@
<translation>Système impérial (in, lb)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="548"/>
<location filename="../../UnitsSchemasData.h" line="554"/>
<source>Building Euro (cm, m², m³)</source>
<translation>Construction européenne (cm, m², m³)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="625"/>
<location filename="../../UnitsSchemasData.h" line="631"/>
<source>Building US (ft-in, sqft, cft)</source>
<translation>Construction états-unienne (ft-in, sqft, cft)</translation>
</message>
@@ -44,7 +44,7 @@
<translation>Métrique, petites pièces &amp; CNC (mm, mm/min)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="575"/>
<location filename="../../UnitsSchemasData.h" line="581"/>
<source>FEM (mm, N, s)</source>
<translation>FEM (mm, N, s)</translation>
</message>
+6 -6
View File
@@ -9,17 +9,17 @@
<translation>Standard (mm, kg, s, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="323"/>
<location filename="../../UnitsSchemasData.h" line="326"/>
<source>MKS (m, kg, s, °)</source>
<translation>MKS (m, kg, s, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="587"/>
<location filename="../../UnitsSchemasData.h" line="593"/>
<source>US customary (in, lb)</source>
<translation>U. S. prilagođeno (in, lb)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="636"/>
<location filename="../../UnitsSchemasData.h" line="642"/>
<source>Imperial for Civil Eng (ft, lb, mph)</source>
<translation type="unfinished">Imperial for Civil Eng (ft, lb, mph)</translation>
</message>
@@ -29,12 +29,12 @@
<translation>Carski decimalni (in, lb)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="548"/>
<location filename="../../UnitsSchemasData.h" line="554"/>
<source>Building Euro (cm, m², m³)</source>
<translation>Europska Gradnja (cm, m², m³)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="625"/>
<location filename="../../UnitsSchemasData.h" line="631"/>
<source>Building US (ft-in, sqft, cft)</source>
<translation>Gradnja US (ft-in, sqft, cft)</translation>
</message>
@@ -44,7 +44,7 @@
<translation>Metrički mali dijelovi &amp; CNC (mm, mm/min)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="575"/>
<location filename="../../UnitsSchemasData.h" line="581"/>
<source>FEM (mm, N, s)</source>
<translation>FEM (mm, N, s)</translation>
</message>
+6 -6
View File
@@ -9,17 +9,17 @@
<translation>Alapértelmezett (mm, kg, s, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="323"/>
<location filename="../../UnitsSchemasData.h" line="326"/>
<source>MKS (m, kg, s, °)</source>
<translation>MKS rendszer (m, kg, s, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="587"/>
<location filename="../../UnitsSchemasData.h" line="593"/>
<source>US customary (in, lb)</source>
<translation>US szokásos (in, lb)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="636"/>
<location filename="../../UnitsSchemasData.h" line="642"/>
<source>Imperial for Civil Eng (ft, lb, mph)</source>
<translation>Angolszász polgári mérnöki (láb, font, mph)</translation>
</message>
@@ -29,12 +29,12 @@
<translation>Császári decimális (in, lb)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="548"/>
<location filename="../../UnitsSchemasData.h" line="554"/>
<source>Building Euro (cm, m², m³)</source>
<translation>Épület Euro (cm, m², m³)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="625"/>
<location filename="../../UnitsSchemasData.h" line="631"/>
<source>Building US (ft-in, sqft, cft)</source>
<translation>Építészet US (láb-hüvelyk, négyzetláb, köbláb)</translation>
</message>
@@ -44,7 +44,7 @@
<translation>Metrikus kis alkatrészek és CNC (mm, mm/min)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="575"/>
<location filename="../../UnitsSchemasData.h" line="581"/>
<source>FEM (mm, N, s)</source>
<translation>VEM (mm, N, mp)</translation>
</message>
+6 -6
View File
@@ -9,17 +9,17 @@
<translation>Standard (mm, kg, s, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="323"/>
<location filename="../../UnitsSchemasData.h" line="326"/>
<source>MKS (m, kg, s, °)</source>
<translation>MKS (m, kg, s, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="587"/>
<location filename="../../UnitsSchemasData.h" line="593"/>
<source>US customary (in, lb)</source>
<translation>Tradizionale US (in, lb)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="636"/>
<location filename="../../UnitsSchemasData.h" line="642"/>
<source>Imperial for Civil Eng (ft, lb, mph)</source>
<translation>Imperiale per Ingegneria civile (ft, lb, mph)</translation>
</message>
@@ -29,12 +29,12 @@
<translation>Imperiale decimale (in, lb)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="548"/>
<location filename="../../UnitsSchemasData.h" line="554"/>
<source>Building Euro (cm, m², m³)</source>
<translation>Costruttivo Euro (cm, m², m³)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="625"/>
<location filename="../../UnitsSchemasData.h" line="631"/>
<source>Building US (ft-in, sqft, cft)</source>
<translation>Costruttivo US (ft-in, sqft, cft)</translation>
</message>
@@ -44,7 +44,7 @@
<translation>Metrico piccole parti &amp; CNC (mm, mm/min)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="575"/>
<location filename="../../UnitsSchemasData.h" line="581"/>
<source>FEM (mm, N, s)</source>
<translation>FEM (mm, N, s)</translation>
</message>
+6 -6
View File
@@ -9,17 +9,17 @@
<translation>mm, kg, s, °</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="323"/>
<location filename="../../UnitsSchemasData.h" line="326"/>
<source>MKS (m, kg, s, °)</source>
<translation>MKS単位系m, kg, s, °</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="587"/>
<location filename="../../UnitsSchemasData.h" line="593"/>
<source>US customary (in, lb)</source>
<translation>in, lb</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="636"/>
<location filename="../../UnitsSchemasData.h" line="642"/>
<source>Imperial for Civil Eng (ft, lb, mph)</source>
<translation> ft, lb, mph</translation>
</message>
@@ -29,12 +29,12 @@
<translation>in, lb</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="548"/>
<location filename="../../UnitsSchemasData.h" line="554"/>
<source>Building Euro (cm, m², m³)</source>
<translation>cm, m², m³</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="625"/>
<location filename="../../UnitsSchemasData.h" line="631"/>
<source>Building US (ft-in, sqft, cft)</source>
<translation>ft-in, sqft, cft</translation>
</message>
@@ -44,7 +44,7 @@
<translation>CNC工作機械mmmm/min</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="575"/>
<location filename="../../UnitsSchemasData.h" line="581"/>
<source>FEM (mm, N, s)</source>
<translation>mm, N, s</translation>
</message>
+6 -6
View File
@@ -9,17 +9,17 @@
<translation> (, , , °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="323"/>
<location filename="../../UnitsSchemasData.h" line="326"/>
<source>MKS (m, kg, s, °)</source>
<translation> (, , , °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="587"/>
<location filename="../../UnitsSchemasData.h" line="593"/>
<source>US customary (in, lb)</source>
<translation>US (, )</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="636"/>
<location filename="../../UnitsSchemasData.h" line="642"/>
<source>Imperial for Civil Eng (ft, lb, mph)</source>
<translation> (, , /)</translation>
</message>
@@ -29,12 +29,12 @@
<translation> . .(, )</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="548"/>
<location filename="../../UnitsSchemasData.h" line="554"/>
<source>Building Euro (cm, m², m³)</source>
<translation> (, ², ³)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="625"/>
<location filename="../../UnitsSchemasData.h" line="631"/>
<source>Building US (ft-in, sqft, cft)</source>
<translation> (-,. , . .)</translation>
</message>
@@ -44,7 +44,7 @@
<translation> &amp; CNC(, /)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="575"/>
<location filename="../../UnitsSchemasData.h" line="581"/>
<source>FEM (mm, N, s)</source>
<translation> (, , )</translation>
</message>
+6 -6
View File
@@ -9,17 +9,17 @@
<translation> (mm, kg, s, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="323"/>
<location filename="../../UnitsSchemasData.h" line="326"/>
<source>MKS (m, kg, s, °)</source>
<translation>MKS (m, kg, s, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="587"/>
<location filename="../../UnitsSchemasData.h" line="593"/>
<source>US customary (in, lb)</source>
<translation> (in, lb)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="636"/>
<location filename="../../UnitsSchemasData.h" line="642"/>
<source>Imperial for Civil Eng (ft, lb, mph)</source>
<translation type="unfinished">Imperial for Civil Eng (ft, lb, mph)</translation>
</message>
@@ -29,12 +29,12 @@
<translation> (in/lb)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="548"/>
<location filename="../../UnitsSchemasData.h" line="554"/>
<source>Building Euro (cm, m², m³)</source>
<translation> (cm/m²/m³)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="625"/>
<location filename="../../UnitsSchemasData.h" line="631"/>
<source>Building US (ft-in, sqft, cft)</source>
<translation> (ft-in/sqft/cft)</translation>
</message>
@@ -44,7 +44,7 @@
<translation type="unfinished">Metric small parts &amp; CNC (mm, mm/min)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="575"/>
<location filename="../../UnitsSchemasData.h" line="581"/>
<source>FEM (mm, N, s)</source>
<translation type="unfinished">FEM (mm, N, s)</translation>
</message>
+6 -6
View File
@@ -9,17 +9,17 @@
<translation>Standaard (mm, kg, s, graden)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="323"/>
<location filename="../../UnitsSchemasData.h" line="326"/>
<source>MKS (m, kg, s, °)</source>
<translation>MKS (m, kg, s, graden)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="587"/>
<location filename="../../UnitsSchemasData.h" line="593"/>
<source>US customary (in, lb)</source>
<translation>Amerikaans (in, lb)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="636"/>
<location filename="../../UnitsSchemasData.h" line="642"/>
<source>Imperial for Civil Eng (ft, lb, mph)</source>
<translation>Engelse eenheden voor Civiele Techniek (ft, lb, mph)</translation>
</message>
@@ -29,12 +29,12 @@
<translation>Engels (in, lb)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="548"/>
<location filename="../../UnitsSchemasData.h" line="554"/>
<source>Building Euro (cm, m², m³)</source>
<translation>Bouw (Europees) (cm, m², m³)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="625"/>
<location filename="../../UnitsSchemasData.h" line="631"/>
<source>Building US (ft-in, sqft, cft)</source>
<translation>Bouw (Amerikaans) (ft-in, sqft, cft)</translation>
</message>
@@ -44,7 +44,7 @@
<translation>Metrische kleine onderdelen en CNC (mm, mm/min)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="575"/>
<location filename="../../UnitsSchemasData.h" line="581"/>
<source>FEM (mm, N, s)</source>
<translation>FEM (mm, N, s)</translation>
</message>
+6 -6
View File
@@ -9,17 +9,17 @@
<translation>Standardowe (mm, kg, s, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="323"/>
<location filename="../../UnitsSchemasData.h" line="326"/>
<source>MKS (m, kg, s, °)</source>
<translation>MKS (m, kg, s, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="587"/>
<location filename="../../UnitsSchemasData.h" line="593"/>
<source>US customary (in, lb)</source>
<translation>Zwyczajowy USA (in, lb)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="636"/>
<location filename="../../UnitsSchemasData.h" line="642"/>
<source>Imperial for Civil Eng (ft, lb, mph)</source>
<translation>Brytyjski dla inżynierii lądowej (ft, lb, mph)</translation>
</message>
@@ -29,12 +29,12 @@
<translation>Dziesiętny brytyjski (in, lb)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="548"/>
<location filename="../../UnitsSchemasData.h" line="554"/>
<source>Building Euro (cm, m², m³)</source>
<translation>Budowlany europejski (cm, m², m³)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="625"/>
<location filename="../../UnitsSchemasData.h" line="631"/>
<source>Building US (ft-in, sqft, cft)</source>
<translation>Budowlany USA (ft-in, sqft, cft)</translation>
</message>
@@ -44,7 +44,7 @@
<translation>Metryczny dla mniejszych części i CNC (mm, mm/min)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="575"/>
<location filename="../../UnitsSchemasData.h" line="581"/>
<source>FEM (mm, N, s)</source>
<translation>MES (mm, N, s)</translation>
</message>
@@ -9,17 +9,17 @@
<translation>Padrão (mm, kg, s, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="323"/>
<location filename="../../UnitsSchemasData.h" line="326"/>
<source>MKS (m, kg, s, °)</source>
<translation>MKS (m, kg, s, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="587"/>
<location filename="../../UnitsSchemasData.h" line="593"/>
<source>US customary (in, lb)</source>
<translation>Padrão US (in/lb)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="636"/>
<location filename="../../UnitsSchemasData.h" line="642"/>
<source>Imperial for Civil Eng (ft, lb, mph)</source>
<translation>Unidades Imperiais Eng. Civil (pés, libras, milhas por hora)</translation>
</message>
@@ -29,12 +29,12 @@
<translation>Decimal Imperial (in / lb)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="548"/>
<location filename="../../UnitsSchemasData.h" line="554"/>
<source>Building Euro (cm, m², m³)</source>
<translation>Construção Euro (cm/m²/m³)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="625"/>
<location filename="../../UnitsSchemasData.h" line="631"/>
<source>Building US (ft-in, sqft, cft)</source>
<translation>Construção US (ft-in/sqft/cft)</translation>
</message>
@@ -44,7 +44,7 @@
<translation>Métrico peças pequenas &amp; CNC (mm, mm/min)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="575"/>
<location filename="../../UnitsSchemasData.h" line="581"/>
<source>FEM (mm, N, s)</source>
<translation>FEM (mm, N, s)</translation>
</message>
+6 -6
View File
@@ -9,17 +9,17 @@
<translation>Standard (mm, kg, s, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="323"/>
<location filename="../../UnitsSchemasData.h" line="326"/>
<source>MKS (m, kg, s, °)</source>
<translation>MKS (m, kg, s, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="587"/>
<location filename="../../UnitsSchemasData.h" line="593"/>
<source>US customary (in, lb)</source>
<translation>Sistem imperial -SUA- (in/lb)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="636"/>
<location filename="../../UnitsSchemasData.h" line="642"/>
<source>Imperial for Civil Eng (ft, lb, mph)</source>
<translation type="unfinished">Imperial for Civil Eng (ft, lb, mph)</translation>
</message>
@@ -29,12 +29,12 @@
<translation>Zecimale imperiale (in, lb)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="548"/>
<location filename="../../UnitsSchemasData.h" line="554"/>
<source>Building Euro (cm, m², m³)</source>
<translation>Construcție unități măsură metrice -Europeană - (cm/m²/m³)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="625"/>
<location filename="../../UnitsSchemasData.h" line="631"/>
<source>Building US (ft-in, sqft, cft)</source>
<translation>Construcție SUA (ft-in/sqft/cft)</translation>
</message>
@@ -44,7 +44,7 @@
<translation>Metric - piese mici &amp; CNC (mm, mm/min)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="575"/>
<location filename="../../UnitsSchemasData.h" line="581"/>
<source>FEM (mm, N, s)</source>
<translation>FEM (mm, N, s)</translation>
</message>
+6 -6
View File
@@ -9,17 +9,17 @@
<translation>Стандартная система мер (мм, кг, сек, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="323"/>
<location filename="../../UnitsSchemasData.h" line="326"/>
<source>MKS (m, kg, s, °)</source>
<translation>МКС (м, кг, сек, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="587"/>
<location filename="../../UnitsSchemasData.h" line="593"/>
<source>US customary (in, lb)</source>
<translation>Американская традиционная система мер (дюймы, фунты)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="636"/>
<location filename="../../UnitsSchemasData.h" line="642"/>
<source>Imperial for Civil Eng (ft, lb, mph)</source>
<translation>Английская для гражданского строительства (фут, фунт, миль/ч)</translation>
</message>
@@ -29,12 +29,12 @@
<translation>Английская десятичная (дюймы, фунты)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="548"/>
<location filename="../../UnitsSchemasData.h" line="554"/>
<source>Building Euro (cm, m², m³)</source>
<translation>Европейская для строительства (см, м², м³)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="625"/>
<location filename="../../UnitsSchemasData.h" line="631"/>
<source>Building US (ft-in, sqft, cft)</source>
<translation>США для строительства (фут-дюйм, квадратный фут, кубический фут)</translation>
</message>
@@ -44,7 +44,7 @@
<translation>Метрическая для мелких деталей и ЧПУ (мм, мм/мин)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="575"/>
<location filename="../../UnitsSchemasData.h" line="581"/>
<source>FEM (mm, N, s)</source>
<translation>Для расчётов МКЭ (мм, Н, сек)</translation>
</message>
+6 -6
View File
@@ -9,17 +9,17 @@
<translation>Standardni (mm, kg, s, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="323"/>
<location filename="../../UnitsSchemasData.h" line="326"/>
<source>MKS (m, kg, s, °)</source>
<translation>MKS (m, kg, s, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="587"/>
<location filename="../../UnitsSchemasData.h" line="593"/>
<source>US customary (in, lb)</source>
<translation>Ameriške (palci, funti)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="636"/>
<location filename="../../UnitsSchemasData.h" line="642"/>
<source>Imperial for Civil Eng (ft, lb, mph)</source>
<translation type="unfinished">Imperial for Civil Eng (ft, lb, mph)</translation>
</message>
@@ -29,12 +29,12 @@
<translation>Anglosaške decimalke (palci, funti)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="548"/>
<location filename="../../UnitsSchemasData.h" line="554"/>
<source>Building Euro (cm, m², m³)</source>
<translation>Metrični gradbeni (cm, m², m³)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="625"/>
<location filename="../../UnitsSchemasData.h" line="631"/>
<source>Building US (ft-in, sqft, cft)</source>
<translation>ZDA gradbeni (ft-in, sqft, cft)</translation>
</message>
@@ -44,7 +44,7 @@
<translation>Metrični za drobne dele in CNC (mm, mm/min)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="575"/>
<location filename="../../UnitsSchemasData.h" line="581"/>
<source>FEM (mm, N, s)</source>
<translation>MKE (mm, N, s)</translation>
</message>
@@ -9,17 +9,17 @@
<translation>Standard (mm, kg, s, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="323"/>
<location filename="../../UnitsSchemasData.h" line="326"/>
<source>MKS (m, kg, s, °)</source>
<translation>MKS (m, kg, s, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="587"/>
<location filename="../../UnitsSchemasData.h" line="593"/>
<source>US customary (in, lb)</source>
<translation>US sistem jedinica (in, lb)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="636"/>
<location filename="../../UnitsSchemasData.h" line="642"/>
<source>Imperial for Civil Eng (ft, lb, mph)</source>
<translation>Imperijalni za građevinarstvo (ft, lb, mph)</translation>
</message>
@@ -29,12 +29,12 @@
<translation>Imperijalni decimalni (in, lb)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="548"/>
<location filename="../../UnitsSchemasData.h" line="554"/>
<source>Building Euro (cm, m², m³)</source>
<translation>Građevinski Euro (cm, m², m³)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="625"/>
<location filename="../../UnitsSchemasData.h" line="631"/>
<source>Building US (ft-in, sqft, cft)</source>
<translation>Građevinski US (ft-in, sqft, cft)</translation>
</message>
@@ -44,7 +44,7 @@
<translation>Metrički mali delovi &amp; CNC(mm, mm/min)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="575"/>
<location filename="../../UnitsSchemasData.h" line="581"/>
<source>FEM (mm, N, s)</source>
<translation>FEM (mm, N, s)</translation>
</message>
+6 -6
View File
@@ -9,17 +9,17 @@
<translation>Cтандард (mm, kg, s, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="323"/>
<location filename="../../UnitsSchemasData.h" line="326"/>
<source>MKS (m, kg, s, °)</source>
<translation>MKS (m, kg, s, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="587"/>
<location filename="../../UnitsSchemasData.h" line="593"/>
<source>US customary (in, lb)</source>
<translation>US cиcтем јединица (in, lb)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="636"/>
<location filename="../../UnitsSchemasData.h" line="642"/>
<source>Imperial for Civil Eng (ft, lb, mph)</source>
<translation>Империјални за грађевинарство (ft, lb, mph)</translation>
</message>
@@ -29,12 +29,12 @@
<translation>Империјални децимални (in, lb)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="548"/>
<location filename="../../UnitsSchemasData.h" line="554"/>
<source>Building Euro (cm, m², m³)</source>
<translation>Грађевински Euro (cm, m², m³)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="625"/>
<location filename="../../UnitsSchemasData.h" line="631"/>
<source>Building US (ft-in, sqft, cft)</source>
<translation>Грађевински US (ft-in, sqft, cft)</translation>
</message>
@@ -44,7 +44,7 @@
<translation>Метрички мали делови &amp; CNC(mm, mm/min)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="575"/>
<location filename="../../UnitsSchemasData.h" line="581"/>
<source>FEM (mm, N, s)</source>
<translation>МКЕ (mm, N, s)</translation>
</message>
@@ -9,17 +9,17 @@
<translation>Standard (mm, kg, s, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="323"/>
<location filename="../../UnitsSchemasData.h" line="326"/>
<source>MKS (m, kg, s, °)</source>
<translation>MKS (m, kg, s, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="587"/>
<location filename="../../UnitsSchemasData.h" line="593"/>
<source>US customary (in, lb)</source>
<translation>US-amerikanska mått (in, lb)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="636"/>
<location filename="../../UnitsSchemasData.h" line="642"/>
<source>Imperial for Civil Eng (ft, lb, mph)</source>
<translation>Imperiala för civilingenjörsvetenskap (ft, lb, mph)</translation>
</message>
@@ -29,12 +29,12 @@
<translation>Brittiska enheter (in/lb)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="548"/>
<location filename="../../UnitsSchemasData.h" line="554"/>
<source>Building Euro (cm, m², m³)</source>
<translation>Europeiska byggenheter (cm, m², m³)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="625"/>
<location filename="../../UnitsSchemasData.h" line="631"/>
<source>Building US (ft-in, sqft, cft)</source>
<translation>Amerikanska byggenheter (ft-in, sqft, cft)</translation>
</message>
@@ -44,7 +44,7 @@
<translation>Metriska smådelar &amp; CNC (mm, mm/min)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="575"/>
<location filename="../../UnitsSchemasData.h" line="581"/>
<source>FEM (mm, N, s)</source>
<translation>FEM (mm, N, s)</translation>
</message>
+6 -6
View File
@@ -9,17 +9,17 @@
<translation>Standart (mm, kg, s, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="323"/>
<location filename="../../UnitsSchemasData.h" line="326"/>
<source>MKS (m, kg, s, °)</source>
<translation>MKS (m, kg, s, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="587"/>
<location filename="../../UnitsSchemasData.h" line="593"/>
<source>US customary (in, lb)</source>
<translation>ABD geleneksel (in, lb)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="636"/>
<location filename="../../UnitsSchemasData.h" line="642"/>
<source>Imperial for Civil Eng (ft, lb, mph)</source>
<translation type="unfinished">Imperial for Civil Eng (ft, lb, mph)</translation>
</message>
@@ -29,12 +29,12 @@
<translation>İngiliz ölçüsü onluk (in, lb)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="548"/>
<location filename="../../UnitsSchemasData.h" line="554"/>
<source>Building Euro (cm, m², m³)</source>
<translation>Yapı Avrupa (cm, m², m³)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="625"/>
<location filename="../../UnitsSchemasData.h" line="631"/>
<source>Building US (ft-in, sqft, cft)</source>
<translation>Yapı ABD (ft-in, sqft, cft)</translation>
</message>
@@ -44,7 +44,7 @@
<translation>Metrik küçük parçalar ve CNC (mm, mm/min)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="575"/>
<location filename="../../UnitsSchemasData.h" line="581"/>
<source>FEM (mm, N, s)</source>
<translation>FEM (mm, N, s)</translation>
</message>
+6 -6
View File
@@ -9,17 +9,17 @@
<translation>Стандарт (мм, кг, с, градус)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="323"/>
<location filename="../../UnitsSchemasData.h" line="326"/>
<source>MKS (m, kg, s, °)</source>
<translation>МКС (м, кг, с, градус)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="587"/>
<location filename="../../UnitsSchemasData.h" line="593"/>
<source>US customary (in, lb)</source>
<translation>Умовні позначення США (дюйми, фунти)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="636"/>
<location filename="../../UnitsSchemasData.h" line="642"/>
<source>Imperial for Civil Eng (ft, lb, mph)</source>
<translation type="unfinished">Imperial for Civil Eng (ft, lb, mph)</translation>
</message>
@@ -29,12 +29,12 @@
<translation>Імперська десяткова система (дюйми, фунти)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="548"/>
<location filename="../../UnitsSchemasData.h" line="554"/>
<source>Building Euro (cm, m², m³)</source>
<translation>Будівництво Євро (см, м², м³)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="625"/>
<location filename="../../UnitsSchemasData.h" line="631"/>
<source>Building US (ft-in, sqft, cft)</source>
<translation>Будівництво США (ft-in, sqft, cft)</translation>
</message>
@@ -44,7 +44,7 @@
<translation>Метричні дрібні деталі та ЧПК (мм, мм/хв)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="575"/>
<location filename="../../UnitsSchemasData.h" line="581"/>
<source>FEM (mm, N, s)</source>
<translation>МСЕ (мм, Н, с)</translation>
</message>
@@ -9,17 +9,17 @@
<translation> (mm, kg, s, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="323"/>
<location filename="../../UnitsSchemasData.h" line="326"/>
<source>MKS (m, kg, s, °)</source>
<translation> (m, kg, s, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="587"/>
<location filename="../../UnitsSchemasData.h" line="593"/>
<source>US customary (in, lb)</source>
<translation> (in, lb)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="636"/>
<location filename="../../UnitsSchemasData.h" line="642"/>
<source>Imperial for Civil Eng (ft, lb, mph)</source>
<translation>(ft, lb, mph)</translation>
</message>
@@ -29,12 +29,12 @@
<translation> (in, lb)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="548"/>
<location filename="../../UnitsSchemasData.h" line="554"/>
<source>Building Euro (cm, m², m³)</source>
<translation> (cm, m², m³)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="625"/>
<location filename="../../UnitsSchemasData.h" line="631"/>
<source>Building US (ft-in, sqft, cft)</source>
<translation> (ft-in, sqft, cft)</translation>
</message>
@@ -44,7 +44,7 @@
<translation> (mm, mm/min)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="575"/>
<location filename="../../UnitsSchemasData.h" line="581"/>
<source>FEM (mm, N, s)</source>
<translation>FEM (mm, N, s)</translation>
</message>
@@ -9,17 +9,17 @@
<translation>mmkgs°</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="323"/>
<location filename="../../UnitsSchemasData.h" line="326"/>
<source>MKS (m, kg, s, °)</source>
<translation>MKS (m, kg, s, °)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="587"/>
<location filename="../../UnitsSchemasData.h" line="593"/>
<source>US customary (in, lb)</source>
<translation>inlb</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="636"/>
<location filename="../../UnitsSchemasData.h" line="642"/>
<source>Imperial for Civil Eng (ft, lb, mph)</source>
<translation type="unfinished">Imperial for Civil Eng (ft, lb, mph)</translation>
</message>
@@ -29,12 +29,12 @@
<translation>inlb</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="548"/>
<location filename="../../UnitsSchemasData.h" line="554"/>
<source>Building Euro (cm, m², m³)</source>
<translation>cmm²m³</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="625"/>
<location filename="../../UnitsSchemasData.h" line="631"/>
<source>Building US (ft-in, sqft, cft)</source>
<translation>ft-insqftcft</translation>
</message>
@@ -44,7 +44,7 @@
<translation> &amp; CNC (mm, mm/min)</translation>
</message>
<message>
<location filename="../../UnitsSchemasData.h" line="575"/>
<location filename="../../UnitsSchemasData.h" line="581"/>
<source>FEM (mm, N, s)</source>
<translation>FEM (mm, N, s)</translation>
</message>
-8
View File
@@ -318,11 +318,7 @@ void Writer::putNextEntry(const char* file, const char* obj)
ZipWriter::ZipWriter(const char* FileName)
: ZipStream(FileName)
{
#ifdef _MSC_VER
ZipStream.imbue(std::locale::empty());
#else
ZipStream.imbue(std::locale::classic());
#endif
ZipStream.precision(std::numeric_limits<double>::digits10 + 1);
ZipStream.setf(std::ios::fixed, std::ios::floatfield);
}
@@ -330,11 +326,7 @@ ZipWriter::ZipWriter(const char* FileName)
ZipWriter::ZipWriter(std::ostream& os)
: ZipStream(os)
{
#ifdef _MSC_VER
ZipStream.imbue(std::locale::empty());
#else
ZipStream.imbue(std::locale::classic());
#endif
ZipStream.precision(std::numeric_limits<double>::digits10 + 1);
ZipStream.setf(std::ios::fixed, std::ios::floatfield);
}
+1
View File
@@ -7,6 +7,7 @@ Alexander Gryson
Alexandre Prokoudine
Amritpal Singh
Ana Margarita J. Baylon
Andrea Reale (mosfet80)
Andrej Nabergoj
Angelescu Constantin
apeltauer
+17 -17
View File
@@ -136,7 +136,7 @@ void StdCmdOpen::activated(int iMsg)
QString selectedFilter;
QStringList fileList = FileDialog::getOpenFileNames(
getMainWindow(),
QObject::tr("Open document"),
QObject::tr("Open Document"),
QString(),
formatList,
&selectedFilter
@@ -150,7 +150,7 @@ void StdCmdOpen::activated(int iMsg)
if (dict.isEmpty()) {
QMessageBox::critical(
getMainWindow(),
qApp->translate("StdCmdOpen", "Cannot open file"),
qApp->translate("StdCmdOpen", "Cannot Open File"),
qApp->translate("StdCmdOpen", "Loading the file %1 is not supported").arg(fileList.front())
);
}
@@ -233,7 +233,7 @@ void StdCmdImport::activated(int iMsg)
QString selectedFilter = QString::fromStdString(hPath->GetASCII("FileImportFilter"));
QStringList fileList = FileDialog::getOpenFileNames(
getMainWindow(),
QObject::tr("Import file"),
QObject::tr("Import File"),
QString(),
formatList,
&selectedFilter
@@ -431,7 +431,7 @@ void StdCmdExport::activated(int iMsg)
if (selection.empty()) {
QMessageBox::warning(
Gui::getMainWindow(),
QCoreApplication::translate("StdCmdExport", "No selection"),
QCoreApplication::translate("StdCmdExport", "No Selection"),
QCoreApplication::translate(
"StdCmdExport",
"Select objects to export before using the Export command."
@@ -515,7 +515,7 @@ void StdCmdExport::activated(int iMsg)
// Launch the file selection modal dialog
QString filename = FileDialog::getSaveFileName(
getMainWindow(),
QObject::tr("Export file"),
QObject::tr("Export File"),
defaultFilename,
formatList,
&selectedFilter
@@ -581,7 +581,7 @@ void StdCmdMergeProjects::activated(int iMsg)
QString exe = qApp->applicationName();
QString project = FileDialog::getOpenFileName(
Gui::getMainWindow(),
QString::fromUtf8(QT_TR_NOOP("Merge document")),
QString::fromUtf8(QT_TR_NOOP("Merge Document")),
FileDialog::getWorkingDirectory(),
QString::fromUtf8(QT_TR_NOOP("%1 document (*.FCStd)")).arg(exe)
);
@@ -593,7 +593,7 @@ void StdCmdMergeProjects::activated(int iMsg)
if (proj == info) {
QMessageBox::critical(
Gui::getMainWindow(),
QString::fromUtf8(QT_TR_NOOP("Merge document")),
QString::fromUtf8(QT_TR_NOOP("Merge Document")),
QString::fromUtf8(QT_TR_NOOP("Cannot merge document with itself."))
);
return;
@@ -658,7 +658,7 @@ StdCmdExportDependencyGraph::StdCmdExportDependencyGraph()
: Command("Std_ExportDependencyGraph")
{
sGroup = "Tools";
sMenuText = QT_TR_NOOP("Export Dependency &Graph");
sMenuText = QT_TR_NOOP("Export Dependency &Graph");
sToolTipText = QT_TR_NOOP("Exports the dependency graph as a Graphviz (.gv) file");
sStatusTip = sToolTipText;
sWhatsThis = "Std_ExportDependencyGraph";
@@ -673,7 +673,7 @@ void StdCmdExportDependencyGraph::activated(int iMsg)
QString format = QStringLiteral("%1 (*.gv)").arg(Gui::GraphvizView::tr("Graphviz format"));
QString fn = Gui::FileDialog::getSaveFileName(
Gui::getMainWindow(),
Gui::GraphvizView::tr("Export graph"),
Gui::GraphvizView::tr("Export Graph"),
QString(),
format
);
@@ -1319,7 +1319,7 @@ void StdCmdDuplicateSelection::activated(int iMsg)
if (!unsaved.empty()) {
QMessageBox::critical(
getMainWindow(),
QObject::tr("Unsaved document"),
QObject::tr("Unsaved Document"),
QObject::tr(
"The exported object contains an external link. Save the document."
"at least once before exporting."
@@ -1341,7 +1341,7 @@ void StdCmdDuplicateSelection::activated(int iMsg)
if (hasXLink && !doc->isSaved()) {
auto ret = QMessageBox::question(
getMainWindow(),
qApp->translate("Std_DuplicateSelection", "Object dependencies"),
qApp->translate("Std_DuplicateSelection", "Object Dependencies"),
qApp->translate(
"Std_DuplicateSelection",
"To link to external objects, the document must be saved at least once.\n"
@@ -1531,7 +1531,7 @@ void StdCmdDelete::activated(int iMsg)
auto ret = QMessageBox::warning(
Gui::getMainWindow(),
qApp->translate("Std_Delete", "Object dependencies"),
qApp->translate("Std_Delete", "Object Dependencies"),
bodyMessage,
QMessageBox::Yes,
QMessageBox::No
@@ -1574,7 +1574,7 @@ void StdCmdDelete::activated(int iMsg)
catch (const Base::Exception& e) {
QMessageBox::critical(
getMainWindow(),
QObject::tr("Delete failed"),
QObject::tr("Delete Failed"),
QString::fromLatin1(e.what())
);
e.reportException();
@@ -1582,7 +1582,7 @@ void StdCmdDelete::activated(int iMsg)
catch (...) {
QMessageBox::critical(
getMainWindow(),
QObject::tr("Delete failed"),
QObject::tr("Delete Failed"),
QStringLiteral("Unknown error")
);
}
@@ -1639,7 +1639,7 @@ void StdCmdRefresh::activated([[maybe_unused]] int iMsg)
catch (Base::Exception& /*e*/) {
auto ret = QMessageBox::warning(
getMainWindow(),
QObject::tr("Dependency error"),
QObject::tr("Dependency Error"),
qApp->translate(
"Std_Refresh",
"The document contains dependency cycles.\n"
@@ -2121,7 +2121,7 @@ protected:
if (failed) {
QMessageBox::critical(
getMainWindow(),
QObject::tr("Expression error"),
QObject::tr("Expression Error"),
QObject::tr(
"Failed to parse some of the expressions.\n"
"Check the report view for more details."
@@ -2155,7 +2155,7 @@ protected:
abortCommand();
QMessageBox::critical(
getMainWindow(),
QObject::tr("Failed to paste expressions"),
QObject::tr("Failed to Paste Expressions"),
QString::fromLatin1(e.what())
);
e.reportException();
+1 -1
View File
@@ -64,7 +64,7 @@ void StdCmdDlgMacroRecord::activated(int iMsg)
if (cDlg.exec() && getAction()) {
getAction()->setIcon(Gui::BitmapFactory().iconFromTheme("media-playback-stop"));
getAction()->setText(
QCoreApplication::translate("StdCmdDlgMacroRecord", "S&top macro recording")
QCoreApplication::translate("StdCmdDlgMacroRecord", "S&top Macro Recording")
);
getAction()->setToolTip(
QCoreApplication::translate("StdCmdDlgMacroRecord", "Stop the macro recording session")
+1 -1
View File
@@ -457,7 +457,7 @@ StdCmdDlgCustomize::StdCmdDlgCustomize()
: Command("Std_DlgCustomize")
{
sGroup = "Tools";
sMenuText = QT_TR_NOOP("Cu&stomize");
sMenuText = QT_TR_NOOP("Cu&stomize");
sToolTipText = QT_TR_NOOP("Opens a dialog to edit toolbars, shortcuts, and macros");
sWhatsThis = "Std_DlgCustomize";
sStatusTip = sToolTipText;
+10 -10
View File
@@ -401,7 +401,7 @@ void StdCmdFreezeViews::activated(int iMsg)
for (QList<QAction*>::Iterator it = acts.begin() + offset; it != acts.end(); ++it, index++) {
if (!(*it)->isVisible()) {
savedViews++;
QString viewnr = QString(QObject::tr("Restore view &%1")).arg(index);
QString viewnr = QString(QObject::tr("Restore View &%1")).arg(index);
(*it)->setText(viewnr);
(*it)->setToolTip(QString::fromLatin1(ppReturn));
(*it)->setVisible(true);
@@ -433,7 +433,7 @@ void StdCmdFreezeViews::onSaveViews()
// Save the views to an XML file
QString fn = FileDialog::getSaveFileName(
getMainWindow(),
QObject::tr("Save frozen views"),
QObject::tr("Save Frozen Views"),
QString(),
QStringLiteral("%1 (*.cam)").arg(QObject::tr("Frozen views"))
);
@@ -479,7 +479,7 @@ void StdCmdFreezeViews::onRestoreViews()
if (savedViews > 0) {
auto ret = QMessageBox::question(
getMainWindow(),
QObject::tr("Restore views"),
QObject::tr("Restore Views"),
QObject::tr(
"Importing the restored views would clear the already stored views.\n"
"Continue?"
@@ -495,7 +495,7 @@ void StdCmdFreezeViews::onRestoreViews()
// Restore the views from an XML file
QString fn = FileDialog::getOpenFileName(
getMainWindow(),
QObject::tr("Restore frozen views"),
QObject::tr("Restore Frozen Views"),
QString(),
QStringLiteral("%1 (*.cam)").arg(QObject::tr("Frozen views"))
);
@@ -506,7 +506,7 @@ void StdCmdFreezeViews::onRestoreViews()
if (!file.open(QFile::ReadOnly)) {
QMessageBox::critical(
getMainWindow(),
QObject::tr("Restore views"),
QObject::tr("Restore Views"),
QObject::tr("Cannot open file '%1'.").arg(fn)
);
return;
@@ -573,7 +573,7 @@ void StdCmdFreezeViews::onRestoreViews()
}
for (int i = 0; i < numRestoredViews; i++) {
QString setting = cameras[i];
QString viewnr = QString(QObject::tr("Restore view &%1")).arg(i + 1);
QString viewnr = QString(QObject::tr("Restore View &%1")).arg(i + 1);
acts[i + offset]->setText(viewnr);
acts[i + offset]->setToolTip(setting);
acts[i + offset]->setVisible(true);
@@ -776,7 +776,7 @@ void StdCmdDrawStyle::languageChange()
auto pcAction = qobject_cast<Gui::ActionGroup*>(_pcAction);
QList<QAction*> a = pcAction->actions();
a[0]->setText(QCoreApplication::translate("Std_DrawStyle", "&1 As is"));
a[0]->setText(QCoreApplication::translate("Std_DrawStyle", "&1 As Is"));
a[0]->setToolTip(QCoreApplication::translate("Std_DrawStyle", "Normal mode"));
a[1]->setText(QCoreApplication::translate("Std_DrawStyle", "&2 Points"));
@@ -785,16 +785,16 @@ void StdCmdDrawStyle::languageChange()
a[2]->setText(QCoreApplication::translate("Std_DrawStyle", "&3 Wireframe"));
a[2]->setToolTip(QCoreApplication::translate("Std_DrawStyle", "Wireframe mode"));
a[3]->setText(QCoreApplication::translate("Std_DrawStyle", "&4 Hidden line"));
a[3]->setText(QCoreApplication::translate("Std_DrawStyle", "&4 Hidden Line"));
a[3]->setToolTip(QCoreApplication::translate("Std_DrawStyle", "Hidden line mode"));
a[4]->setText(QCoreApplication::translate("Std_DrawStyle", "&5 No shading"));
a[4]->setText(QCoreApplication::translate("Std_DrawStyle", "&5 No Shading"));
a[4]->setToolTip(QCoreApplication::translate("Std_DrawStyle", "No shading mode"));
a[5]->setText(QCoreApplication::translate("Std_DrawStyle", "&6 Shaded"));
a[5]->setToolTip(QCoreApplication::translate("Std_DrawStyle", "Shaded mode"));
a[6]->setText(QCoreApplication::translate("Std_DrawStyle", "&7 Flat lines"));
a[6]->setText(QCoreApplication::translate("Std_DrawStyle", "&7 Flat Lines"));
a[6]->setToolTip(QCoreApplication::translate("Std_DrawStyle", "Flat lines mode"));
}
+20 -20
View File
@@ -540,7 +540,7 @@ void ParameterGroup::onDeleteSelectedItem()
if (sel && sel->isSelected() && sel->parent()) {
if (QMessageBox::question(
this,
tr("Remove group"),
tr("Remove Group"),
tr("Remove this parameter group?"),
QMessageBox::Yes | QMessageBox::No,
QMessageBox::No
@@ -579,7 +579,7 @@ void ParameterGroup::onCreateSubgroup()
bool ok;
QString name = QInputDialog::getText(
this,
QObject::tr("New sub-group"),
QObject::tr("New Sub-Group"),
QObject::tr("Enter the name:"),
QLineEdit::Normal,
QString(),
@@ -596,7 +596,7 @@ void ParameterGroup::onCreateSubgroup()
if (hGrp->HasGroup(name.toLatin1())) {
QMessageBox::critical(
this,
tr("Existing sub-group"),
tr("Existing Sub-Group"),
tr("The sub-group '%1' already exists.").arg(name)
);
return;
@@ -613,7 +613,7 @@ void ParameterGroup::onExportToFile()
{
QString file = FileDialog::getSaveFileName(
this,
tr("Export parameter to file"),
tr("Export Parameter to File"),
QString(),
QStringLiteral("XML (*.FCParam)")
);
@@ -631,7 +631,7 @@ void ParameterGroup::onImportFromFile()
{
QString file = FileDialog::getOpenFileName(
this,
tr("Import parameter from file"),
tr("Import Parameter From File"),
QString(),
QStringLiteral("XML (*.FCParam)")
);
@@ -659,7 +659,7 @@ void ParameterGroup::onImportFromFile()
catch (const Base::Exception&) {
QMessageBox::critical(
this,
tr("Import error"),
tr("Import Error"),
tr("Reading from '%1' failed.").arg(file)
);
}
@@ -815,7 +815,7 @@ void ParameterValue::onCreateTextItem()
bool ok;
QString name = QInputDialog::getText(
this,
QObject::tr("New text item"),
QObject::tr("New Text Item"),
QObject::tr("Enter the name:"),
QLineEdit::Normal,
QString(),
@@ -832,7 +832,7 @@ void ParameterValue::onCreateTextItem()
if (name == QLatin1String(it.first.c_str())) {
QMessageBox::critical(
this,
tr("Existing item"),
tr("Existing Item"),
tr("The item '%1' already exists.").arg(name)
);
return;
@@ -841,7 +841,7 @@ void ParameterValue::onCreateTextItem()
QString val = QInputDialog::getText(
this,
QObject::tr("New text item"),
QObject::tr("New Text Item"),
QObject::tr("Enter text:"),
QLineEdit::Normal,
QString(),
@@ -860,7 +860,7 @@ void ParameterValue::onCreateIntItem()
bool ok;
QString name = QInputDialog::getText(
this,
QObject::tr("New integer item"),
QObject::tr("New Integer Item"),
QObject::tr("Enter the name:"),
QLineEdit::Normal,
QString(),
@@ -877,7 +877,7 @@ void ParameterValue::onCreateIntItem()
if (name == QLatin1String(it.first.c_str())) {
QMessageBox::critical(
this,
tr("Existing item"),
tr("Existing Item"),
tr("The item '%1' already exists.").arg(name)
);
return;
@@ -886,7 +886,7 @@ void ParameterValue::onCreateIntItem()
int val = QInputDialog::getInt(
this,
QObject::tr("New integer item"),
QObject::tr("New Integer Item"),
QObject::tr("Enter number:"),
0,
-2147483647,
@@ -908,7 +908,7 @@ void ParameterValue::onCreateUIntItem()
bool ok;
QString name = QInputDialog::getText(
this,
QObject::tr("New unsigned item"),
QObject::tr("New Unsigned Item"),
QObject::tr("Enter the name:"),
QLineEdit::Normal,
QString(),
@@ -925,7 +925,7 @@ void ParameterValue::onCreateUIntItem()
if (name == QLatin1String(it.first.c_str())) {
QMessageBox::critical(
this,
tr("Existing item"),
tr("Existing Item"),
tr("The item '%1' already exists.").arg(name)
);
return;
@@ -953,7 +953,7 @@ void ParameterValue::onCreateFloatItem()
bool ok;
QString name = QInputDialog::getText(
this,
QObject::tr("New float item"),
QObject::tr("New Float Item"),
QObject::tr("Enter the name:"),
QLineEdit::Normal,
QString(),
@@ -970,7 +970,7 @@ void ParameterValue::onCreateFloatItem()
if (name == QLatin1String(it.first.c_str())) {
QMessageBox::critical(
this,
tr("Existing item"),
tr("Existing Item"),
tr("The item '%1' already exists.").arg(name)
);
return;
@@ -979,7 +979,7 @@ void ParameterValue::onCreateFloatItem()
double val = QInputDialog::getDouble(
this,
QObject::tr("New float item"),
QObject::tr("New Float Item"),
QObject::tr("Enter number:"),
0,
-2147483647,
@@ -1000,7 +1000,7 @@ void ParameterValue::onCreateBoolItem()
bool ok;
QString name = QInputDialog::getText(
this,
QObject::tr("New boolean item"),
QObject::tr("New Boolean Item"),
QObject::tr("Enter the name:"),
QLineEdit::Normal,
QString(),
@@ -1017,7 +1017,7 @@ void ParameterValue::onCreateBoolItem()
if (name == QLatin1String(it.first.c_str())) {
QMessageBox::critical(
this,
tr("Existing item"),
tr("Existing Item"),
tr("The item '%1' already exists.").arg(name)
);
return;
@@ -1028,7 +1028,7 @@ void ParameterValue::onCreateBoolItem()
list << QStringLiteral("true") << QStringLiteral("false");
QString val = QInputDialog::getItem(
this,
QObject::tr("New boolean item"),
QObject::tr("New Boolean Item"),
QObject::tr("Choose an item:"),
list,
0,
+2 -2
View File
@@ -133,8 +133,8 @@ DlgVersionMigrator::DlgVersionMigrator(MainWindow* mw)
// NOTE: All rich-text strings are generated programmatically so that translators don't have to
// deal with the markup. The two strings in the middle of the dialog are set in the UI file.
auto programNameString = tr("Welcome to %1 %2.%3\n\n")
.arg(programName, QString::number(major), QString::number(minor));
auto programNameString
= tr("Welcome to %1 %2.%3").arg(programName, QString::number(major), QString::number(minor));
auto welcomeString = QStringLiteral("<b>") + programNameString + QStringLiteral("</b>");
auto calculatingSizeString = QStringLiteral("<b>") + tr("Calculating size…")
+1
View File
@@ -1823,6 +1823,7 @@ void Document::RestoreDocFile(Base::Reader& reader)
localreader->readElement("Document");
long scheme = localreader->getAttribute<long>("SchemaVersion");
localreader->DocumentSchema = scheme;
localreader->ProgramVersion = d->_pcDocument->getProgramVersion();
bool hasExpansion = localreader->hasAttribute("HasExpansion");
if (hasExpansion) {
+26 -13
View File
@@ -1013,7 +1013,7 @@ void ExpressionLineEdit::slotTextChanged(const QString& text)
}
}
void ExpressionLineEdit::slotCompleteText(const QString& completionPrefix, bool isActivated)
void ExpressionLineEdit::slotCompleteText(const QString& completionPrefix, ActivationMode mode)
{
int start, end;
completer->getPrefixRange(start, end);
@@ -1030,7 +1030,7 @@ void ExpressionLineEdit::slotCompleteText(const QString& completionPrefix, bool
// chain completions if we select an entry from the completer drop down
// and that entry ends with '.' or '#'
if (isActivated) {
if (mode == ActivationMode::Activated) {
std::string textToComplete = completionPrefix.toUtf8().constData();
if (textToComplete.size()
&& (*textToComplete.crbegin() == '.' || *textToComplete.crbegin() == '#')) {
@@ -1042,12 +1042,12 @@ void ExpressionLineEdit::slotCompleteText(const QString& completionPrefix, bool
void ExpressionLineEdit::slotCompleteTextHighlighted(const QString& completionPrefix)
{
slotCompleteText(completionPrefix, false);
slotCompleteText(completionPrefix, ActivationMode::Highlighted);
}
void ExpressionLineEdit::slotCompleteTextSelected(const QString& completionPrefix)
{
slotCompleteText(completionPrefix, true);
slotCompleteText(completionPrefix, ActivationMode::Activated);
}
@@ -1116,13 +1116,13 @@ void ExpressionTextEdit::setDocumentObject(const App::DocumentObject* currentDoc
completer,
qOverload<const QString&>(&QCompleter::activated),
this,
&ExpressionTextEdit::slotCompleteText
&ExpressionTextEdit::slotCompleteTextSelected
);
connect(
completer,
qOverload<const QString&>(&QCompleter::highlighted),
this,
&ExpressionTextEdit::slotCompleteText
&ExpressionTextEdit::slotCompleteTextHighlighted
);
connect(this, &ExpressionTextEdit::textChanged2, completer, &ExpressionCompleter::slotUpdate);
connect(
@@ -1155,7 +1155,7 @@ void ExpressionTextEdit::slotTextChanged()
}
}
void ExpressionTextEdit::slotCompleteText(const QString& completionPrefix)
void ExpressionTextEdit::slotCompleteText(const QString& completionPrefix, ActivationMode mode)
{
QTextCursor cursor = textCursor();
int start, end;
@@ -1165,17 +1165,31 @@ void ExpressionTextEdit::slotCompleteText(const QString& completionPrefix)
cursor.movePosition(QTextCursor::NextCharacter, QTextCursor::MoveAnchor, end - pos);
}
cursor.movePosition(QTextCursor::PreviousCharacter, QTextCursor::KeepAnchor, end - start);
Base::FlagToggler<bool> flag(block, false);
cursor.insertText(completionPrefix);
completer->updatePrefixEnd(cursor.positionInBlock());
std::string textToComplete = completionPrefix.toUtf8().constData();
if (textToComplete.size()
&& (*textToComplete.crbegin() == '.' || *textToComplete.crbegin() == '#')) {
completer->slotUpdate(cursor.block().text(), cursor.positionInBlock());
// chain completions only when activated (Enter/Click), not when highlighted (arrow keys)
if (mode == ActivationMode::Activated) {
std::string textToComplete = completionPrefix.toUtf8().constData();
if (!textToComplete.empty()
&& (*textToComplete.crbegin() == '.' || *textToComplete.crbegin() == '#')) {
completer->slotUpdate(cursor.block().text(), cursor.positionInBlock());
}
}
}
void ExpressionTextEdit::slotCompleteTextHighlighted(const QString& completionPrefix)
{
slotCompleteText(completionPrefix, ActivationMode::Highlighted);
}
void ExpressionTextEdit::slotCompleteTextSelected(const QString& completionPrefix)
{
slotCompleteText(completionPrefix, ActivationMode::Activated);
}
void ExpressionTextEdit::keyPressEvent(QKeyEvent* e)
{
Base::FlagToggler<bool> flag(block, true);
@@ -1208,9 +1222,8 @@ void ExpressionTextEdit::keyPressEvent(QKeyEvent* e)
if (!completer->popup()->currentIndex().isValid()) {
completer->popup()->setCurrentIndex(completer->popup()->model()->index(0, 0));
}
// insert completion
completer->setCurrentRow(completer->popup()->currentIndex().row());
slotCompleteText(completer->currentCompletion());
slotCompleteText(completer->currentCompletion(), ActivationMode::Highlighted);
// refresh completion list
completer->setCompletionPrefix(completer->currentCompletion());
+10 -3
View File
@@ -44,6 +44,12 @@ class ObjectIdentifier;
namespace Gui
{
enum class ActivationMode
{
Highlighted, // browsing with arrow keys
Activated // confirmed selection (Enter/Click)
};
class GuiExport ExpressionValidator: public QValidator
{
Q_OBJECT
@@ -123,8 +129,7 @@ Q_SIGNALS:
void textChanged2(QString text, int pos);
public Q_SLOTS:
void slotTextChanged(const QString& text);
// activated == pressed enter on the completion item
void slotCompleteText(const QString& completionPrefix, bool isActivated);
void slotCompleteText(const QString& completionPrefix, ActivationMode mode);
void slotCompleteTextHighlighted(const QString& completionPrefix);
void slotCompleteTextSelected(const QString& completionPrefix);
@@ -159,7 +164,9 @@ Q_SIGNALS:
void textChanged2(QString text, int pos);
public Q_SLOTS:
void slotTextChanged();
void slotCompleteText(const QString& completionPrefix);
void slotCompleteText(const QString& completionPrefix, ActivationMode mode);
void slotCompleteTextHighlighted(const QString& completionPrefix);
void slotCompleteTextSelected(const QString& completionPrefix);
void adjustCompleterToCursor();
private:
+2 -2
View File
@@ -502,7 +502,7 @@ bool GraphvizView::onMsg(const char* pMsg, const char**)
QString selectedFilter;
QString fn = Gui::FileDialog::getSaveFileName(
this,
tr("Export graph"),
tr("Export Graph"),
QString(),
filter.join(QLatin1String(";;")),
&selectedFilter
@@ -604,7 +604,7 @@ void GraphvizView::printPdf()
QString selectedFilter;
QString fn = Gui::FileDialog::getSaveFileName(
this,
tr("Export graph"),
tr("Export Graph"),
QString(),
filter.join(QLatin1String(";;")),
&selectedFilter
Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 20 KiB

+554
View File
@@ -0,0 +1,554 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.1"
id="svg1"
width="552"
height="189"
viewBox="0 0 552 189"
sodipodi:docname="freecadabout.svg"
xml:space="preserve"
inkscape:version="1.4 (e7c3feb1, 2024-10-09)"
inkscape:export-filename="../Documents/FreeCAD/src/Gui/Icons/freecadabout.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><defs
id="defs1"><linearGradient
id="linearGradient1"><stop
style="stop-color:#fdb616;stop-opacity:1;"
offset="0"
id="stop287" /><stop
style="stop-color:#000000;stop-opacity:1;"
offset="1"
id="stop288" /></linearGradient><linearGradient
id="linearGradient283"
inkscape:collect="always"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop283" /><stop
style="stop-color:#ededed;stop-opacity:1;"
offset="1"
id="stop284" /></linearGradient><linearGradient
id="linearGradient280"
inkscape:collect="always"
inkscape:label="Grid Opacity"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop280" /><stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop281" /></linearGradient><linearGradient
id="linearGradient278"
inkscape:collect="always"><stop
style="stop-color:#e8e8e8;stop-opacity:0.99607843;"
offset="0"
id="stop278" /><stop
style="stop-color:#f8f8f8;stop-opacity:0.99607843;"
offset="1"
id="stop279" /></linearGradient><linearGradient
id="linearGradient1-1"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop1" /><stop
style="stop-color:#aeaeae;stop-opacity:1;"
offset="1"
id="stop2" /></linearGradient><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1"
id="linearGradient73"
x1="15.5"
y1="14.5"
x2="15.5"
y2="171.5"
gradientUnits="userSpaceOnUse" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient278"
id="linearGradient279"
x1="292.51031"
y1="168.74944"
x2="292.1037"
y2="17.832161"
gradientUnits="userSpaceOnUse" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient283"
id="linearGradient284"
x1="15.5"
y1="273"
x2="536"
y2="273"
gradientUnits="userSpaceOnUse" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1-1"
id="linearGradient285"
gradientUnits="userSpaceOnUse"
x1="15.5"
y1="14.5"
x2="15.5"
y2="171.5" /><filter
style="color-interpolation-filters:sRGB;"
inkscape:label="Blur"
id="filter288"
x="-0.028083052"
y="-0.094032927"
width="1.0561661"
height="1.1880659"><feGaussianBlur
stdDeviation="6.0729598"
result="blur"
id="feGaussianBlur288" /></filter><mask
maskUnits="userSpaceOnUse"
id="mask291"><rect
style="opacity:1;fill:url(#linearGradient291);stroke:none;stroke-width:16;stroke-linecap:square;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:0.25"
id="rect291"
width="520"
height="156"
x="16"
y="15"
rx="0"
ry="0"
inkscape:label="Grid Mask" /></mask><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient280"
id="linearGradient291"
gradientUnits="userSpaceOnUse"
x1="142.6841"
y1="156.8309"
x2="218.92583"
y2="221.28627" /><mask
maskUnits="userSpaceOnUse"
id="mask2"><g
id="g3"
inkscape:label="Bands"
style="display:inline"><rect
style="opacity:1;fill:#f8f8f8;fill-opacity:1;stroke:none;stroke-width:16;stroke-linecap:square;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
id="rect2"
width="520"
height="15"
x="16"
y="156"
rx="0"
ry="0"
inkscape:label="Lower" /><rect
style="opacity:1;fill:#f8f8f8;fill-opacity:1;stroke:none;stroke-width:16;stroke-linecap:square;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
id="rect3"
width="520"
height="15"
x="16"
y="15"
rx="0"
ry="0"
inkscape:label="Upper" /></g></mask><mask
maskUnits="userSpaceOnUse"
id="mask1"><rect
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
id="rect1"
width="520"
height="156"
x="16"
y="15"
ry="14.999999"
rx="15.000001"
inkscape:label="Mask" /></mask><mask
maskUnits="userSpaceOnUse"
id="mask3"><rect
style="display:inline;opacity:1;fill:#e9e9e9;fill-opacity:1;stroke:none;stroke-width:16;stroke-linecap:square;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:0.25"
id="rect5"
width="520"
height="156"
x="16"
y="15"
ry="15"
rx="15"
inkscape:label="Clip Mask" /></mask></defs><sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="px"
showguides="false"
inkscape:zoom="1.102646"
inkscape:cx="300.187"
inkscape:cy="154.62805"
inkscape:window-width="1512"
inkscape:window-height="916"
inkscape:window-x="0"
inkscape:window-y="38"
inkscape:window-maximized="0"
inkscape:current-layer="layer9"
showgrid="false"><inkscape:grid
id="grid202"
units="px"
originx="0.5"
originy="0.5"
spacingx="0.5"
spacingy="0.5"
empcolor="#0099e5"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="2"
dotted="true"
gridanglex="30"
gridanglez="30"
visible="false" /><sodipodi:guide
position="116.55931,189"
orientation="-0.70710678,0.70710678"
id="guide276"
inkscape:locked="false"
inkscape:label=""
inkscape:color="rgb(0,134,229)" /><sodipodi:guide
position="276.25974,0"
orientation="-0.70710678,0.70710678"
id="guide277"
inkscape:locked="false"
inkscape:label=""
inkscape:color="rgb(0,134,229)" /></sodipodi:namedview><g
inkscape:groupmode="layer"
id="layer9"
inkscape:label="Base"
style="display:inline"><rect
style="display:inline;opacity:0.5;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;filter:url(#filter288)"
id="rect288"
width="519"
height="155"
x="16.5"
y="15.5"
ry="14.5"
rx="14.5"
inkscape:label="Shadow" /><g
id="g284"
inkscape:label="Content"
clip-path="none"
style="display:inline"
mask="url(#mask3)"><rect
style="display:inline;opacity:1;fill:url(#linearGradient284);stroke:none;stroke-width:16;stroke-linecap:square;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:0.25"
id="rect276"
width="520.5"
height="156"
x="15.5"
y="15"
ry="15"
rx="15" /><path
style="display:inline;fill:url(#linearGradient279);stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 116.55931,0 H 465.25975 L 276.25974,189 H -72.44069 Z"
id="path277"
sodipodi:nodetypes="ccccc" /><g
id="g279"
inkscape:label="Grid"
style="display:inline"
mask="url(#mask291)"><g
id="g224"
inkscape:label="Horizontal Grid"
style="display:inline;opacity:1;stroke:#000000;stroke-opacity:0.12"><path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.25"
d="M 16,46.5 H 536"
id="path202"
sodipodi:nodetypes="cc" /><path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.12"
d="M 16,62.5 H 536"
id="path207"
sodipodi:nodetypes="cc" /><path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.12"
d="M 16,78.5 H 536"
id="path208"
sodipodi:nodetypes="cc" /><path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.25"
d="M 16,94.5 H 536"
id="path209"
sodipodi:nodetypes="cc" /><path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.12"
d="M 16,110.5 H 536"
id="path210"
sodipodi:nodetypes="cc" /><path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.12"
d="M 16,126.5 H 536"
id="path211"
sodipodi:nodetypes="cc" /><path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.25"
d="M 16,142.5 H 536"
id="path212"
sodipodi:nodetypes="cc" /><path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.12"
d="M 16,158.5 H 536"
id="path213"
sodipodi:nodetypes="cc" /><path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.12"
d="M 16,30.5 H 536"
id="path214"
sodipodi:nodetypes="cc" /></g><g
id="g267"
inkscape:label="Vertical Grid"
style="display:inline;opacity:1;stroke:#000000;stroke-opacity:0.12"><path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.25"
d="M 99.5,15 V 171"
id="path232" /><path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.12"
d="M 83.5,15 V 171"
id="path233" /><path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.12"
d="M 67.5,15 V 171"
id="path234" /><path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.25"
d="M 51.5,15 V 171"
id="path235" /><path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.12"
d="M 35.5,15 V 171"
id="path236" /><path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.12"
d="M 19.5,15 V 171"
id="path237" /><path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.25"
d="M 195.5,15 V 171"
id="path238" /><path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.12"
d="M 179.5,15 V 171"
id="path239" /><path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.12"
d="M 163.5,15 V 171"
id="path240" /><path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.25"
d="M 147.5,15 V 171"
id="path241" /><path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.12"
d="M 131.5,15 V 171"
id="path242" /><path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.12"
d="M 115.5,15 V 171"
id="path243" /><path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.25"
d="M 291.5,15 V 171"
id="path244" /><path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.12"
d="M 275.5,15 V 171"
id="path245" /><path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.12"
d="M 259.5,15 V 171"
id="path246" /><path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.25"
d="M 243.5,15 V 171"
id="path247" /><path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.12"
d="M 227.5,15 V 171"
id="path248" /><path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.12"
d="M 211.5,15 V 171"
id="path249" /><path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.25"
d="M 387.5,15 V 171"
id="path250" /><path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.12"
d="M 371.5,15 V 171"
id="path251" /><path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.12"
d="M 355.5,15 V 171"
id="path252" /><path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.25"
d="M 339.5,15 V 171"
id="path253" /><path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.12"
d="M 323.5,15 V 171"
id="path254" /><path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.12"
d="M 307.5,15 V 171"
id="path255" /><path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.25"
d="M 483.5,15 V 171"
id="path256" /><path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.12"
d="M 467.5,15 V 171"
id="path257" /><path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.12"
d="M 451.5,15 V 171"
id="path258" /><path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.25"
d="M 435.5,15 V 171"
id="path259" /><path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.12"
d="M 419.5,15 V 171"
id="path260" /><path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.12"
d="M 403.5,15 V 171"
id="path261" /><path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.25"
d="M 531.5,15 V 171"
id="path265" /><path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.12"
d="M 515.5,15 V 171"
id="path266" /><path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.12"
d="M 499.5,15 V 171"
id="path267" /></g></g><g
id="g76"
transform="matrix(0.2,0,0,0.2,263.2,116.6)"
style="display:inline;stroke-width:4.99999"
inkscape:label="Logo"><path
d="m -312.744,0 v -226.134 h 114.75 v 20.502 H -290.1 v 81.702 h 88.74 v 20.502 H -290.1 V 0 Z m 141.252,0 v -167.382 h 22.644 v 23.868 c 8.874,-18.36 23.256,-26.622 47.43,-27.846 v 22.338 c -31.518,3.06 -47.43,20.196 -47.43,51.408 V 0 Z M 79.57,-76.194 H -71.9 c 1.836,33.048 30.6,59.364 65.178,59.364 25.398,0 48.96,-15.3 58.446,-38.25 H 75.286 C 63.046,-19.89 30.304,3.978 -6.11,3.978 c -49.572,0 -88.434,-38.862 -88.434,-88.434 0,-48.654 38.25,-86.904 86.598,-86.904 33.048,0 62.73,17.442 77.418,45.594 7.344,14.076 10.098,27.234 10.098,49.572 z M -71.288,-96.696 H 56.926 c -7.65,-33.354 -32.436,-53.856 -64.872,-53.856 -31.824,0 -57.222,21.726 -63.342,53.856 z M 278.59,-76.194 H 127.119 c 1.836,33.048 30.6,59.364 65.181,59.364 25.4,0 48.96,-15.3 58.44,-38.25 h 23.57 c -12.24,35.19 -44.99,59.058 -81.4,59.058 -49.573,0 -88.435,-38.862 -88.435,-88.434 0,-48.654 38.25,-86.904 86.595,-86.904 33.05,0 62.73,17.442 77.42,45.594 7.35,14.076 10.1,27.234 10.1,49.572 z M 127.731,-96.696 H 255.95 c -7.65,-33.354 -32.44,-53.856 -64.88,-53.856 -31.821,0 -57.219,21.726 -63.339,53.856 z m 348.039,33.66 h 49.27 c -17.75,41.31 -57.84,67.014 -104.35,67.014 -66.09,0 -119.03,-52.326 -119.03,-117.81 0,-63.954 52.32,-116.28 116.28,-116.28 28.46,0 55.69,9.792 76.8,27.54 14.39,12.24 21.73,22.338 30.3,41.31 h -46.82 c -15.3,-19.89 -33.05,-28.458 -59.36,-28.458 -23.26,0 -42.54,8.568 -56.31,24.786 -11.63,13.464 -18.66,33.048 -18.66,51.408 0,42.228 33.96,77.112 75.88,77.112 21.73,0 37.34,-7.344 56,-26.622 z M 529.76,0 624,-226.134 h 33.05 L 751.91,0 h -46.2 L 681.53,-58.446 H 601.05 L 575.96,0 Z m 86.59,-98.532 h 48.35 l -24.17,-68.544 z M 775.85,0 v -226.134 h 51.72 c 37.02,0 64.26,5.814 82.62,17.748 29.98,19.278 46.81,53.856 46.81,95.778 0,46.818 -21.42,84.15 -57.22,100.98 C 881.73,-3.366 861.84,0 828.48,0 Z m 41.92,-40.086 h 9.18 c 25.1,0 42.54,-3.366 55.08,-10.098 20.2,-11.016 32.75,-35.19 32.75,-62.424 0,-29.682 -13.77,-54.162 -36.11,-65.178 -12.85,-6.12 -26.62,-8.262 -52.63,-8.262 h -8.27 z"
fill="#212529"
id="path5-5"
style="display:inline;stroke:none;stroke-width:4.99999" /><g
id="g1-5"
style="stroke:none;stroke-width:4.99999"
transform="translate(-816,-353)"><path
d="m 400,80 -80,80 H 160 v 60 h 80 v 80 h -80 v 100 l -80,80 h 81.0076 c 6.0652,0 11.4378,-3.9054 13.3118,-9.6738 l 14.4798,-44.5656 c 1.384,-4.2618 4.7298,-7.5966 8.9916,-8.9814 l 11.1312,-3.6172 c 4.262,-1.386 8.9314,-0.65 12.5572,1.984 l 37.8994,27.5434 c 4.9066,3.5646 11.5574,3.5646 16.464,0 l 33.972,-24.691 c 4.9072,-3.5648 6.9592,-9.8788 5.085,-15.6474 l -14.4798,-44.5658 c -1.386,-4.262 -0.64,-8.9314 1.994,-12.5572 l 6.8834,-9.4672 c 2.6338,-3.6254 6.8358,-5.777 11.317,-5.7774 l 46.86,0.0102 c 6.0656,2e-4 11.4378,-3.9154 13.3118,-9.684 l 12.9812,-39.9354 c 1.874,-5.7684 -0.18,-12.093 -5.085,-15.658 L 350.7724,237.173 c -3.6256,-2.6342 -5.767,-6.8356 -5.767,-11.3172 V 214.146 c 4e-4,-4.4814 2.1412,-8.6936 5.767,-11.3274 l 43.4598,-31.5742 C 397.8584,168.6106 400,164.3988 400,159.9174 Z"
style="fill:#418fde;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:13.2283;stroke-linecap:square"
id="path8-4-4" /><path
id="path7-7-2"
style="display:inline;fill:#ff585d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:13.2283;stroke-linecap:square"
d="m 320,0 -80,80 h 80 v 80 L 400,80 V 0 Z M 80,320 0,400 v 80 h 80 l 80,-80 H 80 Z" /><path
d="M 80,0 0,80 V 400 L 80,320 V 80 H 240 L 320,0 Z"
style="fill:#cb333b;fill-rule:evenodd;stroke:none;stroke-width:13.2283;stroke-linecap:square"
id="path3-1-7" /><path
d="m 80,400 h 80 V 300 h 80 V 220 H 160 V 160 H 320 V 80 H 80 Z"
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:13.2283;stroke-linecap:square"
id="path9-4-0" /></g></g></g><rect
style="display:inline;opacity:0.75;fill:none;fill-opacity:1;stroke:url(#linearGradient285);stroke-width:1;stroke-linecap:round;stroke-linejoin:round"
id="rect285"
width="519"
height="155"
x="16.5"
y="15.5"
ry="14.5"
rx="14.5"
inkscape:label="Outline" /><text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:1.25;font-family:Evolventa;-inkscape-font-specification:'Evolventa Bold';display:inline"
x="453.62109"
y="140.77539"
id="text288"
inkscape:label="Version"><tspan
sodipodi:role="line"
id="tspan288"
x="453.62109"
y="140.77539"
style="font-size:20px;text-align:end;text-anchor:end"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:20px;font-family:Evolventa;-inkscape-font-specification:Evolventa;text-align:end;text-anchor:end"
id="tspan290">version </tspan><tspan
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;font-family:Evolventa;-inkscape-font-specification:'Evolventa Bold';text-align:end;text-anchor:end"
id="version_string">1.2</tspan></tspan></text></g><g
inkscape:groupmode="layer"
id="layer1"
inkscape:label="Release Candidate Stamp"
style="display:none"><g
id="g6"><g
id="g7"
transform="rotate(7.2612671,367.29829,706.44945)"><rect
style="fill:#ffffff;fill-opacity:0.704651;stroke:#c13138;stroke-width:2;stroke-dasharray:none;stroke-opacity:0.956863"
id="rect6"
width="243.05171"
height="25.393463"
x="204.05461"
y="36.276375"
rx="4" /><text
xml:space="preserve"
style="font-size:21.3333px;font-family:Evolventa;-inkscape-font-specification:Evolventa;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#c13138;fill-opacity:0.956863;stroke:#c13138;stroke-width:3;stroke-dasharray:none;stroke-opacity:0.956863"
x="208.58916"
y="56.414566"
id="text6"><tspan
sodipodi:role="line"
id="tspan6"
x="208.58916"
y="56.414566"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.3333px;font-family:'American Typewriter';-inkscape-font-specification:'American Typewriter';fill:#c13138;fill-opacity:0.956863;stroke:none">RELEASE CANDIDATE</tspan></text></g></g></g><g
inkscape:groupmode="layer"
id="dev_layer"
inkscape:label="Development Overlay"
style="display:none"><g
id="g55"
clip-path="none"
inkscape:label="Stripes Group"
mask="url(#mask1)"><g
id="g21"
inkscape:label="Stripes"
clip-path="none"
style="display:inline"
mask="url(#mask2)"><rect
style="display:inline;fill:#202529;fill-opacity:1;stroke:none;stroke-width:0.999999;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
id="rect4"
width="520"
height="156"
x="16"
y="15"
ry="0"
rx="0"
inkscape:label="Base" /><path
style="fill:none;stroke:#fdb616;stroke-width:16;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M -58.628057,170.99999 50.8083,14.708681"
id="path5"
sodipodi:nodetypes="cc" /><path
style="fill:none;stroke:#fdb616;stroke-width:16;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M -18.628057,170.99999 90.8083,14.708681"
id="path6"
sodipodi:nodetypes="cc" /><path
style="fill:none;stroke:#fdb616;stroke-width:16;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 21.371943,170.99999 130.8083,14.708681"
id="path7"
sodipodi:nodetypes="cc" /><path
style="fill:none;stroke:#fdb616;stroke-width:16;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 61.371943,170.99999 170.8083,14.708681"
id="path8"
sodipodi:nodetypes="cc" /><path
style="fill:none;stroke:#fdb616;stroke-width:16;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 101.37194,170.99999 210.8083,14.708681"
id="path9"
sodipodi:nodetypes="cc" /><path
style="fill:none;stroke:#fdb616;stroke-width:16;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 141.37194,170.99999 250.8083,14.708681"
id="path10"
sodipodi:nodetypes="cc" /><path
style="fill:none;stroke:#fdb616;stroke-width:16;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 181.37194,170.99999 290.8083,14.708681"
id="path11"
sodipodi:nodetypes="cc" /><path
style="fill:none;stroke:#fdb616;stroke-width:16;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 221.37194,170.99999 330.8083,14.708681"
id="path12"
sodipodi:nodetypes="cc" /><path
style="fill:none;stroke:#fdb616;stroke-width:16;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 261.37194,170.99999 370.8083,14.708681"
id="path13"
sodipodi:nodetypes="cc" /><path
style="fill:none;stroke:#fdb616;stroke-width:16;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 301.37194,170.99999 410.8083,14.708681"
id="path14"
sodipodi:nodetypes="cc" /><path
style="fill:none;stroke:#fdb616;stroke-width:16;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 341.37194,170.99999 450.8083,14.708681"
id="path15"
sodipodi:nodetypes="cc" /><path
style="fill:none;stroke:#fdb616;stroke-width:16;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 381.37194,170.99999 490.8083,14.708681"
id="path16"
sodipodi:nodetypes="cc" /><path
style="fill:none;stroke:#fdb616;stroke-width:16;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 421.37194,170.99999 530.8083,14.708681"
id="path17"
sodipodi:nodetypes="cc" /><path
style="fill:none;stroke:#fdb616;stroke-width:16;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 461.37194,170.99999 570.8083,14.708681"
id="path18"
sodipodi:nodetypes="cc" /><path
style="fill:none;stroke:#fdb616;stroke-width:16;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 501.37194,170.99999 610.8083,14.708681"
id="path19"
sodipodi:nodetypes="cc" /><path
style="fill:none;stroke:#fdb616;stroke-width:16;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M -58.628057,170.99999 50.8083,14.708681"
id="path20"
sodipodi:nodetypes="cc" /></g></g><rect
style="display:inline;opacity:0.5;fill:none;fill-opacity:1;stroke:url(#linearGradient73);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
id="rect71"
width="519"
height="155"
x="16.5"
y="15.5"
ry="14.5"
rx="14.5"
inkscape:label="Outline" /></g></svg>

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

After

Width:  |  Height:  |  Size: 21 KiB

+6
View File
@@ -769,6 +769,12 @@ void InputField::fixup(QString& input) const
if (localePlus != asciiPlus) {
input.replace(localePlus, asciiPlus);
}
// workaround for improper handling of plus sign
// in Building US unit system
// https://github.com/FreeCAD/FreeCAD/issues/11345
QString asciiMinusMinus(QStringLiteral("--"));
input.replace(asciiPlus, asciiMinusMinus);
}
QValidator::State InputField::validate(QString& input, int& pos) const
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -427,7 +427,7 @@ MainWindow::MainWindow(QWidget* parent, Qt::WindowFlags f)
d->hintLabel = new InputHintWidget(statusBar());
d->hintLabel->setObjectName(QStringLiteral("hintLabel"));
//: A context menu action used to show or hide the input hints in the status bar
d->hintLabel->setWindowTitle(tr("Input hints"));
d->hintLabel->setWindowTitle(tr("Input Hints"));
statusBar()->addWidget(d->hintLabel);
@@ -437,7 +437,7 @@ MainWindow::MainWindow(QWidget* parent, Qt::WindowFlags f)
statusBar()->addPermanentWidget(d->rightSideLabel);
d->rightSideLabel->setObjectName(QStringLiteral("rightSideLabel"));
//: A context menu action used to enable or disable quick measure in the status bar
d->rightSideLabel->setWindowTitle(tr("Quick measure"));
d->rightSideLabel->setWindowTitle(tr("Quick Measure"));
auto hGrp = App::GetApplication().GetParameterGroupByPath(
"User parameter:BaseApp/Preferences/NotificationArea"
+5 -5
View File
@@ -801,14 +801,14 @@ void OverlayTabWidget::restore(ParameterGrp::handle handle)
return;
}
const char* defaultWidgets = "";
// If overlay was ever used and disabled by the user it should respect that choice
if (handle->GetInt("Width", 0) == 0 || handle->GetInt("Height", 0) == 0) {
defaultWidgets = getDockArea() == Qt::RightDockWidgetArea ? "Tasks," : "";
if (handle->GetInt("Width", 0) != 0 || handle->GetInt("Height", 0) != 0) {
// save current value with old default to prevent layout change
handle->SetASCII("Widgets", handle->GetASCII("Widgets", ""));
}
std::string widgets = handle->GetASCII("Widgets", defaultWidgets);
std::string widgets
= handle->GetASCII("Widgets", getDockArea() == Qt::RightDockWidgetArea ? "Tasks," : "");
for (auto& name : QString::fromUtf8(widgets.c_str()).split(QLatin1Char(','))) {
if (name.isEmpty()) {
@@ -463,10 +463,6 @@
<FCText Name="Robot_Edge2Trac"></FCText>
<FCText Name="Robot_ExportKukaCompact"></FCText>
<FCText Name="Robot_ExportKukaFull"></FCText>
<FCText Name="Robot_InsertKukaIR125"></FCText>
<FCText Name="Robot_InsertKukaIR16"></FCText>
<FCText Name="Robot_InsertKukaIR210"></FCText>
<FCText Name="Robot_InsertKukaIR500"></FCText>
<FCText Name="Robot_InsertWaypoint">A</FCText>
<FCText Name="Robot_InsertWaypointPreselect">W</FCText>
<FCText Name="Robot_RestoreHomePos"></FCText>
@@ -82,7 +82,7 @@ DlgSettingsGeneral::DlgSettingsGeneral(QWidget* parent)
recreatePreferencePackMenu();
for (const char* option : Translator::formattingOptions) {
ui->UseLocaleFormatting->addItem(tr(option));
ui->UseLocaleFormatting->addItem(QCoreApplication::translate("Gui::Translator", option));
}
ui->themesCombobox->setEnabled(true);
+3 -1
View File
@@ -120,7 +120,9 @@ void DlgSettingsUI::loadSettings()
void DlgSettingsUI::loadStyleSheet()
{
populateStylesheets("StyleSheet", "qss", ui->StyleSheets, "No style sheet");
static std::string translatedString; // Make sure the memory doesn't disappear on us
translatedString = tr("No style sheet").toStdString();
populateStylesheets("StyleSheet", "qss", ui->StyleSheets, translatedString.c_str());
populateStylesheets("OverlayActiveStyleSheet", "overlay", ui->OverlayStyleSheets, "Auto");
}
+3 -2
View File
@@ -195,8 +195,9 @@ void ViewProviderGeometryObject::updateData(const App::Property* prop)
*/
App::Material defaultMaterial;
auto material = geometry->getMaterialAppearance();
if ((materialAppearance == defaultMaterial)
|| (ShapeAppearance.getSize() == 1 && ShapeAppearance[0] == materialAppearance)) {
if ((ShapeAppearance.getSize() == 1)
&& (ShapeAppearance[0] == defaultMaterial || ShapeAppearance[0] == materialAppearance)
&& (material != defaultMaterial)) {
ShapeAppearance.setValue(material);
}
materialAppearance = material;
+6 -1
View File
@@ -1577,7 +1577,12 @@ bool ExpLineEdit::apply(const std::string& propName)
if (!ExpressionBinding::apply(propName)) {
if (!autoClose) {
QString val = QString::fromUtf8(Base::Interpreter().strToPython(text().toUtf8()).c_str());
Gui::Command::doCommand(Gui::Command::Doc, "%s = \"%s\"", propName.c_str(), val.constData());
Gui::Command::doCommand(
Gui::Command::Doc,
"%s = \"%s\"",
propName.c_str(),
val.toUtf8().constData()
);
}
return true;
}
+34 -1
View File
@@ -252,8 +252,41 @@ void AssemblyLink::synchronizeComponents()
std::vector<App::DocumentObject*> assemblyGroup = assembly->Group.getValues();
std::vector<App::DocumentObject*> assemblyLinkGroup = Group.getValues();
// We check if a component needs to be added to the AssemblyLink
// Filter out child objects from Part-workbench features to get only top-level components.
// An object is considered a child if it's referenced by another object's 'Base', 'Tool',
// or 'Shapes' property within the same group.
std::set<App::DocumentObject*> children;
for (auto* obj : assemblyGroup) {
if (auto* partFeat = dynamic_cast<PartApp::Feature*>(obj)) {
if (auto* prop = dynamic_cast<App::PropertyLink*>(partFeat->getPropertyByName("Base"))) {
if (prop->getValue()) {
children.insert(prop->getValue());
}
}
if (auto* prop = dynamic_cast<App::PropertyLink*>(partFeat->getPropertyByName("Tool"))) {
if (prop->getValue()) {
children.insert(prop->getValue());
}
}
if (auto* prop
= dynamic_cast<App::PropertyLinkList*>(partFeat->getPropertyByName("Shapes"))) {
for (auto* shapeObj : prop->getValues()) {
children.insert(shapeObj);
}
}
}
}
std::vector<App::DocumentObject*> topLevelComponents;
std::copy_if(
assemblyGroup.begin(),
assemblyGroup.end(),
std::back_inserter(topLevelComponents),
[&children](App::DocumentObject* obj) { return children.find(obj) == children.end(); }
);
// We check if a component needs to be added to the AssemblyLink
for (auto* obj : topLevelComponents) {
if (!obj->isDerivedFrom<App::Part>() && !obj->isDerivedFrom<PartApp::Feature>()
&& !obj->isDerivedFrom<App::Link>()) {
continue;

Some files were not shown because too many files have changed in this diff Show More